39 行
806 B
Crystal
39 行
806 B
Crystal
abstract class Invidious::Database::Migration
|
|
macro inherited
|
|
Migrator.migrations << self
|
|
end
|
|
|
|
@@version : Int64?
|
|
|
|
def self.version(version : Int32 | Int64)
|
|
@@version = version.to_i64
|
|
end
|
|
|
|
getter? completed = false
|
|
|
|
def initialize(@db : DB::Database)
|
|
end
|
|
|
|
abstract def up(conn : DB::Connection)
|
|
|
|
def migrate
|
|
# migrator already ignores completed migrations
|
|
# but this is an extra check to make sure a migration doesn't run twice
|
|
return if completed?
|
|
|
|
@db.transaction do |txn|
|
|
up(txn.connection)
|
|
track(txn.connection)
|
|
@completed = true
|
|
end
|
|
end
|
|
|
|
def version : Int64
|
|
@@version.not_nil!
|
|
end
|
|
|
|
private def track(conn : DB::Connection)
|
|
conn.exec("INSERT INTO #{Migrator::MIGRATIONS_TABLE} (version) VALUES ($1)", version)
|
|
end
|
|
end
|