Class: OlapReport::Cube::Adapters::Mysql2Adapter

Inherits:
AbstractAdapter show all
Defined in:
lib/olap_report/cube/adapters/mysql2_adapter.rb

Instance Attribute Summary

Attributes inherited from AbstractAdapter

#connection

Instance Method Summary collapse

Methods inherited from AbstractAdapter

#create_aggregated_table, #initialize, #method_missing

Constructor Details

This class inherits a constructor from OlapReport::Cube::Adapters::AbstractAdapter

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class OlapReport::Cube::Adapters::AbstractAdapter

Instance Method Details

#column_name(field, type) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/olap_report/cube/adapters/mysql2_adapter.rb', line 3

def column_name(field, type)
  case type
  when :minute
    "DATE_FORMAT(#{field}, '%Y-%m-%d %H:%i')"
  when :hour
    "DATE_FORMAT(#{field}, '%Y-%m-%d %H')"
  when :day
    "DATE_FORMAT(#{field}, '%Y-%m-%d')"
  when :week
    "DATE_FORMAT(#{field}, '%Y-%U')"
  when :month
    "DATE_FORMAT(#{field}, '%Y-%m')"
  when :year
    "DATE_FORMAT(#{field}, '%Y')"
  end
end

#measure_update_sql(measure) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/olap_report/cube/adapters/mysql2_adapter.rb', line 24

def measure_update_sql(measure)
  case measure.function
  when :avg
    base_measure = measures.values.find{|v| [:sum, :count].include?(v.function)}
    if base_measure
      case base_measure.function
      when :sum
        "#{measure.name} = (#{base_measure.name} + VALUES(#{base_measure.name})) / (#{base_measure.name} / #{measure.name} + VALUES(#{base_measure.name}) / VALUES(#{measure.name}))"
      when :count
        "#{measure.name} = (#{measure.name} * #{base_measure.name} + VALUES(#{measure.name}) * VALUES(#{base_measure.name})) / (#{base_measure.name} + VALUES(#{base_measure.name}))"
      end
    else
      return false
    end
  else
    '%s = %s + VALUES(%s)' % ([measure.name] * 3)
  end
end

#update_aggregated_table(query, update_values_sql) ⇒ Object



20
21
22
# File 'lib/olap_report/cube/adapters/mysql2_adapter.rb', line 20

def update_aggregated_table(query, update_values_sql)
  connection.execute [sql, 'ON DUPLICATE KEY UPDATE', update_values_sql.join(', ')].join(' ')
end