0005-Get-rid-of-JsonBehaviorClause.patch.nocfbot
text/plain
Filename: 0005-Get-rid-of-JsonBehaviorClause.patch.nocfbot
Type: text/plain
Part: 4
Message:
Re: remaining sql/json patches
From 34795db318b16892926dae9ebc848827771136fa Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
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 <list> json_name_and_value_list
json_value_expr_list
json_array_aggregate_order_by_clause_opt
json_arguments
+ json_behavior_clause_opt
%type <ival> 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