module ActiveRecord::Sharding::Sequencer::ClassMethods

Public Instance Methods

current_sequence_id() click to toggle source
# File lib/active_record/sharding/sequencer.rb, line 29
def current_sequence_id
  execute_sql "id"
end
execute_sql(last_insert_id_args) click to toggle source
# File lib/active_record/sharding/sequencer.rb, line 40
def execute_sql(last_insert_id_args)
  sequencer_klass = sequencer_repository.fetch(sequencer_name)
  connection = sequencer_klass.connection
  connection.execute "UPDATE `#{sequencer_config.table_name}` SET id = LAST_INSERT_ID(#{last_insert_id_args})", sequencer_klass.name
  res = connection.execute "SELECT LAST_INSERT_ID()", sequencer_klass.name
  new_id = res.first.first.to_i
  new_id
end
next_sequence_id(offset = 1) click to toggle source
# File lib/active_record/sharding/sequencer.rb, line 33
def next_sequence_id(offset = 1)
  raise NegativeNumberOffsetError if offset < 1
  sequence_id = execute_sql "id +#{offset}"
  raise ActiveRecord::Sharding::InvalidSequenceId if sequence_id.zero?
  sequence_id
end
use_sequencer(name) click to toggle source
# File lib/active_record/sharding/sequencer.rb, line 22
def use_sequencer(name)
  self.sequencer_name = name
  self.sequencer_config = ActiveRecord::Sharding.config.fetch_sequencer_config name
  self.sequencer_repository = ActiveRecord::Sharding::SequencerRepository.new sequencer_config, self
  self.abstract_class = true
end