summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2011-01-24 21:31:16 +0100
committerfranck cuny <franck@lumberjaph.net>2011-01-24 21:31:16 +0100
commitd769fb38e0acab6b3ff6c43652a5fc422acafb55 (patch)
tree1a0eb988f96c4466e38c9256b3bc214d0724cd0c /scripts
parentadd version to our schema (diff)
downloadjitterbug-d769fb38e0acab6b3ff6c43652a5fc422acafb55.tar.gz
script to migrate/upgrade dbix schema
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/upgrade_db.pl70
1 files changed, 70 insertions, 0 deletions
diff --git a/scripts/upgrade_db.pl b/scripts/upgrade_db.pl
new file mode 100755
index 0000000..00f6306
--- /dev/null
+++ b/scripts/upgrade_db.pl
@@ -0,0 +1,70 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use lib 'lib';
+
+use YAML::Syck;
+use DBIx::Class::DeploymentHandler;
+use SQL::Translator;
+
+my $config = shift;
+die "need configuration file" unless $config;
+
+my $schema = 'jitterbug::Schema';
+
+my $version = eval "use $schema; $schema->VERSION" or die $@;
+
+print "processing version $version of $schema...\n";
+
+my $jitterbug_conf = LoadFile($config);
+my $dbix_conf = $jitterbug_conf->{plugins}->{DBIC}->{schema};
+my $s = $schema->connect( @{ $dbix_conf->{connect_info} } );
+
+my $dh = DBIx::Class::DeploymentHandler->new(
+ {
+ schema => $s,
+ databases => [qw/ SQLite PostgreSQL MySQL /],
+ sql_translator_args => { add_drop_table => 0, },
+ }
+);
+
+print "generating deployment script\n";
+$dh->prepare_install;
+
+if ( $version > 1 ) {
+ print "generating upgrade script\n";
+ $dh->prepare_upgrade(
+ {
+ from_version => $version - 1,
+ to_version => $version,
+ version_set => [ $version - 1, $version ],
+ }
+ );
+
+ print "generating downgrade script\n";
+ $dh->prepare_downgrade(
+ {
+ from_version => $version,
+ to_version => $version - 1,
+ version_set => [ $version, $version - 1 ],
+ }
+ );
+}
+
+# print "generating graph\n";
+
+# my $trans = SQL::Translator->new(
+# parser => 'SQL::Translator::Parser::DBIx::Class',
+# parser_args => { package => $schema },
+# producer_args => {
+# show_constraints => 1,
+# show_datatypes => 1,
+# show_sizes => 1,
+# show_fk_only => 0,
+# }
+# );
+
+# $trans->translate;
+
+print "done\n";