Class: Activecube::Query::CubeQuery
- Inherits:
-
Object
- Object
- Activecube::Query::CubeQuery
- Includes:
- ChainAppender
- Defined in:
- lib/activecube/query/cube_query.rb
Instance Attribute Summary collapse
-
#cube ⇒ Object
readonly
Returns the value of attribute cube.
-
#measures ⇒ Object
readonly
Returns the value of attribute measures.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#selectors ⇒ Object
readonly
Returns the value of attribute selectors.
-
#slices ⇒ Object
readonly
Returns the value of attribute slices.
-
#sql ⇒ Object
readonly
Returns the value of attribute sql.
-
#stats ⇒ Object
Returns the value of attribute stats.
-
#tables ⇒ Object
readonly
Returns the value of attribute tables.
Instance Method Summary collapse
- #asc(*args) ⇒ Object
- #column_names(measures = self.measures) ⇒ Object
- #column_names_required(measures = self.measures) ⇒ Object
- #desc(*args) ⇒ Object
-
#initialize(cube, slices = [], measures = [], selectors = [], options = [], model_tables = nil) ⇒ CubeQuery
constructor
A new instance of CubeQuery.
- #join_fields ⇒ Object
- #limit(*args) ⇒ Object
- #limit_by(*args) ⇒ Object
- #measure(*args) ⇒ Object
- #offset(*args) ⇒ Object
- #orderings ⇒ Object
- #query ⇒ Object
- #reduced(other_measures, other_options) ⇒ Object
- #selector_column_names(measures = self.measures) ⇒ Object
- #slice(*args) ⇒ Object
- #to_query ⇒ Object
- #to_sql ⇒ Object
- #when(*args) ⇒ Object
Constructor Details
#initialize(cube, slices = [], measures = [], selectors = [], options = [], model_tables = nil) ⇒ CubeQuery
Returns a new instance of CubeQuery.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/activecube/query/cube_query.rb', line 21 def initialize cube, slices = [], measures = [], selectors = [], = [], model_tables = nil @cube = cube @slices = slices @measures = measures @selectors = selectors @options = @tables = model_tables || cube.models.map{|m| m < Activecube::View ? m.new : Activecube::Processor::Table.new(m) } cube. && cube..each do |option| define_singleton_method option.to_s.underscore do |*args| @options << Option.new(option, *args) self end end end |
Instance Attribute Details
#cube ⇒ Object (readonly)
Returns the value of attribute cube.
18 19 20 |
# File 'lib/activecube/query/cube_query.rb', line 18 def cube @cube end |
#measures ⇒ Object (readonly)
Returns the value of attribute measures.
18 19 20 |
# File 'lib/activecube/query/cube_query.rb', line 18 def measures @measures end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
18 19 20 |
# File 'lib/activecube/query/cube_query.rb', line 18 def @options end |
#selectors ⇒ Object (readonly)
Returns the value of attribute selectors.
18 19 20 |
# File 'lib/activecube/query/cube_query.rb', line 18 def selectors @selectors end |
#slices ⇒ Object (readonly)
Returns the value of attribute slices.
18 19 20 |
# File 'lib/activecube/query/cube_query.rb', line 18 def slices @slices end |
#sql ⇒ Object (readonly)
Returns the value of attribute sql.
18 19 20 |
# File 'lib/activecube/query/cube_query.rb', line 18 def sql @sql end |
#stats ⇒ Object
Returns the value of attribute stats.
19 20 21 |
# File 'lib/activecube/query/cube_query.rb', line 19 def stats @stats end |
#tables ⇒ Object (readonly)
Returns the value of attribute tables.
18 19 20 |
# File 'lib/activecube/query/cube_query.rb', line 18 def tables @tables end |
Instance Method Details
#asc(*args) ⇒ Object
64 65 66 67 68 69 70 |
# File 'lib/activecube/query/cube_query.rb', line 64 def asc *args clear_sql args.each{|arg| << Ordering.new( arg, :asc) } self end |
#column_names(measures = self.measures) ⇒ Object
110 111 112 |
# File 'lib/activecube/query/cube_query.rb', line 110 def column_names measures = self.measures (measures + slices + selectors).map(&:required_column_names).flatten.uniq end |
#column_names_required(measures = self.measures) ⇒ Object
114 115 116 |
# File 'lib/activecube/query/cube_query.rb', line 114 def column_names_required measures = self.measures (measures + slices + selectors.select{|s| !s.kind_of?(Selector::CombineSelector)}).map(&:required_column_names).flatten.uniq end |
#desc(*args) ⇒ Object
56 57 58 59 60 61 62 |
# File 'lib/activecube/query/cube_query.rb', line 56 def desc *args clear_sql args.each{|arg| << Ordering.new(arg, :desc) } self end |
#join_fields ⇒ Object
152 153 154 |
# File 'lib/activecube/query/cube_query.rb', line 152 def join_fields slices.map(&:group_by_columns).flatten.uniq end |
#limit(*args) ⇒ Object
80 81 82 83 84 85 86 |
# File 'lib/activecube/query/cube_query.rb', line 80 def limit *args clear_sql args.each{|arg| << Limit.new( arg, :take) } self end |
#limit_by(*args) ⇒ Object
88 89 90 91 92 |
# File 'lib/activecube/query/cube_query.rb', line 88 def limit_by *args clear_sql << LimitBy.new(args) self end |
#measure(*args) ⇒ Object
46 47 48 49 |
# File 'lib/activecube/query/cube_query.rb', line 46 def measure *args clear_sql append *args, @measures, Measure, cube.metrics end |
#offset(*args) ⇒ Object
72 73 74 75 76 77 78 |
# File 'lib/activecube/query/cube_query.rb', line 72 def offset *args clear_sql args.each{|arg| << Limit.new( arg, :skip) } self end |
#orderings ⇒ Object
156 157 158 |
# File 'lib/activecube/query/cube_query.rb', line 156 def orderings .select{|s| s.kind_of? Ordering} end |
#query ⇒ Object
95 96 97 98 99 100 |
# File 'lib/activecube/query/cube_query.rb', line 95 def query sql = to_query.to_sql connection = @composed.connection connection = stats ? stats.proxy(connection) : connection connection.exec_query(sql) end |
#reduced(other_measures, other_options) ⇒ Object
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/activecube/query/cube_query.rb', line 122 def reduced other_measures, 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, , tables end |
#selector_column_names(measures = self.measures) ⇒ Object
118 119 120 |
# File 'lib/activecube/query/cube_query.rb', line 118 def selector_column_names measures = self.measures (measures.map(&:selectors) + slices.map(&:selectors) + selectors).flatten.map(&:required_column_names).flatten.uniq end |
#slice(*args) ⇒ Object
41 42 43 44 |
# File 'lib/activecube/query/cube_query.rb', line 41 def slice *args clear_sql append *args, @slices, Slice, cube.dimensions end |
#to_query ⇒ Object
102 103 104 |
# File 'lib/activecube/query/cube_query.rb', line 102 def to_query @composed.try(:query) || (@composed = Activecube::Processor::Composer.new(self)).build_query end |
#to_sql ⇒ Object
106 107 108 |
# File 'lib/activecube/query/cube_query.rb', line 106 def to_sql to_query.to_sql end |
#when(*args) ⇒ Object
51 52 53 54 |
# File 'lib/activecube/query/cube_query.rb', line 51 def when *args clear_sql append *args, @selectors, Selector, cube.selectors end |