@@ -261,6 +261,9 @@ exprType(const Node *expr)
261261 case T_JsonConstructorExpr :
262262 type = ((const JsonConstructorExpr * ) expr )-> returning -> typid ;
263263 break ;
264+ case T_JsonIsPredicate :
265+ type = BOOLOID ;
266+ break ;
264267 default :
265268 elog (ERROR , "unrecognized node type: %d" , (int ) nodeTag (expr ));
266269 type = InvalidOid ; /* keep compiler quiet */
@@ -983,6 +986,9 @@ exprCollation(const Node *expr)
983986 coll = InvalidOid ;
984987 }
985988 break ;
989+ case T_JsonIsPredicate :
990+ coll = InvalidOid ; /* result is always an boolean type */
991+ break ;
986992 default :
987993 elog (ERROR , "unrecognized node type: %d" , (int ) nodeTag (expr ));
988994 coll = InvalidOid ; /* keep compiler quiet */
@@ -1205,6 +1211,9 @@ exprSetCollation(Node *expr, Oid collation)
12051211 * json[b] type */
12061212 }
12071213 break ;
1214+ case T_JsonIsPredicate :
1215+ Assert (!OidIsValid (collation )); /* result is always boolean */
1216+ break ;
12081217 default :
12091218 elog (ERROR , "unrecognized node type: %d" , (int ) nodeTag (expr ));
12101219 break ;
@@ -1653,6 +1662,9 @@ exprLocation(const Node *expr)
16531662 case T_JsonConstructorExpr :
16541663 loc = ((const JsonConstructorExpr * ) expr )-> location ;
16551664 break ;
1665+ case T_JsonIsPredicate :
1666+ loc = ((const JsonIsPredicate * ) expr )-> location ;
1667+ break ;
16561668 default :
16571669 /* for any other node type it's just unknown... */
16581670 loc = -1 ;
@@ -2406,6 +2418,8 @@ expression_tree_walker_impl(Node *node,
24062418 return true;
24072419 }
24082420 break ;
2421+ case T_JsonIsPredicate :
2422+ return walker (((JsonIsPredicate * ) node )-> expr , context );
24092423 default :
24102424 elog (ERROR , "unrecognized node type: %d" ,
24112425 (int ) nodeTag (node ));
@@ -3413,6 +3427,16 @@ expression_tree_mutator_impl(Node *node,
34133427 MUTATE (newnode -> coercion , jve -> coercion , Expr * );
34143428 MUTATE (newnode -> returning , jve -> returning , JsonReturning * );
34153429
3430+ return (Node * ) newnode ;
3431+ }
3432+ case T_JsonIsPredicate :
3433+ {
3434+ JsonIsPredicate * pred = (JsonIsPredicate * ) node ;
3435+ JsonIsPredicate * newnode ;
3436+
3437+ FLATCOPY (newnode , pred , JsonIsPredicate );
3438+ MUTATE (newnode -> expr , pred -> expr , Node * );
3439+
34163440 return (Node * ) newnode ;
34173441 }
34183442 default :
@@ -4261,6 +4285,8 @@ raw_expression_tree_walker_impl(Node *node,
42614285 return true;
42624286 }
42634287 break ;
4288+ case T_JsonIsPredicate :
4289+ return walker (((JsonIsPredicate * ) node )-> expr , context );
42644290 default :
42654291 elog (ERROR , "unrecognized node type: %d" ,
42664292 (int ) nodeTag (node ));
0 commit comments