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