Class: ActiveRecord::HierarchicalQuery::Visitors::PostgreSQL::CycleDetector

Inherits:
Visitor
  • Object
show all
Defined in:
lib/active_record/hierarchical_query/visitors/postgresql/cycle_detector.rb

Constant Summary collapse

COLUMN_NAME =
'__path'.freeze

Instance Attribute Summary

Attributes inherited from Visitor

#query

Instance Method Summary collapse

Methods inherited from Visitor

#initialize

Constructor Details

This class inherits a constructor from ActiveRecord::HierarchicalQuery::Visitors::Visitor

Instance Method Details

#visit_non_recursive(arel) ⇒ Object



8
9
10
11
12
13
14
# File 'lib/active_record/hierarchical_query/visitors/postgresql/cycle_detector.rb', line 8

def visit_non_recursive(arel)
  if enabled?
    arel.project Arel::Nodes::PostgresArray.new([primary_key]).as(column_name)
  end

  arel
end

#visit_recursive(arel) ⇒ Object



16
17
18
19
20
21
22
23
# File 'lib/active_record/hierarchical_query/visitors/postgresql/cycle_detector.rb', line 16

def visit_recursive(arel)
  if enabled?
    arel.project Arel::Nodes::ArrayConcat.new(parent_column, primary_key)
    arel.constraints << Arel::Nodes::Not.new(primary_key.eq(any(parent_column)))
  end

  arel
end