Class: Activecube::Query::CubeQuery

Inherits:
Object
  • Object
show all
Includes:
ChainAppender
Defined in:
lib/activecube/query/cube_query.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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 = [], 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

Instance Attribute Details

#cubeObject (readonly)

Returns the value of attribute cube.



18
19
20
# File 'lib/activecube/query/cube_query.rb', line 18

def cube
  @cube
end

#measuresObject (readonly)

Returns the value of attribute measures.



18
19
20
# File 'lib/activecube/query/cube_query.rb', line 18

def measures
  @measures
end

#optionsObject (readonly)

Returns the value of attribute options.



18
19
20
# File 'lib/activecube/query/cube_query.rb', line 18

def options
  @options
end

#selectorsObject (readonly)

Returns the value of attribute selectors.



18
19
20
# File 'lib/activecube/query/cube_query.rb', line 18

def selectors
  @selectors
end

#slicesObject (readonly)

Returns the value of attribute slices.



18
19
20
# File 'lib/activecube/query/cube_query.rb', line 18

def slices
  @slices
end

#sqlObject (readonly)

Returns the value of attribute sql.



18
19
20
# File 'lib/activecube/query/cube_query.rb', line 18

def sql
  @sql
end

#statsObject

Returns the value of attribute stats.



19
20
21
# File 'lib/activecube/query/cube_query.rb', line 19

def stats
  @stats
end

#tablesObject (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|
    options << 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|
    options << Ordering.new(arg, :asc, options = {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|
    options << 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|
    options << Ordering.new(arg, :desc, options = {with_length: true})
  }
  self
end

#join_fieldsObject



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|
    options << 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
  options << 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|
    options << Limit.new( arg, :skip)
  }
  self
end

#orderingsObject



147
148
149
# File 'lib/activecube/query/cube_query.rb', line 147

def orderings
  options.select{|s| s.kind_of? Ordering}
end

#queryObject



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_queryObject



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_sqlObject



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