Class: Arel::Nodes::Node
- Inherits:
-
Object
- Object
- Arel::Nodes::Node
- Includes:
- FactoryMethods, Enumerable
- Defined in:
- lib/arel/nodes/node.rb
Overview
Abstract base class for all AST nodes
Direct Known Subclasses
And, Binary, BindParam, Case, Casted, CurrentRow, Distinct, False, Function, InsertStatement, SelectCore, SelectStatement, True, Unary, UpdateStatement, Window
Instance Method Summary collapse
- #_caller ⇒ Object
-
#and(right) ⇒ Object
Factory method to create an Nodes::And node.
-
#each(&block) ⇒ Object
Iterate through AST, nodes will be yielded depth-first.
-
#initialize ⇒ Node
constructor
A new instance of Node.
-
#not ⇒ Object
Factory method to create a Nodes::Not node that has the recipient of the caller as a child.
-
#or(right) ⇒ Object
Factory method to create a Nodes::Grouping node that has an Nodes::Or node as a child.
-
#to_sql(engine = Table.engine) ⇒ Object
FIXME: this method should go away.
Methods included from FactoryMethods
#create_and, #create_false, #create_join, #create_on, #create_string_join, #create_table_alias, #create_true, #grouping, #lower
Constructor Details
#initialize ⇒ Node
Returns a new instance of Node.
17 18 19 |
# File 'lib/arel/nodes/node.rb', line 17 def initialize @caller = caller.dup end |
Instance Method Details
#_caller ⇒ Object
13 14 15 |
# File 'lib/arel/nodes/node.rb', line 13 def _caller @caller end |
#and(right) ⇒ Object
Factory method to create an Nodes::And node.
38 39 40 |
# File 'lib/arel/nodes/node.rb', line 38 def and right Nodes::And.new [self, right] end |
#each(&block) ⇒ Object
Iterate through AST, nodes will be yielded depth-first
54 55 56 57 58 |
# File 'lib/arel/nodes/node.rb', line 54 def each &block return enum_for(:each) unless block_given? ::Arel::Visitors::DepthFirst.new(block).accept self end |
#not ⇒ Object
Factory method to create a Nodes::Not node that has the recipient of the caller as a child.
25 26 27 |
# File 'lib/arel/nodes/node.rb', line 25 def not Nodes::Not.new self end |
#or(right) ⇒ Object
Factory method to create a Nodes::Grouping node that has an Nodes::Or node as a child.
32 33 34 |
# File 'lib/arel/nodes/node.rb', line 32 def or right Nodes::Grouping.new Nodes::Or.new(self, right) end |
#to_sql(engine = Table.engine) ⇒ Object
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`? :’(
47 48 49 50 51 |
# File 'lib/arel/nodes/node.rb', line 47 def to_sql engine = Table.engine collector = Arel::Collectors::SQLString.new collector = engine.connection.visitor.accept self, collector collector.value end |