aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2010-09-10 16:58:19 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2010-09-10 16:58:19 -0700
commitf0f6b7fb90b936cb78d786896598486821db6559 (patch)
tree9a5d7d61be6e70fd4c132457dec965ee41533422 /lib
parent1ba8ac0848f40c7fa18c9e7bdac944a50d3c348c (diff)
downloadrails-f0f6b7fb90b936cb78d786896598486821db6559.tar.gz
rails-f0f6b7fb90b936cb78d786896598486821db6559.tar.bz2
rails-f0f6b7fb90b936cb78d786896598486821db6559.zip
adding not equal node, column names are expected to be symbols
Diffstat (limited to 'lib')
-rw-r--r--lib/arel/attributes/attribute.rb4
-rw-r--r--lib/arel/compatibility/wheres.rb4
-rw-r--r--lib/arel/nodes.rb1
-rw-r--r--lib/arel/nodes/not_equal.rb6
-rw-r--r--lib/arel/nodes/table_alias.rb2
-rw-r--r--lib/arel/table.rb4
-rw-r--r--lib/arel/visitors/to_sql.rb11
7 files changed, 28 insertions, 4 deletions
diff --git a/lib/arel/attributes/attribute.rb b/lib/arel/attributes/attribute.rb
index d77574f33e..617112f681 100644
--- a/lib/arel/attributes/attribute.rb
+++ b/lib/arel/attributes/attribute.rb
@@ -1,6 +1,10 @@
module Arel
module Attributes
class Attribute < Struct.new :relation, :name, :column
+ def not_eq other
+ Nodes::NotEqual.new self, other
+ end
+
def eq other
Nodes::Equality.new self, other
end
diff --git a/lib/arel/compatibility/wheres.rb b/lib/arel/compatibility/wheres.rb
index eeb7a2fa38..b73b178651 100644
--- a/lib/arel/compatibility/wheres.rb
+++ b/lib/arel/compatibility/wheres.rb
@@ -8,6 +8,10 @@ module Arel
def value
visitor.accept self
end
+
+ def name
+ super.to_sym
+ end
end
def initialize engine, collection
diff --git a/lib/arel/nodes.rb b/lib/arel/nodes.rb
index 1f31219417..7510214cdf 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/not_equal'
require 'arel/nodes/assignment'
require 'arel/nodes/or'
require 'arel/nodes/and'
diff --git a/lib/arel/nodes/not_equal.rb b/lib/arel/nodes/not_equal.rb
new file mode 100644
index 0000000000..7f892940cb
--- /dev/null
+++ b/lib/arel/nodes/not_equal.rb
@@ -0,0 +1,6 @@
+module Arel
+ module Nodes
+ class NotEqual < Arel::Nodes::Binary
+ end
+ end
+end
diff --git a/lib/arel/nodes/table_alias.rb b/lib/arel/nodes/table_alias.rb
index 4f1d70ee54..656a820a60 100644
--- a/lib/arel/nodes/table_alias.rb
+++ b/lib/arel/nodes/table_alias.rb
@@ -12,7 +12,7 @@ module Arel
end
def [] name
- name = name.to_s
+ name = name.to_sym
columns.find { |column| column.name == name }
end
end
diff --git a/lib/arel/table.rb b/lib/arel/table.rb
index 58e0c46959..efdc34ed94 100644
--- a/lib/arel/table.rb
+++ b/lib/arel/table.rb
@@ -73,12 +73,12 @@ module Arel
def columns
@columns ||= @engine.connection.columns(@name, "#{@name} Columns").map do |column|
- Attributes.for(column).new self, column.name, column
+ Attributes.for(column).new self, column.name.to_sym, column
end
end
def [] name
- name = name.to_s
+ name = name.to_sym
columns.find { |column| column.name == name }
end
end
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb
index 8638bf43c3..761f315763 100644
--- a/lib/arel/visitors/to_sql.rb
+++ b/lib/arel/visitors/to_sql.rb
@@ -159,7 +159,6 @@ module Arel
def visit_Arel_Nodes_Equality o
right = o.right
- # FIXME: maybe we should visit NilClass?
if right.nil?
"#{visit o.left} IS NULL"
else
@@ -167,6 +166,16 @@ module Arel
end
end
+ def visit_Arel_Nodes_NotEqual o
+ right = o.right
+
+ if right.nil?
+ "#{visit o.left} IS NOT NULL"
+ else
+ "#{visit o.left} != #{visit right}"
+ end
+ end
+
def visit_Arel_Nodes_UnqualifiedColumn o
"#{quote_column_name o.name}"
end