module ActiveRecord::QueryMethods

Public Instance Methods

build_arel(aliases = nil)
build_arel_with_extensions(aliases = nil) click to toggle source
# File lib/postgres_with/active_record/relation/query_methods.rb, line 78
def build_arel_with_extensions(aliases = nil)
  arel = build_arel_without_extensions(aliases)

  with_statements = with_values.flat_map do |with_value|
    case with_value
    when String
      with_value
    when Hash
      with_value.map do |name, expression|
        case expression
        when String
          select = Arel::Nodes::SqlLiteral.new "(#{expression})"
        when ActiveRecord::Relation, Arel::SelectManager
          select = Arel::Nodes::SqlLiteral.new "(#{expression.to_sql})"
        end
        if name.to_s.start_with?('_materialized_')
          name = name.gsub('_materialized_', '')
          Arel::Nodes::AsMaterialized.new Arel::Nodes::SqlLiteral.new("\"#{name}\""), select
        else
          Arel::Nodes::As.new Arel::Nodes::SqlLiteral.new("\"#{name}\""), select
        end
      end
    when Arel::Nodes::As
      with_value
    end
  end
  unless with_statements.empty?
    if recursive_value
      arel.with :recursive, with_statements
    else
      arel.with with_statements
    end
  end

  arel
end
Also aliased as: build_arel
build_arel_without_extensions(aliases = nil)
Alias for: build_arel
with(opts = :chain, *rest) click to toggle source
# File lib/postgres_with/active_record/relation/query_methods.rb, line 59
def with(opts = :chain, *rest)
  if opts == :chain
    WithChain.new(spawn)
  elsif opts.blank?
    self
  else
    spawn.with!(opts, *rest)
  end
end