Module: Switchman::ActiveRecord::StatementCache

Defined in:
lib/switchman/active_record/statement_cache.rb

Defined Under Namespace

Modules: BindMap

Instance Method Summary collapse

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