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
This commit is contained in:
parent
c7a3e6b46d
commit
d3fe6e90ba
@ -857,27 +857,6 @@ makeJsonValueExpr(Expr *raw_expr, Expr *formatted_expr,
|
|||||||
return jve;
|
return jve;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* makeJsonEncoding -
|
|
||||||
* converts JSON encoding name to enum JsonEncoding
|
|
||||||
*/
|
|
||||||
JsonEncoding
|
|
||||||
makeJsonEncoding(char *name)
|
|
||||||
{
|
|
||||||
if (!pg_strcasecmp(name, "utf8"))
|
|
||||||
return JS_ENC_UTF8;
|
|
||||||
if (!pg_strcasecmp(name, "utf16"))
|
|
||||||
return JS_ENC_UTF16;
|
|
||||||
if (!pg_strcasecmp(name, "utf32"))
|
|
||||||
return JS_ENC_UTF32;
|
|
||||||
|
|
||||||
ereport(ERROR,
|
|
||||||
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
|
||||||
errmsg("unrecognized JSON encoding: %s", name));
|
|
||||||
|
|
||||||
return JS_ENC_DEFAULT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* makeJsonKeyValue -
|
* makeJsonKeyValue -
|
||||||
* creates a JsonKeyValue node
|
* creates a JsonKeyValue node
|
||||||
|
@ -645,7 +645,8 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
|
|||||||
%type <list> hash_partbound
|
%type <list> hash_partbound
|
||||||
%type <defelt> hash_partbound_elem
|
%type <defelt> hash_partbound_elem
|
||||||
|
|
||||||
%type <node> json_format_clause_opt
|
%type <node> json_format_clause
|
||||||
|
json_format_clause_opt
|
||||||
json_value_expr
|
json_value_expr
|
||||||
json_returning_clause_opt
|
json_returning_clause_opt
|
||||||
json_name_and_value
|
json_name_and_value
|
||||||
@ -653,8 +654,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
|
|||||||
%type <list> json_name_and_value_list
|
%type <list> json_name_and_value_list
|
||||||
json_value_expr_list
|
json_value_expr_list
|
||||||
json_array_aggregate_order_by_clause_opt
|
json_array_aggregate_order_by_clause_opt
|
||||||
%type <ival> json_encoding_clause_opt
|
%type <ival> json_predicate_type_constraint
|
||||||
json_predicate_type_constraint
|
|
||||||
%type <boolean> json_key_uniqueness_constraint_opt
|
%type <boolean> json_key_uniqueness_constraint_opt
|
||||||
json_object_constructor_null_clause_opt
|
json_object_constructor_null_clause_opt
|
||||||
json_array_constructor_null_clause_opt
|
json_array_constructor_null_clause_opt
|
||||||
@ -14962,12 +14962,11 @@ a_expr: c_expr { $$ = $1; }
|
|||||||
/*
|
/*
|
||||||
* Required by SQL/JSON, but there are conflicts
|
* Required by SQL/JSON, but there are conflicts
|
||||||
| a_expr
|
| a_expr
|
||||||
FORMAT_LA JSON json_encoding_clause_opt
|
json_format_clause
|
||||||
IS json_predicate_type_constraint
|
IS json_predicate_type_constraint
|
||||||
json_key_uniqueness_constraint_opt %prec IS
|
json_key_uniqueness_constraint_opt %prec IS
|
||||||
{
|
{
|
||||||
$3.location = @2;
|
$$ = makeJsonIsPredicate($1, $2, $4, $5, @1);
|
||||||
$$ = makeJsonIsPredicate($1, $3, $5, $6, @1);
|
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
| a_expr IS NOT
|
| a_expr IS NOT
|
||||||
@ -14981,13 +14980,12 @@ a_expr: c_expr { $$ = $1; }
|
|||||||
/*
|
/*
|
||||||
* Required by SQL/JSON, but there are conflicts
|
* Required by SQL/JSON, but there are conflicts
|
||||||
| a_expr
|
| a_expr
|
||||||
FORMAT_LA JSON json_encoding_clause_opt
|
json_format_clause
|
||||||
IS NOT
|
IS NOT
|
||||||
json_predicate_type_constraint
|
json_predicate_type_constraint
|
||||||
json_key_uniqueness_constraint_opt %prec IS
|
json_key_uniqueness_constraint_opt %prec IS
|
||||||
{
|
{
|
||||||
$3.location = @2;
|
$$ = makeNotExpr(makeJsonIsPredicate($1, $2, $5, $6, @1), @1);
|
||||||
$$ = makeNotExpr(makeJsonIsPredicate($1, $3, $6, $7, @1), @1);
|
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
| DEFAULT
|
| DEFAULT
|
||||||
@ -16503,10 +16501,34 @@ json_value_expr:
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
json_format_clause_opt:
|
json_format_clause:
|
||||||
FORMAT_LA JSON json_encoding_clause_opt
|
FORMAT_LA JSON ENCODING name
|
||||||
{
|
{
|
||||||
$$ = (Node *) makeJsonFormat(JS_FORMAT_JSON, $3, @1);
|
int encoding;
|
||||||
|
|
||||||
|
if (!pg_strcasecmp($4, "utf8"))
|
||||||
|
encoding = JS_ENC_UTF8;
|
||||||
|
else if (!pg_strcasecmp($4, "utf16"))
|
||||||
|
encoding = JS_ENC_UTF16;
|
||||||
|
else if (!pg_strcasecmp($4, "utf32"))
|
||||||
|
encoding = JS_ENC_UTF32;
|
||||||
|
else
|
||||||
|
ereport(ERROR,
|
||||||
|
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
|
errmsg("unrecognized JSON encoding: %s", $4));
|
||||||
|
|
||||||
|
$$ = (Node *) makeJsonFormat(JS_FORMAT_JSON, encoding, @1);
|
||||||
|
}
|
||||||
|
| FORMAT_LA JSON
|
||||||
|
{
|
||||||
|
$$ = (Node *) makeJsonFormat(JS_FORMAT_JSON, JS_ENC_DEFAULT, @1);
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
json_format_clause_opt:
|
||||||
|
json_format_clause
|
||||||
|
{
|
||||||
|
$$ = $1;
|
||||||
}
|
}
|
||||||
| /* EMPTY */
|
| /* EMPTY */
|
||||||
{
|
{
|
||||||
@ -16514,11 +16536,6 @@ json_format_clause_opt:
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
json_encoding_clause_opt:
|
|
||||||
ENCODING name { $$ = makeJsonEncoding($2); }
|
|
||||||
| /* EMPTY */ { $$ = JS_ENC_DEFAULT; }
|
|
||||||
;
|
|
||||||
|
|
||||||
json_returning_clause_opt:
|
json_returning_clause_opt:
|
||||||
RETURNING Typename json_format_clause_opt
|
RETURNING Typename json_format_clause_opt
|
||||||
{
|
{
|
||||||
|
@ -116,6 +116,5 @@ extern Node *makeJsonKeyValue(Node *key, Node *value);
|
|||||||
extern Node *makeJsonIsPredicate(Node *expr, JsonFormat *format,
|
extern Node *makeJsonIsPredicate(Node *expr, JsonFormat *format,
|
||||||
JsonValueType item_type, bool unique_keys,
|
JsonValueType item_type, bool unique_keys,
|
||||||
int location);
|
int location);
|
||||||
extern JsonEncoding makeJsonEncoding(char *name);
|
|
||||||
|
|
||||||
#endif /* MAKEFUNC_H */
|
#endif /* MAKEFUNC_H */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user