Class: ActiveRecord::HierarchicalQuery::CTE::CycleDetector

Inherits:
Object
  • Object
show all
Defined in:
lib/active_record/hierarchical_query/cte/cycle_detector.rb

Constant Summary collapse

COLUMN_NAME =
'__path'.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query) ⇒ CycleDetector

Returns a new instance of CycleDetector.



15
16
17
# File 'lib/active_record/hierarchical_query/cte/cycle_detector.rb', line 15

def initialize(query)
  @query = query
end

Instance Attribute Details

#queryObject (readonly)

Returns the value of attribute query.



9
10
11
# File 'lib/active_record/hierarchical_query/cte/cycle_detector.rb', line 9

def query
  @query
end

Instance Method Details

#column_nameObject



19
20
21
# File 'lib/active_record/hierarchical_query/cte/cycle_detector.rb', line 19

def column_name
  COLUMN_NAME
end

#visit_non_recursive(arel) ⇒ Object



23
24
25
26
27
# File 'lib/active_record/hierarchical_query/cte/cycle_detector.rb', line 23

def visit_non_recursive(arel)
  visit arel do
    arel.project Arel::Nodes::PostgresArray.new([primary_key]).as(column_name)
  end
end

#visit_recursive(arel) ⇒ Object



29
30
31
32
33
34
# File 'lib/active_record/hierarchical_query/cte/cycle_detector.rb', line 29

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