module ActiveRecord::QueryMethods

Attributes

is_recursive[RW]
with_values[RW]

Public Instance Methods

build_arel_with_cte() click to toggle source
# File lib/active_record_cte/relation/query_methods.rb, line 43
def build_arel_with_cte
  arel = build_arel_without_cte
  build_with_clause(arel) unless @with_values.empty?
  arel
end
build_with_clause(arel) click to toggle source
# File lib/active_record_cte/relation/query_methods.rb, line 22
def build_with_clause(arel)
  ctes = with_values.map do |cte_query|
    table = Arel::Table.new(cte_query[0])
    query = cte_query[1]

    case query
    when Arel::Nodes::Union
      Arel::Nodes::As.new(table, query)
    else
      raise 'Not Implemented!'
    end

  end

  if is_recursive
    arel.with(:recursive, *ctes)
  else
    arel.with(*ctes)
  end
end
with(query) click to toggle source
# File lib/active_record_cte/relation/query_methods.rb, line 5
def with(query)
  return self if query.blank?

  relation = clone
  relation.with_values << query.flatten
  relation
end
with_recursive(query) click to toggle source
# File lib/active_record_cte/relation/query_methods.rb, line 13
def with_recursive(query)
  return self if query.blank?

  relation = clone
  relation.is_recursive = true
  relation.with_values << query.flatten
  relation
end