From 14ed8c65299b5932140b049bd60964445b9604c2 Mon Sep 17 00:00:00 2001 From: Jason Etheridge Date: Thu, 9 Apr 2020 22:31:01 -0400 Subject: [PATCH] seed kmig-init from mig-init --- kmig.d/bin/kmig-init | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 93 insertions(+), 0 deletions(-) create mode 100755 kmig.d/bin/kmig-init diff --git a/kmig.d/bin/kmig-init b/kmig.d/bin/kmig-init new file mode 100755 index 0000000..98f92b5 --- /dev/null +++ b/kmig.d/bin/kmig-init @@ -0,0 +1,93 @@ +#!/usr/bin/perl -w +############################################################################### +=pod + +=head1 NAME + +mig-init - This will add or recreate tracking tables for the B toolset to +the migration schema specified by the MIGSCHEMA environment variable, in the +PostgreSQL database specified by various PG environment variables. + +In practice, you should invoke 'mig env use schema_name' prior to calling +B + +=head1 SYNOPSIS + +B + +B + +=cut + +############################################################################### + +use strict; +use Switch; +use Env qw( + HOME PGHOST PGPORT PGUSER PGDATABASE MIGSCHEMA + MIGBASEWORKDIR MIGBASEGITDIR MIGGITDIR MIGWORKDIR +); +use Pod::Usage; +use DBI; +use FindBin; +my $mig_bin = "$FindBin::Bin/"; +my $mig_sql = $mig_bin . "../mig-sql/init/"; +use lib "$FindBin::Bin/"; +use Mig; + +pod2usage(-verbose => 2) if $ARGV[0]; + +Mig::die_if_no_env_migschema(); + +if (! Mig::check_for_db_migschema()) { + try_to_create_schema(); +} + +if (! Mig::check_db_migschema_for_migration_tables()) { + try_to_init_schema_with_migration_tools(); +} +Mig::die_if_mig_tracking_table_exists(); +Mig::die_if_mig_column_tracking_table_exists(); +loop_through_mig_sql_templates(); + +exit 0; + +############################################################################### + +sub try_to_create_schema { + if ($MIGSCHEMA =~ /[^\w_]/) { + die "$MIGSCHEMA is not suitable for a schema name in PostgreSQL\n"; + } + my $dbh = Mig::db_connect(); + my $rv = $dbh->do("CREATE SCHEMA $MIGSCHEMA;") + || die "Error creating migration schema ($MIGSCHEMA): $!\n"; + print "Created schema $MIGSCHEMA\n"; + Mig::db_disconnect($dbh); +} + +sub try_to_init_schema_with_migration_tools { + Mig::die_if_no_migration_tools(); + print "Calling migration_tools.init() and .build()\n"; + my $dbh = Mig::db_connect(); + my $rv = $dbh->do("SELECT migration_tools.init(" . $dbh->quote($MIGSCHEMA) . ");") + || die "Error running migration_tools.init($MIGSCHEMA): $!\n"; + print "migration_tools.init() finished\n"; + my $rv2 = $dbh->do("SELECT migration_tools.build(" . $dbh->quote($MIGSCHEMA) . ");") + || die "Error running migration_tools.build($MIGSCHEMA): $!\n"; + print "migration_tools.build() finished\n"; + Mig::db_disconnect($dbh); +} + +sub loop_through_mig_sql_templates { + print "Looping through mig-sql/init/ templates\n"; + opendir my $dir, $mig_sql or die "Cannot open directory: $!"; + my @files = sort readdir $dir; + closedir $dir; + foreach my $file (@files) { + if ($file =~ /.sql$/) { + print "executing $file:\n"; + system( $mig_bin . "mig-sql", ('-f',$mig_sql . $file) ) + } + } +} + -- 1.7.2.5