add (unfinished) db migration script
This commit is contained in:
parent
d32c2ad1b9
commit
abf81ea638
1 changed files with 79 additions and 0 deletions
79
migrate.pl
Executable file
79
migrate.pl
Executable file
|
@ -0,0 +1,79 @@
|
||||||
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use 5.020;
|
||||||
|
|
||||||
|
use DBI;
|
||||||
|
|
||||||
|
my $dbname = $ENV{TRAVELYNX_DB_FILE} // 'travelynx.sqlite';
|
||||||
|
my $dbh = DBI->connect( "dbi:SQLite:dbname=${dbname}", q{}, q{} );
|
||||||
|
|
||||||
|
my $has_version_query = $dbh->prepare(qq{
|
||||||
|
select name from sqlite_master
|
||||||
|
where type = 'table' and name = 'schema_version';
|
||||||
|
});
|
||||||
|
|
||||||
|
sub get_schema_version {
|
||||||
|
$has_version_query->execute();
|
||||||
|
my $rows = $has_version_query->fetchall_arrayref;
|
||||||
|
if (@{$rows} == 1) {
|
||||||
|
my $get_version_query = $dbh->prepare(qq{
|
||||||
|
select version from schema_version;
|
||||||
|
});
|
||||||
|
$get_version_query->execute();
|
||||||
|
my $rows = $get_version_query->fetchall_arrayref;
|
||||||
|
if (@{$rows} == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return $rows->[0][0];
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
my @migrations = (
|
||||||
|
# v0 -> v1
|
||||||
|
sub {
|
||||||
|
$dbh->do(qq{
|
||||||
|
begin transaction;
|
||||||
|
});
|
||||||
|
$dbh->do(qq{
|
||||||
|
create table schema_version (
|
||||||
|
version integer primary key
|
||||||
|
);
|
||||||
|
});
|
||||||
|
$dbh->do(qq{
|
||||||
|
insert into schema_version (version) values (1);
|
||||||
|
});
|
||||||
|
$dbh->do(qq{
|
||||||
|
create table new_users (
|
||||||
|
id integer primary key,
|
||||||
|
name char(64) not null unique,
|
||||||
|
status int not null,
|
||||||
|
email char(256),
|
||||||
|
password text,
|
||||||
|
registered_at datetime,
|
||||||
|
last_login datetime
|
||||||
|
);
|
||||||
|
});
|
||||||
|
my $get_users_query = $dbh->prepare(qq{
|
||||||
|
select * from users;
|
||||||
|
});
|
||||||
|
$dbh->do(qq{
|
||||||
|
commit;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
my $schema_version = get_schema_version();
|
||||||
|
|
||||||
|
say "Found travelynx schema v${schema_version}";
|
||||||
|
|
||||||
|
if ($schema_version == @migrations) {
|
||||||
|
say "Database schema is up-to-date";
|
||||||
|
}
|
||||||
|
|
||||||
|
for my $i ($schema_version .. $#migrations) {
|
||||||
|
printf("Updating to v%d\n", $i + 1);
|
||||||
|
$migrations[$i]();
|
||||||
|
}
|
Loading…
Reference in a new issue