diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2018-11-13 17:21:58 -0500 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2018-11-13 17:37:05 -0500 |
commit | 3dea7f0615144e891d4122697638db735fbea71d (patch) | |
tree | bb758058b7d54787afac9498f763b7c9b489b0b2 /activerecord/lib | |
parent | 6741e70518b55c4bbd7a53346b5937319a31a15f (diff) | |
parent | 63dd8d8e12edb25d8d5bac324aacb1caf05bbe22 (diff) | |
download | rails-3dea7f0615144e891d4122697638db735fbea71d.tar.gz rails-3dea7f0615144e891d4122697638db735fbea71d.tar.bz2 rails-3dea7f0615144e891d4122697638db735fbea71d.zip |
Merge pull request #34437 from kbrock/union_all_paren
Fix: Arel now emits a single pair of parens for UNION and UNION ALL
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/arel/visitors/mysql.rb | 28 | ||||
-rw-r--r-- | activerecord/lib/arel/visitors/to_sql.rb | 23 |
2 files changed, 19 insertions, 32 deletions
diff --git a/activerecord/lib/arel/visitors/mysql.rb b/activerecord/lib/arel/visitors/mysql.rb index 32f6705d04..4e7b2456aa 100644 --- a/activerecord/lib/arel/visitors/mysql.rb +++ b/activerecord/lib/arel/visitors/mysql.rb @@ -4,34 +4,6 @@ module Arel # :nodoc: all module Visitors class MySQL < Arel::Visitors::ToSql private - def visit_Arel_Nodes_Union(o, collector, suppress_parens = false) - unless suppress_parens - collector << "( " - end - - case o.left - when Arel::Nodes::Union - visit_Arel_Nodes_Union o.left, collector, true - else - visit o.left, collector - end - - collector << " UNION " - - case o.right - when Arel::Nodes::Union - visit_Arel_Nodes_Union o.right, collector, true - else - visit o.right, collector - end - - if suppress_parens - collector - else - collector << " )" - end - end - def visit_Arel_Nodes_Bin(o, collector) collector << "BINARY " visit o.expr, collector diff --git a/activerecord/lib/arel/visitors/to_sql.rb b/activerecord/lib/arel/visitors/to_sql.rb index 8e56fb55a2..7efd74dbc9 100644 --- a/activerecord/lib/arel/visitors/to_sql.rb +++ b/activerecord/lib/arel/visitors/to_sql.rb @@ -268,13 +268,11 @@ module Arel # :nodoc: all end def visit_Arel_Nodes_Union(o, collector) - collector << "( " - infix_value(o, collector, " UNION ") << " )" + infix_value_with_paren(o, collector, " UNION ") end def visit_Arel_Nodes_UnionAll(o, collector) - collector << "( " - infix_value(o, collector, " UNION ALL ") << " )" + infix_value_with_paren(o, collector, " UNION ALL ") end def visit_Arel_Nodes_Intersect(o, collector) @@ -845,6 +843,23 @@ module Arel # :nodoc: all visit o.right, collector end + def infix_value_with_paren(o, collector, value, suppress_parens = false) + collector << "( " unless suppress_parens + collector = if o.left.class == o.class + infix_value_with_paren(o.left, collector, value, true) + else + visit o.left, collector + end + collector << value + collector = if o.right.class == o.class + infix_value_with_paren(o.right, collector, value, true) + else + visit o.right, collector + end + collector << " )" unless suppress_parens + collector + end + def aggregate(name, o, collector) collector << "#{name}(" if o.distinct |