Module: Switchman::ActiveRecord::StatementCache
- Defined in:
- lib/switchman/active_record/statement_cache.rb
Defined Under Namespace
Modules: BindMap
Instance Method Summary collapse
-
#execute(params, klass, connection) ⇒ Object
since the StatememtCache is only implemented for basic relations in AR::Base#find, AR::Base#find_by and AR::Association#get_records, we can make some assumptions about the shard source (e.g. infer from the primary key or use the current shard).
Instance Method Details
#execute(params, klass, connection) ⇒ Object
since the StatememtCache is only implemented for basic relations in AR::Base#find, AR::Base#find_by and AR::Association#get_records, we can make some assumptions about the shard source (e.g. infer from the primary key or use the current shard)
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/switchman/active_record/statement_cache.rb', line 9 def execute(params, klass, connection) target_shard = nil if primary_index = bind_map.primary_value_index primary_value = params[primary_index] target_shard = Shard.local_id_for(primary_value)[1] end current_shard = Shard.current(klass.shard_category) target_shard ||= current_shard bind_values = bind_map.bind(params, current_shard, target_shard || current_shard) sql = query_builder.sql_for(bind_values, connection) target_shard.activate(klass.shard_category) do klass.find_by_sql(sql, bind_values) end end |