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