--- /dev/null
+-- This file is intended to be called by eg_db_config.pl
+
+-- If manually calling:
+-- Connect to the postgres database initially
+-- Specify the database to create as -vdb_name=DATABASE
+-- Specify the postgres contrib directory as -vcontrib_dir=CONTRIBDIR
+-- You can get the contrib directory using pg_config --sharedir and adding a /contrib to it
+
+-- NOTE: This file does not do transactions
+-- This is intentional. Please do not wrap in BEGIN/COMMIT.
+DROP DATABASE IF EXISTS :db_name;
+
+CREATE DATABASE :db_name TEMPLATE template0 ENCODING 'UNICODE' LC_COLLATE 'C' LC_CTYPE 'C';
+
+\connect :db_name
+
+CREATE LANGUAGE plperlu;
+
+CREATE EXTENSION tablefunc;
+CREATE EXTENSION xml2;
+CREATE EXTENSION hstore;
+CREATE EXTENSION intarray;
my ($dbhost, $dbport, $dbname, $dbuser, $dbpw, $help, $admin_user, $admin_pw, $load_all, $load_concerto);
my $config_file = '';
-my $build_db_sh = '';
+my $schema_dir = '';
my $offline_file = '';
my $prefix = '';
my $sysconfdir = '';
my $script_dir = abs_path(dirname($0));
# Set the location and base file for sample data
-my $_sample_dir = abs_path(File::Spec->catdir($script_dir, '../../tests/datasets/sql/'));
-my $_sample_all = 'load_all.sql';
-my $_sample_concerto = 'load_concerto.sql';
+my $_sample_dir = abs_path(File::Spec->catdir($script_dir, '../sql/test-data/'));
=over
}
}
-=item create_schema() - Creates the database schema by calling build-db.sh
+=item sqitch_deploy() - Execute sqitch deployment script in current directory.
=cut
-sub create_schema {
+
+sub sqitch_deploy {
my $settings = shift;
+ $ENV{PGPASSWORD} = $settings->{pw};
+
+ my $cmd = sprintf(
+ 'sqitch --db-host %s --db-port %s --db-name %s --db-user %s deploy',
+ $settings->{host}, $settings->{port},
+ $settings->{db}, $settings->{user}
+ );
+
+ # assumes non-verbose mode
+ $cmd = "$cmd 2>&1 | grep -v NOTICE | grep -v '^INSERT'";
- chdir(dirname($build_db_sh));
- my $cmd = File::Spec->catfile('.', basename($build_db_sh)) . " " .
- $settings->{host} ." ". $settings->{port} ." ".
- $settings->{db} ." ". $settings->{user} ." ".
- $settings->{pw};
system($cmd);
+}
+
+=item create_schema() - Creates the database schema by calling build-db.sh
+=cut
+sub create_schema {
+ my $settings = shift;
+ chdir($schema_dir);
+ sqitch_deploy($settings);
chdir($script_dir);
}
=cut
sub load_sample_data {
my $settings = shift;
-
- my $load_script = $_sample_all;
chdir($_sample_dir);
- if ($load_concerto) {
- $load_script = $_sample_concerto;
- }
- $ENV{'PGUSER'} = $settings->{user};
- $ENV{'PGPASSWORD'} = $settings->{pw};
- $ENV{'PGPORT'} = $settings->{port};
- $ENV{'PGHOST'} = $settings->{host};
- $ENV{'PGDATABASE'} = $settings->{db};
- my @output = `psql -f $load_script 2>&1`;
- print @output;
+ # TODO: support load $load_concerto -- does anyone use it?
+ # To do this, --log-only load most of the sample data.
+ sqitch_deploy($settings);
chdir($cwd);
}
"create-offline" => \$offline,
"update-config" => \$uconfig,
"config-file=s" => \$config_file,
- "build-db-file=s" => \$build_db_sh,
+ "schema-dir=s" => \$schema_dir,
"pg-contrib-dir=s" => \$pg_contribdir,
"create-db-sql-contribs=s" => \$create_db_sql_contribs,
"create-db-sql-extensions=s" => \$create_db_sql_extensions,
$prefix = $temp[0];
}
-if (!$build_db_sh) {
- $build_db_sh = File::Spec->catfile($script_dir, '../sql/Pg/build-db.sh');
+if (!$schema_dir) {
+ $schema_dir = File::Spec->catdir($script_dir, '../sql/schema/');
}
if (!$pg_contribdir) {
}
if (!$create_db_sql_extensions) {
- $create_db_sql_extensions = File::Spec->catfile($script_dir, '../sql/Pg/create_database_extensions.sql');
+ $create_db_sql_extensions = File::Spec->catfile($script_dir,
+ '../sql/schema/tools/create_database_extensions.sql');
}
if (!$offline_file) {
$offline_file = File::Spec->catfile($sysconfdir, 'offline-config.pl');
}
-unless (-e $build_db_sh) { die "Error: $build_db_sh does not exist. \n"; }
+unless (-e $schema_dir) { die "Error: $schema_dir does not exist. \n"; }
unless (-e $config_file) { die "Error: $config_file does not exist. \n"; }
if ($uconfig) { update_config(\@services, \%settings); }