Module: ActiveRecord::Sharding::Sequencer::ClassMethods
- Defined in:
- lib/active_record/sharding/sequencer.rb
Instance Method Summary collapse
- #current_sequence_id ⇒ Object
- #execute_sql(last_insert_id_args) ⇒ Object
- #next_sequence_id(offset = 1) ⇒ Object
- #use_sequencer(name) ⇒ Object
Instance Method Details
#current_sequence_id ⇒ Object
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 |