diff options
Diffstat (limited to 'lib/arel')
-rw-r--r-- | lib/arel/attributes/attribute.rb | 4 | ||||
-rw-r--r-- | lib/arel/compatibility/wheres.rb | 4 | ||||
-rw-r--r-- | lib/arel/nodes.rb | 1 | ||||
-rw-r--r-- | lib/arel/nodes/not_equal.rb | 6 | ||||
-rw-r--r-- | lib/arel/nodes/table_alias.rb | 2 | ||||
-rw-r--r-- | lib/arel/table.rb | 4 | ||||
-rw-r--r-- | lib/arel/visitors/to_sql.rb | 11 |
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 |