From f0f6b7fb90b936cb78d786896598486821db6559 Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Fri, 10 Sep 2010 16:58:19 -0700 Subject: adding not equal node, column names are expected to be symbols --- lib/arel/attributes/attribute.rb | 4 ++++ lib/arel/compatibility/wheres.rb | 4 ++++ lib/arel/nodes.rb | 1 + lib/arel/nodes/not_equal.rb | 6 ++++++ lib/arel/nodes/table_alias.rb | 2 +- lib/arel/table.rb | 4 ++-- lib/arel/visitors/to_sql.rb | 11 ++++++++++- 7 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 lib/arel/nodes/not_equal.rb (limited to 'lib') 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 -- cgit v1.2.3