Class: ActiveRecord::HierarchicalQuery::CTE::CycleDetector
- Inherits:
-
Object
- Object
- ActiveRecord::HierarchicalQuery::CTE::CycleDetector
- Defined in:
- lib/active_record/hierarchical_query/cte/cycle_detector.rb
Constant Summary collapse
- COLUMN_NAME =
'__path'.freeze
Instance Attribute Summary collapse
-
#query ⇒ Object
readonly
Returns the value of attribute query.
Instance Method Summary collapse
- #column_name ⇒ Object
-
#initialize(query) ⇒ CycleDetector
constructor
A new instance of CycleDetector.
- #visit_non_recursive(arel) ⇒ Object
- #visit_recursive(arel) ⇒ Object
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
#query ⇒ Object (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_name ⇒ Object
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 |