57 lines
1.6 KiB
Perl
57 lines
1.6 KiB
Perl
use v5.36;
|
|
use Test::More;
|
|
|
|
plan skip_all => $@ if !eval { require FU::PG; } && $@ =~ /Unable to load libpq/;
|
|
plan skip_all => 'Please set FU_TEST_DB to a PostgreSQL connection string to run these tests' if !$ENV{FU_TEST_DB};
|
|
|
|
sub okerr($sev, $act, $msg) {
|
|
is ref $@, 'FU::PG::error';
|
|
is $@->{severity}, $sev;
|
|
is $@->{action}, $act;
|
|
like "$@", $msg;
|
|
}
|
|
|
|
ok !eval { FU::PG->connect("invalid") };
|
|
okerr FATAL => connect => qr/missing "=" after "invalid"/;
|
|
|
|
ok FU::PG::lib_version() > 100000;
|
|
|
|
my $conn = FU::PG->connect($ENV{FU_TEST_DB});
|
|
$conn->_debug_trace(0);
|
|
|
|
is ref $conn, 'FU::PG::conn';
|
|
ok $conn->server_version > 100000;
|
|
is $conn->lib_version, FU::PG::lib_version();
|
|
|
|
ok !eval { $conn->exec('COPY (SELECT 1) TO STDOUT'); };
|
|
okerr FATAL => exec => qr/unexpected status code/;
|
|
|
|
ok !eval { $conn->exec('SELEXT'); };
|
|
okerr ERROR => exec => qr/syntax error/;
|
|
|
|
ok !defined $conn->exec('');
|
|
is $conn->exec('SELECT 1'), 1;
|
|
|
|
ok !eval { $conn->q('SELEXT')->params; };
|
|
okerr ERROR => prepare => qr/syntax error/;
|
|
|
|
{
|
|
my $st = $conn->q('SELECT 1');
|
|
is_deeply $st->params, [];
|
|
is_deeply $st->columns, [{ name => '?column?', oid => 23 }];
|
|
is $conn->exec('SELECT 1 FROM pg_prepared_statements'), 1;
|
|
}
|
|
|
|
is $conn->exec('SELECT 1 FROM pg_prepared_statements'), 0;
|
|
|
|
{
|
|
my $st = $conn->q("SELECT \$1::int AS a, \$2::char(5) AS \"\x{1F603}\"");
|
|
undef $conn; # statement keeps the connection alive
|
|
is_deeply $st->params, [ { oid => 23 }, { oid => 1042 } ];
|
|
is_deeply $st->columns, [
|
|
{ oid => 23, name => 'a' },
|
|
{ oid => 1042, name => "\x{1F603}", typemod => 9 },
|
|
];
|
|
}
|
|
|
|
done_testing;
|