@@ -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 );