Skip to content

Commit

Permalink
Merge pull request #449 from kbrock/expr_node
Browse files Browse the repository at this point in the history
Introduce Expression Node
  • Loading branch information
matthewd committed Dec 6, 2017
2 parents 5f25b0a + ff53df9 commit aa11ad9
Show file tree
Hide file tree
Showing 16 changed files with 40 additions and 28 deletions.
1 change: 1 addition & 0 deletions lib/arel/nodes.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# frozen_string_literal: true
# node
require 'arel/nodes/node'
require 'arel/nodes/node_expression'
require 'arel/nodes/select_statement'
require 'arel/nodes/select_core'
require 'arel/nodes/insert_statement'
Expand Down
2 changes: 1 addition & 1 deletion lib/arel/nodes/binary.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true
module Arel
module Nodes
class Binary < Arel::Nodes::Node
class Binary < Arel::Nodes::NodeExpression
attr_accessor :left, :right

def initialize left, right
Expand Down
4 changes: 0 additions & 4 deletions lib/arel/nodes/case.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@
module Arel
module Nodes
class Case < Arel::Nodes::Node
include Arel::OrderPredications
include Arel::Predications
include Arel::AliasPredication

attr_accessor :case, :conditions, :default

def initialize expression = nil, default = nil
Expand Down
2 changes: 1 addition & 1 deletion lib/arel/nodes/casted.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true
module Arel
module Nodes
class Casted < Arel::Nodes::Node # :nodoc:
class Casted < Arel::Nodes::NodeExpression # :nodoc:
attr_reader :val, :attribute
def initialize val, attribute
@val = val
Expand Down
21 changes: 18 additions & 3 deletions lib/arel/nodes/delete_statement.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# frozen_string_literal: true
module Arel
module Nodes
class DeleteStatement < Arel::Nodes::Binary
class DeleteStatement < Arel::Nodes::Node
attr_accessor :left, :right
attr_accessor :limit

alias :relation :left
Expand All @@ -10,13 +11,27 @@ class DeleteStatement < Arel::Nodes::Binary
alias :wheres= :right=

def initialize relation = nil, wheres = []
super
super()
@left = relation
@right = wheres
end

def initialize_copy other
super
@right = @right.clone
@left = @left.clone if @left
@right = @right.clone if @right
end

def hash
[self.class, @left, @right].hash
end

def eql? other
self.class == other.class &&
self.left == other.left &&
self.right == other.right
end
alias :== :eql?
end
end
end
3 changes: 0 additions & 3 deletions lib/arel/nodes/extract.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@
module Arel
module Nodes
class Extract < Arel::Nodes::Unary
include Arel::AliasPredication
include Arel::Predications

attr_accessor :field

def initialize expr, field
Expand Down
2 changes: 1 addition & 1 deletion lib/arel/nodes/false.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true
module Arel
module Nodes
class False < Arel::Nodes::Node
class False < Arel::Nodes::NodeExpression
def hash
self.class.hash
end
Expand Down
4 changes: 1 addition & 3 deletions lib/arel/nodes/function.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
# frozen_string_literal: true
module Arel
module Nodes
class Function < Arel::Nodes::Node
include Arel::Predications
class Function < Arel::Nodes::NodeExpression
include Arel::WindowPredications
include Arel::OrderPredications
attr_accessor :expressions, :alias, :distinct

def initialize expr, aliaz = nil
Expand Down
1 change: 0 additions & 1 deletion lib/arel/nodes/grouping.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
module Arel
module Nodes
class Grouping < Unary
include Arel::Predications
end
end
end
11 changes: 11 additions & 0 deletions lib/arel/nodes/node_expression.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
module Arel
module Nodes
class NodeExpression < Arel::Nodes::Node
include Arel::Expressions
include Arel::Predications
include Arel::AliasPredication
include Arel::OrderPredications
include Arel::Math
end
end
end
2 changes: 1 addition & 1 deletion lib/arel/nodes/select_statement.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true
module Arel
module Nodes
class SelectStatement < Arel::Nodes::Node
class SelectStatement < Arel::Nodes::NodeExpression
attr_reader :cores
attr_accessor :limit, :orders, :lock, :offset, :with

Expand Down
2 changes: 1 addition & 1 deletion lib/arel/nodes/terminal.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true
module Arel
module Nodes
class Distinct < Arel::Nodes::Node
class Distinct < Arel::Nodes::NodeExpression
def hash
self.class.hash
end
Expand Down
2 changes: 1 addition & 1 deletion lib/arel/nodes/true.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true
module Arel
module Nodes
class True < Arel::Nodes::Node
class True < Arel::Nodes::NodeExpression
def hash
self.class.hash
end
Expand Down
2 changes: 1 addition & 1 deletion lib/arel/nodes/unary.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true
module Arel
module Nodes
class Unary < Arel::Nodes::Node
class Unary < Arel::Nodes::NodeExpression
attr_accessor :expr
alias :value :expr

Expand Down
8 changes: 1 addition & 7 deletions lib/arel/nodes/unary_operation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,6 @@ module Arel
module Nodes

class UnaryOperation < Unary
include Arel::Expressions
include Arel::Predications
include Arel::OrderPredications
include Arel::AliasPredication
include Arel::Math

attr_reader :operator

def initialize operator, operand
Expand All @@ -23,4 +17,4 @@ def initialize operand
end
end
end
end
end
1 change: 1 addition & 0 deletions test/test_nodes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ def test_every_arel_nodes_have_hash_eql_eqeq_from_same_class
node_descendants.unshift k unless k == self
end
node_descendants.delete(Arel::Nodes::Node)
node_descendants.delete(Arel::Nodes::NodeExpression)

bad_node_descendants = node_descendants.reject do |subnode|
eqeq_owner = subnode.instance_method(:==).owner
Expand Down

0 comments on commit aa11ad9

Please sign in to comment.