pg: Support array types
That wasn't quite as painful as I had anticipated. \o/
This commit is contained in:
parent
b6517cf05a
commit
7d71e446d0
4 changed files with 323 additions and 48 deletions
|
|
@ -15,6 +15,9 @@ like $@, qr/Unable to use type/;
|
|||
$txn->exec("CREATE TYPE fupg_test_enum AS ENUM('a', 'b', 'ccccccccccccccccccc')");
|
||||
is $txn->q("SELECT 'a'::fupg_test_enum")->val, 'a';
|
||||
is $txn->q('SELECT $1::fupg_test_enum', 'ccccccccccccccccccc')->val, 'ccccccccccccccccccc';
|
||||
|
||||
is_deeply $txn->q("SELECT '{a,b,null}'::fupg_test_enum[]")->val, ['a','b',undef];
|
||||
is $txn->q('SELECT $1::fupg_test_enum[]', ['a','b',undef])->text_results->val, '{a,b,NULL}';
|
||||
}
|
||||
|
||||
done_testing;
|
||||
|
|
|
|||
23
t/pgtypes.t
23
t/pgtypes.t
|
|
@ -22,7 +22,7 @@ sub v($type, $p_in, @args) {
|
|||
{
|
||||
my $res = $conn->q("SELECT \$1::$type", $s_in)->text_params->val;
|
||||
ok is_bool($res), "$test is bool" if $type eq 'bool';
|
||||
ok created_as_number($res), "$test is number" if $type =~ /^(int|float)/;
|
||||
ok created_as_number($res), "$test is number" if $type =~ /^(int|float)\d/;
|
||||
is_deeply $res, $p_out, "$test text->bin";
|
||||
}
|
||||
{
|
||||
|
|
@ -94,4 +94,25 @@ f jsonb => \1;
|
|||
v jsonpath => $_ for ('$."key"', '$."a[*]"?(@ > 2)');
|
||||
f jsonpath => $_ for ('', 'hello world');
|
||||
|
||||
v 'int[]', [], undef, '{}';
|
||||
v 'int[]', [1], undef, '{1}';
|
||||
v 'int[]', [1,-3,undef,3], undef, '{1,-3,NULL,3}';
|
||||
v 'int[]', [[1],[2],[3]], undef, '{{1},{2},{3}}';
|
||||
v 'int[]', [[1,-1],[2,-2],[undef,undef],[3,-3]], undef, '{{1,-1},{2,-2},{NULL,NULL},{3,-3}}';
|
||||
v 'bool[]', [[[[true]]],[[[undef]]]], undef, '{{{{t}}},{{{NULL}}}}';
|
||||
v 'text[]', ["\x{1234}"], undef, "{\x{1234}}";
|
||||
|
||||
f 'int[]', [[1],undef];
|
||||
f 'int[]', [[1],[2,3]];
|
||||
f 'int[]', [[]];
|
||||
f 'oidvector', [undef];
|
||||
|
||||
# Example from https://www.postgresql.org/docs/17/arrays.html#ARRAYS-IO
|
||||
# Lower bounds are discarded.
|
||||
is_deeply $conn->q("SELECT '[1:1][-2:-1][3:5]={{{1,2,3},{4,5,6}}}'::int[]")->val, [[[1,2,3],[4,5,6]]];
|
||||
|
||||
is $conn->q('SELECT ($1::int2[])[2]', [1,2,3,4])->val, 2;
|
||||
is $conn->q('SELECT ($1::int2vector)[1]', [1,2,3,4])->val, 2;
|
||||
is $conn->q('SELECT ($1::oidvector)[1]', [1,2,3,4])->val, 2;
|
||||
|
||||
done_testing;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue