Skip to content

Commit d3fe6e9

Browse files
committed
Simplify productions for FORMAT JSON [ ENCODING name ]
This removes the production json_encoding_clause_opt, instead merging it into json_format_clause. Also remove the auxiliary makeJsonEncoding() function. Reviewed-by: Amit Langote <amitlangote09@gmail.com> Discussion: https://postgr.es/m/202312071841.u2gueb5dsrbk%40alvherre.pgsql
1 parent c7a3e6b commit d3fe6e9

File tree

3 files changed

+33
-38
lines changed

3 files changed

+33
-38
lines changed

src/backend/nodes/makefuncs.c

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -857,27 +857,6 @@ makeJsonValueExpr(Expr *raw_expr, Expr *formatted_expr,
857857
return jve;
858858
}
859859

860-
/*
861-
* makeJsonEncoding -
862-
* converts JSON encoding name to enum JsonEncoding
863-
*/
864-
JsonEncoding
865-
makeJsonEncoding(char *name)
866-
{
867-
if (!pg_strcasecmp(name, "utf8"))
868-
return JS_ENC_UTF8;
869-
if (!pg_strcasecmp(name, "utf16"))
870-
return JS_ENC_UTF16;
871-
if (!pg_strcasecmp(name, "utf32"))
872-
return JS_ENC_UTF32;
873-
874-
ereport(ERROR,
875-
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
876-
errmsg("unrecognized JSON encoding: %s", name));
877-
878-
return JS_ENC_DEFAULT;
879-
}
880-
881860
/*
882861
* makeJsonKeyValue -
883862
* creates a JsonKeyValue node

src/backend/parser/gram.y

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -645,16 +645,16 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
645645
%type <list> hash_partbound
646646
%type <defelt> hash_partbound_elem
647647

648-
%type <node> json_format_clause_opt
648+
%type <node> json_format_clause
649+
json_format_clause_opt
649650
json_value_expr
650651
json_returning_clause_opt
651652
json_name_and_value
652653
json_aggregate_func
653654
%type <list> json_name_and_value_list
654655
json_value_expr_list
655656
json_array_aggregate_order_by_clause_opt
656-
%type <ival> json_encoding_clause_opt
657-
json_predicate_type_constraint
657+
%type <ival> json_predicate_type_constraint
658658
%type <boolean> json_key_uniqueness_constraint_opt
659659
json_object_constructor_null_clause_opt
660660
json_array_constructor_null_clause_opt
@@ -14962,12 +14962,11 @@ a_expr: c_expr { $$ = $1; }
1496214962
/*
1496314963
* Required by SQL/JSON, but there are conflicts
1496414964
| a_expr
14965-
FORMAT_LA JSON json_encoding_clause_opt
14965+
json_format_clause
1496614966
IS json_predicate_type_constraint
1496714967
json_key_uniqueness_constraint_opt %prec IS
1496814968
{
14969-
$3.location = @2;
14970-
$$ = makeJsonIsPredicate($1, $3, $5, $6, @1);
14969+
$$ = makeJsonIsPredicate($1, $2, $4, $5, @1);
1497114970
}
1497214971
*/
1497314972
| a_expr IS NOT
@@ -14981,13 +14980,12 @@ a_expr: c_expr { $$ = $1; }
1498114980
/*
1498214981
* Required by SQL/JSON, but there are conflicts
1498314982
| a_expr
14984-
FORMAT_LA JSON json_encoding_clause_opt
14983+
json_format_clause
1498514984
IS NOT
1498614985
json_predicate_type_constraint
1498714986
json_key_uniqueness_constraint_opt %prec IS
1498814987
{
14989-
$3.location = @2;
14990-
$$ = makeNotExpr(makeJsonIsPredicate($1, $3, $6, $7, @1), @1);
14988+
$$ = makeNotExpr(makeJsonIsPredicate($1, $2, $5, $6, @1), @1);
1499114989
}
1499214990
*/
1499314991
| DEFAULT
@@ -16503,22 +16501,41 @@ json_value_expr:
1650316501
}
1650416502
;
1650516503

16504+
json_format_clause:
16505+
FORMAT_LA JSON ENCODING name
16506+
{
16507+
int encoding;
16508+
16509+
if (!pg_strcasecmp($4, "utf8"))
16510+
encoding = JS_ENC_UTF8;
16511+
else if (!pg_strcasecmp($4, "utf16"))
16512+
encoding = JS_ENC_UTF16;
16513+
else if (!pg_strcasecmp($4, "utf32"))
16514+
encoding = JS_ENC_UTF32;
16515+
else
16516+
ereport(ERROR,
16517+
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
16518+
errmsg("unrecognized JSON encoding: %s", $4));
16519+
16520+
$$ = (Node *) makeJsonFormat(JS_FORMAT_JSON, encoding, @1);
16521+
}
16522+
| FORMAT_LA JSON
16523+
{
16524+
$$ = (Node *) makeJsonFormat(JS_FORMAT_JSON, JS_ENC_DEFAULT, @1);
16525+
}
16526+
;
16527+
1650616528
json_format_clause_opt:
16507-
FORMAT_LA JSON json_encoding_clause_opt
16529+
json_format_clause
1650816530
{
16509-
$$ = (Node *) makeJsonFormat(JS_FORMAT_JSON, $3, @1);
16531+
$$ = $1;
1651016532
}
1651116533
| /* EMPTY */
1651216534
{
1651316535
$$ = (Node *) makeJsonFormat(JS_FORMAT_DEFAULT, JS_ENC_DEFAULT, -1);
1651416536
}
1651516537
;
1651616538

16517-
json_encoding_clause_opt:
16518-
ENCODING name { $$ = makeJsonEncoding($2); }
16519-
| /* EMPTY */ { $$ = JS_ENC_DEFAULT; }
16520-
;
16521-
1652216539
json_returning_clause_opt:
1652316540
RETURNING Typename json_format_clause_opt
1652416541
{

src/include/nodes/makefuncs.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,5 @@ extern Node *makeJsonKeyValue(Node *key, Node *value);
116116
extern Node *makeJsonIsPredicate(Node *expr, JsonFormat *format,
117117
JsonValueType item_type, bool unique_keys,
118118
int location);
119-
extern JsonEncoding makeJsonEncoding(char *name);
120119

121120
#endif /* MAKEFUNC_H */

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