pg: Add json, jsonb, jsonpath support
NOW we're really getting to the part where this module is more awesome than DBD::Pg. (When I started working on this module I was expecting that the Postgres binary protocol would send jsonb in a binary format as well and that I'd be duplicating parts of the JSON parser/formatter to make that work, but it turns out that Postgres just uses plain json for exchange. Saves me some trouble, I guess)
This commit is contained in:
parent
7f1c48e0cf
commit
2aaec6a218
4 changed files with 98 additions and 49 deletions
19
t/pgtypes.t
19
t/pgtypes.t
|
|
@ -21,15 +21,15 @@ sub v($type, $p_in, @args) {
|
|||
my $res = $conn->q("SELECT \$1::$type", $s_in)->text_params->val;
|
||||
ok is_bool($res), "$type $s_in is bool" if $type eq 'bool';
|
||||
ok created_as_number($res), "$type $s_in is number" if $type =~ /^int/;
|
||||
is_deeply $res, $p_out, "$type $s_in text->bin";
|
||||
is_deeply $res, $p_out, "$type $s_in text->bin" =~ s/\n/\\n/rg;
|
||||
}
|
||||
{
|
||||
my $res = $conn->q("SELECT \$1::$type", $p_in)->text_results->val;
|
||||
is $res, $s_out, "$type $s_out bin->text";
|
||||
is $res, $s_out, "$type $s_out bin->text" =~ s/\n/\\n/rg;
|
||||
}
|
||||
{
|
||||
my $res = $conn->q("SELECT \$1::$type", $p_in)->val;
|
||||
is_deeply $res, $p_out, "$type $s_in bin->bin";
|
||||
is_deeply $res, $p_out, "$type $s_in bin->bin" =~ s/\n/\\n/rg;
|
||||
}
|
||||
}
|
||||
sub f($type, $p_in) {
|
||||
|
|
@ -77,4 +77,17 @@ f float4 => $_ for ('', 'a', '123g', []);
|
|||
v float8 => $_ for (0, 1234, 1.5);
|
||||
f float8 => $_ for ('', 'a', '123g', []);
|
||||
|
||||
# Limitation: There's no way to send a JSON 'null' or differentiate between that and SQL NULL.
|
||||
v json => {}, undef, '{}';
|
||||
# XXX: Huh, what's causing this "pretty" formatting?
|
||||
v json => [1, undef, true, "hello"], undef, qq#[\n 1,\n null,\n true,\n "hello"\n]#;
|
||||
f json => \1;
|
||||
|
||||
v jsonb => {}, undef, '{}';
|
||||
v jsonb => [1, undef, true, "hello"], undef, '[1, null, true, "hello"]';
|
||||
f jsonb => \1;
|
||||
|
||||
v jsonpath => $_ for ('$."key"', '$."a[*]"?(@ > 2)');
|
||||
f jsonpath => $_ for ('', 'hello world');
|
||||
|
||||
done_testing;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue