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 作为用户,以便我可以选择一个网站,我希望看到一个书签列表班级实例方法用户@用户名书签@网站列表作为... 使用pqsl命令\ c书签_manager_test连接到数据库; 运行我们保存在文件01_create_bookmark
连续执行SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1并START SLAVE语句,直到复制被追上(使从站与主站处于不一致状态) 重新加载my.cnf而不重新启动MySQL(仅限于动态变量) 使用PCRE正则表达式或文字字符串杀死符合...
数据库技术:如关系型数据库(如MySQL、Oracle、SQL Server)和非关系型数据库(如MongoDB、Redis)等。 前端开发:HTML、CSS、JavaScript等用于构建网页和Web应用程序的技术。 后端开发:涉及服务器端编程、API开发...
书签管理器 用户故事 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书
连接到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中的查询
例如,如果您具有A-> B,C和C-> D的视图A,B,C,D,并且您需要更新视图D获取列的方式,则可以 view_manager = Viewy::DependencyManager.newview_manager.replace_view( 'd', <<-SQL SELECT * FROM ... SQL)...
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版本 系统依赖 组态 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) 部署说明 ...
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,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!...
业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...
业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...
业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...
业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...
业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...
业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...
业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...