@@ -132,6 +132,7 @@ static Node *transformJsonObjectAgg(ParseState *pstate, JsonObjectAgg *agg);
132
132
static Node * transformJsonArrayAgg (ParseState * pstate , JsonArrayAgg * agg );
133
133
static Node * transformJsonIsPredicate (ParseState * pstate , JsonIsPredicate * p );
134
134
static Node * transformJsonFuncExpr (ParseState * pstate , JsonFuncExpr * p );
135
+ static Node * transformJsonValueExpr (ParseState * pstate , JsonValueExpr * jve );
135
136
static Node * make_row_comparison_op (ParseState * pstate , List * opname ,
136
137
List * largs , List * rargs , int location );
137
138
static Node * make_row_distinct_op (ParseState * pstate , List * opname ,
@@ -408,6 +409,10 @@ transformExprRecurse(ParseState *pstate, Node *expr)
408
409
result = transformJsonFuncExpr (pstate , (JsonFuncExpr * ) expr );
409
410
break ;
410
411
412
+ case T_JsonValueExpr :
413
+ result = transformJsonValueExpr (pstate , (JsonValueExpr * ) expr );
414
+ break ;
415
+
411
416
default :
412
417
/* should not reach here */
413
418
elog (ERROR , "unrecognized node type: %d" , (int ) nodeTag (expr ));
@@ -3573,8 +3578,8 @@ makeCaseTestExpr(Node *expr)
3573
3578
}
3574
3579
3575
3580
static Node *
3576
- transformJsonValueExpr (ParseState * pstate , JsonValueExpr * ve ,
3577
- JsonFormatType format , Node * * rawexpr )
3581
+ transformJsonValueExprExt (ParseState * pstate , JsonValueExpr * ve ,
3582
+ JsonFormatType format , Node * * rawexpr )
3578
3583
{
3579
3584
Node * expr = transformExprRecurse (pstate , (Node * ) ve -> expr );
3580
3585
Oid exprtype ;
@@ -3672,6 +3677,18 @@ transformJsonValueExpr(ParseState *pstate, JsonValueExpr *ve,
3672
3677
return expr ;
3673
3678
}
3674
3679
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
+
3675
3692
static void
3676
3693
checkJsonOutputFormat (ParseState * pstate , JsonFormat * format , Oid targettype ,
3677
3694
bool allow_format )
@@ -3826,8 +3843,7 @@ transformJsonObjectCtor(ParseState *pstate, JsonObjectCtor *ctor)
3826
3843
{
3827
3844
JsonKeyValue * kv = castNode (JsonKeyValue , lfirst (lc ));
3828
3845
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 );
3831
3847
3832
3848
args = lappend (args , key );
3833
3849
args = lappend (args , val );
@@ -4001,8 +4017,7 @@ transformJsonObjectAgg(ParseState *pstate, JsonObjectAgg *agg)
4001
4017
transformJsonOutput (pstate , & agg -> ctor .output , true);
4002
4018
4003
4019
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 );
4006
4021
args = list_make4 (key ,
4007
4022
val ,
4008
4023
makeBoolConst (agg -> absent_on_null , false),
@@ -4031,7 +4046,7 @@ transformJsonArrayAgg(ParseState *pstate, JsonArrayAgg *agg)
4031
4046
4032
4047
transformJsonOutput (pstate , & agg -> ctor .output , true);
4033
4048
4034
- arg = transformJsonValueExpr (pstate , agg -> arg , JS_FORMAT_DEFAULT , NULL );
4049
+ arg = transformJsonValueExprDefault (pstate , agg -> arg );
4035
4050
4036
4051
if (agg -> ctor .output -> returning .format .type == JS_FORMAT_JSONB )
4037
4052
{
@@ -4065,8 +4080,7 @@ transformJsonArrayCtor(ParseState *pstate, JsonArrayCtor *ctor)
4065
4080
foreach (lc , ctor -> exprs )
4066
4081
{
4067
4082
JsonValueExpr * jsval = castNode (JsonValueExpr , lfirst (lc ));
4068
- Node * val = transformJsonValueExpr (pstate , jsval ,
4069
- JS_FORMAT_DEFAULT , NULL );
4083
+ Node * val = transformJsonValueExprDefault (pstate , jsval );
4070
4084
4071
4085
args = lappend (args , val );
4072
4086
}
@@ -4200,10 +4214,9 @@ transformJsonPassingArgs(ParseState *pstate, List *args, JsonPassing *passing)
4200
4214
foreach (lc , args )
4201
4215
{
4202
4216
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 );
4207
4220
4208
4221
passing -> values = lappend (passing -> values , expr );
4209
4222
passing -> names = lappend (passing -> names , makeString (arg -> name ));
@@ -4237,9 +4250,10 @@ transformJsonExprCommon(ParseState *pstate, JsonFuncExpr *func)
4237
4250
4238
4251
jsexpr -> location = func -> location ;
4239
4252
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 );
4243
4257
if (jsexpr -> formatted_expr == jsexpr -> raw_expr )
4244
4258
jsexpr -> formatted_expr = NULL ;
4245
4259
0 commit comments