diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2018-04-03 09:47:18 -0400 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2018-04-03 09:47:18 -0400 |
commit | 341e1661805879db958dde0a9ed1dc44b1bb10c3 (patch) | |
tree | f78b33ca09f89599112fc81637c4fccf32cf12d4 /contrib/jsonb_plperl/sql/jsonb_plperl.sql | |
parent | a08dc711952081d63577fc182fcf955958f70add (diff) | |
download | postgresql-341e1661805879db958dde0a9ed1dc44b1bb10c3.tar.gz postgresql-341e1661805879db958dde0a9ed1dc44b1bb10c3.zip |
Transforms for jsonb to PL/Perl
Add a new contrib module jsonb_plperl that provides a transform between
jsonb and PL/Perl. jsonb values are converted to appropriate Perl types
such as arrays and hashes, and vice versa.
Author: Anthony Bykov <a.bykov@postgrespro.ru>
Reviewed-by: Pavel Stehule <pavel.stehule@gmail.com>
Reviewed-by: Aleksander Alekseev <a.alekseev@postgrespro.ru>
Reviewed-by: Nikita Glukhov <n.gluhov@postgrespro.ru>
Diffstat (limited to 'contrib/jsonb_plperl/sql/jsonb_plperl.sql')
-rw-r--r-- | contrib/jsonb_plperl/sql/jsonb_plperl.sql | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/contrib/jsonb_plperl/sql/jsonb_plperl.sql b/contrib/jsonb_plperl/sql/jsonb_plperl.sql new file mode 100644 index 00000000000..2c779fcd087 --- /dev/null +++ b/contrib/jsonb_plperl/sql/jsonb_plperl.sql @@ -0,0 +1,86 @@ +CREATE EXTENSION jsonb_plperl CASCADE; + + +CREATE FUNCTION testHVToJsonb() RETURNS jsonb +LANGUAGE plperl +TRANSFORM FOR TYPE jsonb +AS $$ +$val = {a => 1, b => 'boo', c => undef}; +return $val; +$$; + +SELECT testHVToJsonb(); + + +CREATE FUNCTION testAVToJsonb() RETURNS jsonb +LANGUAGE plperl +TRANSFORM FOR TYPE jsonb +AS $$ +$val = [{a => 1, b => 'boo', c => undef}, {d => 2}]; +return $val; +$$; + +SELECT testAVToJsonb(); + + +CREATE FUNCTION testSVToJsonb() RETURNS jsonb +LANGUAGE plperl +TRANSFORM FOR TYPE jsonb +AS $$ +$val = 1; +return $val; +$$; + +SELECT testSVToJsonb(); + + +CREATE FUNCTION testRegexpToJsonb() RETURNS jsonb +LANGUAGE plperl +TRANSFORM FOR TYPE jsonb +AS $$ +return ('1' =~ m(0\t2)); +$$; + +SELECT testRegexpToJsonb(); + + +CREATE FUNCTION roundtrip(val jsonb) RETURNS jsonb +LANGUAGE plperl +TRANSFORM FOR TYPE jsonb +AS $$ +return $_[0]; +$$; + + +SELECT roundtrip('null'); +SELECT roundtrip('1'); +SELECT roundtrip('1E+131071'); +SELECT roundtrip('-1'); +SELECT roundtrip('1.2'); +SELECT roundtrip('-1.2'); +SELECT roundtrip('"string"'); +SELECT roundtrip('"NaN"'); + +SELECT roundtrip('true'); +SELECT roundtrip('false'); + +SELECT roundtrip('[]'); +SELECT roundtrip('[null, null]'); +SELECT roundtrip('[1, 2, 3]'); +SELECT roundtrip('[-1, 2, -3]'); +SELECT roundtrip('[1.2, 2.3, 3.4]'); +SELECT roundtrip('[-1.2, 2.3, -3.4]'); +SELECT roundtrip('["string1", "string2"]'); + +SELECT roundtrip('{}'); +SELECT roundtrip('{"1": null}'); +SELECT roundtrip('{"1": 1}'); +SELECT roundtrip('{"1": -1}'); +SELECT roundtrip('{"1": 1.1}'); +SELECT roundtrip('{"1": -1.1}'); +SELECT roundtrip('{"1": "string1"}'); + +SELECT roundtrip('{"1": {"2": [3, 4, 5]}, "2": 3}'); + + +DROP EXTENSION plperl CASCADE; |