From d1ec33d69d85a3608aef9b064bc2c4799a214000 Mon Sep 17 00:00:00 2001 From: Loic Nageleisen Date: Tue, 4 Feb 2014 11:38:00 +0100 Subject: Allow assignment right member to reference columns Such queries become possible for mortals: ```ruby table.where(table[:qux].eq 'zomg').compile_update(table[:foo] => table[:bar]) ``` Arguably much more sane than using `engine.connection.quote_column_name` or `engine.connection.visitor.accept` on the right hand (bar), which is totally leaking the abstraction. --- lib/arel/visitors/to_sql.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb index 554f98da14..ede43095ab 100644 --- a/lib/arel/visitors/to_sql.rb +++ b/lib/arel/visitors/to_sql.rb @@ -501,8 +501,13 @@ module Arel end def visit_Arel_Nodes_Assignment o, a - right = quote(o.right, column_for(o.left)) - "#{visit o.left, a} = #{right}" + case o.right + when Arel::Nodes::UnqualifiedColumn, Arel::Attributes::Attribute + "#{visit o.left, a} = #{visit o.right, a}" + else + right = quote(o.right, column_for(o.left)) + "#{visit o.left, a} = #{right}" + end end def visit_Arel_Nodes_Equality o, a -- cgit v1.2.3 From 164645423935738ca7a56ef233b3c4fd9d43eea3 Mon Sep 17 00:00:00 2001 From: cmohanprasath Date: Tue, 18 Feb 2014 15:11:08 +0200 Subject: Test case for Issue No 242. The evaluates the assignment of two unqualified columns. --- test/visitors/test_to_sql.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/visitors/test_to_sql.rb b/test/visitors/test_to_sql.rb index 35effd4105..b4fdd51abd 100644 --- a/test/visitors/test_to_sql.rb +++ b/test/visitors/test_to_sql.rb @@ -208,6 +208,17 @@ module Arel } end + it "should visit_Arel_Nodes_Assignment" do + column = @table["id"] + node = Nodes::Assignment.new( + Nodes::UnqualifiedColumn.new(column), + Nodes::UnqualifiedColumn.new(column) + ) + @visitor.accept(node).must_be_like %{ + "id" = "id" + } + end + it "should visit visit_Arel_Attributes_Time" do attr = Attributes::Time.new(@attr.relation, @attr.name) @visitor.accept attr -- cgit v1.2.3