Class: ActiveRecord::HierarchicalQuery::CTE::Orderings

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/active_record/hierarchical_query/cte/orderings.rb

Constant Summary collapse

ORDERING_COLUMN_ALIAS =
'__order_column'
NATURAL_SORT_TYPES =
Set[
    :integer, :float, :decimal,
    :datetime, :timestamp, :time, :date,
    :boolean, :itet, :cidr, :ltree
]

Instance Method Summary collapse

Constructor Details

#initialize(builder) ⇒ Orderings

Returns a new instance of Orderings.



22
23
24
# File 'lib/active_record/hierarchical_query/cte/orderings.rb', line 22

def initialize(builder)
  @builder = builder
end

Instance Method Details

#arel_nodesObject



26
27
28
29
30
# File 'lib/active_record/hierarchical_query/cte/orderings.rb', line 26

def arel_nodes
  @arel_nodes ||= @builder.order_values.each_with_object([]) do |value, orderings|
    orderings.concat Array.wrap(as_orderings(value))
  end
end

#column_nameObject



40
41
42
# File 'lib/active_record/hierarchical_query/cte/orderings.rb', line 40

def column_name
  ORDERING_COLUMN_ALIAS
end

#row_number_expressionObject



32
33
34
35
36
37
38
# File 'lib/active_record/hierarchical_query/cte/orderings.rb', line 32

def row_number_expression
  if raw_ordering?
    order_attribute
  else
    Arel.sql("ROW_NUMBER() OVER (ORDER BY #{arel_nodes.map(&:to_sql).join(', ')})")
  end
end