v3-0002-Don-t-include-CaseTestExpr-in-JsonValueExpr.forma.patch

application/octet-stream

Filename: v3-0002-Don-t-include-CaseTestExpr-in-JsonValueExpr.forma.patch
Type: application/octet-stream
Part: 1
Message: Re: remaining sql/json patches

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: format-patch
Series: patch v3-0002
Subject: Don't include CaseTestExpr in JsonValueExpr.formatted_expr
File+
src/backend/executor/execExpr.c 0 11
src/backend/optimizer/util/clauses.c 0 5
src/backend/parser/parse_expr.c 2 5
From 2f81e3d0b4b95dbf4a7d92cd52f8f682dc2046a1 Mon Sep 17 00:00:00 2001
From: Amit Langote <amitlan@postgresql.org>
Date: Fri, 7 Jul 2023 20:21:58 +0900
Subject: [PATCH v3 2/6] Don't include CaseTestExpr in
 JsonValueExpr.formatted_expr

There doesn't appear to be any need for it.
---
 src/backend/executor/execExpr.c      | 11 -----------
 src/backend/optimizer/util/clauses.c |  5 -----
 src/backend/parser/parse_expr.c      |  7 ++-----
 3 files changed, 2 insertions(+), 21 deletions(-)

diff --git a/src/backend/executor/execExpr.c b/src/backend/executor/execExpr.c
index e6e616865c..21f7796e63 100644
--- a/src/backend/executor/execExpr.c
+++ b/src/backend/executor/execExpr.c
@@ -2297,18 +2297,7 @@ ExecInitExprRec(Expr *node, ExprState *state,
 				ExecInitExprRec(jve->raw_expr, state, resv, resnull);
 
 				if (jve->formatted_expr)
-				{
-					Datum	   *innermost_caseval = state->innermost_caseval;
-					bool	   *innermost_isnull = state->innermost_casenull;
-
-					state->innermost_caseval = resv;
-					state->innermost_casenull = resnull;
-
 					ExecInitExprRec(jve->formatted_expr, state, resv, resnull);
-
-					state->innermost_caseval = innermost_caseval;
-					state->innermost_casenull = innermost_isnull;
-				}
 				break;
 			}
 
diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c
index 7f453b04f8..59d8ce789e 100644
--- a/src/backend/optimizer/util/clauses.c
+++ b/src/backend/optimizer/util/clauses.c
@@ -2834,15 +2834,10 @@ eval_const_expressions_mutator(Node *node,
 				if (raw && IsA(raw, Const))
 				{
 					Node	   *formatted;
-					Node	   *save_case_val = context->case_val;
-
-					context->case_val = raw;
 
 					formatted = eval_const_expressions_mutator((Node *) jve->formatted_expr,
 															   context);
 
-					context->case_val = save_case_val;
-
 					if (formatted && IsA(formatted, Const))
 						return formatted;
 				}
diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c
index 9e8a2ac22b..f02343ef64 100644
--- a/src/backend/parser/parse_expr.c
+++ b/src/backend/parser/parse_expr.c
@@ -3269,11 +3269,8 @@ transformJsonValueExpr(ParseState *pstate, JsonValueExpr *ve,
 	if (format != JS_FORMAT_DEFAULT)
 	{
 		Oid			targettype = format == JS_FORMAT_JSONB ? JSONBOID : JSONOID;
-		Node	   *orig = makeCaseTestExpr(expr);
 		Node	   *coerced;
 
-		expr = orig;
-
 		if (exprtype != BYTEAOID && typcategory != TYPCATEGORY_STRING)
 			ereport(ERROR,
 					errcode(ERRCODE_DATATYPE_MISMATCH),
@@ -3311,7 +3308,7 @@ transformJsonValueExpr(ParseState *pstate, JsonValueExpr *ve,
 			coerced = (Node *) fexpr;
 		}
 
-		if (coerced == orig)
+		if (coerced == expr)
 			expr = rawexpr;
 		else
 		{
@@ -3899,7 +3896,7 @@ transformJsonParseArg(ParseState *pstate, Node *jsexpr, JsonFormat *format,
 	{
 		JsonValueExpr *jve;
 
-		expr = makeCaseTestExpr(raw_expr);
+		expr = raw_expr;
 		expr = makeJsonByteaToTextConversion(expr, format, exprLocation(expr));
 		*exprtype = TEXTOID;
 
-- 
2.35.3