module ActiveRecord::Sharding::DatabaseTasks::TasksForSingleSequencerTask

Public Instance Methods

create_sequencer_database(args) click to toggle source
# File lib/active_record/sharding/database_tasks.rb, line 184
def create_sequencer_database(args)
  exec_task_for_sequencer_database "create", args
end
create_table_sequencer_database(args) click to toggle source
# File lib/active_record/sharding/database_tasks.rb, line 192
def create_table_sequencer_database(args)
  sequencer = sequencer_or_error "create_table", args
  create_table_sql = "CREATE TABLE #{sequencer.table_name} (id BIGINT unsigned NOT NULL DEFAULT 0) ENGINE=MyISAM"
  execute sequencer.connection_name.to_s, create_table_sql
end
drop_sequencer_database(args) click to toggle source
# File lib/active_record/sharding/database_tasks.rb, line 188
def drop_sequencer_database(args)
  exec_task_for_sequencer_database "drop", args
end
insert_initial_record_sequencer_database(args) click to toggle source
# File lib/active_record/sharding/database_tasks.rb, line 198
def insert_initial_record_sequencer_database(args)
  sequencer = sequencer_or_error "insert_initial_record", args
  records_count = sequencer_records_count sequencer

  if records_count == 0
    insert_initial_record_sql = "INSERT INTO #{sequencer.table_name} VALUES (0)"
    execute sequencer.connection_name.to_s, insert_initial_record_sql
    puts "Insert initial sequencer record into #{sequencer.table_name} table."
  else
    puts "Exist sequencer record in #{sequencer.table_name} table."
  end
end

Private Instance Methods

exec_task_for_sequencer_database(task_name, args) click to toggle source
# File lib/active_record/sharding/database_tasks.rb, line 224
def exec_task_for_sequencer_database(task_name, args)
  sequencer = sequencer_or_error task_name, args
  __send__ task_name, sequencer.connection_name.to_s
end
sequencer_name_or_error(task_name, args) click to toggle source
# File lib/active_record/sharding/database_tasks.rb, line 237
          def sequencer_name_or_error(task_name, args)
            unless sequencer_name = args[:sequencer_name]
              # rubocop:disable Metrics/LineLength
              $stderr.puts <<-MSG
Missing sequencer_name. Find sequencer_name via `rake active_record:sharding:info` then call `rake "active_record:sharding:sequencer#{task_name}[$sequencer_name]"`.
          MSG
              exit
              # rubocop:enable Metrics/LineLength
            end
            sequencer_name
          end
sequencer_or_error(task_name, args) click to toggle source
# File lib/active_record/sharding/database_tasks.rb, line 229
def sequencer_or_error(task_name, args)
  sequencer_name = sequencer_name_or_error task_name, args
  fetch_sequencer_config sequencer_name.to_sym
rescue KeyError
  $stderr.puts %(sequencer name "#{sequencer_name}" not found.)
  exit
end
sequencer_records_count(sequencer) click to toggle source
# File lib/active_record/sharding/database_tasks.rb, line 213
def sequencer_records_count(sequencer)
  count_sql = "SELECT COUNT(*) FROM #{sequencer.table_name}"
  count_result = execute sequencer.connection_name.to_s, count_sql

  if count_result
    count_result.first.first.to_i
  else
    0
  end
end