diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/arel/nodes.rb | 1 | ||||
-rw-r--r-- | lib/arel/nodes/node.rb | 7 | ||||
-rw-r--r-- | lib/arel/nodes/not.rb | 11 | ||||
-rw-r--r-- | lib/arel/visitors/to_sql.rb | 4 |
4 files changed, 23 insertions, 0 deletions
diff --git a/lib/arel/nodes.rb b/lib/arel/nodes.rb index 47cbd64eb5..2affd01fa8 100644 --- a/lib/arel/nodes.rb +++ b/lib/arel/nodes.rb @@ -6,6 +6,7 @@ require 'arel/nodes/not_equal' require 'arel/nodes/assignment' require 'arel/nodes/or' require 'arel/nodes/and' +require 'arel/nodes/not' require 'arel/nodes/greater_than' require 'arel/nodes/greater_than_or_equal' require 'arel/nodes/less_than' diff --git a/lib/arel/nodes/node.rb b/lib/arel/nodes/node.rb index 43bad19488..841b954db9 100644 --- a/lib/arel/nodes/node.rb +++ b/lib/arel/nodes/node.rb @@ -4,6 +4,13 @@ module Arel # Abstract base class for all AST nodes class Node ### + # Factory method to create a Nodes::Not node that has the recipient of + # the caller as a child. + def not + Nodes::Not.new self + end + + ### # Factory method to create a Nodes::Grouping node that has an Nodes::Or # node as a child. def or right diff --git a/lib/arel/nodes/not.rb b/lib/arel/nodes/not.rb new file mode 100644 index 0000000000..d463ae9d08 --- /dev/null +++ b/lib/arel/nodes/not.rb @@ -0,0 +1,11 @@ +module Arel + module Nodes + class Not < Arel::Nodes::Node + attr_reader :expr + + def initialize expr + @expr = expr + end + end + end +end diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb index 528c5f6ced..bbc1eb3105 100644 --- a/lib/arel/visitors/to_sql.rb +++ b/lib/arel/visitors/to_sql.rb @@ -191,6 +191,10 @@ module Arel "ON #{visit o.expr}" end + def visit_Arel_Nodes_Not o + "NOT #{visit o.expr}" + end + def visit_Arel_Table o if o.table_alias "#{quote_table_name o.name} #{quote_table_name o.table_alias}" |