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
- #asc_by_integer(*args) ⇒ Object
- #column_names(measures = self.measures) ⇒ Object
- #column_names_required(measures = self.measures) ⇒ Object
- #desc(*args) ⇒ Object
- #desc_by_integer(*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
- #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
72 73 74 75 76 77 78 |
# File 'lib/activecube/query/cube_query.rb', line 72 def asc *args clear_sql args.each{|arg| << Ordering.new( arg, :asc) } self end |
#asc_by_integer(*args) ⇒ Object
80 81 82 83 84 85 86 |
# File 'lib/activecube/query/cube_query.rb', line 80 def asc_by_integer *args clear_sql args.each{|arg| << Ordering.new(arg, :asc, = {with_length: true}) } self end |
#column_names(measures = self.measures) ⇒ Object
131 132 133 |
# File 'lib/activecube/query/cube_query.rb', line 131 def column_names measures = self.measures (measures + slices + selectors).map(&:required_column_names).flatten.uniq end |
#column_names_required(measures = self.measures) ⇒ Object
135 136 137 |
# File 'lib/activecube/query/cube_query.rb', line 135 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 |
#desc_by_integer(*args) ⇒ Object
64 65 66 67 68 69 70 |
# File 'lib/activecube/query/cube_query.rb', line 64 def desc_by_integer *args clear_sql args.each{|arg| << Ordering.new(arg, :desc, = {with_length: true}) } self end |
#join_fields ⇒ Object
143 144 145 |
# File 'lib/activecube/query/cube_query.rb', line 143 def join_fields slices.map(&:group_by_columns).flatten.uniq end |
#limit(*args) ⇒ Object
96 97 98 99 100 101 102 |
# File 'lib/activecube/query/cube_query.rb', line 96 def limit *args clear_sql args.each{|arg| << Limit.new( arg, :take) } self end |
#limit_by(*args) ⇒ Object
104 105 106 107 108 |
# File 'lib/activecube/query/cube_query.rb', line 104 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
88 89 90 91 92 93 94 |
# File 'lib/activecube/query/cube_query.rb', line 88 def offset *args clear_sql args.each{|arg| << Limit.new( arg, :skip) } self end |
#orderings ⇒ Object
147 148 149 |
# File 'lib/activecube/query/cube_query.rb', line 147 def orderings .select{|s| s.kind_of? Ordering} end |
#query ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/activecube/query/cube_query.rb', line 111 def query composed_query = to_query connection = @composed.connection if connection.respond_to?(:with_statistics) connection.with_statistics(stats) do connection.exec_query(composed_query.to_sql) end else connection.exec_query(composed_query.to_sql) end end |
#selector_column_names(measures = self.measures) ⇒ Object
139 140 141 |
# File 'lib/activecube/query/cube_query.rb', line 139 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
123 124 125 |
# File 'lib/activecube/query/cube_query.rb', line 123 def to_query @composed.try(:query) || (@composed = Activecube::Processor::Composer.new(self)).build_query end |
#to_sql ⇒ Object
127 128 129 |
# File 'lib/activecube/query/cube_query.rb', line 127 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 |