@@ -259,6 +259,9 @@ exprType(const Node *expr)
259259 case T_PlaceHolderVar :
260260 type = exprType ((Node * ) ((const PlaceHolderVar * ) expr )-> phexpr );
261261 break ;
262+ case T_JsonValueExpr :
263+ type = exprType ((Node * ) ((const JsonValueExpr * ) expr )-> expr );
264+ break ;
262265 default :
263266 elog (ERROR , "unrecognized node type: %d" , (int ) nodeTag (expr ));
264267 type = InvalidOid ; /* keep compiler quiet */
@@ -492,6 +495,8 @@ exprTypmod(const Node *expr)
492495 return ((const SetToDefault * ) expr )-> typeMod ;
493496 case T_PlaceHolderVar :
494497 return exprTypmod ((Node * ) ((const PlaceHolderVar * ) expr )-> phexpr );
498+ case T_JsonValueExpr :
499+ return exprTypmod ((Node * ) ((const JsonValueExpr * ) expr )-> expr );
495500 default :
496501 break ;
497502 }
@@ -903,6 +908,9 @@ exprCollation(const Node *expr)
903908 case T_PlaceHolderVar :
904909 coll = exprCollation ((Node * ) ((const PlaceHolderVar * ) expr )-> phexpr );
905910 break ;
911+ case T_JsonValueExpr :
912+ coll = exprCollation ((Node * ) ((const JsonValueExpr * ) expr )-> expr );
913+ break ;
906914 default :
907915 elog (ERROR , "unrecognized node type: %d" , (int ) nodeTag (expr ));
908916 coll = InvalidOid ; /* keep compiler quiet */
@@ -1104,6 +1112,10 @@ exprSetCollation(Node *expr, Oid collation)
11041112 Assert (!OidIsValid (collation )); /* result is always an integer
11051113 * type */
11061114 break ;
1115+ case T_JsonValueExpr :
1116+ exprSetCollation ((Node * ) ((const JsonValueExpr * ) expr )-> expr ,
1117+ collation );
1118+ break ;
11071119 default :
11081120 elog (ERROR , "unrecognized node type: %d" , (int ) nodeTag (expr ));
11091121 break ;
@@ -1544,6 +1556,9 @@ exprLocation(const Node *expr)
15441556 case T_PartitionRangeDatum :
15451557 loc = ((const PartitionRangeDatum * ) expr )-> location ;
15461558 break ;
1559+ case T_JsonValueExpr :
1560+ loc = exprLocation ((Node * ) ((const JsonValueExpr * ) expr )-> expr );
1561+ break ;
15471562 default :
15481563 /* for any other node type it's just unknown... */
15491564 loc = -1 ;
@@ -2229,6 +2244,8 @@ expression_tree_walker(Node *node,
22292244 return true;
22302245 }
22312246 break ;
2247+ case T_JsonValueExpr :
2248+ return walker (((JsonValueExpr * ) node )-> expr , context );
22322249 default :
22332250 elog (ERROR , "unrecognized node type: %d" ,
22342251 (int ) nodeTag (node ));
@@ -3060,6 +3077,16 @@ expression_tree_mutator(Node *node,
30603077 return (Node * ) newnode ;
30613078 }
30623079 break ;
3080+ case T_JsonValueExpr :
3081+ {
3082+ JsonValueExpr * jve = (JsonValueExpr * ) node ;
3083+ JsonValueExpr * newnode ;
3084+
3085+ FLATCOPY (newnode , jve , JsonValueExpr );
3086+ MUTATE (newnode -> expr , jve -> expr , Expr * );
3087+
3088+ return (Node * ) newnode ;
3089+ }
30633090 default :
30643091 elog (ERROR , "unrecognized node type: %d" ,
30653092 (int ) nodeTag (node ));
@@ -3704,6 +3731,30 @@ raw_expression_tree_walker(Node *node,
37043731 break ;
37053732 case T_CommonTableExpr :
37063733 return walker (((CommonTableExpr * ) node )-> ctequery , context );
3734+ case T_JsonValueExpr :
3735+ return walker (((JsonValueExpr * ) node )-> expr , context );
3736+ case T_JsonOutput :
3737+ return walker (((JsonOutput * ) node )-> typename , context );
3738+ case T_JsonKeyValue :
3739+ {
3740+ JsonKeyValue * jkv = (JsonKeyValue * ) node ;
3741+
3742+ if (walker (jkv -> key , context ))
3743+ return true;
3744+ if (walker (jkv -> value , context ))
3745+ return true;
3746+ }
3747+ break ;
3748+ case T_JsonObjectCtor :
3749+ {
3750+ JsonObjectCtor * joc = (JsonObjectCtor * ) node ;
3751+
3752+ if (walker (joc -> output , context ))
3753+ return true;
3754+ if (walker (joc -> exprs , context ))
3755+ return true;
3756+ }
3757+ break ;
37073758 default :
37083759 elog (ERROR , "unrecognized node type: %d" ,
37093760 (int ) nodeTag (node ));
0 commit comments