class ActiveRecord::HierarchicalQuery::CTE::Columns

Public Class Methods

new(query) click to toggle source

@param [ActiveRecord::HierarchicalQuery::Query] query

# File lib/active_record/hierarchical_query/cte/columns.rb, line 6
def initialize(query)
  @query = query
end

Public Instance Methods

to_a() click to toggle source

returns columns to be selected from both recursive and non-recursive terms

# File lib/active_record/hierarchical_query/cte/columns.rb, line 11
def to_a
  column_names = [@query.klass.primary_key] | connect_by_columns
  column_names.map { |name| @query.table[name] }
end
Also aliased as: to_ary
to_ary()
Alias for: to_a

Private Instance Methods

connect_by_columns() click to toggle source
# File lib/active_record/hierarchical_query/cte/columns.rb, line 18
def connect_by_columns
  columns = []
  traverse(@query.join_conditions) do |node|
    columns << node.name.to_s if node.is_a?(Arel::Attributes::Attribute)
  end
  columns
end
traverse(ast) { |ast| ... } click to toggle source
# File lib/active_record/hierarchical_query/cte/columns.rb, line 26
def traverse(ast, &blck)
  if ast && ast.respond_to?(:left) && ast.left
    traverse(ast.left, &blck)
  end

  if ast && ast.respond_to?(:right) && ast.right
    traverse(ast.right, &blck)
  end

  yield ast
end