@@ -259,7 +259,11 @@ exprType(const Node *expr)
259259 type = exprType ((Node * ) ((const PlaceHolderVar * ) expr )-> phexpr );
260260 break ;
261261 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+ }
263267 break ;
264268 default :
265269 elog (ERROR , "unrecognized node type: %d" , (int ) nodeTag (expr ));
@@ -495,7 +499,7 @@ exprTypmod(const Node *expr)
495499 case T_PlaceHolderVar :
496500 return exprTypmod ((Node * ) ((const PlaceHolderVar * ) expr )-> phexpr );
497501 case T_JsonValueExpr :
498- return exprTypmod ((Node * ) ((const JsonValueExpr * ) expr )-> expr );
502+ return exprTypmod ((Node * ) ((const JsonValueExpr * ) expr )-> formatted_expr );
499503 default :
500504 break ;
501505 }
@@ -912,7 +916,7 @@ exprCollation(const Node *expr)
912916 coll = exprCollation ((Node * ) ((const PlaceHolderVar * ) expr )-> phexpr );
913917 break ;
914918 case T_JsonValueExpr :
915- coll = exprCollation ((Node * ) ((const JsonValueExpr * ) expr )-> expr );
919+ coll = exprCollation ((Node * ) ((const JsonValueExpr * ) expr )-> formatted_expr );
916920 break ;
917921 default :
918922 elog (ERROR , "unrecognized node type: %d" , (int ) nodeTag (expr ));
@@ -1118,7 +1122,7 @@ exprSetCollation(Node *expr, Oid collation)
11181122 * type */
11191123 break ;
11201124 case T_JsonValueExpr :
1121- exprSetCollation ((Node * ) ((const JsonValueExpr * ) expr )-> expr ,
1125+ exprSetCollation ((Node * ) ((JsonValueExpr * ) expr )-> formatted_expr ,
11221126 collation );
11231127 break ;
11241128 default :
@@ -1562,7 +1566,7 @@ exprLocation(const Node *expr)
15621566 loc = ((const PartitionRangeDatum * ) expr )-> location ;
15631567 break ;
15641568 case T_JsonValueExpr :
1565- loc = exprLocation ((Node * ) ((const JsonValueExpr * ) expr )-> expr );
1569+ loc = exprLocation ((Node * ) ((const JsonValueExpr * ) expr )-> raw_expr );
15661570 break ;
15671571 default :
15681572 /* for any other node type it's just unknown... */
@@ -2262,7 +2266,15 @@ expression_tree_walker(Node *node,
22622266 }
22632267 break ;
22642268 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 ;
22662278 default :
22672279 elog (ERROR , "unrecognized node type: %d" ,
22682280 (int ) nodeTag (node ));
@@ -3192,7 +3204,8 @@ expression_tree_mutator(Node *node,
31923204 JsonValueExpr * newnode ;
31933205
31943206 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 * );
31963209
31973210 return (Node * ) newnode ;
31983211 }
@@ -3892,7 +3905,15 @@ raw_expression_tree_walker(Node *node,
38923905 case T_CommonTableExpr :
38933906 return walker (((CommonTableExpr * ) node )-> ctequery , context );
38943907 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 ;
38963917 default :
38973918 elog (ERROR , "unrecognized node type: %d" ,
38983919 (int ) nodeTag (node ));
0 commit comments