Skip to content

Commit 5a2bc37

Browse files
author
Nikita Glukhov
committed
Add tests for deparsing of SQL/JSON constructors
1 parent f2fed58 commit 5a2bc37

File tree

2 files changed

+191
-0
lines changed

2 files changed

+191
-0
lines changed

src/test/regress/expected/sqljson.out

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,3 +620,127 @@ ERROR: duplicate JSON object key value
620620
SELECT JSON_OBJECTAGG(k: v ABSENT ON NULL WITH UNIQUE KEYS RETURNING jsonb)
621621
FROM (VALUES (1, 1), (1, NULL), (2, 2)) foo(k, v);
622622
ERROR: duplicate JSON object key value
623+
-- Test JSON_OBJECT deparsing
624+
EXPLAIN (VERBOSE, COSTS OFF)
625+
SELECT JSON_OBJECT('foo' : '1' FORMAT JSON, 'bar' : 'baz' RETURNING json);
626+
QUERY PLAN
627+
------------------------------------------------------------------------------
628+
Result
629+
Output: JSON_OBJECT('foo' : '1'::json, 'bar' : 'baz'::text RETURNING json)
630+
(2 rows)
631+
632+
CREATE VIEW json_object_view AS
633+
SELECT JSON_OBJECT('foo' : '1' FORMAT JSON, 'bar' : 'baz' RETURNING json);
634+
\sv json_object_view
635+
CREATE OR REPLACE VIEW public.json_object_view AS
636+
SELECT JSON_OBJECT('foo' : '1'::text FORMAT JSON, 'bar' : 'baz'::text RETURNING json) AS "json_object"
637+
DROP VIEW json_object_view;
638+
-- Test JSON_ARRAY deparsing
639+
EXPLAIN (VERBOSE, COSTS OFF)
640+
SELECT JSON_ARRAY('1' FORMAT JSON, 2 RETURNING json);
641+
QUERY PLAN
642+
---------------------------------------------------
643+
Result
644+
Output: JSON_ARRAY('1'::json, 2 RETURNING json)
645+
(2 rows)
646+
647+
CREATE VIEW json_array_view AS
648+
SELECT JSON_ARRAY('1' FORMAT JSON, 2 RETURNING json);
649+
\sv json_array_view
650+
CREATE OR REPLACE VIEW public.json_array_view AS
651+
SELECT JSON_ARRAY('1'::text FORMAT JSON, 2 RETURNING json) AS "json_array"
652+
DROP VIEW json_array_view;
653+
-- Test JSON_OBJECTAGG deparsing
654+
EXPLAIN (VERBOSE, COSTS OFF)
655+
SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING text) FILTER (WHERE i > 3)
656+
FROM generate_series(1,5) i;
657+
QUERY PLAN
658+
--------------------------------------------------------------------------------------------------------------------------------------
659+
Aggregate
660+
Output: JSON_OBJECTAGG(i : (('111'::text || (i)::text))::bytea FORMAT JSON WITH UNIQUE KEYS RETURNING text) FILTER (WHERE (i > 3))
661+
-> Function Scan on pg_catalog.generate_series i
662+
Output: i
663+
Function Call: generate_series(1, 5)
664+
(5 rows)
665+
666+
EXPLAIN (VERBOSE, COSTS OFF)
667+
SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING text) OVER (PARTITION BY i % 2)
668+
FROM generate_series(1,5) i;
669+
QUERY PLAN
670+
-----------------------------------------------------------------------------------------------------------------------------------
671+
WindowAgg
672+
Output: JSON_OBJECTAGG(i : (('111'::text || (i)::text))::bytea FORMAT JSON WITH UNIQUE KEYS RETURNING text) OVER (?), ((i % 2))
673+
-> Sort
674+
Output: ((i % 2)), i
675+
Sort Key: ((i.i % 2))
676+
-> Function Scan on pg_catalog.generate_series i
677+
Output: (i % 2), i
678+
Function Call: generate_series(1, 5)
679+
(8 rows)
680+
681+
CREATE VIEW json_objectagg_view AS
682+
SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING text) FILTER (WHERE i > 3)
683+
FROM generate_series(1,5) i;
684+
\sv json_objectagg_view
685+
CREATE OR REPLACE VIEW public.json_objectagg_view AS
686+
SELECT JSON_OBJECTAGG(i.i : ('111'::text || i.i)::bytea FORMAT JSON WITH UNIQUE KEYS RETURNING text) FILTER (WHERE i.i > 3) AS "json_objectagg"
687+
FROM generate_series(1, 5) i(i)
688+
DROP VIEW json_objectagg_view;
689+
-- Test JSON_ARRAYAGG deparsing
690+
EXPLAIN (VERBOSE, COSTS OFF)
691+
SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING text) FILTER (WHERE i > 3)
692+
FROM generate_series(1,5) i;
693+
QUERY PLAN
694+
-----------------------------------------------------------------------------------------------------------------------------
695+
Aggregate
696+
Output: JSON_ARRAYAGG((('111'::text || (i)::text))::bytea FORMAT JSON NULL ON NULL RETURNING text) FILTER (WHERE (i > 3))
697+
-> Function Scan on pg_catalog.generate_series i
698+
Output: i
699+
Function Call: generate_series(1, 5)
700+
(5 rows)
701+
702+
EXPLAIN (VERBOSE, COSTS OFF)
703+
SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING text) OVER (PARTITION BY i % 2)
704+
FROM generate_series(1,5) i;
705+
QUERY PLAN
706+
--------------------------------------------------------------------------------------------------------------------------
707+
WindowAgg
708+
Output: JSON_ARRAYAGG((('111'::text || (i)::text))::bytea FORMAT JSON NULL ON NULL RETURNING text) OVER (?), ((i % 2))
709+
-> Sort
710+
Output: ((i % 2)), i
711+
Sort Key: ((i.i % 2))
712+
-> Function Scan on pg_catalog.generate_series i
713+
Output: (i % 2), i
714+
Function Call: generate_series(1, 5)
715+
(8 rows)
716+
717+
CREATE VIEW json_arrayagg_view AS
718+
SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING text) FILTER (WHERE i > 3)
719+
FROM generate_series(1,5) i;
720+
\sv json_arrayagg_view
721+
CREATE OR REPLACE VIEW public.json_arrayagg_view AS
722+
SELECT JSON_ARRAYAGG(('111'::text || i.i)::bytea FORMAT JSON NULL ON NULL RETURNING text) FILTER (WHERE i.i > 3) AS "json_arrayagg"
723+
FROM generate_series(1, 5) i(i)
724+
DROP VIEW json_arrayagg_view;
725+
-- Test JSON_ARRAY(subquery) deparsing
726+
EXPLAIN (VERBOSE, COSTS OFF)
727+
SELECT JSON_ARRAY(SELECT i FROM (VALUES (1), (2), (NULL), (4)) foo(i) RETURNING jsonb);
728+
QUERY PLAN
729+
---------------------------------------------------------------------
730+
Result
731+
Output: $0
732+
InitPlan 1 (returns $0)
733+
-> Aggregate
734+
Output: JSON_ARRAYAGG("*VALUES*".column1 RETURNING jsonb)
735+
-> Values Scan on "*VALUES*"
736+
Output: "*VALUES*".column1
737+
(7 rows)
738+
739+
CREATE VIEW json_array_subquery_view AS
740+
SELECT JSON_ARRAY(SELECT i FROM (VALUES (1), (2), (NULL), (4)) foo(i) RETURNING jsonb);
741+
\sv json_array_subquery_view
742+
CREATE OR REPLACE VIEW public.json_array_subquery_view AS
743+
SELECT ( SELECT JSON_ARRAYAGG(q.a RETURNING jsonb) AS "json_arrayagg"
744+
FROM ( SELECT foo.i
745+
FROM ( VALUES (1), (2), (NULL::integer), (4)) foo(i)) q(a)) AS "json_array"
746+
DROP VIEW json_array_subquery_view;

