Skip to content

Commit 5d0ec77

Browse files
committed
fix: fix
1 parent 58f6b11 commit 5d0ec77

5 files changed

Lines changed: 3123 additions & 3184 deletions

File tree

postgresql/PostgreSQLParser.g4

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3558,7 +3558,7 @@ func_application
35583558

35593559
func_expr
35603560
: func_application within_group_clause? filter_clause? over_clause?
3561-
| json_aggregate_func filter_clause over_clause
3561+
| json_aggregate_func filter_clause? over_clause?
35623562
| func_expr_common_subexpr
35633563
;
35643564

@@ -3569,7 +3569,7 @@ func_expr_windowless
35693569
;
35703570

35713571
json_aggregate_func
3572-
: JSON_OBJECTAGG OPEN_PAREN json_name_and_value json_object_constructor_null_clause? json_key_uniqueness_constraint json_output_clause? CLOSE_PAREN
3572+
: JSON_OBJECTAGG OPEN_PAREN json_name_and_value json_object_constructor_null_clause? json_key_uniqueness_constraint? json_output_clause? CLOSE_PAREN
35733573
| JSON_ARRAYAGG OPEN_PAREN json_value_expr json_array_aggregate_order_by_clause? json_array_constructor_null_clause? json_output_clause? CLOSE_PAREN
35743574
;
35753575

