@@ -3222,8 +3222,8 @@ makeCaseTestExpr(Node *expr)
3222
3222
* default format otherwise.
3223
3223
*/
3224
3224
static Node *
3225
- transformJsonValueExpr (ParseState * pstate , JsonValueExpr * ve ,
3226
- JsonFormatType default_format )
3225
+ transformJsonValueExpr (ParseState * pstate , char * constructName ,
3226
+ JsonValueExpr * ve , JsonFormatType default_format )
3227
3227
{
3228
3228
Node * expr = transformExprRecurse (pstate , (Node * ) ve -> raw_expr );
3229
3229
Node * rawexpr ;
@@ -3233,12 +3233,8 @@ transformJsonValueExpr(ParseState *pstate, JsonValueExpr *ve,
3233
3233
char typcategory ;
3234
3234
bool typispreferred ;
3235
3235
3236
- /*
3237
- * Using JSON_VALUE here is slightly bogus: perhaps we need to be passed a
3238
- * JsonConstructorType so that we can use one of JSON_OBJECTAGG, etc.
3239
- */
3240
3236
if (exprType (expr ) == UNKNOWNOID )
3241
- expr = coerce_to_specific_type (pstate , expr , TEXTOID , "JSON_VALUE" );
3237
+ expr = coerce_to_specific_type (pstate , expr , TEXTOID , constructName );
3242
3238
3243
3239
rawexpr = expr ;
3244
3240
exprtype = exprType (expr );
@@ -3588,7 +3584,8 @@ transformJsonObjectConstructor(ParseState *pstate, JsonObjectConstructor *ctor)
3588
3584
{
3589
3585
JsonKeyValue * kv = castNode (JsonKeyValue , lfirst (lc ));
3590
3586
Node * key = transformExprRecurse (pstate , (Node * ) kv -> key );
3591
- Node * val = transformJsonValueExpr (pstate , kv -> value ,
3587
+ Node * val = transformJsonValueExpr (pstate , "JSON_OBJECT()" ,
3588
+ kv -> value ,
3592
3589
JS_FORMAT_DEFAULT );
3593
3590
3594
3591
args = lappend (args , key );
@@ -3768,7 +3765,9 @@ transformJsonObjectAgg(ParseState *pstate, JsonObjectAgg *agg)
3768
3765
Oid aggtype ;
3769
3766
3770
3767
key = transformExprRecurse (pstate , (Node * ) agg -> arg -> key );
3771
- val = transformJsonValueExpr (pstate , agg -> arg -> value , JS_FORMAT_DEFAULT );
3768
+ val = transformJsonValueExpr (pstate , "JSON_OBJECTAGG()" ,
3769
+ agg -> arg -> value ,
3770
+ JS_FORMAT_DEFAULT );
3772
3771
args = list_make2 (key , val );
3773
3772
3774
3773
returning = transformJsonConstructorOutput (pstate , agg -> constructor -> output ,
@@ -3824,7 +3823,9 @@ transformJsonArrayAgg(ParseState *pstate, JsonArrayAgg *agg)
3824
3823
Oid aggfnoid ;
3825
3824
Oid aggtype ;
3826
3825
3827
- arg = transformJsonValueExpr (pstate , agg -> arg , JS_FORMAT_DEFAULT );
3826
+ arg = transformJsonValueExpr (pstate , "JSON_ARRAYAGG()" ,
3827
+ agg -> arg ,
3828
+ JS_FORMAT_DEFAULT );
3828
3829
3829
3830
returning = transformJsonConstructorOutput (pstate , agg -> constructor -> output ,
3830
3831
list_make1 (arg ));
@@ -3870,7 +3871,8 @@ transformJsonArrayConstructor(ParseState *pstate, JsonArrayConstructor *ctor)
3870
3871
foreach (lc , ctor -> exprs )
3871
3872
{
3872
3873
JsonValueExpr * jsval = castNode (JsonValueExpr , lfirst (lc ));
3873
- Node * val = transformJsonValueExpr (pstate , jsval ,
3874
+ Node * val = transformJsonValueExpr (pstate , "JSON_ARRAY()" ,
3875
+ jsval ,
3874
3876
JS_FORMAT_DEFAULT );
3875
3877
3876
3878
args = lappend (args , val );
0 commit comments