Class: Arel::Nodes::Node

Inherits:
Object
  • Object
show all
Includes:
FactoryMethods, Enumerable
Defined in:
lib/arel/nodes/node.rb

Overview

Abstract base class for all AST nodes

Direct Known Subclasses

And, Binary, Casted, CurrentRow, Distinct, False, Function, InsertStatement, SelectCore, SelectStatement, True, Unary, UpdateStatement, Window

Instance Method Summary (collapse)

Methods included from FactoryMethods

#create_and, #create_false, #create_join, #create_on, #create_string_join, #create_table_alias, #create_true, #grouping, #lower

Constructor Details

- (Node) initialize

Returns a new instance of Node



14
15
16
# File 'lib/arel/nodes/node.rb', line 14

def initialize
  @caller = caller.dup
end

Instance Method Details

- (Object) _caller



10
11
12
# File 'lib/arel/nodes/node.rb', line 10

def _caller
  @caller
end

- (Object) and(right)

Factory method to create an Nodes::And node.



35
36
37
# File 'lib/arel/nodes/node.rb', line 35

def and right
  Nodes::And.new [self, right]
end

- (Object) each(&block)

Iterate through AST, nodes will be yielded depth-first



49
50
51
52
53
# File 'lib/arel/nodes/node.rb', line 49

def each &block
  return enum_for(:each) unless block_given?

  ::Arel::Visitors::DepthFirst.new(block).accept self
end

- (Object) not

Factory method to create a Nodes::Not node that has the recipient of the caller as a child.



22
23
24
# File 'lib/arel/nodes/node.rb', line 22

def not
  Nodes::Not.new self
end

- (Object) or(right)

Factory method to create a Nodes::Grouping node that has an Nodes::Or node as a child.



29
30
31
# File 'lib/arel/nodes/node.rb', line 29

def or right
  Nodes::Grouping.new Nodes::Or.new(self, right)
end

- (Object) to_sql(engine = Table.engine)

FIXME: this method should go away. I don't like people calling to_sql on non-head nodes. This forces us to walk the AST until we can find a node that has a “relation” member.

Maybe we should just use `Table.engine`? :'(



44
45
46
# File 'lib/arel/nodes/node.rb', line 44

def to_sql engine = Table.engine
  engine.connection.visitor.accept self
end