Class: Aggrobot::QueryPlanner::GroupLimitQueryPlanner

Inherits:
DefaultQueryPlanner show all
Defined in:
lib/aggrobot/query_planner/group_limit_query_planner.rb

Instance Method Summary collapse

Methods included from Helper

#block_from_args, #raise_error

Constructor Details

#initialize(collection, group, opts) ⇒ GroupLimitQueryPlanner

Returns a new instance of GroupLimitQueryPlanner.



5
6
7
8
9
10
11
# File 'lib/aggrobot/query_planner/group_limit_query_planner.rb', line 5

def initialize(collection, group, opts)
  ParametersValidator.validate_options(opts, [:limit_to, :sort_by], [:always_include, :other_group, :order])
  raise_error 'limit_to has to be a number' unless opts[:limit_to].is_a?(Fixnum)
  super(collection, group)
  @query_map = {}
  process_top_groups_options(opts)
end

Instance Method Details

#query_results(extra_cols = []) ⇒ Object



17
18
19
20
21
22
# File 'lib/aggrobot/query_planner/group_limit_query_planner.rb', line 17

def query_results(extra_cols = [])
  return [] if collection_is_none?
  columns = [@group, SqlFunctions.count] + extra_cols
  top_group_results = results_query.where(@top_groups_conditions).pluck(*columns)
  top_group_results + other_group_results(columns)
end

#sub_query(group_name) ⇒ Object



13
14
15
# File 'lib/aggrobot/query_planner/group_limit_query_planner.rb', line 13

def sub_query(group_name)
  group_name == @other_group ? @collection.where.not(@top_groups_conditions) : @collection.where(@group => group_name)
end