parent
163ec7755d
commit
3941e77515
@ -1,63 +0,0 @@ |
||||
module CostQuery::GroupBy |
||||
class Base < CostQuery::Chainable |
||||
inherited_attributes :group_fields, :list => true, :merge => false |
||||
|
||||
def self.inherited(klass) |
||||
klass.group_fields klass.field |
||||
super |
||||
end |
||||
|
||||
def correct_position? |
||||
type == :row or !child.is_a?(CostQuery::GroupBy::Base) or child.type == :column |
||||
end |
||||
|
||||
def filter? |
||||
false |
||||
end |
||||
|
||||
def sql_aggregation? |
||||
child.filter? |
||||
end |
||||
|
||||
## |
||||
# @param [FalseClass, TrueClass] prefix Whether or not add a table prefix the field names |
||||
# @return [Array<String,Symbol>] List of group by fields corresponding to self and all parents' |
||||
def all_group_fields(prefix = true) |
||||
@all_group_fields ||= [] |
||||
@all_group_fields[prefix ? 0 : 1] ||= begin |
||||
(parent ? parent.all_group_fields(prefix) : []) + (prefix ? with_table(group_fields) : group_fields) |
||||
end.uniq |
||||
end |
||||
|
||||
def clear |
||||
@all_group_fields = nil |
||||
super |
||||
end |
||||
|
||||
def aggregation_mixin |
||||
sql_aggregation? ? SqlAggregation : RubyAggregation |
||||
end |
||||
|
||||
def initialize(child = nil, optios = {}) |
||||
super |
||||
extend aggregation_mixin |
||||
end |
||||
|
||||
def result |
||||
super |
||||
end |
||||
|
||||
def compute_result |
||||
super.tap do |r| |
||||
r.type = type |
||||
r.important_fields = group_fields |
||||
end |
||||
end |
||||
|
||||
def define_group(sql) |
||||
fields = all_group_fields |
||||
sql.group_by fields |
||||
sql.select fields |
||||
end |
||||
end |
||||
end |
Loading…
Reference in new issue