v1-0001-minor-refactor-transformJsonFuncExpr.based_on_v36

application/octet-stream

Filename: v1-0001-minor-refactor-transformJsonFuncExpr.based_on_v36
Type: application/octet-stream
Part: 0
Message: Re: remaining sql/json patches
From 1de5a1fab5de6447936f062cfa9231c8890f9721 Mon Sep 17 00:00:00 2001
From: jian he <jian.universality@gmail.com>
Date: Tue, 23 Jan 2024 16:31:12 +0800
Subject: [PATCH v1 1/1] minor refactor transformJsonFuncExpr

JSON_VALUE by default is omit_quote, however transformJsonExprCommon will
initialize it to false via 'makeNode(JsonExpr)'.
So set it explicitly.
no need to set jsexpr->result_coercion at transformJsonExprCommon, since makeNode will
make jsexpr->result_coercion be NULL;

Accordingly, we also need refactor function coerceJsonFuncExprOutput.
make JSON_VALUE result_coercion via CaseTestExpr.
---
 src/backend/parser/parse_expr.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c
index b1908c36..3f03aef0 100644
--- a/src/backend/parser/parse_expr.c
+++ b/src/backend/parser/parse_expr.c
@@ -4358,6 +4358,7 @@ transformJsonFuncExpr(ParseState *pstate, JsonFuncExpr *func)
 				jsexpr->returning->typid = TEXTOID;
 				jsexpr->returning->typmod = -1;
 			}
+			jsexpr->omit_quotes = true;
 			jsexpr->result_coercion = coerceJsonFuncExprOutput(pstate, jsexpr);
 
 			/*
@@ -4426,10 +4427,6 @@ transformJsonExprCommon(ParseState *pstate, JsonFuncExpr *func,
 
 	jsexpr->format = func->context_item->format;
 
-	/* Both set in the caller. */
-	jsexpr->result_coercion = NULL;
-	jsexpr->omit_quotes = false;
-
 	pathspec = transformExprRecurse(pstate, func->pathspec);
 
 	jsexpr->path_spec =
@@ -4510,7 +4507,8 @@ coerceJsonFuncExprOutput(ParseState *pstate, JsonExpr *jsexpr)
 	 * Use a JsonCoercion node to implement a non-default QUOTES or WRAPPER
 	 * behavior.
 	 */
-	if (jsexpr->omit_quotes || jsexpr->wrapper != JSW_UNSPEC)
+	if (jsexpr->op == JSON_QUERY_OP &&
+		(jsexpr->omit_quotes || jsexpr->wrapper != JSW_UNSPEC))
 	{
 		JsonCoercion *coercion = makeJsonCoercion(returning);
 
-- 
2.34.1