about summary refs log tree commit diff
diff options
context:
space:
mode:
-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";