class ActiveRecord::HierarchicalQuery::CTE::RecursiveTerm

Attributes

builder[R]

@return [ActiveRecord::HierarchicalQuery::CTE::Query]

Public Class Methods

new(builder) click to toggle source

@param [ActiveRecord::HierarchicalQuery::CTE::QueryBuilder] builder

# File lib/active_record/hierarchical_query/cte/recursive_term.rb, line 11
def initialize(builder)
  @builder = builder
end

Public Instance Methods

arel() click to toggle source
# File lib/active_record/hierarchical_query/cte/recursive_term.rb, line 19
def arel
  arel = scope.arel
              .join(query.recursive_table).on(query.join_conditions)

  builder.cycle_detector.apply_to_recursive(arel)
end
bind_values() click to toggle source
# File lib/active_record/hierarchical_query/cte/recursive_term.rb, line 15
def bind_values
  scope.bound_attributes
end

Private Instance Methods

columns() click to toggle source
# File lib/active_record/hierarchical_query/cte/recursive_term.rb, line 31
def columns
  columns = builder.columns.to_a
  columns << ordering if query.orderings.any?
  columns
end
ordering() click to toggle source
# File lib/active_record/hierarchical_query/cte/recursive_term.rb, line 37
def ordering
  column_name = query.ordering_column_name
  left = query.recursive_table[column_name]
  right = query.orderings.row_number_expression

  Arel::Nodes::ArrayConcat.new(left, right)
end
scope() click to toggle source
# File lib/active_record/hierarchical_query/cte/recursive_term.rb, line 27
def scope
  @scope ||= query.child_scope_value.select(columns).reorder(nil)
end