Sha256: 9e5a932c594b091a4b35b113126ea6e97df3dcb93a9f702609c5cfe94eb1bb40
Contents?: true
Size: 1.5 KB
Versions: 1
Compression:
Stored size: 1.5 KB
Contents
module Aggrobot module QueryPlanner class BucketedGroupsQueryPlanner < DefaultQueryPlanner def initialize(collection, group, opts = {}) ParametersValidator.validate_options(opts, [:buckets], [:keep_empty]) raise_error 'Need to set group first' unless group super(collection, group) create_query_map(opts[:buckets]) @keep_empty = opts[:keep_empty] end def sub_query(group_name) @query_map[group_name] end def query_results(extra_cols = []) return empty_default_groups if collection_is_none? results = collect_query_results(extra_cols) results.reject! { |r| r[1] == 0 } unless @keep_empty results end private def collect_query_results(extra_cols) columns = ['', SqlFunctions.count] + extra_cols @query_map.collect do |group_name, query| sanitized_group_name = SqlFunctions.sanitize(group_name) columns[0] = sanitized_group_name results = query.group(sanitized_group_name).limit(1).pluck(*columns).first @query_map[group_name] = @query_map[group_name].none unless results results || [group_name, 0] end end def empty_default_groups @keep_empty ? @query_map.keys.collect { |k| [k, 0] } : [] end def create_query_map(groups) @query_map = {} groups.each do |group| @query_map[group.to_s] = @collection.where(@group => group) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
aggrobot-0.0.2 | lib/aggrobot/query_planner/bucketed_groups_query_planner.rb |