class ActiveRecord::HierarchicalQuery::CTE::NonRecursiveTerm

Constants

DISALLOWED_CLAUSES

Attributes

builder[R]

Public Class Methods

new(builder) click to toggle source

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

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

Public Instance Methods

arel() click to toggle source
# File lib/active_record/hierarchical_query/cte/non_recursive_term.rb, line 21
def arel
  arel = scope.arel

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

Private Instance Methods

columns() click to toggle source
# File lib/active_record/hierarchical_query/cte/non_recursive_term.rb, line 36
def columns
  columns = builder.columns.to_a

  if query.orderings.any?
    columns << ordering
  end

  columns
end
ordering() click to toggle source
# File lib/active_record/hierarchical_query/cte/non_recursive_term.rb, line 46
def ordering
  value = query.orderings.row_number_expression
  column_name = query.ordering_column_name

  Arel::Nodes::PostgresArray.new([value]).as(column_name)
end
scope() click to toggle source
# File lib/active_record/hierarchical_query/cte/non_recursive_term.rb, line 28
def scope
  @scope ||= query.
      start_with_value.
      select(columns).
      except(*DISALLOWED_CLAUSES).
      reorder(nil)
end