Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit f93808b

Browse files
author
Nikita Glukhov
committed
Add tests for deparsing of SQL/JSON constructors
1 parent a2f44f6 commit f93808b

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