aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2010-09-10 13:36:42 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2010-09-10 13:36:42 -0700
commit1ba8ac0848f40c7fa18c9e7bdac944a50d3c348c (patch)
treec5dfd0c9a4058da6e8310340c612b9d15deca36b /lib
parente06061089735b34ac10465684db5a08d90623469 (diff)
downloadrails-1ba8ac0848f40c7fa18c9e7bdac944a50d3c348c.tar.gz
rails-1ba8ac0848f40c7fa18c9e7bdac944a50d3c348c.tar.bz2
rails-1ba8ac0848f40c7fa18c9e7bdac944a50d3c348c.zip
differentiating equality and assignment
Diffstat (limited to 'lib')
-rw-r--r--lib/arel/nodes.rb1
-rw-r--r--lib/arel/nodes/assignment.rb6
-rw-r--r--lib/arel/update_manager.rb2
-rw-r--r--lib/arel/visitors/to_sql.rb15
4 files changed, 21 insertions, 3 deletions
diff --git a/lib/arel/nodes.rb b/lib/arel/nodes.rb
index 1215f3f00c..1f31219417 100644
--- a/lib/arel/nodes.rb
+++ b/lib/arel/nodes.rb
@@ -1,5 +1,6 @@
require 'arel/nodes/binary'
require 'arel/nodes/equality'
+require 'arel/nodes/assignment'
require 'arel/nodes/or'
require 'arel/nodes/and'
require 'arel/nodes/greater_than'
diff --git a/lib/arel/nodes/assignment.rb b/lib/arel/nodes/assignment.rb
new file mode 100644
index 0000000000..693bd5afe6
--- /dev/null
+++ b/lib/arel/nodes/assignment.rb
@@ -0,0 +1,6 @@
+module Arel
+ module Nodes
+ class Assignment < Arel::Nodes::Binary
+ end
+ end
+end
diff --git a/lib/arel/update_manager.rb b/lib/arel/update_manager.rb
index cd4342529b..484230c4e1 100644
--- a/lib/arel/update_manager.rb
+++ b/lib/arel/update_manager.rb
@@ -26,7 +26,7 @@ module Arel
@head.values = [values]
else
@head.values = values.map { |column,value|
- Nodes::Equality.new(
+ Nodes::Assignment.new(
Nodes::UnqualifiedColumn.new(column),
value
)
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb
index f70cae9430..8638bf43c3 100644
--- a/lib/arel/visitors/to_sql.rb
+++ b/lib/arel/visitors/to_sql.rb
@@ -149,13 +149,24 @@ module Arel
"#{visit o.left} OR #{visit o.right}"
end
- def visit_Arel_Nodes_Equality o
+ def visit_Arel_Nodes_Assignment o
right = o.right
- # FIXME: maybe we should visit NilClass?
+
right = right.nil? ? 'NULL' : visit(right)
"#{visit o.left} = #{right}"
end
+ def visit_Arel_Nodes_Equality o
+ right = o.right
+
+ # FIXME: maybe we should visit NilClass?
+ if right.nil?
+ "#{visit o.left} IS NULL"
+ else
+ "#{visit o.left} = #{visit right}"
+ end
+ end
+
def visit_Arel_Nodes_UnqualifiedColumn o
"#{quote_column_name o.name}"
end