Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 12 additions & 9 deletions lib/DB/Migration/Simple.rakumod
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@ class DB::Migration::Simple {
has $.dbh is required;
has $.migration-file is required;
has $.migration-table-name = 'db-migrations-simple-meta';
has $.keycolumn = "key";
has %!cfg = self!read-config();

method current-version() {
try {
my $sth = $!dbh.prepare(qq:to/END-STATEMENT/);
SELECT value FROM "$!migration-table-name"
WHERE key = 'current-version'
SELECT value FROM $!dbh.quote($!migration-table-name, :as-id)
WHERE $!keycolumn = 'current-version'
END-STATEMENT
$sth.execute();
my @rows = $sth.allrows();
Expand Down Expand Up @@ -41,7 +42,7 @@ class DB::Migration::Simple {

self!debug("$!verbose migrating '$direction' from version '$current-version' to version '$target-version'");

$!dbh.do('BEGIN TRANSACTION');
$!dbh.do('BEGIN');

my @versions = $direction eq 'up'
?? ($current-version + 1 ... $target-version)
Expand Down Expand Up @@ -69,9 +70,9 @@ class DB::Migration::Simple {
}
}
$!dbh.do(qq:to/END-STATEMENT/);
UPDATE "$!migration-table-name"
UPDATE $!dbh.quote($!migration-table-name, :as-id)
SET value = '$target-version'
WHERE key = 'current-version'
WHERE $!keycolumn = 'current-version'
END-STATEMENT
$!dbh.do('COMMIT');
return $target-version;
Expand Down Expand Up @@ -110,15 +111,17 @@ class DB::Migration::Simple {

method !init-meta-table() {
self!debug("initializing $!migration-table-name");
$!dbh.do(qq:to/END-STATEMENT/);
CREATE TABLE IF NOT EXISTS "$!migration-table-name" (
key TEXT UNIQUE NOT NULL,
my $query = qq:to/END-STATEMENT/;
CREATE TABLE IF NOT EXISTS $!dbh.quote($!migration-table-name, :as-id) (
$!keycolumn TEXT UNIQUE NOT NULL,
value INTEGER NOT NULL CHECK (value >= 0)
)
END-STATEMENT
say $query;
$!dbh.do($query);

$!dbh.do(qq:to/END-STATEMENT/);
INSERT INTO "$!migration-table-name"
INSERT INTO $!dbh.quote($!migration-table-name, :as-id)
VALUES ('current-version', 0)
END-STATEMENT
self!debug("set initial version to 0");
Expand Down