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, 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

Instance Method Details

- (Object) and(right)

Factory method to create an Nodes::And node.



25
26
27
# File 'lib/arel/nodes/node.rb', line 25

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

- (Object) each(&block)

Iterate through AST, nodes will be yielded depth-first



39
40
41
42
43
# File 'lib/arel/nodes/node.rb', line 39

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.



12
13
14
# File 'lib/arel/nodes/node.rb', line 12

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.



19
20
21
# File 'lib/arel/nodes/node.rb', line 19

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`? :'(



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

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