diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2010-12-14 09:43:19 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2010-12-14 09:43:19 -0800 |
commit | 9653da3c7963834eb9ed93bf24837147fa9b0461 (patch) | |
tree | 08015f4d72cfc5ac615e600de87a953514a59411 /lib/arel/visitors/to_sql.rb | |
parent | 87c022bc98c57027f534d5e667cfc0344b5b40f0 (diff) | |
download | rails-9653da3c7963834eb9ed93bf24837147fa9b0461.tar.gz rails-9653da3c7963834eb9ed93bf24837147fa9b0461.tar.bz2 rails-9653da3c7963834eb9ed93bf24837147fa9b0461.zip |
adding a join source node
Diffstat (limited to 'lib/arel/visitors/to_sql.rb')
-rw-r--r-- | lib/arel/visitors/to_sql.rb | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb index 5767fbae8d..b83bf2f6e7 100644 --- a/lib/arel/visitors/to_sql.rb +++ b/lib/arel/visitors/to_sql.rb @@ -127,7 +127,7 @@ module Arel def visit_Arel_Nodes_SelectCore o [ "SELECT #{o.projections.map { |x| visit x }.join ', '}", - ("FROM #{visit o.from}" if o.from), + visit(o.source), ("WHERE #{o.wheres.map { |x| visit x }.join ' AND ' }" unless o.wheres.empty?), ("GROUP BY #{o.groups.map { |x| visit x }.join ', ' }" unless o.groups.empty?), (visit(o.having) if o.having), @@ -217,16 +217,26 @@ module Arel "#{visit o.left} NOT LIKE #{visit o.right}" end + def visit_Arel_Nodes_JoinSource o + return unless o.left || !o.right.empty? + + [ + "FROM", + (visit(o.left) if o.left), + o.right.map { |j| visit j }.join(' ') + ].compact.join ' ' + end + def visit_Arel_Nodes_StringJoin o "#{visit o.left} #{visit o.right}" end def visit_Arel_Nodes_OuterJoin o - "#{visit o.left} LEFT OUTER JOIN #{visit o.right} #{visit o.constraint}" + "LEFT OUTER JOIN #{visit o.left} #{visit o.right}" end def visit_Arel_Nodes_InnerJoin o - "#{visit o.left} INNER JOIN #{visit o.right} #{visit o.constraint if o.constraint}" + "INNER JOIN #{visit o.left} #{visit o.right if o.right}" end def visit_Arel_Nodes_On o |