@@ -863,6 +863,96 @@ _equalJsonConstructorExpr(const JsonConstructorExpr *a, const JsonConstructorExp
863
863
return true;
864
864
}
865
865
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
+
866
956
/*
867
957
* Stuff from pathnodes.h
868
958
*/
@@ -3815,6 +3905,30 @@ equal(const void *a, const void *b)
3815
3905
case T_PartitionCmd :
3816
3906
retval = _equalPartitionCmd (a ,b );
3817
3907
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 ;
3818
3932
3819
3933
default :
3820
3934
elog (ERROR ,"unrecognized node type: %d" ,