@@ -863,6 +863,96 @@ _equalJsonConstructorExpr(const JsonConstructorExpr *a, const JsonConstructorExp
863863 return true;
864864}
865865
866+ static bool
867+ _equalJsonKeyValue (const JsonKeyValue * a , const JsonKeyValue * b )
868+ {
869+ COMPARE_NODE_FIELD (key );
870+ COMPARE_NODE_FIELD (value );
871+
872+ return true;
873+ }
874+
875+ static bool
876+ _equalJsonObjectConstructor (const JsonObjectConstructor * a ,
877+ const JsonObjectConstructor * b )
878+ {
879+ COMPARE_NODE_FIELD (exprs );
880+ COMPARE_NODE_FIELD (output );
881+ COMPARE_SCALAR_FIELD (absent_on_null );
882+ COMPARE_SCALAR_FIELD (unique );
883+ COMPARE_LOCATION_FIELD (location );
884+
885+ return true;
886+ }
887+
888+ static bool
889+ _equalJsonAggConstructor (const JsonAggConstructor * a ,
890+ const JsonAggConstructor * b )
891+ {
892+ COMPARE_NODE_FIELD (output );
893+ COMPARE_NODE_FIELD (agg_filter );
894+ COMPARE_NODE_FIELD (agg_order );
895+ COMPARE_NODE_FIELD (over );
896+ COMPARE_LOCATION_FIELD (location );
897+
898+ return true;
899+ }
900+
901+ static bool
902+ _equalJsonObjectAgg (const JsonObjectAgg * a , const JsonObjectAgg * b )
903+ {
904+ COMPARE_NODE_FIELD (constructor );
905+ COMPARE_NODE_FIELD (arg );
906+ COMPARE_SCALAR_FIELD (absent_on_null );
907+ COMPARE_SCALAR_FIELD (unique );
908+
909+ return true;
910+ }
911+
912+ static bool
913+ _equalJsonOutput (const JsonOutput * a , const JsonOutput * b )
914+ {
915+ COMPARE_NODE_FIELD (typeName );
916+ COMPARE_NODE_FIELD (returning );
917+
918+ return true;
919+ }
920+
921+ static bool
922+ _equalJsonArrayConstructor (const JsonArrayConstructor * a ,
923+ const JsonArrayConstructor * b )
924+ {
925+ COMPARE_NODE_FIELD (exprs );
926+ COMPARE_NODE_FIELD (output );
927+ COMPARE_SCALAR_FIELD (absent_on_null );
928+ COMPARE_LOCATION_FIELD (location );
929+
930+ return true;
931+ }
932+
933+ static bool
934+ _equalJsonArrayAgg (const JsonArrayAgg * a , const JsonArrayAgg * b )
935+ {
936+ COMPARE_NODE_FIELD (constructor );
937+ COMPARE_NODE_FIELD (arg );
938+ COMPARE_SCALAR_FIELD (absent_on_null );
939+
940+ return true;
941+ }
942+
943+ static bool
944+ _equalJsonArrayQueryConstructor (const JsonArrayQueryConstructor * a ,
945+ const JsonArrayQueryConstructor * b )
946+ {
947+ COMPARE_NODE_FIELD (query );
948+ COMPARE_NODE_FIELD (output );
949+ COMPARE_NODE_FIELD (format );
950+ COMPARE_SCALAR_FIELD (absent_on_null );
951+ COMPARE_LOCATION_FIELD (location );
952+
953+ return true;
954+ }
955+
866956/*
867957 * Stuff from pathnodes.h
868958 */
@@ -3815,6 +3905,30 @@ equal(const void *a, const void *b)
38153905 case T_PartitionCmd :
38163906 retval = _equalPartitionCmd (a , b );
38173907 break ;
3908+ case T_JsonKeyValue :
3909+ retval = _equalJsonKeyValue (a , b );
3910+ break ;
3911+ case T_JsonObjectConstructor :
3912+ retval = _equalJsonObjectConstructor (a , b );
3913+ break ;
3914+ case T_JsonAggConstructor :
3915+ retval = _equalJsonAggConstructor (a , b );
3916+ break ;
3917+ case T_JsonObjectAgg :
3918+ retval = _equalJsonObjectAgg (a , b );
3919+ break ;
3920+ case T_JsonOutput :
3921+ retval = _equalJsonOutput (a , b );
3922+ break ;
3923+ case T_JsonArrayConstructor :
3924+ retval = _equalJsonArrayConstructor (a , b );
3925+ break ;
3926+ case T_JsonArrayQueryConstructor :
3927+ retval = _equalJsonArrayQueryConstructor (a , b );
3928+ break ;
3929+ case T_JsonArrayAgg :
3930+ retval = _equalJsonArrayAgg (a , b );
3931+ break ;
38183932
38193933 default :
38203934 elog (ERROR , "unrecognized node type: %d" ,
0 commit comments