aboutsummaryrefslogtreecommitdiffstats
path: root/lib/arel/visitors/to_sql.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2014-04-08 16:51:17 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2014-04-08 16:51:17 -0700
commit6ae60fd2cbbf836dac01f6d2d56c38fb9deb225a (patch)
tree3938ab0ed547eeaf898ee1824b7ecfc599286a52 /lib/arel/visitors/to_sql.rb
parent208c00bbbf861297bd75bb45af47d999d1d3c46d (diff)
downloadrails-6ae60fd2cbbf836dac01f6d2d56c38fb9deb225a.tar.gz
rails-6ae60fd2cbbf836dac01f6d2d56c38fb9deb225a.tar.bz2
rails-6ae60fd2cbbf836dac01f6d2d56c38fb9deb225a.zip
select manager tests are passing
Diffstat (limited to 'lib/arel/visitors/to_sql.rb')
-rw-r--r--lib/arel/visitors/to_sql.rb39
1 files changed, 25 insertions, 14 deletions
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb
index b60edeb720..f8b8a9a07c 100644
--- a/lib/arel/visitors/to_sql.rb
+++ b/lib/arel/visitors/to_sql.rb
@@ -126,9 +126,15 @@ module Arel
].compact.join ' '
end
- def visit_Arel_Nodes_Exists o
- "EXISTS (#{visit o.expressions})#{
- o.alias ? " AS #{visit o.alias}" : ''}"
+ def visit_Arel_Nodes_Exists o, collector
+ collector << "EXISTS ("
+ collector = visit(o.expressions, collector) << ")"
+ if o.alias
+ collector << " AS "
+ visit o.alias, collector
+ else
+ collector
+ end
end
def visit_Arel_Nodes_Casted o, collector
@@ -290,16 +296,19 @@ module Arel
infix_value(o, collector, " UNION ") << " )"
end
- def visit_Arel_Nodes_UnionAll o
- "( #{visit o.left} UNION ALL #{visit o.right} )"
+ def visit_Arel_Nodes_UnionAll o, collector
+ collector << "( "
+ infix_value(o, collector, " UNION ALL ") << " )"
end
- def visit_Arel_Nodes_Intersect o
- "( #{visit o.left} INTERSECT #{visit o.right} )"
+ def visit_Arel_Nodes_Intersect o, collector
+ collector << "( "
+ infix_value(o, collector, " INTERSECT ") << " )"
end
def visit_Arel_Nodes_Except o, collector
- "( #{visit o.left} EXCEPT #{visit o.right} )"
+ collector << "( "
+ infix_value(o, collector, " EXCEPT ") << " )"
end
def visit_Arel_Nodes_NamedWindow o, collector
@@ -377,12 +386,14 @@ module Arel
end
end
- def visit_Arel_Nodes_Having o
- "HAVING #{visit o.expr}"
+ def visit_Arel_Nodes_Having o, collector
+ collector << "HAVING "
+ visit o.expr, collector
end
- def visit_Arel_Nodes_Offset o
- "OFFSET #{visit o.expr}"
+ def visit_Arel_Nodes_Offset o, collector
+ collector << "OFFSET "
+ visit o.expr, collector
end
def visit_Arel_Nodes_Limit o, collector
@@ -508,9 +519,9 @@ module Arel
def visit_Arel_Nodes_JoinSource o, collector
if o.left
collector = visit o.left, collector
- collector << " "
end
if o.right.any?
+ collector << " " if o.left
collector = inject_join o.right, collector, ' '
end
collector
@@ -742,7 +753,7 @@ module Arel
def infix_value o, collector, value
collector = visit o.left, collector
- collector << " UNION "
+ collector << value
visit o.right, collector
end