Class: ActiveRecord::Turntable::Sequencer::Mysql

Inherits:
ActiveRecord::Turntable::Sequencer show all
Defined in:
lib/active_record/turntable/sequencer/mysql.rb

Instance Method Summary collapse

Methods inherited from ActiveRecord::Turntable::Sequencer

build, has_sequencer?, sequence_name, table_name

Constructor Details

#initialize(klass, options = {}) ⇒ Mysql

Returns a new instance of Mysql.



9
10
11
12
# File 'lib/active_record/turntable/sequencer/mysql.rb', line 9

def initialize(klass, options = {})
  @klass = klass
  @options = options
end

Instance Method Details

#current_sequence_value(sequence_name) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/active_record/turntable/sequencer/mysql.rb', line 23

def current_sequence_value(sequence_name)
  conn = @klass.connection.seq.connection
  conn.execute "UPDATE #{@klass.connection.quote_table_name(sequence_name)} SET id=LAST_INSERT_ID(id)"
  res = conn.execute("SELECT LAST_INSERT_ID()")
  current_id = res.first.first.to_i
  return current_id
end

#next_sequence_value(sequence_name) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/active_record/turntable/sequencer/mysql.rb', line 14

def next_sequence_value(sequence_name)
  conn = @klass.connection.seq.connection
  conn.execute "UPDATE #{@klass.connection.quote_table_name(sequence_name)} SET id=LAST_INSERT_ID(id+1)"
  res = conn.execute("SELECT LAST_INSERT_ID()")
  new_id = res.first.first.to_i
  raise SequenceNotFoundError if new_id.zero?
  return new_id
end