#!/usr/bin/env perl
maybe_plan(
undef
,
'DBD::Pg'
);
my
(
$pgsql
,
$ddl
,
$ret
,
$dsn
,
$user
,
$pass
);
if
(
$ENV
{DBICTEST_PG_DSN}) {
(
$dsn
,
$user
,
$pass
) =
map
{
$ENV
{
"DBICTEST_PG_$_"
} }
qw(DSN USER PASS)
;
}
else
{
no
warnings
'once'
;
maybe_plan(
undef
,
'Test::PostgreSQL'
);
$pgsql
= Test::PostgreSQL->new
or plan
skip_all
=>
"Can't create test database: $Test::PostgreSQL::errstr"
;
$dsn
=
$pgsql
->dsn;
};
my
$dbh
= DBI->
connect
(
$dsn
,
$user
,
$pass
, {
RaiseError
=> 1,
AutoCommit
=> 1 });
$dbh
->
do
(
'SET client_min_messages=warning'
);
my
$source_ddl
=
<<DDL;
CREATE TABLE sqlt_test_foo (
pk SERIAL PRIMARY KEY,
bar VARCHAR(10)
);
DDL
ok(
$ret
=
$dbh
->
do
(
$source_ddl
),
"create table"
);
ok(
$ret
=
$dbh
->
do
(
q| INSERT INTO sqlt_test_foo (bar) VALUES ('buzz') |
),
"insert data"
);
cmp_ok(
$ret
,
'=='
, 1,
"one row inserted"
);
my
$target_ddl
=
<<DDL;
CREATE TABLE sqlt_test_fluff (
pk SERIAL PRIMARY KEY,
biff VARCHAR(10)
);
DDL
my
$source_sqlt
= SQL::Translator->new(
no_comments
=> 1,
parser
=>
'SQL::Translator::Parser::PostgreSQL'
,
)->translate(\
$source_ddl
);
my
$target_sqlt
= SQL::Translator->new(
no_comments
=> 1,
parser
=>
'SQL::Translator::Parser::PostgreSQL'
,
)->translate(\
$target_ddl
);
my
$table
=
$target_sqlt
->get_table(
'sqlt_test_fluff'
);
$table
->extra(
renamed_from
=>
'sqlt_test_foo'
);
my
$field
=
$table
->get_field(
'biff'
);
$field
->extra(
renamed_from
=>
'bar'
);
my
@diff
= SQL::Translator::Diff->new({
output_db
=>
'PostgreSQL'
,
source_schema
=>
$source_sqlt
,
target_schema
=>
$target_sqlt
,
})->compute_differences->produce_diff_sql;
foreach
my
$line
(
@diff
) {
$line
=~ s/\n//g;
next
if
$line
=~ /^--/;
lives_ok {
$dbh
->
do
(
$line
) }
"$line"
;
}
ok (
$ret
=
$dbh
->selectall_arrayref(
q(SELECT biff FROM sqlt_test_fluff)
, {
Slice
=> {} }),
"query DB for data"
);
cmp_ok(
scalar
(
@$ret
),
'=='
, 1,
"Got 1 row"
);
cmp_ok(
$ret
->[0]->{biff},
'eq'
,
'buzz'
,
"col biff has value buzz"
);
undef
$dbh
if
$pgsql
;
END {
if
(
$dbh
&& !
$pgsql
) {
$dbh
->
do
(
"drop table if exists sqlt_test_$_"
)
foreach
qw(foo fluff)
;
}
}
done_testing;