Class: RedisCounters::Dumpers::Destination
- Inherits:
-
Object
- Object
- RedisCounters::Dumpers::Destination
- Extended by:
- Forwardable
- Includes:
- RedisCounters::Dumpers::Dsl::Destination
- Defined in:
- lib/redis_counters/dumpers/destination.rb
Overview
Класс представляет конечную точку сохранения данных счетчика.
Описывает в какую модель (таблицу), какие поля имеющиеся в распоряжении дампера, должны быть сохранены и каким образом.
По сути, мерджит указанные поля из temp - таблицы, дампера в указанную таблицу.
Может использоваться как напрямую так и с помощью DSL (см. модуль RedisCounters::Dumpers::Dsl::Destination).
Constant Summary collapse
- VALUE_DELIMITER =
','.freeze
Instance Attribute Summary collapse
-
#conditions ⇒ Object
Список дополнительных условий, которые применяются при обновлении целевой таблицы, Array of String.
-
#engine ⇒ Object
Ссылка на родительский движек - дампер.
-
#fields ⇒ Object
Список полей, из доступных дамперу, которые необходимо сохранить, Array.
-
#fields_map ⇒ Object
Карта полей - карта псевдонимов полей, Hash.
-
#group_by ⇒ Object
Список полей по которым будет группироваться таблицы с исходными данным, Array.
-
#increment_fields ⇒ Object
Список полей, которые будет инкрементированы при обновлении существующей записи, Array.
-
#key_fields ⇒ Object
Список полей, по комбинации которых, будет происходить определение существования записи, при мердже данных, Array.
-
#matching_expr ⇒ Object
Public: Опциональное выражение для определения одинаковых записей в исходной (source) и целевой (target) таблицах.
-
#model ⇒ Object
Модель, в таблицу, которой будет производится мердж данных, AR::Model.
-
#source_conditions ⇒ Object
Список дополнительных условий, которые применяются для выборки из source-таблицы для обновления target, Array of String.
-
#value_delimiter ⇒ Object
Разделитель значений, String.
Instance Method Summary collapse
-
#initialize(engine) ⇒ Destination
constructor
A new instance of Destination.
- #merge ⇒ Object
Constructor Details
#initialize(engine) ⇒ Destination
Returns a new instance of Destination.
84 85 86 87 88 89 |
# File 'lib/redis_counters/dumpers/destination.rb', line 84 def initialize(engine) @engine = engine @fields_map = HashWithIndifferentAccess.new @conditions = [] @source_conditions = [] end |
Instance Attribute Details
#conditions ⇒ Object
Список дополнительных условий, которые применяются при обновлении целевой таблицы, Array of String. Каждое условие представляет собой строку - часть SQL выражения, которое может включать именованные параметры из числа доступных в хеше оббщих параметров дампера: engine.common_params. Условия соеденяются через AND.
60 61 62 |
# File 'lib/redis_counters/dumpers/destination.rb', line 60 def conditions @conditions end |
#engine ⇒ Object
Ссылка на родительский движек - дампер.
24 25 26 |
# File 'lib/redis_counters/dumpers/destination.rb', line 24 def engine @engine end |
#fields ⇒ Object
Список полей, из доступных дамперу, которые необходимо сохранить, Array.
30 31 32 |
# File 'lib/redis_counters/dumpers/destination.rb', line 30 def fields @fields end |
#fields_map ⇒ Object
Карта полей - карта псевдонимов полей, Hash. Названия полей в целевой таблице, могут отличаться от названий полей дампера. Для сопоставления полей целевой таблицы и дампера, необходимо заполнить карту соответствия. Карта, заполняется только для тех полей, названия которых отличаются. Во всех свойствах, содержащий указания полей: fields, key_fields, increment_fields, conditions используются имена конечных полей целевой таблицы.
Example:
fields_map = {:pages => :value, :date => :start_month_date}
Означает, что целевое поле :pages, указывает на поле :value, дампера, а целевое поле :date, указывает на поле :start_month_date, дампера.
51 52 53 |
# File 'lib/redis_counters/dumpers/destination.rb', line 51 def fields_map @fields_map end |
#group_by ⇒ Object
Список полей по которым будет группироваться таблицы с исходными данным, Array
54 55 56 |
# File 'lib/redis_counters/dumpers/destination.rb', line 54 def group_by @group_by end |
#increment_fields ⇒ Object
Список полей, которые будет инкрементированы при обновлении существующей записи, Array.
37 38 39 |
# File 'lib/redis_counters/dumpers/destination.rb', line 37 def increment_fields @increment_fields end |
#key_fields ⇒ Object
Список полей, по комбинации которых, будет происходить определение существования записи, при мердже данных, Array.
34 35 36 |
# File 'lib/redis_counters/dumpers/destination.rb', line 34 def key_fields @key_fields end |
#matching_expr ⇒ Object
Public: Опциональное выражение для определения одинаковых записей в исходной (source) и целевой (target) таблицах. Эту опцию имеет смысл использовать если например нужно добавить функцию на какую-нибудь колонку, например:
matching_expr <<-SQL
(source.company_id, source.date, coalesce(source.referer, '')) =
(target.company_id, target.date, coalesce(target.referer, ''))
SQL
Returns String
79 80 81 |
# File 'lib/redis_counters/dumpers/destination.rb', line 79 def matching_expr @matching_expr end |
#model ⇒ Object
Модель, в таблицу, которой будет производится мердж данных, AR::Model.
27 28 29 |
# File 'lib/redis_counters/dumpers/destination.rb', line 27 def model @model end |
#source_conditions ⇒ Object
Список дополнительных условий, которые применяются для выборки из source-таблицы для обновления target, Array of String. Каждое условие представляет собой строку - часть SQL выражения, которое может включать именованные параметры из числа доступных в хеше общих параметров дампера: engine.common_params. Условия соединяются через AND.
67 68 69 |
# File 'lib/redis_counters/dumpers/destination.rb', line 67 def source_conditions @source_conditions end |
#value_delimiter ⇒ Object
Разделитель значений, String.
82 83 84 |
# File 'lib/redis_counters/dumpers/destination.rb', line 82 def value_delimiter @value_delimiter end |
Instance Method Details
#merge ⇒ Object
91 92 93 94 95 |
# File 'lib/redis_counters/dumpers/destination.rb', line 91 def merge sql = generate_query sql = model.send(:sanitize_sql, [sql, engine.common_params]) connection.execute sql end |