Module: ActiveRecord::Sharding::Sequencer::ClassMethods

Defined in:
lib/active_record/sharding/sequencer.rb

Instance Method Summary collapse

Instance Method Details

#current_sequence_idObject



29
30
31
# File 'lib/active_record/sharding/sequencer.rb', line 29

def current_sequence_id
  execute_sql "id"
end

#execute_sql(last_insert_id_args) ⇒ Object



40
41
42
43
44
45
46
47
# 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) ⇒ Object



33
34
35
36
37
38
# 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) ⇒ Object



22
23
24
25
26
27
# 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