`
jrails
  • 浏览: 98544 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

ruby sql_manager

阅读更多
class SQLManager

	@params = nil
	@record = nil	
	@columns = nil
	@orders = nil
	@groups = nil
	@conditions = nil
	@joins = nil
	@havings = nil
	@firsts = nil
	@lasts = nil
	@limit = nil
	@offset = nil
	@table_name = nil
	
	def initialize(record)
		@record = record
		@table_name = record.class.table_name
		@params = {}
		@params.merge(record.attributes)
		@columns = []
		@orders = []
		@groups = []
		@conditions = []
		@joins = []
		@havings = []
		@firsts = []
		@lasts = []
	end
	
	def self.clone(sm)
		c_sm = sm.clone
		new_sm = SQLManager.new(c_sm.record)
		new_sm.columns + Marshal.load(Marshal.dump(sm.columns))
		new_sm.orders + Marshal.load(Marshal.dump(sm.orders))
		new_sm.groups + Marshal.load(Marshal.dump(sm.groups))
		new_sm.conditions + Marshal.load(Marshal.dump(sm.conditions))
		new_sm.joins + Marshal.load(Marshal.dump(sm.joins))
		new_sm.havings + Marshal.load(Marshal.dump(sm.havings))
		new_sm.firsts + Marshal.load(Marshal.dump(sm.firsts))
		new_sm.lasts + Marshal.load(Marshal.dump(sm.lasts))
		new_sm.limit = c_sm.limit
		new_sm.offset = c_sm.offset
		new_sm
	end
	
	def self.union(*unions)
		u_sql = unions[0].to_query
		a = *unions
		a.each do |u|
			 u_sql << " UNION " << u.to_query
		end
		u_sql
	end
	
	def self.union_all(*unions)
		u_sql = unions[0].to_query
		a = *unions
		a.each do |u|
			 u_sql << " UNION ALL " << u.to_query
		end
		u_sql
	end
	
	def record
	    @record
	end
	
	def params
	    @params
	end
	
	def merge_param(param)
		@params = @params.merge(param)	
	end

	def columns
		@columns
	end

	def orders
		@orders
	end
	
	def groups
		@groups	
	end
	
	def conditions
		@conditions	
	end
	
	def joins
		@joins
	end
	
	def havings
		@havings	
	end
	
	def firsts
		@firsts		
	end
	
	def lasts
		@lasts		
	end

	def limit
		@limit	
	end
	
	def limit=(att)
		@limit = att
	end
	
	def offset
		@offset	
	end
	
	def offset=(att)
		@offset = att
	end

	def table_name
		@table_name
	end
	
	def to_columns
		str = ""
		@columns.each do |item|
			str << item + ','
		end
		str = str.chop
		(str << @table_name  << ".*") if columns.size == 0	
		str
	end
	
	def to_orders
		str = ""
		@orders.each do |item|
			str << item + ','
		end
		str.chop
	end
	
	def to_groups
		str = ""
		@groups.each do |item|
			str << item + ','
		end
		str.chop
	end
	
	def to_conditions
		str = ""
		@conditions.each do |item|
			str << item + ' '
		end
		str.chop
	end
	
	def to_havings
		str = ""
		@havings.each do |item|
			str << item + ' '
		end
		str.chop
	end
	
	def to_firsts
		str = ""
		@firsts.each do |item|
			str << item + ' '
		end
		str.chop
	end
	
	def to_lasts
		str = ""
		@lasts.each do |item|
			str << item + ' '
		end
		str.chop
	end
	
	def to_joins
		str = ""
		@joins.each do |item|
			str << item + ' '
		end
		str.chop
	end
	
	def to_query
		first = to_firsts
		condition = to_conditions
		join = to_joins
		column = to_columns
		group = to_groups
		having = to_havings
		order = to_orders
		last = to_lasts
		sql = "SELECT "		
		sql << column if !column.empty?
		sql << " FORM "
		sql << @table_name 	
		sql << " " << join if !join.empty?
		sql << " WHERE " << condition if !condition.empty?
		sql << group if !group.empty?
		sql << having if !having.empty?
		sql << order if !order.empty?
		sql << " LIMIT " << @limit.to_s if !@limit.nil?
		
		if !@limit.nil?
			sql << "," << @offset.to_s if !@offset.nil?
		else
			sql << "0," << @offset.to_s if !@offset.nil?
		end
		
		(sql << " " << last) if !last.empty?
		
		(sql.insert 0,(first << " ")) if !first.empty?
		 sql
	end
	
end

分享到:
评论

相关推荐

    bookmark_manager_d4

    bookmark_manager 作为用户,以便我可以选择一个网站,我希望看到一个书签列表班级实例方法用户@用户名书签@网站列表作为... 使用pqsl命令\ c书签_manager_test连接到数据库; 运行我们保存在文件01_create_bookmark

    mysql_manager:MySQL Manager是管理MySQL服务器的实用程序。 它可以执行诸如杀死用户花费太长时间的查询之类的任务,或者在不重新启动MySQL的情况下重新加载my.cnf中的值

    连续执行SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1并START SLAVE语句,直到复制被追上(使从站与主站处于不一致状态) 重新加载my.cnf而不重新启动MySQL(仅限于动态变量) 使用PCRE正则表达式或文字字符串杀死符合...

    本地游戏管理器my_game_manager.zip

    数据库技术:如关系型数据库(如MySQL、Oracle、SQL Server)和非关系型数据库(如MongoDB、Redis)等。 前端开发:HTML、CSS、JavaScript等用于构建网页和Web应用程序的技术。 后端开发:涉及服务器端编程、API开发...

    bookmark_manager

    书签管理器 用户故事 As a user In order to access my favourite site quickly I want to display a list of my bookmarks ...使用psql命令CREATE DATABASE bookmark_manager_test创建数据库; 使用pqsl命令\ c书

    bookmark-manager-jack-solo

    连接到psql使用psql命令CREATE DATABASE bookmark_manager_test创建数据库; 使用pqsl命令\ c书签_manager_test连接到数据库; 用户故事 作为用户,所以我可以选择一个网站,我希望看到一个书签列表 班级 实例 方法 ...

    书签

    书签 作为用户 ... 使用psql命令CREATE DATABASE bookmark_manager_test创建数据库; 使用pqsl命令\ c书签_manager_test连接到数据库; 运行保存在文件02_create_bookmarks_test_table.sql中的查询

    viewy:在Rails中管理Postgres视图依赖关系的工具

    例如,如果您具有A-&gt; B,C和C-&gt; D的视图A,B,C,D,并且您需要更新视图D获取列的方式,则可以 view_manager = Viewy::DependencyManager.newview_manager.replace_view( 'd', &lt;&lt;-SQL SELECT * FROM ... SQL)...

    Code Visual Editor v2.7-汉化美化版

    PowerBuilder (PowerScript), PHP, Visual FoxPro, PL/SQL, T-SQL (Transact-sql), Perl, Peoplesoft SQR, Fortran, COBOL, Cold Fusion, Python, UNIX Shell Script, HP48, CA-Clipper, COAS Product Manager ...

    项目管理:适用于个人和团队的任务和项目管理应用程序。 前端和后端都使用了Ruby on Rails,一个SQL数据库和一个用于样式的Bootstrap

    自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。... Ruby版本 系统依赖 组态 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) 部署说明 ...

    Ric.Shreves.PDF文字版.pdf

    the Banner Manager, the Media Manager, Galleries, Weblinks, Content Syndication, and Newsfeed AggregationVaults you into the world of Web 2.0 with extensive coverage of JomSocial, and shows you how ...

    JAVA上百实例源码以及开源项目

    百度云盘分享 简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对...

    JAVA上百实例源码以及开源项目源代码

    简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!...

    java开源包1

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

    java开源包11

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

    java开源包2

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

    java开源包3

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

    java开源包6

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

    java开源包5

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

    java开源包10

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

Global site tag (gtag.js) - Google Analytics