class Activecube::Query::CubeQuery
Attributes
cube[R]
measures[R]
options[R]
selectors[R]
slices[R]
sql[R]
tables[R]
Public Class Methods
new(cube, slices = [], measures = [], selectors = [], options = [], model_tables = nil)
click to toggle source
# File lib/activecube/query/cube_query.rb, line 19 def initialize cube, slices = [], measures = [], selectors = [], options = [], model_tables = nil @cube = cube @slices = slices @measures = measures @selectors = selectors @options = options @tables = model_tables || cube.models.map{|m| m < Activecube::View ? m.new : Activecube::Processor::Table.new(m) } cube.options && cube.options.each do |option| define_singleton_method option.to_s.underscore do |*args| @options << Option.new(option, *args) self end end end
Public Instance Methods
asc(*args)
click to toggle source
# File lib/activecube/query/cube_query.rb, line 62 def asc *args clear_sql args.each{|arg| options << Ordering.new( arg, :asc) } self end
column_names(measures = self.measures)
click to toggle source
# File lib/activecube/query/cube_query.rb, line 106 def column_names measures = self.measures (measures + slices + selectors).map(&:required_column_names).flatten.uniq end
desc(*args)
click to toggle source
# File lib/activecube/query/cube_query.rb, line 54 def desc *args clear_sql args.each{|arg| options << Ordering.new(arg, :desc) } self end
join_fields()
click to toggle source
# File lib/activecube/query/cube_query.rb, line 144 def join_fields slices.map(&:group_by_columns).flatten.uniq end
limit(*args)
click to toggle source
# File lib/activecube/query/cube_query.rb, line 78 def limit *args clear_sql args.each{|arg| options << Limit.new( arg, :take) } self end
limit_by(*args)
click to toggle source
# File lib/activecube/query/cube_query.rb, line 86 def limit_by *args clear_sql options << LimitBy.new(args) self end
measure(*args)
click to toggle source
# File lib/activecube/query/cube_query.rb, line 44 def measure *args clear_sql append *args, @measures, Measure, cube.metrics end
offset(*args)
click to toggle source
# File lib/activecube/query/cube_query.rb, line 70 def offset *args clear_sql args.each{|arg| options << Limit.new( arg, :skip) } self end
orderings()
click to toggle source
# File lib/activecube/query/cube_query.rb, line 148 def orderings options.select{|s| s.kind_of? Ordering} end
query()
click to toggle source
# File lib/activecube/query/cube_query.rb, line 93 def query sql = to_query.to_sql @composed.connection.exec_query(sql) end
reduced(other_measures, other_options)
click to toggle source
# File lib/activecube/query/cube_query.rb, line 114 def reduced other_measures, other_options common_selectors = [] other_measures.each_with_index do |m,i| if i==0 common_selectors += m.selectors else common_selectors &= m.selectors end end if common_selectors.empty? reduced_measures = other_measures reduced_selectors = self.selectors else reduced_measures = other_measures.collect{|m| Measure.new m.cube, m.key, m.definition, (m.selectors - common_selectors), m.modifications } reduced_selectors = self.selectors + common_selectors end unless reduced_measures.detect{|rm| rm.selectors.empty? } reduced_selectors += [Selector.or(reduced_measures.map(&:selectors).flatten.uniq)] end return self if (reduced_measures == self.measures) && (reduced_selectors == self.selectors) CubeQuery.new cube, slices, reduced_measures, reduced_selectors, other_options, tables end
selector_column_names(measures = self.measures)
click to toggle source
# File lib/activecube/query/cube_query.rb, line 110 def selector_column_names measures = self.measures (measures.map(&:selectors) + slices.map(&:selectors) + selectors).flatten.map(&:required_column_names).flatten.uniq end
slice(*args)
click to toggle source
# File lib/activecube/query/cube_query.rb, line 39 def slice *args clear_sql append *args, @slices, Slice, cube.dimensions end
to_query()
click to toggle source
# File lib/activecube/query/cube_query.rb, line 98 def to_query @composed.try(:query) || (@composed = Activecube::Processor::Composer.new(self)).build_query end
to_sql()
click to toggle source
# File lib/activecube/query/cube_query.rb, line 102 def to_sql to_query.to_sql end
when(*args)
click to toggle source
# File lib/activecube/query/cube_query.rb, line 49 def when *args clear_sql append *args, @selectors, Selector, cube.selectors end
Private Instance Methods
clear_sql()
click to toggle source
# File lib/activecube/query/cube_query.rb, line 154 def clear_sql @composed = nil end