class ActiveRecord::HierarchicalQuery::CTE::QueryBuilder
CTE
query builder
Attributes
columns[R]
cycle_detector[R]
options[R]
query[R]
Public Class Methods
new(query, options: {})
click to toggle source
@param [ActiveRecord::HierarchicalQuery::Query] query
# File lib/active_record/hierarchical_query/cte/query_builder.rb, line 20 def initialize(query, options: {}) @query = query @columns = Columns.new(@query) @cycle_detector = CycleDetector.new(@query) @options = options end
Public Instance Methods
bind_values()
click to toggle source
# File lib/active_record/hierarchical_query/cte/query_builder.rb, line 27 def bind_values union_term.bind_values end
build_arel()
click to toggle source
@return [Arel::SelectManager]
# File lib/active_record/hierarchical_query/cte/query_builder.rb, line 32 def build_arel build_manager build_select build_limits build_order @arel end
Private Instance Methods
build_limits()
click to toggle source
# File lib/active_record/hierarchical_query/cte/query_builder.rb, line 70 def build_limits @arel.take(query.limit_value).skip(query.offset_value) end
build_manager()
click to toggle source
# File lib/active_record/hierarchical_query/cte/query_builder.rb, line 42 def build_manager @arel = Arel::SelectManager.new(table). with(:recursive, with_query). from(recursive_table) end
build_order()
click to toggle source
# File lib/active_record/hierarchical_query/cte/query_builder.rb, line 74 def build_order @arel.order(order_column.asc) if should_order? end
build_select()
click to toggle source
# File lib/active_record/hierarchical_query/cte/query_builder.rb, line 62 def build_select if @query.distinct_value @arel.project(recursive_table[Arel.star]).distinct else @arel.project(recursive_table[Arel.star]) end end
order_column()
click to toggle source
# File lib/active_record/hierarchical_query/cte/query_builder.rb, line 82 def order_column recursive_table[query.ordering_column_name] end
should_order?()
click to toggle source
# File lib/active_record/hierarchical_query/cte/query_builder.rb, line 78 def should_order? query.orderings.any? && (query.limit_value || query.offset_value) end
union_term()
click to toggle source
# File lib/active_record/hierarchical_query/cte/query_builder.rb, line 58 def union_term @union_term ||= UnionTerm.new(self, @options) end
with_query()
click to toggle source
“categories__recursive” AS (
SELECT ... FROM "categories" UNION ALL SELECT ... FROM "categories" INNER JOIN "categories__recursive" ON ...
)
# File lib/active_record/hierarchical_query/cte/query_builder.rb, line 54 def with_query Arel::Nodes::As.new(recursive_table, union_term.arel) end