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.
Instance Method Summary collapse
- #asc(*args) ⇒ Object
- #column_names(measures = self.measures) ⇒ Object
- #desc(*args) ⇒ Object
-
#initialize(cube, slices = [], measures = [], selectors = [], options = []) ⇒ CubeQuery
constructor
A new instance of CubeQuery.
- #join_fields ⇒ Object
- #measure(*args) ⇒ Object
- #orderings ⇒ Object
- #query ⇒ Object
- #reduced(other_measures) ⇒ Object
- #selector_column_names(measures = self.measures) ⇒ Object
- #skip(*args) ⇒ Object (also: #offset)
- #slice(*args) ⇒ Object
- #take(*args) ⇒ Object (also: #limit)
- #to_query ⇒ Object
- #to_sql ⇒ Object
- #when(*args) ⇒ Object
Constructor Details
#initialize(cube, slices = [], measures = [], selectors = [], options = []) ⇒ CubeQuery
Returns a new instance of CubeQuery.
18 19 20 21 22 23 24 |
# File 'lib/activecube/query/cube_query.rb', line 18 def initialize cube, slices = [], measures = [], selectors = [], = [] @cube = cube @slices = slices @measures = measures @selectors = selectors @options = end |
Instance Attribute Details
#cube ⇒ Object (readonly)
Returns the value of attribute cube.
17 18 19 |
# File 'lib/activecube/query/cube_query.rb', line 17 def cube @cube end |
#measures ⇒ Object (readonly)
Returns the value of attribute measures.
17 18 19 |
# File 'lib/activecube/query/cube_query.rb', line 17 def measures @measures end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
17 18 19 |
# File 'lib/activecube/query/cube_query.rb', line 17 def @options end |
#selectors ⇒ Object (readonly)
Returns the value of attribute selectors.
17 18 19 |
# File 'lib/activecube/query/cube_query.rb', line 17 def selectors @selectors end |
#slices ⇒ Object (readonly)
Returns the value of attribute slices.
17 18 19 |
# File 'lib/activecube/query/cube_query.rb', line 17 def slices @slices end |
Instance Method Details
#asc(*args) ⇒ Object
45 46 47 48 49 50 |
# File 'lib/activecube/query/cube_query.rb', line 45 def asc *args args.each{|arg| << Ordering.new( arg, :asc) } self end |
#column_names(measures = self.measures) ⇒ Object
83 84 85 |
# File 'lib/activecube/query/cube_query.rb', line 83 def column_names measures = self.measures (measures + slices + selectors).map(&:required_column_names).flatten.uniq end |
#desc(*args) ⇒ Object
38 39 40 41 42 43 |
# File 'lib/activecube/query/cube_query.rb', line 38 def desc *args args.each{|arg| << Ordering.new(arg, :desc) } self end |
#join_fields ⇒ Object
121 122 123 |
# File 'lib/activecube/query/cube_query.rb', line 121 def join_fields slices.map{|s| s.dimension_class.identity || s.key }.uniq end |
#measure(*args) ⇒ Object
30 31 32 |
# File 'lib/activecube/query/cube_query.rb', line 30 def measure *args append *args, @measures, Measure, cube.metrics end |
#orderings ⇒ Object
125 126 127 |
# File 'lib/activecube/query/cube_query.rb', line 125 def orderings .select{|s| s.kind_of? Ordering} end |
#query ⇒ Object
69 70 71 72 73 |
# File 'lib/activecube/query/cube_query.rb', line 69 def query composer = Activecube::Processor::Composer.new(self) sql = composer.build_query.to_sql composer.connection.exec_query(sql) end |
#reduced(other_measures) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/activecube/query/cube_query.rb', line 91 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 += [OrSelector.new(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 end |
#selector_column_names(measures = self.measures) ⇒ Object
87 88 89 |
# File 'lib/activecube/query/cube_query.rb', line 87 def selector_column_names measures = self.measures (measures.map(&:selectors) + selectors).flatten.map(&:required_column_names).flatten.uniq end |
#skip(*args) ⇒ Object Also known as: offset
52 53 54 55 56 57 |
# File 'lib/activecube/query/cube_query.rb', line 52 def skip *args args.each{|arg| << Limit.new( arg, :skip) } self end |
#slice(*args) ⇒ Object
26 27 28 |
# File 'lib/activecube/query/cube_query.rb', line 26 def slice *args append *args, @slices, Slice, cube.dimensions end |
#take(*args) ⇒ Object Also known as: limit
59 60 61 62 63 64 |
# File 'lib/activecube/query/cube_query.rb', line 59 def take *args args.each{|arg| << Limit.new( arg, :take) } self end |
#to_query ⇒ Object
75 76 77 |
# File 'lib/activecube/query/cube_query.rb', line 75 def to_query Activecube::Processor::Composer.new(self).build_query end |
#to_sql ⇒ Object
79 80 81 |
# File 'lib/activecube/query/cube_query.rb', line 79 def to_sql to_query.to_sql end |
#when(*args) ⇒ Object
34 35 36 |
# File 'lib/activecube/query/cube_query.rb', line 34 def when *args append *args, @selectors, Selector, cube.selectors end |