aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/arel/visitors/to_sql.rb34
-rw-r--r--test/test_select_manager.rb4
2 files changed, 28 insertions, 10 deletions
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb
index ee6ca6fb92..76355a00df 100644
--- a/lib/arel/visitors/to_sql.rb
+++ b/lib/arel/visitors/to_sql.rb
@@ -47,6 +47,7 @@ module Arel
SPACE = ' ' # :nodoc:
COMMA = ', ' # :nodoc:
GROUP_BY = ' GROUP BY ' # :nodoc:
+ ORDER_BY = ' ORDER BY ' # :nodoc:
WINDOW = ' WINDOW ' # :nodoc:
AND = ' AND ' # :nodoc:
@@ -164,14 +165,31 @@ key on UpdateManager using UpdateManager#key=
end
def visit_Arel_Nodes_SelectStatement o
- [
- (visit(o.with) if o.with),
- o.cores.map { |x| visit_Arel_Nodes_SelectCore x }.join,
- ("ORDER BY #{o.orders.map { |x| visit x }.join(', ')}" unless o.orders.empty?),
- (visit(o.limit) if o.limit),
- (visit(o.offset) if o.offset),
- (visit(o.lock) if o.lock),
- ].compact.join ' '
+ str = ''
+
+ if o.with
+ str << visit(o.with)
+ str << SPACE
+ end
+
+ o.cores.each { |x| str << visit_Arel_Nodes_SelectCore(x) }
+
+ unless o.orders.empty?
+ str << SPACE
+ str << ORDER_BY
+ len = o.orders.length - 1
+ o.orders.each_with_index { |x, i|
+ str << visit(x)
+ str << COMMA unless len == i
+ }
+ end
+
+ str << " #{visit(o.limit)}" if o.limit
+ str << " #{visit(o.offset)}" if o.offset
+ str << " #{visit(o.lock)}" if o.lock
+
+ str.strip!
+ str
end
def visit_Arel_Nodes_SelectCore o
diff --git a/test/test_select_manager.rb b/test/test_select_manager.rb
index 46a2cbbe97..407860718c 100644
--- a/test/test_select_manager.rb
+++ b/test/test_select_manager.rb
@@ -119,7 +119,7 @@ module Arel
manager = Arel::SelectManager.new Table.engine
manager.project Arel.sql('name')
manager.from as
- manager.to_sql.must_be_like "SELECT name FROM (SELECT * FROM zomg ) foo"
+ manager.to_sql.must_be_like "SELECT name FROM (SELECT * FROM zomg) foo"
end
end
@@ -147,7 +147,7 @@ module Arel
manager1.from(as)
manager1.to_sql.must_be_like %{
- SELECT lol FROM (SELECT * FROM "users" ) omg
+ SELECT lol FROM (SELECT * FROM "users") omg
}
end
end