mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-18 22:33:23 +02:00
It turns out that old Perl versions (before about 5.10) don't have any very reliable way to generate Inf or NaN numeric values. Getting around that would require way more work than is really justified to test the code involved, so let's just drop these new test cases. Discussion: https://postgr.es/m/28585.1525131438@sss.pgh.pa.us
211 lines
3.4 KiB
Plaintext
211 lines
3.4 KiB
Plaintext
CREATE EXTENSION jsonb_plperlu CASCADE;
|
|
NOTICE: installing required extension "plperlu"
|
|
CREATE FUNCTION testHVToJsonb() RETURNS jsonb
|
|
LANGUAGE plperlu
|
|
TRANSFORM FOR TYPE jsonb
|
|
AS $$
|
|
$val = {a => 1, b => 'boo', c => undef};
|
|
return $val;
|
|
$$;
|
|
SELECT testHVToJsonb();
|
|
testhvtojsonb
|
|
---------------------------------
|
|
{"a": 1, "b": "boo", "c": null}
|
|
(1 row)
|
|
|
|
CREATE FUNCTION testAVToJsonb() RETURNS jsonb
|
|
LANGUAGE plperlu
|
|
TRANSFORM FOR TYPE jsonb
|
|
AS $$
|
|
$val = [{a => 1, b => 'boo', c => undef}, {d => 2}];
|
|
return $val;
|
|
$$;
|
|
SELECT testAVToJsonb();
|
|
testavtojsonb
|
|
---------------------------------------------
|
|
[{"a": 1, "b": "boo", "c": null}, {"d": 2}]
|
|
(1 row)
|
|
|
|
CREATE FUNCTION testSVToJsonb() RETURNS jsonb
|
|
LANGUAGE plperlu
|
|
TRANSFORM FOR TYPE jsonb
|
|
AS $$
|
|
$val = 1;
|
|
return $val;
|
|
$$;
|
|
SELECT testSVToJsonb();
|
|
testsvtojsonb
|
|
---------------
|
|
1
|
|
(1 row)
|
|
|
|
-- this revealed a bug in the original implementation
|
|
CREATE FUNCTION testRegexpResultToJsonb() RETURNS jsonb
|
|
LANGUAGE plperlu
|
|
TRANSFORM FOR TYPE jsonb
|
|
AS $$
|
|
return ('1' =~ m(0\t2));
|
|
$$;
|
|
SELECT testRegexpResultToJsonb();
|
|
testregexpresulttojsonb
|
|
-------------------------
|
|
0
|
|
(1 row)
|
|
|
|
CREATE FUNCTION roundtrip(val jsonb) RETURNS jsonb
|
|
LANGUAGE plperlu
|
|
TRANSFORM FOR TYPE jsonb
|
|
AS $$
|
|
return $_[0];
|
|
$$;
|
|
SELECT roundtrip('null');
|
|
roundtrip
|
|
-----------
|
|
null
|
|
(1 row)
|
|
|
|
SELECT roundtrip('1');
|
|
roundtrip
|
|
-----------
|
|
1
|
|
(1 row)
|
|
|
|
SELECT roundtrip('1E+131071');
|
|
ERROR: cannot convert infinity to jsonb
|
|
CONTEXT: PL/Perl function "roundtrip"
|
|
SELECT roundtrip('-1');
|
|
roundtrip
|
|
-----------
|
|
-1
|
|
(1 row)
|
|
|
|
SELECT roundtrip('1.2');
|
|
roundtrip
|
|
-----------
|
|
1.2
|
|
(1 row)
|
|
|
|
SELECT roundtrip('-1.2');
|
|
roundtrip
|
|
-----------
|
|
-1.2
|
|
(1 row)
|
|
|
|
SELECT roundtrip('"string"');
|
|
roundtrip
|
|
-----------
|
|
"string"
|
|
(1 row)
|
|
|
|
SELECT roundtrip('"NaN"');
|
|
roundtrip
|
|
-----------
|
|
"NaN"
|
|
(1 row)
|
|
|
|
SELECT roundtrip('true');
|
|
roundtrip
|
|
-----------
|
|
1
|
|
(1 row)
|
|
|
|
SELECT roundtrip('false');
|
|
roundtrip
|
|
-----------
|
|
0
|
|
(1 row)
|
|
|
|
SELECT roundtrip('[]');
|
|
roundtrip
|
|
-----------
|
|
[]
|
|
(1 row)
|
|
|
|
SELECT roundtrip('[null, null]');
|
|
roundtrip
|
|
--------------
|
|
[null, null]
|
|
(1 row)
|
|
|
|
SELECT roundtrip('[1, 2, 3]');
|
|
roundtrip
|
|
-----------
|
|
[1, 2, 3]
|
|
(1 row)
|
|
|
|
SELECT roundtrip('[-1, 2, -3]');
|
|
roundtrip
|
|
-------------
|
|
[-1, 2, -3]
|
|
(1 row)
|
|
|
|
SELECT roundtrip('[1.2, 2.3, 3.4]');
|
|
roundtrip
|
|
-----------------
|
|
[1.2, 2.3, 3.4]
|
|
(1 row)
|
|
|
|
SELECT roundtrip('[-1.2, 2.3, -3.4]');
|
|
roundtrip
|
|
-------------------
|
|
[-1.2, 2.3, -3.4]
|
|
(1 row)
|
|
|
|
SELECT roundtrip('["string1", "string2"]');
|
|
roundtrip
|
|
------------------------
|
|
["string1", "string2"]
|
|
(1 row)
|
|
|
|
SELECT roundtrip('{}');
|
|
roundtrip
|
|
-----------
|
|
{}
|
|
(1 row)
|
|
|
|
SELECT roundtrip('{"1": null}');
|
|
roundtrip
|
|
-------------
|
|
{"1": null}
|
|
(1 row)
|
|
|
|
SELECT roundtrip('{"1": 1}');
|
|
roundtrip
|
|
-----------
|
|
{"1": 1}
|
|
(1 row)
|
|
|
|
SELECT roundtrip('{"1": -1}');
|
|
roundtrip
|
|
-----------
|
|
{"1": -1}
|
|
(1 row)
|
|
|
|
SELECT roundtrip('{"1": 1.1}');
|
|
roundtrip
|
|
------------
|
|
{"1": 1.1}
|
|
(1 row)
|
|
|
|
SELECT roundtrip('{"1": -1.1}');
|
|
roundtrip
|
|
-------------
|
|
{"1": -1.1}
|
|
(1 row)
|
|
|
|
SELECT roundtrip('{"1": "string1"}');
|
|
roundtrip
|
|
------------------
|
|
{"1": "string1"}
|
|
(1 row)
|
|
|
|
SELECT roundtrip('{"1": {"2": [3, 4, 5]}, "2": 3}');
|
|
roundtrip
|
|
---------------------------------
|
|
{"1": {"2": [3, 4, 5]}, "2": 3}
|
|
(1 row)
|
|
|
|
\set VERBOSITY terse \\ -- suppress cascade details
|
|
DROP EXTENSION plperlu CASCADE;
|
|
NOTICE: drop cascades to 6 other objects
|