@@ -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 ;
@@ -2219,6 +2234,8 @@ expression_tree_walker(Node *node,
22192234 return true;
22202235 }
22212236 break ;
2237+ case T_JsonValueExpr :
2238+ return walker (((JsonValueExpr * ) node )-> expr , context );
22222239 default :
22232240 elog (ERROR , "unrecognized node type: %d" ,
22242241 (int ) nodeTag (node ));
@@ -3035,6 +3052,16 @@ expression_tree_mutator(Node *node,
30353052 return (Node * ) newnode ;
30363053 }
30373054 break ;
3055+ case T_JsonValueExpr :
3056+ {
3057+ JsonValueExpr * jve = (JsonValueExpr * ) node ;
3058+ JsonValueExpr * newnode ;
3059+
3060+ FLATCOPY (newnode , jve , JsonValueExpr );
3061+ MUTATE (newnode -> expr , jve -> expr , Expr * );
3062+
3063+ return (Node * ) newnode ;
3064+ }
30383065 default :
30393066 elog (ERROR , "unrecognized node type: %d" ,
30403067 (int ) nodeTag (node ));
@@ -3679,6 +3706,30 @@ raw_expression_tree_walker(Node *node,
36793706 break ;
36803707 case T_CommonTableExpr :
36813708 return walker (((CommonTableExpr * ) node )-> ctequery , context );
3709+ case T_JsonValueExpr :
3710+ return walker (((JsonValueExpr * ) node )-> expr , context );
3711+ case T_JsonOutput :
3712+ return walker (((JsonOutput * ) node )-> typename , context );
3713+ case T_JsonKeyValue :
3714+ {
3715+ JsonKeyValue * jkv = (JsonKeyValue * ) node ;
3716+
3717+ if (walker (jkv -> key , context ))
3718+ return true;
3719+ if (walker (jkv -> value , context ))
3720+ return true;
3721+ }
3722+ break ;
3723+ case T_JsonObjectCtor :
3724+ {
3725+ JsonObjectCtor * joc = (JsonObjectCtor * ) node ;
3726+
3727+ if (walker (joc -> output , context ))
3728+ return true;
3729+ if (walker (joc -> exprs , context ))
3730+ return true;
3731+ }
3732+ break ;
36823733 default :
36833734 elog (ERROR , "unrecognized node type: %d" ,
36843735 (int ) nodeTag (node ));
0 commit comments