package # hide from PAUSE
DBHelper;
use strict;
use warnings;
use Carp 'croak';
# lifted from DBIx::Class' DBICTest.pm
sub _database {
my $self = shift;
my $db_file = shift
or croak 'unspecified database file';
unlink($db_file) if -e $db_file;
unlink($db_file . "-journal") if -e $db_file . "-journal";
mkdir("t/var") unless -d "t/var";
my $dsn = $ENV{"DBICTEST_DSN"} || "dbi:SQLite:${db_file}";
my $dbuser = $ENV{"DBICTEST_DBUSER"} || '';
my $dbpass = $ENV{"DBICTEST_DBPASS"} || '';
# we had some warnings telling us not to explicitly set AutoCommit
# so we've removed it from the connect_info and let everything else do
# what it does best
my @connect_info = ($dsn, $dbuser, $dbpass, { });
return @connect_info;
}
# lifted from DBIx::Class' DBICTest.pm
sub _init_schema {
my $self = shift;
my %args = @_;
my $schema;
my $schema_class = $args{schema_class}
or croak q{'schema_class' unspecified};
my $db_file = $args{db_file}
or croak q{'db_file' unspecified};
my $sql_file = $args{sql_file}
or croak q{'sql_file' unspecified};
my $namespace = $args{namespace}
or croak q{'namespace' unspecified};
if ($args{compose_connection}) {
$schema = ${schema_class}->compose_connection(
$namespace, $self->_database($db_file)
);
} else {
$schema = ${schema_class}->compose_namespace($namespace);
}
if ( !$args{no_connect} ) {
$schema = $schema->connect($self->_database($db_file));
$schema->storage->on_connect_do(['PRAGMA synchronous = OFF']);
}
if ( !$args{no_deploy} ) {
${namespace}->deploy_schema( $schema, $sql_file );
${namespace}->populate_schema( $schema ) if( !$args{no_populate} );
}
return $schema;
}
# lifted from DBIx::Class' DBICTest.pm
sub deploy_schema {
my $self = shift;
my $schema = shift;
my $sql_file = shift
or croak 'no sql file specified';
if ($ENV{"DBICTEST_SQLT_DEPLOY"}) {
return $schema->deploy();
} else {
open IN, $sql_file;
my $sql;
{ local $/ = undef; $sql = <IN>; }
close IN;
($schema->storage->dbh->do($_) || print "Error on SQL: $_\n") for split(/;\n/, $sql);
}
}
1;
# vim: ts=8 sts=4 et sw=4 sr sta