Skip to content

Commit e3c1393

Browse files
committed
SQL/JSON: Prevent ON EMPTY for EXISTS columns in JSON_TABLE()
Due to an oversight in de36004, the ON EMPTY clause was incorrectly allowed in the EXISTS column. Fix the grammar to prevent this. Discussion: https://postgr.es/m/CA%2BHiwqHh3YDXTpccgAo4CdfV9Mhy%2Bmg%3Doh6t8rfM5uLW1BJN4g%40mail.gmail.com
1 parent 0ad8153 commit e3c1393

File tree

3 files changed

+11
-3
lines changed

3 files changed

+11
-3
lines changed

src/backend/parser/gram.y

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14265,7 +14265,7 @@ json_table_column_definition:
1426514265
}
1426614266
| ColId Typename
1426714267
EXISTS json_table_column_path_clause_opt
14268-
json_behavior_clause_opt
14268+
json_on_error_clause_opt
1426914269
{
1427014270
JsonTableColumn *n = makeNode(JsonTableColumn);
1427114271

@@ -14276,8 +14276,8 @@ json_table_column_definition:
1427614276
n->wrapper = JSW_NONE;
1427714277
n->quotes = JS_QUOTES_UNSPEC;
1427814278
n->pathspec = (JsonTablePathSpec *) $4;
14279-
n->on_empty = (JsonBehavior *) linitial($5);
14280-
n->on_error = (JsonBehavior *) lsecond($5);
14279+
n->on_empty = NULL;
14280+
n->on_error = (JsonBehavior *) $5;
1428114281
n->location = @1;
1428214282
$$ = (Node *) n;
1428314283
}

src/test/regress/expected/sqljson_jsontable.out

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1067,3 +1067,8 @@ CREATE OR REPLACE VIEW public.jsonb_table_view7 AS
10671067
) sub
10681068
DROP VIEW jsonb_table_view7;
10691069
DROP TABLE s;
1070+
-- Prevent ON EMPTY specification on EXISTS columns
1071+
SELECT * FROM JSON_TABLE(jsonb '1', '$' COLUMNS (a int exists empty object on empty));
1072+
ERROR: syntax error at or near "empty"
1073+
LINE 1: ...sonb '1', '$' COLUMNS (a int exists empty object on empty));
1074+
^

src/test/regress/sql/sqljson_jsontable.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,3 +518,6 @@ SELECT sub.* FROM s,
518518
\sv jsonb_table_view7
519519
DROP VIEW jsonb_table_view7;
520520
DROP TABLE s;
521+
522+
-- Prevent ON EMPTY specification on EXISTS columns
523+
SELECT * FROM JSON_TABLE(jsonb '1', '$' COLUMNS (a int exists empty object on empty));

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