Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 36499c7

Browse files
author
Nikita Glukhov
committed
Add JsonValueExpr transformation
1 parent d020dd6 commit 36499c7

File tree

1 file changed

+30
-16
lines changed

1 file changed

+30
-16
lines changed

src/backend/parser/parse_expr.c

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ static Node *transformJsonObjectAgg(ParseState *pstate, JsonObjectAgg *agg);
132132
static Node *transformJsonArrayAgg(ParseState *pstate, JsonArrayAgg *agg);
133133
static Node *transformJsonIsPredicate(ParseState *pstate, JsonIsPredicate *p);
134134
static Node *transformJsonFuncExpr(ParseState *pstate, JsonFuncExpr *p);
135+
static Node *transformJsonValueExpr(ParseState *pstate, JsonValueExpr *jve);
135136
static Node *make_row_comparison_op(ParseState *pstate, List *opname,
136137
List *largs, List *rargs, int location);
137138
static Node *make_row_distinct_op(ParseState *pstate, List *opname,
@@ -408,6 +409,10 @@ transformExprRecurse(ParseState *pstate, Node *expr)
408409
result = transformJsonFuncExpr(pstate, (JsonFuncExpr *) expr);
409410
break;
410411

412+
case T_JsonValueExpr:
413+
result = transformJsonValueExpr(pstate, (JsonValueExpr *) expr);
414+
break;
415+
411416
default:
412417
/* should not reach here */
413418
elog(ERROR, "unrecognized node type: %d", (int) nodeTag(expr));
@@ -3573,8 +3578,8 @@ makeCaseTestExpr(Node *expr)
35733578
}
35743579

35753580
static Node *
3576-
transformJsonValueExpr(ParseState *pstate, JsonValueExpr *ve,
3577-
JsonFormatType format, Node **rawexpr)
3581+
transformJsonValueExprExt(ParseState *pstate, JsonValueExpr *ve,
3582+
JsonFormatType format, Node **rawexpr)
35783583
{
35793584
Node *expr = transformExprRecurse(pstate, (Node *) ve->expr);
35803585
Oid exprtype;
@@ -3672,6 +3677,18 @@ transformJsonValueExpr(ParseState *pstate, JsonValueExpr *ve,
36723677
return expr;
36733678
}
36743679

3680+
static Node *
3681+
transformJsonValueExpr(ParseState *pstate, JsonValueExpr *jve)
3682+
{
3683+
return transformJsonValueExprExt(pstate, jve, JS_FORMAT_JSON, NULL);
3684+
}
3685+
3686+
static Node *
3687+
transformJsonValueExprDefault(ParseState *pstate, JsonValueExpr *jve)
3688+
{
3689+
return transformJsonValueExprExt(pstate, jve, JS_FORMAT_DEFAULT, NULL);
3690+
}
3691+
36753692
static void
36763693
checkJsonOutputFormat(ParseState *pstate, JsonFormat *format, Oid targettype,
36773694
bool allow_format)
@@ -3826,8 +3843,7 @@ transformJsonObjectCtor(ParseState *pstate, JsonObjectCtor *ctor)
38263843
{
38273844
JsonKeyValue *kv = castNode(JsonKeyValue, lfirst(lc));
38283845
Node *key = transformExprRecurse(pstate, (Node *) kv->key);
3829-
Node *val = transformJsonValueExpr(pstate, kv->value,
3830-
JS_FORMAT_DEFAULT, NULL);
3846+
Node *val = transformJsonValueExprDefault(pstate, kv->value);
38313847

38323848
args = lappend(args, key);
38333849
args = lappend(args, val);
@@ -4001,8 +4017,7 @@ transformJsonObjectAgg(ParseState *pstate, JsonObjectAgg *agg)
40014017
transformJsonOutput(pstate, &agg->ctor.output, true);
40024018

40034019
key = transformExprRecurse(pstate, (Node *) agg->arg->key);
4004-
val = transformJsonValueExpr(pstate, agg->arg->value,
4005-
JS_FORMAT_DEFAULT, NULL);
4020+
val = transformJsonValueExprDefault(pstate, agg->arg->value);
40064021
args = list_make4(key,
40074022
val,
40084023
makeBoolConst(agg->absent_on_null, false),
@@ -4031,7 +4046,7 @@ transformJsonArrayAgg(ParseState *pstate, JsonArrayAgg *agg)
40314046

40324047
transformJsonOutput(pstate, &agg->ctor.output, true);
40334048

4034-
arg = transformJsonValueExpr(pstate, agg->arg, JS_FORMAT_DEFAULT, NULL);
4049+
arg = transformJsonValueExprDefault(pstate, agg->arg);
40354050

40364051
if (agg->ctor.output->returning.format.type == JS_FORMAT_JSONB)
40374052
{
@@ -4065,8 +4080,7 @@ transformJsonArrayCtor(ParseState *pstate, JsonArrayCtor *ctor)
40654080
foreach(lc, ctor->exprs)
40664081
{
40674082
JsonValueExpr *jsval = castNode(JsonValueExpr, lfirst(lc));
4068-
Node *val = transformJsonValueExpr(pstate, jsval,
4069-
JS_FORMAT_DEFAULT, NULL);
4083+
Node *val = transformJsonValueExprDefault(pstate, jsval);
40704084

40714085
args = lappend(args, val);
40724086
}
@@ -4200,10 +4214,9 @@ transformJsonPassingArgs(ParseState *pstate, List *args, JsonPassing *passing)
42004214
foreach(lc, args)
42014215
{
42024216
JsonArgument *arg = castNode(JsonArgument, lfirst(lc));
4203-
Node *expr;
4204-
4205-
expr = transformJsonValueExpr(pstate, arg->val,
4206-
JS_FORMAT_JSONB_ARG, NULL);
4217+
Node *expr = transformJsonValueExprExt(pstate, arg->val,
4218+
JS_FORMAT_JSONB_ARG,
4219+
NULL);
42074220

42084221
passing->values = lappend(passing->values, expr);
42094222
passing->names = lappend(passing->names, makeString(arg->name));
@@ -4237,9 +4250,10 @@ transformJsonExprCommon(ParseState *pstate, JsonFuncExpr *func)
42374250

42384251
jsexpr->location = func->location;
42394252
jsexpr->op = func->op;
4240-
jsexpr->formatted_expr = transformJsonValueExpr(pstate, func->common->expr,
4241-
JS_FORMAT_JSON,
4242-
&jsexpr->raw_expr);
4253+
jsexpr->formatted_expr = transformJsonValueExprExt(pstate,
4254+
func->common->expr,
4255+
JS_FORMAT_JSON,
4256+
&jsexpr->raw_expr);
42434257
if (jsexpr->formatted_expr == jsexpr->raw_expr)
42444258
jsexpr->formatted_expr = NULL;
42454259

0 commit comments

Comments
 (0)