+++ /dev/null
-package Mig;
-
-use strict;
-use Exporter;
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
-
-$VERSION = 1.00;
-@ISA = qw(Exporter);
-@EXPORT = ();
-@EXPORT_OK = qw();
-%EXPORT_TAGS = (
- DEFAULT => []
-);
-
-use DBI;
-use Env qw(
- HOME PGHOST PGPORT PGUSER PGDATABASE MIGSCHEMA
- MIGBASEWORKDIR MIGBASEGITDIR MIGGITDIR MIGWORKDIR
-);
-
-sub db_connect {
- my $dbh;
- if ($PGHOST) {
- $dbh = DBI->connect(
- "dbi:Pg:host=$PGHOST;dbname=$PGDATABASE;port=$PGPORT"
- ,$PGUSER
- ,undef
- ) || die "Unable to connect to $PGHOST:$PGPORT:$PGDATABASE:$PGUSER : $!\n";
- } else {
- $dbh = DBI->connect("dbi:Pg:dbname=$PGDATABASE", "", "") || die "Unable to connect to $PGDATABASE : $!\n";
- }
- $dbh->do("SET search_path TO $MIGSCHEMA, evergreen, pg_catalog, public");
- return $dbh;
-}
-
-sub db_disconnect {
- my $dbh = shift;
- $dbh->disconnect;
-}
-
-sub sql {
- my $sql = shift;
- chomp $sql;
- $sql =~ s/\n//g;
- print "\n$sql\n";
- return $sql;
-}
-
-sub die_if_no_env_migschema {
- die "MIGSCHEMA environment variable not set. See 'mig env help'\n"
- unless $MIGSCHEMA;
-}
-
-sub check_for_db_migschema {
- my $dbh = db_connect();
- my $sth = $dbh->prepare("
- SELECT EXISTS(
- SELECT 1
- FROM pg_namespace
- WHERE nspname = ?
- );"
- );
- my $rv = $sth->execute($MIGSCHEMA)
- || die "Error checking for migration schema ($MIGSCHEMA): $!";
- my @cols = $sth->fetchrow_array;
- $sth->finish;
- my $found;
- if ($cols[0]) {
- print "Found migration schema ($MIGSCHEMA) at $PGHOST:$PGPORT:$PGDATABASE:$PGUSER\n";
- $found = 1;
- } else {
- print "Migration schema ($MIGSCHEMA) does not exist at $PGHOST:$PGPORT:$PGDATABASE:$PGUSER\n";
- $found = 0;
- }
- db_disconnect($dbh);
- return $found;
-}
-
-sub check_db_migschema_for_migration_tables {
- my $found = check_db_migschema_for_specific_table('asset_copy');
- if (!$found) {
- print "Missing migration tables (such as $MIGSCHEMA.asset_copy)\n";
- }
- return $found;
-}
-
-sub check_db_migschema_for_specific_table {
- my $table = shift;
- my $dbh = db_connect();
- my $sth = $dbh->prepare("
- SELECT EXISTS(
- SELECT 1
- FROM information_schema.tables
- WHERE table_schema = " . $dbh->quote( $MIGSCHEMA ) . "
- AND table_name = " . $dbh->quote( $table ) . "
- );"
- );
- my $rv = $sth->execute()
- || die "Error checking migration schema ($MIGSCHEMA) for table ($table): $!";
- my @cols = $sth->fetchrow_array;
- $sth->finish;
- my $found;
- if ($cols[0]) {
- $found = 1;
- } else {
- $found = 0;
- }
- db_disconnect($dbh);
- return $found;
-}
-
-sub check_for_migration_tools {
- my $dbh = db_connect();
- my $sth = $dbh->prepare("
- SELECT EXISTS(
- SELECT 1
- FROM pg_namespace
- WHERE nspname = 'migration_tools'
- );"
- );
- my $rv = $sth->execute()
- || die "Error checking for migration_tools schema: $!";
- my @cols = $sth->fetchrow_array;
- $sth->finish;
- db_disconnect($dbh);
- return $cols[0];
-}
-
-sub die_if_no_migration_tools {
- if (check_for_migration_tools()) {
- print "Found migration_tools schema\n";
- } else {
- die "Missing migration_tools schema\n";
- }
-}
-
-sub check_for_mig_tracking_table {
- my $dbh = db_connect();
- my $sth = $dbh->prepare("
- SELECT EXISTS(
- SELECT 1
- FROM information_schema.tables
- WHERE table_schema = " . $dbh->quote( $MIGSCHEMA ) . "
- AND table_name = 'tracked_file'
- );"
- );
- my $rv = $sth->execute()
- || die "Error checking for table (tracked_file): $!";
- my @cols = $sth->fetchrow_array;
- $sth->finish;
- db_disconnect($dbh);
- return $cols[0];
-}
-
-sub die_if_mig_tracking_table_exists {
- if (check_for_mig_tracking_table()) {
- die "Table $MIGSCHEMA.tracked_file already exists. Bailing init...\n";
- }
-}
-
-sub die_if_mig_tracking_table_does_not_exist {
- if (!check_for_mig_tracking_table()) {
- die "Table $MIGSCHEMA.tracked_file does not exist. Bailing...\n";
- }
-}
-
-sub check_for_mig_column_tracking_table {
- my $dbh = db_connect();
- my $sth = $dbh->prepare("
- SELECT EXISTS(
- SELECT 1
- FROM information_schema.tables
- WHERE table_schema = " . $dbh->quote( $MIGSCHEMA ) . "
- AND table_name = 'tracked_column'
- );"
- );
- my $rv = $sth->execute()
- || die "Error checking for table (tracked_column): $!";
- my @cols = $sth->fetchrow_array;
- $sth->finish;
- db_disconnect($dbh);
- return $cols[0];
-}
-
-sub die_if_mig_column_tracking_table_exists {
- if (check_for_mig_column_tracking_table()) {
- die "Table $MIGSCHEMA.tracked_column already exists. Bailing init...\n";
- }
-}
-
-sub die_if_mig_column_tracking_table_does_not_exist {
- if (!check_for_mig_column_tracking_table()) {
- die "Table $MIGSCHEMA.tracked_column does not exist. Bailing...\n";
- }
-}
-
-sub check_for_tracked_file {
- my $file = shift;
- my $options = shift;
- if (! -e $file) {
- die "file not found: $file\n" unless $options && $options->{'allow_missing'};
- }
- my $dbh = db_connect();
- my $sth = $dbh->prepare("
- SELECT id
- FROM $MIGSCHEMA.tracked_file
- WHERE base_filename = " . $dbh->quote( $file ) . ";"
- );
- my $rv = $sth->execute()
- || die "Error checking table (tracked_file) for base_filename ($file): $!";
- my @cols = $sth->fetchrow_array;
- $sth->finish;
- db_disconnect($dbh);
- return $cols[0];
-}
-
-sub check_for_tracked_column {
- my ($table,$column,$options) = (shift,shift,shift);
- my $dbh = db_connect();
- my $sth = $dbh->prepare("
- SELECT id
- FROM $MIGSCHEMA.tracked_column
- WHERE staged_table = " . $dbh->quote( $table ) . "
- AND staged_column = " . $dbh->quote( $column ) . ";"
- );
- my $rv = $sth->execute()
- || die "Error checking table (tracked_column) for $table.$column: $!";
- my @cols = $sth->fetchrow_array;
- $sth->finish;
- db_disconnect($dbh);
- return $cols[0];
-}
-
-sub status_this_file {
- my $file = shift;
- my $dbh = db_connect();
- my $sth = $dbh->prepare("
- SELECT *
- FROM $MIGSCHEMA.tracked_file
- WHERE base_filename = " . $dbh->quote( $file ) . ";"
- );
- my $rv = $sth->execute()
- || die "Error retrieving data from table (tracked_file) for base_filename ($file): $!";
- my $data = $sth->fetchrow_hashref;
- $sth->finish;
- db_disconnect($dbh);
- return $data;
-}
-
-sub status_this_column {
- my ($table,$column) = (shift,shift);
- my $dbh = db_connect();
- my $sth = $dbh->prepare("
- SELECT *
- FROM $MIGSCHEMA.tracked_column
- WHERE staged_table = " . $dbh->quote( $table ) . "
- AND staged_column = " . $dbh->quote( $column ) . ";"
- );
- my $rv = $sth->execute()
- || die "Error checking table (tracked_column) for $table.$column: $!";
- my $data = $sth->fetchrow_hashref;
- $sth->finish;
- db_disconnect($dbh);
- return $data;
-}
-
-1;
-