@@ -259,7 +259,11 @@ exprType(const Node *expr)
259
259
type = exprType ((Node * ) ((const PlaceHolderVar * )expr )-> phexpr );
260
260
break ;
261
261
case T_JsonValueExpr :
262
- type = exprType ((Node * ) ((const JsonValueExpr * )expr )-> expr );
262
+ {
263
+ const JsonValueExpr * jve = (const JsonValueExpr * )expr ;
264
+
265
+ type = exprType ((Node * ) (jve -> formatted_expr ?jve -> formatted_expr :jve -> raw_expr ));
266
+ }
263
267
break ;
264
268
default :
265
269
elog (ERROR ,"unrecognized node type: %d" , (int )nodeTag (expr ));
@@ -495,7 +499,7 @@ exprTypmod(const Node *expr)
495
499
case T_PlaceHolderVar :
496
500
return exprTypmod ((Node * ) ((const PlaceHolderVar * )expr )-> phexpr );
497
501
case T_JsonValueExpr :
498
- return exprTypmod ((Node * ) ((const JsonValueExpr * )expr )-> expr );
502
+ return exprTypmod ((Node * ) ((const JsonValueExpr * )expr )-> formatted_expr );
499
503
default :
500
504
break ;
501
505
}
@@ -912,7 +916,7 @@ exprCollation(const Node *expr)
912
916
coll = exprCollation ((Node * ) ((const PlaceHolderVar * )expr )-> phexpr );
913
917
break ;
914
918
case T_JsonValueExpr :
915
- coll = exprCollation ((Node * ) ((const JsonValueExpr * )expr )-> expr );
919
+ coll = exprCollation ((Node * ) ((const JsonValueExpr * )expr )-> formatted_expr );
916
920
break ;
917
921
default :
918
922
elog (ERROR ,"unrecognized node type: %d" , (int )nodeTag (expr ));
@@ -1118,7 +1122,7 @@ exprSetCollation(Node *expr, Oid collation)
1118
1122
* type */
1119
1123
break ;
1120
1124
case T_JsonValueExpr :
1121
- exprSetCollation ((Node * ) ((const JsonValueExpr * )expr )-> expr ,
1125
+ exprSetCollation ((Node * ) ((JsonValueExpr * )expr )-> formatted_expr ,
1122
1126
collation );
1123
1127
break ;
1124
1128
default :
@@ -1562,7 +1566,7 @@ exprLocation(const Node *expr)
1562
1566
loc = ((const PartitionRangeDatum * )expr )-> location ;
1563
1567
break ;
1564
1568
case T_JsonValueExpr :
1565
- loc = exprLocation ((Node * ) ((const JsonValueExpr * )expr )-> expr );
1569
+ loc = exprLocation ((Node * ) ((const JsonValueExpr * )expr )-> raw_expr );
1566
1570
break ;
1567
1571
default :
1568
1572
/* for any other node type it's just unknown... */
@@ -2262,7 +2266,15 @@ expression_tree_walker(Node *node,
2262
2266
}
2263
2267
break ;
2264
2268
case T_JsonValueExpr :
2265
- return walker (((JsonValueExpr * )node )-> expr ,context );
2269
+ {
2270
+ JsonValueExpr * jve = (JsonValueExpr * )node ;
2271
+
2272
+ if (walker (jve -> raw_expr ,context ))
2273
+ return true;
2274
+ if (walker (jve -> formatted_expr ,context ))
2275
+ return true;
2276
+ }
2277
+ break ;
2266
2278
default :
2267
2279
elog (ERROR ,"unrecognized node type: %d" ,
2268
2280
(int )nodeTag (node ));
@@ -3192,7 +3204,8 @@ expression_tree_mutator(Node *node,
3192
3204
JsonValueExpr * newnode ;
3193
3205
3194
3206
FLATCOPY (newnode ,jve ,JsonValueExpr );
3195
- MUTATE (newnode -> expr ,jve -> expr ,Expr * );
3207
+ MUTATE (newnode -> raw_expr ,jve -> raw_expr ,Expr * );
3208
+ MUTATE (newnode -> formatted_expr ,jve -> formatted_expr ,Expr * );
3196
3209
3197
3210
return (Node * )newnode ;
3198
3211
}
@@ -3892,7 +3905,15 @@ raw_expression_tree_walker(Node *node,
3892
3905
case T_CommonTableExpr :
3893
3906
return walker (((CommonTableExpr * )node )-> ctequery ,context );
3894
3907
case T_JsonValueExpr :
3895
- return walker (((JsonValueExpr * )node )-> expr ,context );
3908
+ {
3909
+ JsonValueExpr * jve = (JsonValueExpr * )node ;
3910
+
3911
+ if (walker (jve -> raw_expr ,context ))
3912
+ return true;
3913
+ if (walker (jve -> formatted_expr ,context ))
3914
+ return true;
3915
+ }
3916
+ break ;
3896
3917
default :
3897
3918
elog (ERROR ,"unrecognized node type: %d" ,
3898
3919
(int )nodeTag (node ));