module Que::Scheduler::Migrations

Constants

AUDIT_TABLE_NAME
MAX_VERSION
TABLE_COMMENT

Public Class Methods

audit_table_exists?() click to toggle source
# File lib/que/scheduler/migrations.rb, line 37
        def audit_table_exists?
          result = Que::Scheduler::VersionSupport.execute(<<-SQL)
            SELECT * FROM information_schema.tables WHERE table_name = '#{AUDIT_TABLE_NAME}';
          SQL
          result.any?
        end
db_version() click to toggle source
# File lib/que/scheduler/migrations.rb, line 29
def db_version
  if audit_table_exists?
    return Que::Scheduler::VersionSupport.execute(TABLE_COMMENT).first[:description].to_i
  end

  Que::Scheduler::Db.count_schedulers.zero? ? 0 : 1
end
migrate!(version:) click to toggle source
# File lib/que/scheduler/migrations.rb, line 15
def migrate!(version:)
  # Like que, Do not migrate test DBs.
  return if defined?(Que::Testing)

  Que::Scheduler::Db.transaction do
    current = db_version
    if current < version
      migrate_up(current, version)
    elsif current > version
      migrate_down(current, version)
    end
  end
end
reenqueue_scheduler_if_missing() click to toggle source

This method is only intended for use in squashed migrations

# File lib/que/scheduler/migrations.rb, line 45
def reenqueue_scheduler_if_missing
  Que::Scheduler::SchedulerJob.enqueue if Que::Scheduler::Db.count_schedulers.zero?
end

Private Class Methods

execute_step(number, direction) click to toggle source
# File lib/que/scheduler/migrations.rb, line 61
def execute_step(number, direction)
  sql = IO.read("#{__dir__}/migrations/#{number}/#{direction}.sql")
  Que::Scheduler::VersionSupport.execute(sql)
  return unless audit_table_exists?

  Que::Scheduler::VersionSupport.execute(
    "COMMENT ON TABLE que_scheduler_audit IS '#{direction == :up ? number : number - 1}'"
  )
end
migrate_down(current, version) click to toggle source
# File lib/que/scheduler/migrations.rb, line 56
def migrate_down(current, version)
  current += 1
  execute_step((current -= 1), :down) until current == version + 1
end
migrate_up(current, version) click to toggle source
# File lib/que/scheduler/migrations.rb, line 51
def migrate_up(current, version)
  Que::Scheduler::SchedulerJob.enqueue if current.zero? # Version 1 does not use SQL
  execute_step((current += 1), :up) until current == version
end