From 34795db318b16892926dae9ebc848827771136fa Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 21 Nov 2023 07:21:03 +0100 Subject: [PATCH 5/6] Get rid of JsonBehaviorClause --- src/backend/nodes/makefuncs.c | 17 ----------------- src/backend/nodes/nodeFuncs.c | 10 ---------- src/backend/parser/gram.y | 16 ++++++++-------- src/backend/parser/parse_expr.c | 4 ++-- src/include/nodes/makefuncs.h | 3 --- src/include/nodes/parsenodes.h | 14 +------------- src/tools/pgindent/typedefs.list | 1 - 7 files changed, 11 insertions(+), 54 deletions(-) diff --git a/src/backend/nodes/makefuncs.c b/src/backend/nodes/makefuncs.c index 746ed3d1da..a3757af6cf 100644 --- a/src/backend/nodes/makefuncs.c +++ b/src/backend/nodes/makefuncs.c @@ -857,23 +857,6 @@ makeJsonValueExpr(Expr *raw_expr, Expr *formatted_expr, return jve; } -/* - * makeJsonBehaviorClause - - * creates a JsonBehaviorClause node - */ -JsonBehaviorClause * -makeJsonBehaviorClause(JsonBehavior *on_empty, JsonBehavior *on_error, - int location) -{ - JsonBehaviorClause *behavior = makeNode(JsonBehaviorClause); - - behavior->on_empty = on_empty; - behavior->on_error = on_error; - behavior->location = location; - - return behavior; -} - /* * makeJsonBehavior - * creates a JsonBehavior node diff --git a/src/backend/nodes/nodeFuncs.c b/src/backend/nodes/nodeFuncs.c index 8e49ef6b95..7cad662e28 100644 --- a/src/backend/nodes/nodeFuncs.c +++ b/src/backend/nodes/nodeFuncs.c @@ -4093,16 +4093,6 @@ raw_expression_tree_walker_impl(Node *node, return true; } break; - case T_JsonBehaviorClause: - { - JsonBehaviorClause *jbc = (JsonBehaviorClause *) node; - - if (WALK(jbc->on_empty)) - return true; - if (WALK(jbc->on_error)) - return true; - } - break; case T_JsonBehavior: { JsonBehavior *jb = (JsonBehavior *) node; diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 2866d1345c..99585308c8 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -653,11 +653,11 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); json_api_common_syntax json_argument json_behavior - json_behavior_clause_opt %type json_name_and_value_list json_value_expr_list json_array_aggregate_order_by_clause_opt json_arguments + json_behavior_clause_opt %type json_encoding_clause_opt json_predicate_type_constraint json_wrapper_behavior @@ -15777,7 +15777,7 @@ func_expr_common_subexpr: n->output = (JsonOutput *) $4; n->wrapper = $5; n->quotes = $6; - n->behavior = (JsonBehaviorClause *) $7; + n->behavior = $7; n->location = @1; $$ = (Node *) n; } @@ -15792,7 +15792,7 @@ func_expr_common_subexpr: p->op = JSON_EXISTS_OP; p->common = (JsonCommon *) $3; p->output = (JsonOutput *) $4; - p->behavior = (JsonBehaviorClause *) $5; + p->behavior = $5; p->location = @1; $$ = (Node *) p; } @@ -15807,7 +15807,7 @@ func_expr_common_subexpr: n->op = JSON_VALUE_OP; n->common = (JsonCommon *) $3; n->output = (JsonOutput *) $4; - n->behavior = (JsonBehaviorClause *) $5; + n->behavior = $5; n->location = @1; $$ = (Node *) n; } @@ -16677,13 +16677,13 @@ json_behavior: json_behavior_clause_opt: json_behavior ON EMPTY_P - { $$ = (Node *) makeJsonBehaviorClause((JsonBehavior *) $1, NULL, @1); } + { $$ = list_make2($1, NULL); } | json_behavior ON ERROR_P - { $$ = (Node *) makeJsonBehaviorClause(NULL, (JsonBehavior *) $1, @1); } + { $$ = list_make2(NULL, $1); } | json_behavior ON EMPTY_P json_behavior ON ERROR_P - { $$ = (Node *) makeJsonBehaviorClause((JsonBehavior *) $1, (JsonBehavior *) $4, @1); } + { $$ = list_make2($1, $4); } | /* EMPTY */ - { $$ = NULL; } + { $$ = list_make2(NULL, NULL); } ; json_predicate_type_constraint: diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index 1c1f38a808..2f4d3cb118 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -4240,8 +4240,8 @@ transformJsonFuncExpr(ParseState *pstate, JsonFuncExpr *func) if (func->behavior) { - on_error = func->behavior->on_error; - on_empty = func->behavior->on_empty; + on_empty = linitial(func->behavior); + on_error = lsecond(func->behavior); } switch (func->op) diff --git a/src/include/nodes/makefuncs.h b/src/include/nodes/makefuncs.h index 783e82ac92..a850a1928b 100644 --- a/src/include/nodes/makefuncs.h +++ b/src/include/nodes/makefuncs.h @@ -113,9 +113,6 @@ extern JsonFormat *makeJsonFormat(JsonFormatType type, JsonEncoding encoding, extern JsonValueExpr *makeJsonValueExpr(Expr *raw_expr, Expr *formatted_expr, JsonFormat *format); extern JsonBehavior *makeJsonBehavior(JsonBehaviorType type, Node *expr, int location); -extern JsonBehaviorClause *makeJsonBehaviorClause(JsonBehavior *on_empty, - JsonBehavior *on_error, - int location); extern Node *makeJsonKeyValue(Node *key, Node *value); extern Node *makeJsonIsPredicate(Node *expr, JsonFormat *format, JsonValueType item_type, bool unique_keys, diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index ce6893fb91..0f977f935e 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -1703,18 +1703,6 @@ typedef enum JsonQuotes JS_QUOTES_OMIT /* OMIT QUOTES */ } JsonQuotes; -/* - * JsonBehaviorClause - - * representation of JSON ON ERROR / ON EMPTY clause - */ -typedef struct JsonBehaviorClause -{ - NodeTag type; - JsonBehavior *on_empty; /* behavior ON EMPTY */ - JsonBehavior *on_error; /* behavior ON ERROR */ - int location; /* token location, or -1 if unknown */ -} JsonBehaviorClause; - /* * JsonPathSpec - * representation of JSON path constant @@ -1767,7 +1755,7 @@ typedef struct JsonFuncExpr JsonExprOp op; /* expression type */ JsonCommon *common; /* common syntax */ JsonOutput *output; /* output clause, if specified */ - JsonBehaviorClause *behavior; /* ON ERROR / EMPTY behavior, if specified */ + List *behavior; /* ON EMPTY / ERROR behavior, list of two JsonBehavior nodes */ JsonWrapper wrapper; /* array wrapper behavior (JSON_QUERY only) */ JsonQuotes quotes; /* omit or keep quotes? (JSON_QUERY only) */ int location; /* token location, or -1 if unknown */ diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index 3cfa9d756e..9258576b4c 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -1260,7 +1260,6 @@ JsonArrayConstructor JsonArrayQueryConstructor JsonBaseObjectInfo JsonBehavior -JsonBehaviorClause JsonBehaviorType JsonCoercion JsonCoercionState -- 2.42.1