mirror of
https://github.com/postgres/postgres.git
synced 2025-07-09 22:41:56 +03:00
Revert SQL/JSON features
The reverts the following and makes some associated cleanups: commitf79b803dc
: Common SQL/JSON clauses commitf4fb45d15
: SQL/JSON constructors commit5f0adec25
: Make STRING an unreserved_keyword. commit33a377608
: IS JSON predicate commit1a36bc9db
: SQL/JSON query functions commit606948b05
: SQL JSON functions commit49082c2cc
: RETURNING clause for JSON() and JSON_SCALAR() commit4e34747c8
: JSON_TABLE commitfadb48b00
: PLAN clauses for JSON_TABLE commit2ef6f11b0
: Reduce running time of jsonb_sqljson test commit14d3f24fa
: Further improve jsonb_sqljson parallel test commita6baa4bad
: Documentation for SQL/JSON features commitb46bcf7a4
: Improve readability of SQL/JSON documentation. commit112fdb352
: Fix finalization for json_objectagg and friends commitfcdb35c32
: Fix transformJsonBehavior commit4cd8717af
: Improve a couple of sql/json error messages commitf7a605f63
: Small cleanups in SQL/JSON code commit9c3d25e17
: Fix JSON_OBJECTAGG uniquefying bug commita79153b7a
: Claim SQL standard compliance for SQL/JSON features commita1e7616d6
: Rework SQL/JSON documentation commit8d9f9634e
: Fix errors in copyfuncs/equalfuncs support for JSON node types. commit3c633f32b
: Only allow returning string types or bytea from json_serialize commit67b26703b
: expression eval: Fix EEOP_JSON_CONSTRUCTOR and EEOP_JSONEXPR size. The release notes are also adjusted. Backpatch to release 15. Discussion: https://postgr.es/m/40d2c882-bcac-19a9-754d-4299e1d87ac7@postgresql.org
This commit is contained in:
@ -1,471 +0,0 @@
|
||||
-- JSON()
|
||||
SELECT JSON();
|
||||
SELECT JSON(NULL);
|
||||
SELECT JSON('{ "a" : 1 } ');
|
||||
SELECT JSON('{ "a" : 1 } ' FORMAT JSON);
|
||||
SELECT JSON('{ "a" : 1 } ' FORMAT JSON ENCODING UTF8);
|
||||
SELECT JSON('{ "a" : 1 } '::bytea FORMAT JSON ENCODING UTF8);
|
||||
SELECT pg_typeof(JSON('{ "a" : 1 } '));
|
||||
|
||||
SELECT JSON(' 1 '::json);
|
||||
SELECT JSON(' 1 '::jsonb);
|
||||
SELECT JSON(' 1 '::json WITH UNIQUE KEYS);
|
||||
SELECT JSON(123);
|
||||
|
||||
SELECT JSON('{"a": 1, "a": 2}');
|
||||
SELECT JSON('{"a": 1, "a": 2}' WITH UNIQUE KEYS);
|
||||
SELECT JSON('{"a": 1, "a": 2}' WITHOUT UNIQUE KEYS);
|
||||
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON('123');
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON('123' FORMAT JSON);
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON('123'::bytea FORMAT JSON);
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON('123'::bytea FORMAT JSON ENCODING UTF8);
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON('123' WITH UNIQUE KEYS);
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON('123' WITHOUT UNIQUE KEYS);
|
||||
|
||||
SELECT JSON('123' RETURNING text);
|
||||
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON('123');
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON('123' RETURNING json);
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON('123' RETURNING jsonb);
|
||||
SELECT pg_typeof(JSON('123'));
|
||||
SELECT pg_typeof(JSON('123' RETURNING json));
|
||||
SELECT pg_typeof(JSON('123' RETURNING jsonb));
|
||||
|
||||
-- JSON_SCALAR()
|
||||
SELECT JSON_SCALAR();
|
||||
SELECT JSON_SCALAR(NULL);
|
||||
SELECT JSON_SCALAR(NULL::int);
|
||||
SELECT JSON_SCALAR(123);
|
||||
SELECT JSON_SCALAR(123.45);
|
||||
SELECT JSON_SCALAR(123.45::numeric);
|
||||
SELECT JSON_SCALAR(true);
|
||||
SELECT JSON_SCALAR(false);
|
||||
SELECT JSON_SCALAR(' 123.45');
|
||||
SELECT JSON_SCALAR('2020-06-07'::date);
|
||||
SELECT JSON_SCALAR('2020-06-07 01:02:03'::timestamp);
|
||||
SELECT JSON_SCALAR('{}'::json);
|
||||
SELECT JSON_SCALAR('{}'::jsonb);
|
||||
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON_SCALAR(123);
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON_SCALAR('123');
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON_SCALAR(123 RETURNING json);
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON_SCALAR(123 RETURNING jsonb);
|
||||
|
||||
-- JSON_SERIALIZE()
|
||||
SELECT JSON_SERIALIZE();
|
||||
SELECT JSON_SERIALIZE(NULL);
|
||||
SELECT JSON_SERIALIZE(JSON('{ "a" : 1 } '));
|
||||
SELECT JSON_SERIALIZE('{ "a" : 1 } ');
|
||||
SELECT JSON_SERIALIZE('1');
|
||||
SELECT JSON_SERIALIZE('1' FORMAT JSON);
|
||||
SELECT JSON_SERIALIZE('{ "a" : 1 } ' RETURNING bytea);
|
||||
SELECT JSON_SERIALIZE('{ "a" : 1 } ' RETURNING varchar);
|
||||
SELECT pg_typeof(JSON_SERIALIZE(NULL));
|
||||
|
||||
-- only string types or bytea allowed
|
||||
SELECT JSON_SERIALIZE('{ "a" : 1 } ' RETURNING jsonb);
|
||||
|
||||
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON_SERIALIZE('{}');
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON_SERIALIZE('{}' RETURNING bytea);
|
||||
|
||||
-- JSON_OBJECT()
|
||||
SELECT JSON_OBJECT();
|
||||
SELECT JSON_OBJECT(RETURNING json);
|
||||
SELECT JSON_OBJECT(RETURNING json FORMAT JSON);
|
||||
SELECT JSON_OBJECT(RETURNING jsonb);
|
||||
SELECT JSON_OBJECT(RETURNING jsonb FORMAT JSON);
|
||||
SELECT JSON_OBJECT(RETURNING text);
|
||||
SELECT JSON_OBJECT(RETURNING text FORMAT JSON);
|
||||
SELECT JSON_OBJECT(RETURNING text FORMAT JSON ENCODING UTF8);
|
||||
SELECT JSON_OBJECT(RETURNING text FORMAT JSON ENCODING INVALID_ENCODING);
|
||||
SELECT JSON_OBJECT(RETURNING bytea);
|
||||
SELECT JSON_OBJECT(RETURNING bytea FORMAT JSON);
|
||||
SELECT JSON_OBJECT(RETURNING bytea FORMAT JSON ENCODING UTF8);
|
||||
SELECT JSON_OBJECT(RETURNING bytea FORMAT JSON ENCODING UTF16);
|
||||
SELECT JSON_OBJECT(RETURNING bytea FORMAT JSON ENCODING UTF32);
|
||||
|
||||
SELECT JSON_OBJECT('foo': NULL::int FORMAT JSON);
|
||||
SELECT JSON_OBJECT('foo': NULL::int FORMAT JSON ENCODING UTF8);
|
||||
SELECT JSON_OBJECT('foo': NULL::json FORMAT JSON);
|
||||
SELECT JSON_OBJECT('foo': NULL::json FORMAT JSON ENCODING UTF8);
|
||||
SELECT JSON_OBJECT('foo': NULL::jsonb FORMAT JSON);
|
||||
SELECT JSON_OBJECT('foo': NULL::jsonb FORMAT JSON ENCODING UTF8);
|
||||
|
||||
SELECT JSON_OBJECT(NULL: 1);
|
||||
SELECT JSON_OBJECT('a': 2 + 3);
|
||||
SELECT JSON_OBJECT('a' VALUE 2 + 3);
|
||||
--SELECT JSON_OBJECT(KEY 'a' VALUE 2 + 3);
|
||||
SELECT JSON_OBJECT('a' || 2: 1);
|
||||
SELECT JSON_OBJECT(('a' || 2) VALUE 1);
|
||||
--SELECT JSON_OBJECT('a' || 2 VALUE 1);
|
||||
--SELECT JSON_OBJECT(KEY 'a' || 2 VALUE 1);
|
||||
SELECT JSON_OBJECT('a': 2::text);
|
||||
SELECT JSON_OBJECT('a' VALUE 2::text);
|
||||
--SELECT JSON_OBJECT(KEY 'a' VALUE 2::text);
|
||||
SELECT JSON_OBJECT(1::text: 2);
|
||||
SELECT JSON_OBJECT((1::text) VALUE 2);
|
||||
--SELECT JSON_OBJECT(1::text VALUE 2);
|
||||
--SELECT JSON_OBJECT(KEY 1::text VALUE 2);
|
||||
SELECT JSON_OBJECT(json '[1]': 123);
|
||||
SELECT JSON_OBJECT(ARRAY[1,2,3]: 'aaa');
|
||||
|
||||
SELECT JSON_OBJECT(
|
||||
'a': '123',
|
||||
1.23: 123,
|
||||
'c': json '[ 1,true,{ } ]',
|
||||
'd': jsonb '{ "x" : 123.45 }'
|
||||
);
|
||||
|
||||
SELECT JSON_OBJECT(
|
||||
'a': '123',
|
||||
1.23: 123,
|
||||
'c': json '[ 1,true,{ } ]',
|
||||
'd': jsonb '{ "x" : 123.45 }'
|
||||
RETURNING jsonb
|
||||
);
|
||||
|
||||
/*
|
||||
SELECT JSON_OBJECT(
|
||||
'a': '123',
|
||||
KEY 1.23 VALUE 123,
|
||||
'c' VALUE json '[1, true, {}]'
|
||||
);
|
||||
*/
|
||||
|
||||
SELECT JSON_OBJECT('a': '123', 'b': JSON_OBJECT('a': 111, 'b': 'aaa'));
|
||||
SELECT JSON_OBJECT('a': '123', 'b': JSON_OBJECT('a': 111, 'b': 'aaa' RETURNING jsonb));
|
||||
|
||||
SELECT JSON_OBJECT('a': JSON_OBJECT('b': 1 RETURNING text));
|
||||
SELECT JSON_OBJECT('a': JSON_OBJECT('b': 1 RETURNING text) FORMAT JSON);
|
||||
SELECT JSON_OBJECT('a': JSON_OBJECT('b': 1 RETURNING bytea));
|
||||
SELECT JSON_OBJECT('a': JSON_OBJECT('b': 1 RETURNING bytea) FORMAT JSON);
|
||||
|
||||
SELECT JSON_OBJECT('a': '1', 'b': NULL, 'c': 2);
|
||||
SELECT JSON_OBJECT('a': '1', 'b': NULL, 'c': 2 NULL ON NULL);
|
||||
SELECT JSON_OBJECT('a': '1', 'b': NULL, 'c': 2 ABSENT ON NULL);
|
||||
|
||||
SELECT JSON_OBJECT(1: 1, '1': NULL WITH UNIQUE);
|
||||
SELECT JSON_OBJECT(1: 1, '1': NULL ABSENT ON NULL WITH UNIQUE);
|
||||
SELECT JSON_OBJECT(1: 1, '1': NULL NULL ON NULL WITH UNIQUE RETURNING jsonb);
|
||||
SELECT JSON_OBJECT(1: 1, '1': NULL ABSENT ON NULL WITH UNIQUE RETURNING jsonb);
|
||||
|
||||
SELECT JSON_OBJECT(1: 1, '2': NULL, '1': 1 NULL ON NULL WITH UNIQUE);
|
||||
SELECT JSON_OBJECT(1: 1, '2': NULL, '1': 1 ABSENT ON NULL WITH UNIQUE);
|
||||
SELECT JSON_OBJECT(1: 1, '2': NULL, '1': 1 ABSENT ON NULL WITHOUT UNIQUE);
|
||||
SELECT JSON_OBJECT(1: 1, '2': NULL, '1': 1 ABSENT ON NULL WITH UNIQUE RETURNING jsonb);
|
||||
SELECT JSON_OBJECT(1: 1, '2': NULL, '1': 1 ABSENT ON NULL WITHOUT UNIQUE RETURNING jsonb);
|
||||
SELECT JSON_OBJECT(1: 1, '2': NULL, '3': 1, 4: NULL, '5': 'a' ABSENT ON NULL WITH UNIQUE RETURNING jsonb);
|
||||
|
||||
|
||||
-- JSON_ARRAY()
|
||||
SELECT JSON_ARRAY();
|
||||
SELECT JSON_ARRAY(RETURNING json);
|
||||
SELECT JSON_ARRAY(RETURNING json FORMAT JSON);
|
||||
SELECT JSON_ARRAY(RETURNING jsonb);
|
||||
SELECT JSON_ARRAY(RETURNING jsonb FORMAT JSON);
|
||||
SELECT JSON_ARRAY(RETURNING text);
|
||||
SELECT JSON_ARRAY(RETURNING text FORMAT JSON);
|
||||
SELECT JSON_ARRAY(RETURNING text FORMAT JSON ENCODING UTF8);
|
||||
SELECT JSON_ARRAY(RETURNING text FORMAT JSON ENCODING INVALID_ENCODING);
|
||||
SELECT JSON_ARRAY(RETURNING bytea);
|
||||
SELECT JSON_ARRAY(RETURNING bytea FORMAT JSON);
|
||||
SELECT JSON_ARRAY(RETURNING bytea FORMAT JSON ENCODING UTF8);
|
||||
SELECT JSON_ARRAY(RETURNING bytea FORMAT JSON ENCODING UTF16);
|
||||
SELECT JSON_ARRAY(RETURNING bytea FORMAT JSON ENCODING UTF32);
|
||||
|
||||
SELECT JSON_ARRAY('aaa', 111, true, array[1,2,3], NULL, json '{"a": [1]}', jsonb '["a",3]');
|
||||
|
||||
SELECT JSON_ARRAY('a', NULL, 'b' NULL ON NULL);
|
||||
SELECT JSON_ARRAY('a', NULL, 'b' ABSENT ON NULL);
|
||||
SELECT JSON_ARRAY(NULL, NULL, 'b' ABSENT ON NULL);
|
||||
SELECT JSON_ARRAY('a', NULL, 'b' NULL ON NULL RETURNING jsonb);
|
||||
SELECT JSON_ARRAY('a', NULL, 'b' ABSENT ON NULL RETURNING jsonb);
|
||||
SELECT JSON_ARRAY(NULL, NULL, 'b' ABSENT ON NULL RETURNING jsonb);
|
||||
|
||||
SELECT JSON_ARRAY(JSON_ARRAY('{ "a" : 123 }' RETURNING text));
|
||||
SELECT JSON_ARRAY(JSON_ARRAY('{ "a" : 123 }' FORMAT JSON RETURNING text));
|
||||
SELECT JSON_ARRAY(JSON_ARRAY('{ "a" : 123 }' FORMAT JSON RETURNING text) FORMAT JSON);
|
||||
|
||||
SELECT JSON_ARRAY(SELECT i FROM (VALUES (1), (2), (NULL), (4)) foo(i));
|
||||
SELECT JSON_ARRAY(SELECT i FROM (VALUES (NULL::int[]), ('{1,2}'), (NULL), (NULL), ('{3,4}'), (NULL)) foo(i));
|
||||
SELECT JSON_ARRAY(SELECT i FROM (VALUES (NULL::int[]), ('{1,2}'), (NULL), (NULL), ('{3,4}'), (NULL)) foo(i) RETURNING jsonb);
|
||||
--SELECT JSON_ARRAY(SELECT i FROM (VALUES (NULL::int[]), ('{1,2}'), (NULL), (NULL), ('{3,4}'), (NULL)) foo(i) NULL ON NULL);
|
||||
--SELECT JSON_ARRAY(SELECT i FROM (VALUES (NULL::int[]), ('{1,2}'), (NULL), (NULL), ('{3,4}'), (NULL)) foo(i) NULL ON NULL RETURNING jsonb);
|
||||
SELECT JSON_ARRAY(SELECT i FROM (VALUES (3), (1), (NULL), (2)) foo(i) ORDER BY i);
|
||||
-- Should fail
|
||||
SELECT JSON_ARRAY(SELECT FROM (VALUES (1)) foo(i));
|
||||
SELECT JSON_ARRAY(SELECT i, i FROM (VALUES (1)) foo(i));
|
||||
SELECT JSON_ARRAY(SELECT * FROM (VALUES (1, 2)) foo(i, j));
|
||||
|
||||
-- JSON_ARRAYAGG()
|
||||
SELECT JSON_ARRAYAGG(i) IS NULL,
|
||||
JSON_ARRAYAGG(i RETURNING jsonb) IS NULL
|
||||
FROM generate_series(1, 0) i;
|
||||
|
||||
SELECT JSON_ARRAYAGG(i),
|
||||
JSON_ARRAYAGG(i RETURNING jsonb)
|
||||
FROM generate_series(1, 5) i;
|
||||
|
||||
SELECT JSON_ARRAYAGG(i ORDER BY i DESC)
|
||||
FROM generate_series(1, 5) i;
|
||||
|
||||
SELECT JSON_ARRAYAGG(i::text::json)
|
||||
FROM generate_series(1, 5) i;
|
||||
|
||||
SELECT JSON_ARRAYAGG(JSON_ARRAY(i, i + 1 RETURNING text) FORMAT JSON)
|
||||
FROM generate_series(1, 5) i;
|
||||
|
||||
SELECT JSON_ARRAYAGG(NULL),
|
||||
JSON_ARRAYAGG(NULL RETURNING jsonb)
|
||||
FROM generate_series(1, 5);
|
||||
|
||||
SELECT JSON_ARRAYAGG(NULL NULL ON NULL),
|
||||
JSON_ARRAYAGG(NULL NULL ON NULL RETURNING jsonb)
|
||||
FROM generate_series(1, 5);
|
||||
|
||||
SELECT
|
||||
JSON_ARRAYAGG(bar),
|
||||
JSON_ARRAYAGG(bar RETURNING jsonb),
|
||||
JSON_ARRAYAGG(bar ABSENT ON NULL),
|
||||
JSON_ARRAYAGG(bar ABSENT ON NULL RETURNING jsonb),
|
||||
JSON_ARRAYAGG(bar NULL ON NULL),
|
||||
JSON_ARRAYAGG(bar NULL ON NULL RETURNING jsonb),
|
||||
JSON_ARRAYAGG(foo),
|
||||
JSON_ARRAYAGG(foo RETURNING jsonb),
|
||||
JSON_ARRAYAGG(foo ORDER BY bar) FILTER (WHERE bar > 2),
|
||||
JSON_ARRAYAGG(foo ORDER BY bar RETURNING jsonb) FILTER (WHERE bar > 2)
|
||||
FROM
|
||||
(VALUES (NULL), (3), (1), (NULL), (NULL), (5), (2), (4), (NULL)) foo(bar);
|
||||
|
||||
SELECT
|
||||
bar, JSON_ARRAYAGG(bar) FILTER (WHERE bar > 2) OVER (PARTITION BY foo.bar % 2)
|
||||
FROM
|
||||
(VALUES (NULL), (3), (1), (NULL), (NULL), (5), (2), (4), (NULL), (5), (4)) foo(bar);
|
||||
|
||||
-- JSON_OBJECTAGG()
|
||||
SELECT JSON_OBJECTAGG('key': 1) IS NULL,
|
||||
JSON_OBJECTAGG('key': 1 RETURNING jsonb) IS NULL
|
||||
WHERE FALSE;
|
||||
|
||||
SELECT JSON_OBJECTAGG(NULL: 1);
|
||||
|
||||
SELECT JSON_OBJECTAGG(NULL: 1 RETURNING jsonb);
|
||||
|
||||
SELECT
|
||||
JSON_OBJECTAGG(i: i),
|
||||
-- JSON_OBJECTAGG(i VALUE i),
|
||||
-- JSON_OBJECTAGG(KEY i VALUE i),
|
||||
JSON_OBJECTAGG(i: i RETURNING jsonb)
|
||||
FROM
|
||||
generate_series(1, 5) i;
|
||||
|
||||
SELECT
|
||||
JSON_OBJECTAGG(k: v),
|
||||
JSON_OBJECTAGG(k: v NULL ON NULL),
|
||||
JSON_OBJECTAGG(k: v ABSENT ON NULL),
|
||||
JSON_OBJECTAGG(k: v RETURNING jsonb),
|
||||
JSON_OBJECTAGG(k: v NULL ON NULL RETURNING jsonb),
|
||||
JSON_OBJECTAGG(k: v ABSENT ON NULL RETURNING jsonb)
|
||||
FROM
|
||||
(VALUES (1, 1), (1, NULL), (2, NULL), (3, 3)) foo(k, v);
|
||||
|
||||
SELECT JSON_OBJECTAGG(k: v WITH UNIQUE KEYS)
|
||||
FROM (VALUES (1, 1), (1, NULL), (2, 2)) foo(k, v);
|
||||
|
||||
SELECT JSON_OBJECTAGG(k: v ABSENT ON NULL WITH UNIQUE KEYS)
|
||||
FROM (VALUES (1, 1), (1, NULL), (2, 2)) foo(k, v);
|
||||
|
||||
SELECT JSON_OBJECTAGG(k: v ABSENT ON NULL WITH UNIQUE KEYS)
|
||||
FROM (VALUES (1, 1), (0, NULL), (3, NULL), (2, 2), (4, NULL)) foo(k, v);
|
||||
|
||||
SELECT JSON_OBJECTAGG(k: v WITH UNIQUE KEYS RETURNING jsonb)
|
||||
FROM (VALUES (1, 1), (1, NULL), (2, 2)) foo(k, v);
|
||||
|
||||
SELECT JSON_OBJECTAGG(k: v ABSENT ON NULL WITH UNIQUE KEYS RETURNING jsonb)
|
||||
FROM (VALUES (1, 1), (1, NULL), (2, 2)) foo(k, v);
|
||||
|
||||
SELECT JSON_OBJECTAGG(k: v ABSENT ON NULL WITH UNIQUE KEYS RETURNING jsonb)
|
||||
FROM (VALUES (1, 1), (0, NULL),(4, null), (5, null),(6, null),(2, 2)) foo(k, v);
|
||||
|
||||
-- Test JSON_OBJECT deparsing
|
||||
EXPLAIN (VERBOSE, COSTS OFF)
|
||||
SELECT JSON_OBJECT('foo' : '1' FORMAT JSON, 'bar' : 'baz' RETURNING json);
|
||||
|
||||
CREATE VIEW json_object_view AS
|
||||
SELECT JSON_OBJECT('foo' : '1' FORMAT JSON, 'bar' : 'baz' RETURNING json);
|
||||
|
||||
\sv json_object_view
|
||||
|
||||
DROP VIEW json_object_view;
|
||||
|
||||
SELECT to_json(a) AS a, JSON_OBJECTAGG(k : v WITH UNIQUE KEYS) OVER (ORDER BY k)
|
||||
FROM (VALUES (1,1), (2,2)) a(k,v);
|
||||
|
||||
SELECT to_json(a) AS a, JSON_OBJECTAGG(k : v WITH UNIQUE KEYS) OVER (ORDER BY k)
|
||||
FROM (VALUES (1,1), (1,2), (2,2)) a(k,v);
|
||||
|
||||
SELECT to_json(a) AS a, JSON_OBJECTAGG(k : v ABSENT ON NULL WITH UNIQUE KEYS)
|
||||
OVER (ORDER BY k)
|
||||
FROM (VALUES (1,1), (1,null), (2,2)) a(k,v);
|
||||
|
||||
SELECT to_json(a) AS a, JSON_OBJECTAGG(k : v ABSENT ON NULL)
|
||||
OVER (ORDER BY k)
|
||||
FROM (VALUES (1,1), (1,null), (2,2)) a(k,v);
|
||||
|
||||
SELECT to_json(a) AS a, JSON_OBJECTAGG(k : v ABSENT ON NULL)
|
||||
OVER (ORDER BY k RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
|
||||
FROM (VALUES (1,1), (1,null), (2,2)) a(k,v);
|
||||
|
||||
-- Test JSON_ARRAY deparsing
|
||||
EXPLAIN (VERBOSE, COSTS OFF)
|
||||
SELECT JSON_ARRAY('1' FORMAT JSON, 2 RETURNING json);
|
||||
|
||||
CREATE VIEW json_array_view AS
|
||||
SELECT JSON_ARRAY('1' FORMAT JSON, 2 RETURNING json);
|
||||
|
||||
\sv json_array_view
|
||||
|
||||
DROP VIEW json_array_view;
|
||||
|
||||
-- Test JSON_OBJECTAGG deparsing
|
||||
EXPLAIN (VERBOSE, COSTS OFF)
|
||||
SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING text) FILTER (WHERE i > 3)
|
||||
FROM generate_series(1,5) i;
|
||||
|
||||
EXPLAIN (VERBOSE, COSTS OFF)
|
||||
SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING text) OVER (PARTITION BY i % 2)
|
||||
FROM generate_series(1,5) i;
|
||||
|
||||
CREATE VIEW json_objectagg_view AS
|
||||
SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING text) FILTER (WHERE i > 3)
|
||||
FROM generate_series(1,5) i;
|
||||
|
||||
\sv json_objectagg_view
|
||||
|
||||
DROP VIEW json_objectagg_view;
|
||||
|
||||
-- Test JSON_ARRAYAGG deparsing
|
||||
EXPLAIN (VERBOSE, COSTS OFF)
|
||||
SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING text) FILTER (WHERE i > 3)
|
||||
FROM generate_series(1,5) i;
|
||||
|
||||
EXPLAIN (VERBOSE, COSTS OFF)
|
||||
SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING text) OVER (PARTITION BY i % 2)
|
||||
FROM generate_series(1,5) i;
|
||||
|
||||
CREATE VIEW json_arrayagg_view AS
|
||||
SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING text) FILTER (WHERE i > 3)
|
||||
FROM generate_series(1,5) i;
|
||||
|
||||
\sv json_arrayagg_view
|
||||
|
||||
DROP VIEW json_arrayagg_view;
|
||||
|
||||
-- Test JSON_ARRAY(subquery) deparsing
|
||||
EXPLAIN (VERBOSE, COSTS OFF)
|
||||
SELECT JSON_ARRAY(SELECT i FROM (VALUES (1), (2), (NULL), (4)) foo(i) RETURNING jsonb);
|
||||
|
||||
CREATE VIEW json_array_subquery_view AS
|
||||
SELECT JSON_ARRAY(SELECT i FROM (VALUES (1), (2), (NULL), (4)) foo(i) RETURNING jsonb);
|
||||
|
||||
\sv json_array_subquery_view
|
||||
|
||||
DROP VIEW json_array_subquery_view;
|
||||
|
||||
-- IS JSON predicate
|
||||
SELECT NULL IS JSON;
|
||||
SELECT NULL IS NOT JSON;
|
||||
SELECT NULL::json IS JSON;
|
||||
SELECT NULL::jsonb IS JSON;
|
||||
SELECT NULL::text IS JSON;
|
||||
SELECT NULL::bytea IS JSON;
|
||||
SELECT NULL::int IS JSON;
|
||||
|
||||
SELECT '' IS JSON;
|
||||
|
||||
SELECT bytea '\x00' IS JSON;
|
||||
|
||||
CREATE TABLE test_is_json (js text);
|
||||
|
||||
INSERT INTO test_is_json VALUES
|
||||
(NULL),
|
||||
(''),
|
||||
('123'),
|
||||
('"aaa "'),
|
||||
('true'),
|
||||
('null'),
|
||||
('[]'),
|
||||
('[1, "2", {}]'),
|
||||
('{}'),
|
||||
('{ "a": 1, "b": null }'),
|
||||
('{ "a": 1, "a": null }'),
|
||||
('{ "a": 1, "b": [{ "a": 1 }, { "a": 2 }] }'),
|
||||
('{ "a": 1, "b": [{ "a": 1, "b": 0, "a": 2 }] }'),
|
||||
('aaa'),
|
||||
('{a:1}'),
|
||||
('["a",]');
|
||||
|
||||
SELECT
|
||||
js,
|
||||
js IS JSON "IS JSON",
|
||||
js IS NOT JSON "IS NOT JSON",
|
||||
js IS JSON VALUE "IS VALUE",
|
||||
js IS JSON OBJECT "IS OBJECT",
|
||||
js IS JSON ARRAY "IS ARRAY",
|
||||
js IS JSON SCALAR "IS SCALAR",
|
||||
js IS JSON WITHOUT UNIQUE KEYS "WITHOUT UNIQUE",
|
||||
js IS JSON WITH UNIQUE KEYS "WITH UNIQUE"
|
||||
FROM
|
||||
test_is_json;
|
||||
|
||||
SELECT
|
||||
js,
|
||||
js IS JSON "IS JSON",
|
||||
js IS NOT JSON "IS NOT JSON",
|
||||
js IS JSON VALUE "IS VALUE",
|
||||
js IS JSON OBJECT "IS OBJECT",
|
||||
js IS JSON ARRAY "IS ARRAY",
|
||||
js IS JSON SCALAR "IS SCALAR",
|
||||
js IS JSON WITHOUT UNIQUE KEYS "WITHOUT UNIQUE",
|
||||
js IS JSON WITH UNIQUE KEYS "WITH UNIQUE"
|
||||
FROM
|
||||
(SELECT js::json FROM test_is_json WHERE js IS JSON) foo(js);
|
||||
|
||||
SELECT
|
||||
js0,
|
||||
js IS JSON "IS JSON",
|
||||
js IS NOT JSON "IS NOT JSON",
|
||||
js IS JSON VALUE "IS VALUE",
|
||||
js IS JSON OBJECT "IS OBJECT",
|
||||
js IS JSON ARRAY "IS ARRAY",
|
||||
js IS JSON SCALAR "IS SCALAR",
|
||||
js IS JSON WITHOUT UNIQUE KEYS "WITHOUT UNIQUE",
|
||||
js IS JSON WITH UNIQUE KEYS "WITH UNIQUE"
|
||||
FROM
|
||||
(SELECT js, js::bytea FROM test_is_json WHERE js IS JSON) foo(js0, js);
|
||||
|
||||
SELECT
|
||||
js,
|
||||
js IS JSON "IS JSON",
|
||||
js IS NOT JSON "IS NOT JSON",
|
||||
js IS JSON VALUE "IS VALUE",
|
||||
js IS JSON OBJECT "IS OBJECT",
|
||||
js IS JSON ARRAY "IS ARRAY",
|
||||
js IS JSON SCALAR "IS SCALAR",
|
||||
js IS JSON WITHOUT UNIQUE KEYS "WITHOUT UNIQUE",
|
||||
js IS JSON WITH UNIQUE KEYS "WITH UNIQUE"
|
||||
FROM
|
||||
(SELECT js::jsonb FROM test_is_json WHERE js IS JSON) foo(js);
|
||||
|
||||
-- Test IS JSON deparsing
|
||||
EXPLAIN (VERBOSE, COSTS OFF)
|
||||
SELECT '1' IS JSON AS "any", ('1' || i) IS JSON SCALAR AS "scalar", '[]' IS NOT JSON ARRAY AS "array", '{}' IS JSON OBJECT WITH UNIQUE AS "object" FROM generate_series(1, 3) i;
|
||||
|
||||
CREATE VIEW is_json_view AS
|
||||
SELECT '1' IS JSON AS "any", ('1' || i) IS JSON SCALAR AS "scalar", '[]' IS NOT JSON ARRAY AS "array", '{}' IS JSON OBJECT WITH UNIQUE AS "object" FROM generate_series(1, 3) i;
|
||||
|
||||
\sv is_json_view
|
||||
|
||||
DROP VIEW is_json_view;
|
Reference in New Issue
Block a user