# File lib/active_record/hierarchical_query/join_builder.rb, line 69 def primary_key @relation.table[@relation.klass.primary_key] end
class ActiveRecord::HierarchicalQuery::JoinBuilder
Public Class Methods
new(query, join_to, subquery_alias, options = {})
click to toggle source
@param [ActiveRecord::HierarchicalQuery::Query] query @param [ActiveRecord::Relation] join_to @param [#to_s] subquery_alias @param [Hash] options (:outer_join_hierarchical, :union_type)
# File lib/active_record/hierarchical_query/join_builder.rb, line 10 def initialize(query, join_to, subquery_alias, options = {}) @query = query @builder = CTE::QueryBuilder.new(query, options: options) @relation = join_to @alias = Arel::Table.new(subquery_alias) @options = options end
Public Instance Methods
build()
click to toggle source
# File lib/active_record/hierarchical_query/join_builder.rb, line 18 def build relation = @relation # add ordering by "__order_column" relation.order_values += order_columns if ordered? relation = relation.joins(joined_arel_node) return relation unless ActiveRecord.version < Gem::Version.new("5.2") relation.bind_values += bind_values relation end
Private Instance Methods
aliased_subquery()
click to toggle source
# File lib/active_record/hierarchical_query/join_builder.rb, line 53 def aliased_subquery SubqueryAlias.new(subquery, @alias) end
bind_values()
click to toggle source
# File lib/active_record/hierarchical_query/join_builder.rb, line 36 def bind_values @builder.bind_values end
constraint()
click to toggle source
# File lib/active_record/hierarchical_query/join_builder.rb, line 65 def constraint Arel::Nodes::On.new(primary_key.eq(foreign_key)) end
cte_arel()
click to toggle source
# File lib/active_record/hierarchical_query/join_builder.rb, line 61 def cte_arel @cte_arel ||= @builder.build_arel end
custom_foreign_key()
click to toggle source
# File lib/active_record/hierarchical_query/join_builder.rb, line 73 def custom_foreign_key @options[:foreign_key] end
foreign_key()
click to toggle source
# File lib/active_record/hierarchical_query/join_builder.rb, line 77 def foreign_key custom_foreign_key ? @alias[custom_foreign_key] : @alias[@query.klass.primary_key] end
inner_join()
click to toggle source
# File lib/active_record/hierarchical_query/join_builder.rb, line 45 def inner_join Arel::Nodes::InnerJoin.new(aliased_subquery, constraint) end
joined_arel_node()
click to toggle source
# File lib/active_record/hierarchical_query/join_builder.rb, line 41 def joined_arel_node @options[:outer_join_hierarchical] == true ? outer_join : inner_join end
order_columns()
click to toggle source
# File lib/active_record/hierarchical_query/join_builder.rb, line 85 def order_columns [@query.recursive_table[@query.ordering_column_name].asc] end
ordered?()
click to toggle source
# File lib/active_record/hierarchical_query/join_builder.rb, line 81 def ordered? @query.orderings.any? end
outer_join()
click to toggle source
# File lib/active_record/hierarchical_query/join_builder.rb, line 49 def outer_join Arel::Nodes::OuterJoin.new(aliased_subquery, constraint) end
primary_key()
click to toggle source
subquery()
click to toggle source
# File lib/active_record/hierarchical_query/join_builder.rb, line 57 def subquery Arel::Nodes::Grouping.new(cte_arel.ast) end