diff --git a/lib/Vroom/Constants.pm b/lib/Vroom/Constants.pm index 8dd8234..7b213a8 100644 --- a/lib/Vroom/Constants.pm +++ b/lib/Vroom/Constants.pm @@ -4,7 +4,10 @@ use strict; use warnings; use base 'Exporter'; -our @EXPORT = qw/COMPONENTS MOH JS_STRINGS API_ACTIONS/; +our @EXPORT = qw/DB_VERSION COMPONENTS MOH JS_STRINGS API_ACTIONS/; + +# Database version +use constant DB_VERSION => 1; # Components used to generate the credits part use constant COMPONENTS => { diff --git a/scripts/db_upgrade.pl b/scripts/db_upgrade.pl new file mode 100644 index 0000000..e94290f --- /dev/null +++ b/scripts/db_upgrade.pl @@ -0,0 +1,60 @@ +#!/usr/bin/env perl + +use warnings; +use strict; + +use File::Basename; +use lib dirname($0) . '/../lib'; +use DBI; +use Config::Simple; +use Vroom::Constants; +use utf8; + + +# Load and parse global config file +my $cfg = new Config::Simple(); +$cfg->read(dirname($0) . '/../conf/settings.ini'); +my $config = $cfg->vars(); + +# Open a handle to the database server +my $dbh = DBI->connect( + $config->{'database.dsn'}, + $config->{'database.user'}, + $config->{'database.password'}, + { + mysql_enable_utf8 => 1, + PrintError => 0, + RaiseError => 1, + ShowErrorStatement => 1, + } +) || die "Cannot connect to the database: " . DBI->errstr . "\n"; + +# Check current schema version +my $sth = eval { + $dbh->prepare('SELECT `value` + FROM `config` + WHERE `key`=\'schema_version\''); +}; +if ($@){ + die "DB Error: $@\n"; +} +$sth->execute; +if ($sth->err){ + die "DB Error: " . $sth->errstr . " (code: " . $sth->err . ")\n"; +} +my $cur_ver; +$sth->bind_columns(\$cur_ver); +$sth->fetch; + +print "Current version is $cur_ver\n"; + +if ($cur_ver > Vroom::Constants::DB_VERSION){ + die "Database version is unknown, sorry (current version is $cur_ver when it should be " . + Vroom::Constants::DB_VERSION . ")\n"; +} + +if ($cur_ver == Vroom::Constants::DB_VERSION){ + print "Database is up to date, nothing to do\n"; + exit 0; +} +