class Aggrobot::QueryPlanner::DefaultQueryPlanner

Public Class Methods

new(collection, group = DEFAULT_GROUP_BY) click to toggle source
# File lib/aggrobot/query_planner/default_query_planner.rb, line 6
def initialize(collection, group = DEFAULT_GROUP_BY)
  @collection, @group = validate_and_extract_relation(collection), group
end

Public Instance Methods

query_results(extra_cols = []) click to toggle source
# File lib/aggrobot/query_planner/default_query_planner.rb, line 18
def query_results(extra_cols = [])
  return [] if collection_is_none?
  if @group.is_a? Array
    columns = @group + [SQLFunctions.count] + extra_cols
    results_query.pluck(*columns).collect do |result_row|
      [result_row[0..(@group.count - 1)]] + result_row[@group.count..-1]
    end
  else
    columns = [@group, SQLFunctions.count] + extra_cols
    results_query.pluck(*columns)
  end
end
sub_query(group_value) click to toggle source
# File lib/aggrobot/query_planner/default_query_planner.rb, line 10
def sub_query(group_value)
  if @group == DEFAULT_GROUP_BY
    @collection
  else
    @collection.where(group_condition(group_value))
  end
end

Protected Instance Methods

collection_is_none?() click to toggle source
# File lib/aggrobot/query_planner/default_query_planner.rb, line 45
def collection_is_none?
  @collection.extending_values.include?(ActiveRecord::NullRelation)
end
group_condition(group_value) click to toggle source
# File lib/aggrobot/query_planner/default_query_planner.rb, line 33
def group_condition(group_value)
  if @group.is_a?(Array)
    Hash[@group.zip(group_value)]
  else
    {@group => group_value}
  end
end
results_query() click to toggle source
# File lib/aggrobot/query_planner/default_query_planner.rb, line 41
def results_query
  @result_query ||= @collection.group(@group)
end