提交 da958b98 编写于 作者: A Aaron Patterson

adding order clauses method to the select manager

上级 9c4670c6
......@@ -26,4 +26,5 @@
require 'arel/visitors/to_sql'
require 'arel/visitors/join_sql'
require 'arel/visitors/order_clauses'
require 'arel/visitors/dot'
......@@ -29,7 +29,10 @@ def where expr
end
def order *expr
@head.orders.concat expr
# FIXME: We SHOULD NOT be converting these to SqlLiteral automatically
@head.orders.concat expr.map { |x|
String === x ? Nodes::SqlLiteral.new(x) : x
}
self
end
......@@ -47,6 +50,10 @@ def join_sql
Nodes::SqlLiteral.new viz.accept @ctx
end
def order_clauses
Visitors::OrderClauses.new(@engine).accept @head
end
def joins manager
manager.join_sql
end
......
module Arel
module Visitors
class OrderClauses < Arel::Visitors::ToSql
def visit_Arel_Nodes_SelectStatement o
o.orders.map { |x| visit x }
end
end
end
end
......@@ -126,8 +126,8 @@ def visit_Time o; quote(o) end
DISPATCH = {}
def visit object
send "visit_#{object.class.name.gsub('::', '_')}", object
#send DISPATCH[object.class], object
#send "visit_#{object.class.name.gsub('::', '_')}", object
send DISPATCH[object.class], object
end
private_instance_methods(false).each do |method|
......
......@@ -80,6 +80,17 @@ def execute sql, name = nil
end
end
describe 'order_clauses' do
it 'returns order clauses as a list' do
table = Table.new :users
aliaz = table.alias
manager = Arel::SelectManager.new Table.engine
manager.from table
manager.order table[:id]
manager.order_clauses.first.should be_like %{ "users"."id" }
end
end
describe 'delete' do
it "copies from" do
engine = EngineProxy.new Table.engine
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册