@@ -3222,8 +3222,8 @@ makeCaseTestExpr(Node *expr)
32223222 * default format otherwise.
32233223 */
32243224static Node *
3225- transformJsonValueExpr (ParseState * pstate ,JsonValueExpr * ve ,
3226- JsonFormatType default_format )
3225+ transformJsonValueExpr (ParseState * pstate ,char * constructName ,
3226+ JsonValueExpr * ve , JsonFormatType default_format )
32273227{
32283228Node * expr = transformExprRecurse (pstate , (Node * )ve -> raw_expr );
32293229Node * rawexpr ;
@@ -3233,12 +3233,8 @@ transformJsonValueExpr(ParseState *pstate, JsonValueExpr *ve,
32333233char typcategory ;
32343234bool typispreferred ;
32353235
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- */
32403236if (exprType (expr )== UNKNOWNOID )
3241- expr = coerce_to_specific_type (pstate ,expr ,TEXTOID ,"JSON_VALUE" );
3237+ expr = coerce_to_specific_type (pstate ,expr ,TEXTOID ,constructName );
32423238
32433239rawexpr = expr ;
32443240exprtype = exprType (expr );
@@ -3588,7 +3584,8 @@ transformJsonObjectConstructor(ParseState *pstate, JsonObjectConstructor *ctor)
35883584{
35893585JsonKeyValue * kv = castNode (JsonKeyValue ,lfirst (lc ));
35903586Node * key = transformExprRecurse (pstate , (Node * )kv -> key );
3591- Node * val = transformJsonValueExpr (pstate ,kv -> value ,
3587+ Node * val = transformJsonValueExpr (pstate ,"JSON_OBJECT()" ,
3588+ kv -> value ,
35923589JS_FORMAT_DEFAULT );
35933590
35943591args = lappend (args ,key );
@@ -3768,7 +3765,9 @@ transformJsonObjectAgg(ParseState *pstate, JsonObjectAgg *agg)
37683765Oid aggtype ;
37693766
37703767key = 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 );
37723771args = list_make2 (key ,val );
37733772
37743773returning = transformJsonConstructorOutput (pstate ,agg -> constructor -> output ,
@@ -3824,7 +3823,9 @@ transformJsonArrayAgg(ParseState *pstate, JsonArrayAgg *agg)
38243823Oid aggfnoid ;
38253824Oid aggtype ;
38263825
3827- arg = transformJsonValueExpr (pstate ,agg -> arg ,JS_FORMAT_DEFAULT );
3826+ arg = transformJsonValueExpr (pstate ,"JSON_ARRAYAGG()" ,
3827+ agg -> arg ,
3828+ JS_FORMAT_DEFAULT );
38283829
38293830returning = transformJsonConstructorOutput (pstate ,agg -> constructor -> output ,
38303831list_make1 (arg ));
@@ -3870,7 +3871,8 @@ transformJsonArrayConstructor(ParseState *pstate, JsonArrayConstructor *ctor)
38703871foreach (lc ,ctor -> exprs )
38713872{
38723873JsonValueExpr * jsval = castNode (JsonValueExpr ,lfirst (lc ));
3873- Node * val = transformJsonValueExpr (pstate ,jsval ,
3874+ Node * val = transformJsonValueExpr (pstate ,"JSON_ARRAY()" ,
3875+ jsval ,
38743876JS_FORMAT_DEFAULT );
38753877
38763878args = lappend (args ,val );