src/test/regress/sql/sqljson.sql

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,3 +213,70 @@ FROM (VALUES (1, 1), (1, NULL), (2, 2)) foo(k, v);
213213

214214
SELECT JSON_OBJECTAGG(k: v ABSENT ON NULL WITH UNIQUE KEYS RETURNING jsonb)
215215
FROM (VALUES (1, 1), (1, NULL), (2, 2)) foo(k, v);
216+
217+
-- Test JSON_OBJECT deparsing
218+
EXPLAIN (VERBOSE, COSTS OFF)
219+
SELECT JSON_OBJECT('foo' : '1' FORMAT JSON, 'bar' : 'baz' RETURNING json);
220+
221+
CREATE VIEW json_object_view AS
222+
SELECT JSON_OBJECT('foo' : '1' FORMAT JSON, 'bar' : 'baz' RETURNING json);
223+
224+
\sv json_object_view
225+
226+
DROP VIEW json_object_view;
227+
228+
-- Test JSON_ARRAY deparsing
229+
EXPLAIN (VERBOSE, COSTS OFF)
230+
SELECT JSON_ARRAY('1' FORMAT JSON, 2 RETURNING json);
231+
232+
CREATE VIEW json_array_view AS
233+
SELECT JSON_ARRAY('1' FORMAT JSON, 2 RETURNING json);
234+
235+
\sv json_array_view
236+
237+
DROP VIEW json_array_view;
238+
239+
-- Test JSON_OBJECTAGG deparsing
240+
EXPLAIN (VERBOSE, COSTS OFF)
241+
SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING text) FILTER (WHERE i > 3)
242+
FROM generate_series(1,5) i;
243+
244+
EXPLAIN (VERBOSE, COSTS OFF)
245+
SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING text) OVER (PARTITION BY i % 2)
246+
FROM generate_series(1,5) i;
247+
248+
CREATE VIEW json_objectagg_view AS
249+
SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING text) FILTER (WHERE i > 3)
250+
FROM generate_series(1,5) i;
251+
252+
\sv json_objectagg_view
253+
254+
DROP VIEW json_objectagg_view;
255+
256+
-- Test JSON_ARRAYAGG deparsing
257+
EXPLAIN (VERBOSE, COSTS OFF)
258+
SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING text) FILTER (WHERE i > 3)
259+
FROM generate_series(1,5) i;
260+
261+
EXPLAIN (VERBOSE, COSTS OFF)
262+
SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING text) OVER (PARTITION BY i % 2)
263+
FROM generate_series(1,5) i;
264+
265+
CREATE VIEW json_arrayagg_view AS
266+
SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING text) FILTER (WHERE i > 3)
267+
FROM generate_series(1,5) i;
268+
269+
\sv json_arrayagg_view
270+
271+
DROP VIEW json_arrayagg_view;
272+
273+
-- Test JSON_ARRAY(subquery) deparsing
274+
EXPLAIN (VERBOSE, COSTS OFF)
275+
SELECT JSON_ARRAY(SELECT i FROM (VALUES (1), (2), (NULL), (4)) foo(i) RETURNING jsonb);
276+
277+
CREATE VIEW json_array_subquery_view AS
278+
SELECT JSON_ARRAY(SELECT i FROM (VALUES (1), (2), (NULL), (4)) foo(i) RETURNING jsonb);
279+
280+
\sv json_array_subquery_view
281+
282+
DROP VIEW json_array_subquery_view;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy