CREATE FUNCTION testHVToJsonb() RETURNS jsonb
LANGUAGE plperlu
TRANSFORM FOR TYPE jsonb AS $$
$val = {a => 1, b => 'boo', c => undef}; return $val;
$$;
SELECT testHVToJsonb();
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();
CREATE FUNCTION testSVToJsonb() RETURNS jsonb
LANGUAGE plperlu
TRANSFORM FOR TYPE jsonb AS $$
$val = 1; return $val;
$$;
SELECT testSVToJsonb();
CREATE FUNCTION testUVToJsonb() RETURNS jsonb
LANGUAGE plperlu
TRANSFORM FOR TYPE jsonb as $$
$val = ~0; return $val;
$$;
-- this might produce either 18446744073709551615 or 4294967295 SELECT testUVToJsonb() IN ('18446744073709551615'::jsonb, '4294967295'::jsonb);
-- 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();
-- this revealed a different bug CREATE FUNCTION testTextToJsonbObject(text) RETURNS jsonb
LANGUAGE plperlu
TRANSFORM FOR TYPE jsonb AS $$
my $x = shift; return {a => $x};
$$;
CREATE FUNCTION roundtrip(val jsonb, ref text = '') RETURNS jsonb
LANGUAGE plperlu
TRANSFORM FOR TYPE jsonb AS $$ use Data::Dumper;
$Data::Dumper::Sortkeys = 1;
$Data::Dumper::Indent = 0;
elog(INFO, Dumper($_[0]));
die 'unexpected '.(ref($_[0]) || 'not a').' reference' if ref($_[0]) ne $_[1]; return $_[0];
$$;
SELECT roundtrip('null') isnull; SELECT roundtrip('1'); -- skip because Data::Dumper produces a platform-dependent spelling of infinity -- SELECT roundtrip('1E+131071'); SELECT roundtrip('-1'); SELECT roundtrip('1.2'); SELECT roundtrip('-1.2'); SELECT roundtrip('"string"'); SELECT roundtrip('"NaN"');
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.