`
jrails
  • 浏览: 100251 次
  • 性别: 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

    本地游戏管理器my_game_manager.zip

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

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

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

    Fabric_Manager:一个提供面料清单和一些统计数据的副项目

    Fabric_Manager 是一个基于 Ruby 开发的应用程序,专为面料销售商设计,旨在帮助他们高效地管理和分析面料交易记录。这个项目不仅提供了基本的清单管理功能,还具备强大的统计功能,利用 D3.js 库生成可视化数据图表...

    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书

    rails_db_manager:瑞克任务,以帮助创建和维护postgres数据库

    Rails DB Manager是一个专门为Ruby on Rails开发的数据库管理工具,它主要设计用来简化PostgreSQL数据库的创建和维护工作。在Rails框架中,数据库管理是应用程序生命周期中的关键环节,尤其是在开发、测试和生产环境...

    bookmark-manager-jack-solo

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

    ruby中文教程,从基础到深入的让你学习ruby

    版本管理工具如RVM(Ruby Version Manager)和rbenv可以帮助你管理多个Ruby版本。 总的来说,Ruby是一门强大且富有表达力的语言,适合快速开发和原型设计。通过这个中文教程,你将掌握其基本语法,理解面向对象编程...

    书签

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

    ruby on rails 开发环境包(ruby1.8.7,rails2.2.3)

    这可以通过Ruby版本管理器如RVM(Ruby Version Manager)或者rbenv来完成,它们允许你轻松地切换和管理不同的Ruby版本。 2. **安装Rails**:安装完Ruby后,使用gem包管理器安装Rails 2.2.3。运行`gem install rails...

    rail on ruby

    - **Ruby 版本管理**: 使用 RVM (Ruby Version Manager) 来管理不同项目所需的 Ruby 版本。 - **安装 Rails**: - 安装完成后可以通过 `rails -v` 命令来查看 Rails 的版本。 - **IDE 和编辑器**: 推荐使用如 Visual...

    使用 Ruby 进行 Web 应用程序的开发和部署.zip

    - **安装 Ruby**:通过 RVM(Ruby Version Manager)或 rbenv 管理多个 Ruby 版本。 - **安装 Rails**:使用 gem 安装 Rails 框架。 - **设置数据库**:配置数据库连接,如 MySQL 或 PostgreSQL。 5. **Web 应用...

    My SQL知识大全

    - **GUI工具**:例如MySQL-Front、EMS MySQL Manager、Navicat等,为用户提供更友好的图形界面操作体验。 #### 四、MySQL存储引擎概览 MySQL支持多种存储引擎,每种存储引擎都有其特定的优势和应用场景,下面是...

    ruby on rails环境搭建学习笔记;passenger+nginx环境配置

    3. **安装 RVM(Ruby Version Manager):** 使用 curl 获取 RVM 安装脚本并执行: ```sh curl -L https://get.rvm.io | bash -s stable ``` 4. **加载 RVM:** - 对于普通用户: ```sh source ~/.rvm/...

    Linux系统上配置Nginx+Ruby on Rails+MySQL超攻略

    首先,我们来安装RVM(Ruby Version Manager)。RVM是一个方便的工具,允许你在同一台机器上管理多个版本的Ruby。通过运行以下命令来安装RVM: ```bash curl -sSL https://get.rvm.io | bash -s stable ``` 接着,...

    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)...

    apache-jmeter-3.1.zip、jmeter-plugins-manager-0.11.jar、mysql-connector-java-5.1.3

    在提供的压缩包中,`jmeter-plugins-manager-0.11.jar`是JMeter的插件管理器,它使得安装和管理JMeter的额外插件变得极其便捷。这个插件可以让你通过简单的图形界面下载和安装各种扩展,如图表、采样器、断言、监听...

    railsarelinjavascript

    Arel是Ruby on Rails中用于构建和执行SQL查询的一个强大工具,它提供了一种面向对象的方式来表示数据库操作。现在我们将深入研究如何在JavaScript中实现类似的抽象层。 **Arel简介** Arel是Ruby的一个库,它为处理...

    rails-food-manager

    4. **ActiveRecord**: Rails 的 ORM(对象关系映射)组件,允许开发者通过 Ruby 代码操作数据库,无需编写 SQL 查询。ActiveRecord 将数据库表与 Ruby 类关联起来,使得数据操作更加方便。 5. **路由**: Rails 的...

    rails-garden-manager

    【rails-garden-manager】是一个基于Ruby编程语言的Web应用程序,它使用了著名的Web开发框架Ruby on Rails(简称Rails)。Rails是MVC(Model-View-Controller)架构的典范,为开发者提供了一种高效、简洁的方式来...

Global site tag (gtag.js) - Google Analytics