@@ -4445,6 +4445,7 @@ unreserved_keyword
44454445
| STORAGE
44464446
| STORED
44474447
| STRICT_P
4448+
| STRING
44484449
| STRIP_P
44494450
| SUBSCRIPTION
44504451
| SUPPORT
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
SELECT JSON_OBJECT();
2+
SELECT JSON_OBJECT(RETURNING json);
3+
SELECT JSON_OBJECT(RETURNING json FORMAT JSON);
4+
SELECT JSON_OBJECT(RETURNING jsonb);
5+
SELECT JSON_OBJECT(RETURNING jsonb FORMAT JSON);
6+
SELECT JSON_OBJECT(RETURNING text);
7+
SELECT JSON_OBJECT(RETURNING text FORMAT JSON);
8+
SELECT JSON_OBJECT(RETURNING bytea);
9+
SELECT JSON_OBJECT(RETURNING bytea FORMAT JSON);
10+
SELECT JSON_OBJECT(RETURNING bytea FORMAT JSON ENCODING UTF8);
11+
SELECT JSON_OBJECT('a': 2 + 3);
12+
SELECT JSON_OBJECT('a' VALUE 2 + 3);
13+
SELECT JSON_OBJECT('a' || 2: 1);
14+
SELECT JSON_OBJECT(('a' || 2) VALUE 1);
15+
SELECT JSON_OBJECT('a': 2::text);
16+
SELECT JSON_OBJECT('a' VALUE 2::text);
17+
SELECT JSON_OBJECT(1::text: 2);
18+
SELECT JSON_OBJECT((1::text) VALUE 2);
19+
SELECT JSON_OBJECT(
20+
'a': '123',
21+
1.23: 123,
22+
'c': json '[ 1,true,{ } ]',
23+
'd': jsonb '{ "x" : 123.45 }'
24+
);
25+
SELECT JSON_OBJECT(
26+
'a': '123',
27+
1.23: 123,
28+
'c': json '[ 1,true,{ } ]',
29+
'd': jsonb '{ "x" : 123.45 }'
30+
RETURNING jsonb
31+
);
32+
SELECT JSON_OBJECT('a': '123', 'b': JSON_OBJECT('a': 111, 'b': 'aaa'));
33+
SELECT JSON_OBJECT('a': '123', 'b': JSON_OBJECT('a': 111, 'b': 'aaa' RETURNING jsonb));
34+
SELECT JSON_OBJECT('a': JSON_OBJECT('b': 1 RETURNING text));
35+
SELECT JSON_OBJECT('a': JSON_OBJECT('b': 1 RETURNING text) FORMAT JSON);
36+
SELECT JSON_OBJECT('a': JSON_OBJECT('b': 1 RETURNING bytea));
37+
SELECT JSON_OBJECT('a': JSON_OBJECT('b': 1 RETURNING bytea) FORMAT JSON);
38+
SELECT JSON_OBJECT('a': '1', 'b': NULL, 'c': 2);
39+
SELECT JSON_OBJECT('a': '1', 'b': NULL, 'c': 2 NULL ON NULL);
40+
SELECT JSON_OBJECT('a': '1', 'b': NULL, 'c': 2 ABSENT ON NULL);
41+
SELECT JSON_OBJECT(1: 1, '2': NULL, '1': 1 ABSENT ON NULL WITHOUT UNIQUE);
42+
SELECT JSON_OBJECT(1: 1, '2': NULL, '1': 1 ABSENT ON NULL WITHOUT UNIQUE RETURNING jsonb);
43+
SELECT JSON_OBJECT(1: 1, '2': NULL, '3': 1, 4: NULL, '5': 'a' ABSENT ON NULL WITH UNIQUE RETURNING jsonb);
44+
SELECT JSON_ARRAY();
45+
SELECT JSON_ARRAY(RETURNING json);
46+
SELECT JSON_ARRAY(RETURNING json FORMAT JSON);
47+
SELECT JSON_ARRAY(RETURNING jsonb);
48+
SELECT JSON_ARRAY(RETURNING jsonb FORMAT JSON);
49+
SELECT JSON_ARRAY(RETURNING text);
50+
SELECT JSON_ARRAY(RETURNING text FORMAT JSON);
51+
SELECT JSON_ARRAY(RETURNING bytea);
52+
SELECT JSON_ARRAY(RETURNING bytea FORMAT JSON);
53+
SELECT JSON_ARRAY(RETURNING bytea FORMAT JSON ENCODING UTF8);
54+
SELECT JSON_ARRAY('aaa', 111, true, array[1,2,3], NULL, json '{"a": [1]}', jsonb '["a",3]');
55+
SELECT JSON_ARRAY('a', NULL, 'b' NULL ON NULL);
56+
SELECT JSON_ARRAY('a', NULL, 'b' ABSENT ON NULL);
57+
SELECT JSON_ARRAY(NULL, NULL, 'b' ABSENT ON NULL);
58+
SELECT JSON_ARRAY('a', NULL, 'b' NULL ON NULL RETURNING jsonb);
59+
SELECT JSON_ARRAY('a', NULL, 'b' ABSENT ON NULL RETURNING jsonb);
60+
SELECT JSON_ARRAY(NULL, NULL, 'b' ABSENT ON NULL RETURNING jsonb);
61+
SELECT JSON_ARRAY(JSON_ARRAY('{ "a" : 123 }' RETURNING text));
62+
SELECT JSON_ARRAY(JSON_ARRAY('{ "a" : 123 }' FORMAT JSON RETURNING text));
63+
SELECT JSON_ARRAY(JSON_ARRAY('{ "a" : 123 }' FORMAT JSON RETURNING text) FORMAT JSON);
64+
SELECT JSON_ARRAY(SELECT i FROM (VALUES (1), (2), (NULL), (4)) foo(i));
65+
SELECT JSON_ARRAY(SELECT i FROM (VALUES (NULL::int[]), ('{1,2}'), (NULL), (NULL), ('{3,4}'), (NULL)) foo(i));
66+
SELECT JSON_ARRAY(SELECT i FROM (VALUES (NULL::int[]), ('{1,2}'), (NULL), (NULL), ('{3,4}'), (NULL)) foo(i) RETURNING jsonb);
67+
SELECT JSON_ARRAY(SELECT i FROM (VALUES (3), (1), (NULL), (2)) foo(i) ORDER BY i);
68+
SELECT JSON_ARRAYAGG(i) IS NULL,
69+
JSON_ARRAYAGG(i RETURNING jsonb) IS NULL
70+
FROM generate_series(1, 0) i;
71+
SELECT JSON_ARRAYAGG(i),
72+
JSON_ARRAYAGG(i RETURNING jsonb)
73+
FROM generate_series(1, 5) i;
74+
SELECT JSON_ARRAYAGG(i ORDER BY i DESC)
75+
FROM generate_series(1, 5) i;
76+
SELECT JSON_ARRAYAGG(i::text::json)
77+
FROM generate_series(1, 5) i;
78+
SELECT JSON_ARRAYAGG(JSON_ARRAY(i, i + 1 RETURNING text) FORMAT JSON)
79+
FROM generate_series(1, 5) i;
80+
SELECT JSON_ARRAYAGG(NULL),
81+
JSON_ARRAYAGG(NULL RETURNING jsonb)
82+
FROM generate_series(1, 5);
83+
SELECT JSON_ARRAYAGG(NULL NULL ON NULL),
84+
JSON_ARRAYAGG(NULL NULL ON NULL RETURNING jsonb)
85+
FROM generate_series(1, 5);
86+
SELECT
87+
JSON_ARRAYAGG(bar) as no_options,
88+
JSON_ARRAYAGG(bar RETURNING jsonb) as returning_jsonb,
89+
JSON_ARRAYAGG(bar ABSENT ON NULL) as absent_on_null,
90+
JSON_ARRAYAGG(bar ABSENT ON NULL RETURNING jsonb) as absentonnull_returning_jsonb,
91+
JSON_ARRAYAGG(bar NULL ON NULL) as null_on_null,
92+
JSON_ARRAYAGG(bar NULL ON NULL RETURNING jsonb) as nullonnull_returning_jsonb,
93+
JSON_ARRAYAGG(foo) as row_no_options,
94+
JSON_ARRAYAGG(foo RETURNING jsonb) as row_returning_jsonb,
95+
JSON_ARRAYAGG(foo ORDER BY bar) FILTER (WHERE bar > 2) as row_filtered_agg,
96+
JSON_ARRAYAGG(foo ORDER BY bar RETURNING jsonb) FILTER (WHERE bar > 2) as row_filtered_agg_returning_jsonb
97+
FROM
98+
(VALUES (NULL), (3), (1), (NULL), (NULL), (5), (2), (4), (NULL)) foo(bar);
99+
SELECT
100+
bar, JSON_ARRAYAGG(bar) FILTER (WHERE bar > 2) OVER (PARTITION BY foo.bar % 2)
101+
FROM
102+
(VALUES (NULL), (3), (1), (NULL), (NULL), (5), (2), (4), (NULL), (5), (4)) foo(bar);
103+
SELECT JSON_OBJECTAGG('key': 1) IS NULL,
104+
JSON_OBJECTAGG('key': 1 RETURNING jsonb) IS NULL
105+
WHERE FALSE;
106+
SELECT
107+
JSON_OBJECTAGG(i: i),
108+
JSON_OBJECTAGG(i: i RETURNING jsonb)
109+
FROM
110+
generate_series(1, 5) i;
111+
SELECT
112+
JSON_OBJECTAGG(k: v),
113+
JSON_OBJECTAGG(k: v NULL ON NULL),
114+
JSON_OBJECTAGG(k: v ABSENT ON NULL),
115+
JSON_OBJECTAGG(k: v RETURNING jsonb),
116+
JSON_OBJECTAGG(k: v NULL ON NULL RETURNING jsonb),
117+
JSON_OBJECTAGG(k: v ABSENT ON NULL RETURNING jsonb)
118+
FROM
119+
(VALUES (1, 1), (1, NULL), (2, NULL), (3, 3)) foo(k, v);
120+
SELECT JSON_OBJECTAGG(k: v ABSENT ON NULL WITH UNIQUE KEYS)
121+
FROM (VALUES (1, 1), (0, NULL), (3, NULL), (2, 2), (4, NULL)) foo(k, v);
122+
EXPLAIN (VERBOSE, COSTS OFF)
123+
SELECT JSON_OBJECT('foo' : '1' FORMAT JSON, 'bar' : 'baz' RETURNING json);
124+
CREATE VIEW json_object_view AS
125+
SELECT JSON_OBJECT('foo' : '1' FORMAT JSON, 'bar' : 'baz' RETURNING json);
126+
DROP VIEW json_object_view;
127+
EXPLAIN (VERBOSE, COSTS OFF)
128+
SELECT JSON_ARRAY('1' FORMAT JSON, 2 RETURNING json);
129+
CREATE VIEW json_array_view AS
130+
SELECT JSON_ARRAY('1' FORMAT JSON, 2 RETURNING json);
131+
DROP VIEW json_array_view;
132+
EXPLAIN (VERBOSE, COSTS OFF)
133+
SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING text) FILTER (WHERE i > 3)
134+
FROM generate_series(1,5) i;
135+
EXPLAIN (VERBOSE, COSTS OFF)
136+
SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING text) OVER (PARTITION BY i % 2)
137+
FROM generate_series(1,5) i;
138+
CREATE VIEW json_objectagg_view AS
139+
SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING text) FILTER (WHERE i > 3)
140+
FROM generate_series(1,5) i;
141+
DROP VIEW json_objectagg_view;
142+
EXPLAIN (VERBOSE, COSTS OFF)
143+
SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING text) FILTER (WHERE i > 3)
144+
FROM generate_series(1,5) i;
145+
EXPLAIN (VERBOSE, COSTS OFF)
146+
SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING text) OVER (PARTITION BY i % 2)
147+
FROM generate_series(1,5) i;
148+
CREATE VIEW json_arrayagg_view AS
149+
SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING text) FILTER (WHERE i > 3)
150+
FROM generate_series(1,5) i;
151+
DROP VIEW json_arrayagg_view;
152+
EXPLAIN (VERBOSE, COSTS OFF)
153+
SELECT JSON_ARRAY(SELECT i FROM (VALUES (1), (2), (NULL), (4)) foo(i) RETURNING jsonb);
154+
CREATE VIEW json_array_subquery_view AS
155+
SELECT JSON_ARRAY(SELECT i FROM (VALUES (1), (2), (NULL), (4)) foo(i) RETURNING jsonb);
156+
DROP VIEW json_array_subquery_view;

0 commit comments

Comments
 (0)