pg_query 2.1.4 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +29 -0
  3. data/README.md +32 -0
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/include/access/twophase.h +2 -0
  6. data/ext/pg_query/include/access/xact.h +6 -0
  7. data/ext/pg_query/include/access/xlog_internal.h +10 -1
  8. data/ext/pg_query/include/access/xlogreader.h +10 -0
  9. data/ext/pg_query/include/catalog/dependency.h +2 -0
  10. data/ext/pg_query/include/catalog/pg_class.h +1 -1
  11. data/ext/pg_query/include/catalog/pg_class_d.h +1 -1
  12. data/ext/pg_query/include/catalog/pg_control.h +2 -0
  13. data/ext/pg_query/include/catalog/pg_operator.h +3 -1
  14. data/ext/pg_query/include/catalog/pg_publication.h +3 -0
  15. data/ext/pg_query/include/catalog/pg_type.h +1 -0
  16. data/ext/pg_query/include/commands/async.h +1 -1
  17. data/ext/pg_query/include/commands/tablespace.h +2 -0
  18. data/ext/pg_query/include/commands/trigger.h +8 -0
  19. data/ext/pg_query/include/lib/simplehash.h +13 -13
  20. data/ext/pg_query/include/libpq/libpq.h +1 -0
  21. data/ext/pg_query/include/mb/pg_wchar.h +1 -0
  22. data/ext/pg_query/include/miscadmin.h +24 -11
  23. data/ext/pg_query/include/nodes/execnodes.h +2 -2
  24. data/ext/pg_query/include/nodes/parsenodes.h +5 -4
  25. data/ext/pg_query/include/nodes/pathnodes.h +2 -1
  26. data/ext/pg_query/include/nodes/pg_list.h +1 -0
  27. data/ext/pg_query/include/nodes/plannodes.h +18 -3
  28. data/ext/pg_query/include/optimizer/optimizer.h +0 -5
  29. data/ext/pg_query/include/parser/gram.h +2 -2
  30. data/ext/pg_query/include/parser/kwlist.h +1 -1
  31. data/ext/pg_query/include/parser/parse_coerce.h +1 -0
  32. data/ext/pg_query/include/pg_config.h +16 -13
  33. data/ext/pg_query/include/pg_query.h +2 -2
  34. data/ext/pg_query/include/pg_query_fingerprint_defs.c +286 -314
  35. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1 -0
  36. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1 -0
  37. data/ext/pg_query/include/pgstat.h +2 -1
  38. data/ext/pg_query/include/plpgsql.h +2 -2
  39. data/ext/pg_query/include/port/pg_bitutils.h +48 -2
  40. data/ext/pg_query/include/port.h +4 -0
  41. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +4 -3
  42. data/ext/pg_query/include/replication/reorderbuffer.h +6 -5
  43. data/ext/pg_query/include/replication/slot.h +1 -1
  44. data/ext/pg_query/include/storage/block.h +1 -1
  45. data/ext/pg_query/include/storage/lock.h +6 -5
  46. data/ext/pg_query/include/storage/lwlock.h +1 -0
  47. data/ext/pg_query/include/storage/proc.h +14 -0
  48. data/ext/pg_query/include/storage/s_lock.h +24 -0
  49. data/ext/pg_query/include/tcop/pquery.h +6 -0
  50. data/ext/pg_query/include/utils/builtins.h +1 -0
  51. data/ext/pg_query/include/utils/inval.h +1 -0
  52. data/ext/pg_query/include/utils/portal.h +13 -0
  53. data/ext/pg_query/include/utils/rel.h +0 -1
  54. data/ext/pg_query/include/utils/relcache.h +1 -2
  55. data/ext/pg_query/include/utils/snapmgr.h +1 -0
  56. data/ext/pg_query/pg_query.pb-c.c +18 -5
  57. data/ext/pg_query/pg_query_deparse.c +8 -8
  58. data/ext/pg_query/pg_query_fingerprint.c +1 -0
  59. data/ext/pg_query/pg_query_json_plpgsql.c +68 -0
  60. data/ext/pg_query/pg_query_normalize.c +43 -7
  61. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  62. data/ext/pg_query/pg_query_outfuncs_json.c +11 -0
  63. data/ext/pg_query/pg_query_parse_plpgsql.c +58 -15
  64. data/ext/pg_query/src_backend_catalog_namespace.c +1 -0
  65. data/ext/pg_query/src_backend_libpq_pqcomm.c +8 -0
  66. data/ext/pg_query/src_backend_nodes_copyfuncs.c +23 -33
  67. data/ext/pg_query/src_backend_nodes_equalfuncs.c +1 -0
  68. data/ext/pg_query/src_backend_nodes_list.c +12 -0
  69. data/ext/pg_query/src_backend_parser_gram.c +18 -3
  70. data/ext/pg_query/src_backend_parser_scan.c +493 -253
  71. data/ext/pg_query/src_backend_tcop_postgres.c +11 -1
  72. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +38 -10
  73. data/ext/pg_query/src_backend_utils_misc_guc.c +1 -0
  74. data/ext/pg_query/src_common_wchar.c +11 -0
  75. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +4 -2
  76. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1 -1
  77. data/ext/pg_query/src_port_pg_bitutils.c +1 -22
  78. data/ext/pg_query/src_port_snprintf.c +9 -7
  79. data/lib/pg_query/deparse.rb +7 -1
  80. data/lib/pg_query/fingerprint.rb +13 -2
  81. data/lib/pg_query/parse.rb +5 -3
  82. data/lib/pg_query/pg_query_pb.rb +2 -1
  83. data/lib/pg_query/treewalker.rb +6 -0
  84. data/lib/pg_query/version.rb +1 -1
  85. metadata +2 -2
@@ -302,7 +302,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
302
302
 
303
303
  hash = XXH3_64bits_digest(ctx->xxh_state);
304
304
  _fingerprintNode(ctx, node->colcollations, node, "colcollations", depth + 1);
305
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
305
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colcollations) == 1 && linitial(node->colcollations) == NIL)) {
306
306
  XXH3_copyState(ctx->xxh_state, prev);
307
307
  if (ctx->write_tokens)
308
308
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -318,7 +318,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
318
318
 
319
319
  hash = XXH3_64bits_digest(ctx->xxh_state);
320
320
  _fingerprintNode(ctx, node->coldefexprs, node, "coldefexprs", depth + 1);
321
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
321
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->coldefexprs) == 1 && linitial(node->coldefexprs) == NIL)) {
322
322
  XXH3_copyState(ctx->xxh_state, prev);
323
323
  if (ctx->write_tokens)
324
324
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -334,7 +334,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
334
334
 
335
335
  hash = XXH3_64bits_digest(ctx->xxh_state);
336
336
  _fingerprintNode(ctx, node->colexprs, node, "colexprs", depth + 1);
337
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
337
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colexprs) == 1 && linitial(node->colexprs) == NIL)) {
338
338
  XXH3_copyState(ctx->xxh_state, prev);
339
339
  if (ctx->write_tokens)
340
340
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -350,7 +350,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
350
350
 
351
351
  hash = XXH3_64bits_digest(ctx->xxh_state);
352
352
  _fingerprintNode(ctx, node->colnames, node, "colnames", depth + 1);
353
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
353
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colnames) == 1 && linitial(node->colnames) == NIL)) {
354
354
  XXH3_copyState(ctx->xxh_state, prev);
355
355
  if (ctx->write_tokens)
356
356
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -366,7 +366,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
366
366
 
367
367
  hash = XXH3_64bits_digest(ctx->xxh_state);
368
368
  _fingerprintNode(ctx, node->coltypes, node, "coltypes", depth + 1);
369
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
369
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->coltypes) == 1 && linitial(node->coltypes) == NIL)) {
370
370
  XXH3_copyState(ctx->xxh_state, prev);
371
371
  if (ctx->write_tokens)
372
372
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -382,7 +382,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
382
382
 
383
383
  hash = XXH3_64bits_digest(ctx->xxh_state);
384
384
  _fingerprintNode(ctx, node->coltypmods, node, "coltypmods", depth + 1);
385
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
385
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->coltypmods) == 1 && linitial(node->coltypmods) == NIL)) {
386
386
  XXH3_copyState(ctx->xxh_state, prev);
387
387
  if (ctx->write_tokens)
388
388
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -432,7 +432,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
432
432
 
433
433
  hash = XXH3_64bits_digest(ctx->xxh_state);
434
434
  _fingerprintNode(ctx, node->ns_names, node, "ns_names", depth + 1);
435
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
435
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->ns_names) == 1 && linitial(node->ns_names) == NIL)) {
436
436
  XXH3_copyState(ctx->xxh_state, prev);
437
437
  if (ctx->write_tokens)
438
438
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -448,7 +448,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
448
448
 
449
449
  hash = XXH3_64bits_digest(ctx->xxh_state);
450
450
  _fingerprintNode(ctx, node->ns_uris, node, "ns_uris", depth + 1);
451
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
451
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->ns_uris) == 1 && linitial(node->ns_uris) == NIL)) {
452
452
  XXH3_copyState(ctx->xxh_state, prev);
453
453
  if (ctx->write_tokens)
454
454
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -646,7 +646,7 @@ _fingerprintAggref(FingerprintContext *ctx, const Aggref *node, const void *pare
646
646
 
647
647
  hash = XXH3_64bits_digest(ctx->xxh_state);
648
648
  _fingerprintNode(ctx, node->aggargtypes, node, "aggargtypes", depth + 1);
649
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
649
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->aggargtypes) == 1 && linitial(node->aggargtypes) == NIL)) {
650
650
  XXH3_copyState(ctx->xxh_state, prev);
651
651
  if (ctx->write_tokens)
652
652
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -669,7 +669,7 @@ _fingerprintAggref(FingerprintContext *ctx, const Aggref *node, const void *pare
669
669
 
670
670
  hash = XXH3_64bits_digest(ctx->xxh_state);
671
671
  _fingerprintNode(ctx, node->aggdirectargs, node, "aggdirectargs", depth + 1);
672
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
672
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->aggdirectargs) == 1 && linitial(node->aggdirectargs) == NIL)) {
673
673
  XXH3_copyState(ctx->xxh_state, prev);
674
674
  if (ctx->write_tokens)
675
675
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -685,7 +685,7 @@ _fingerprintAggref(FingerprintContext *ctx, const Aggref *node, const void *pare
685
685
 
686
686
  hash = XXH3_64bits_digest(ctx->xxh_state);
687
687
  _fingerprintNode(ctx, node->aggdistinct, node, "aggdistinct", depth + 1);
688
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
688
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->aggdistinct) == 1 && linitial(node->aggdistinct) == NIL)) {
689
689
  XXH3_copyState(ctx->xxh_state, prev);
690
690
  if (ctx->write_tokens)
691
691
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -738,7 +738,7 @@ _fingerprintAggref(FingerprintContext *ctx, const Aggref *node, const void *pare
738
738
 
739
739
  hash = XXH3_64bits_digest(ctx->xxh_state);
740
740
  _fingerprintNode(ctx, node->aggorder, node, "aggorder", depth + 1);
741
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
741
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->aggorder) == 1 && linitial(node->aggorder) == NIL)) {
742
742
  XXH3_copyState(ctx->xxh_state, prev);
743
743
  if (ctx->write_tokens)
744
744
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -783,7 +783,7 @@ _fingerprintAggref(FingerprintContext *ctx, const Aggref *node, const void *pare
783
783
 
784
784
  hash = XXH3_64bits_digest(ctx->xxh_state);
785
785
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
786
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
786
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
787
787
  XXH3_copyState(ctx->xxh_state, prev);
788
788
  if (ctx->write_tokens)
789
789
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -820,7 +820,7 @@ _fingerprintGroupingFunc(FingerprintContext *ctx, const GroupingFunc *node, cons
820
820
 
821
821
  hash = XXH3_64bits_digest(ctx->xxh_state);
822
822
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
823
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
823
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
824
824
  XXH3_copyState(ctx->xxh_state, prev);
825
825
  if (ctx->write_tokens)
826
826
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -836,7 +836,7 @@ _fingerprintGroupingFunc(FingerprintContext *ctx, const GroupingFunc *node, cons
836
836
 
837
837
  hash = XXH3_64bits_digest(ctx->xxh_state);
838
838
  _fingerprintNode(ctx, node->cols, node, "cols", depth + 1);
839
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
839
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->cols) == 1 && linitial(node->cols) == NIL)) {
840
840
  XXH3_copyState(ctx->xxh_state, prev);
841
841
  if (ctx->write_tokens)
842
842
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -854,7 +854,7 @@ _fingerprintGroupingFunc(FingerprintContext *ctx, const GroupingFunc *node, cons
854
854
 
855
855
  hash = XXH3_64bits_digest(ctx->xxh_state);
856
856
  _fingerprintNode(ctx, node->refs, node, "refs", depth + 1);
857
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
857
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->refs) == 1 && linitial(node->refs) == NIL)) {
858
858
  XXH3_copyState(ctx->xxh_state, prev);
859
859
  if (ctx->write_tokens)
860
860
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -892,7 +892,7 @@ _fingerprintWindowFunc(FingerprintContext *ctx, const WindowFunc *node, const vo
892
892
 
893
893
  hash = XXH3_64bits_digest(ctx->xxh_state);
894
894
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
895
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
895
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
896
896
  XXH3_copyState(ctx->xxh_state, prev);
897
897
  if (ctx->write_tokens)
898
898
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -1015,7 +1015,7 @@ _fingerprintSubscriptingRef(FingerprintContext *ctx, const SubscriptingRef *node
1015
1015
 
1016
1016
  hash = XXH3_64bits_digest(ctx->xxh_state);
1017
1017
  _fingerprintNode(ctx, node->reflowerindexpr, node, "reflowerindexpr", depth + 1);
1018
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
1018
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->reflowerindexpr) == 1 && linitial(node->reflowerindexpr) == NIL)) {
1019
1019
  XXH3_copyState(ctx->xxh_state, prev);
1020
1020
  if (ctx->write_tokens)
1021
1021
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -1038,7 +1038,7 @@ _fingerprintSubscriptingRef(FingerprintContext *ctx, const SubscriptingRef *node
1038
1038
 
1039
1039
  hash = XXH3_64bits_digest(ctx->xxh_state);
1040
1040
  _fingerprintNode(ctx, node->refupperindexpr, node, "refupperindexpr", depth + 1);
1041
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
1041
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->refupperindexpr) == 1 && linitial(node->refupperindexpr) == NIL)) {
1042
1042
  XXH3_copyState(ctx->xxh_state, prev);
1043
1043
  if (ctx->write_tokens)
1044
1044
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -1059,7 +1059,7 @@ _fingerprintFuncExpr(FingerprintContext *ctx, const FuncExpr *node, const void *
1059
1059
 
1060
1060
  hash = XXH3_64bits_digest(ctx->xxh_state);
1061
1061
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
1062
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
1062
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
1063
1063
  XXH3_copyState(ctx->xxh_state, prev);
1064
1064
  if (ctx->write_tokens)
1065
1065
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -1161,7 +1161,7 @@ _fingerprintOpExpr(FingerprintContext *ctx, const OpExpr *node, const void *pare
1161
1161
 
1162
1162
  hash = XXH3_64bits_digest(ctx->xxh_state);
1163
1163
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
1164
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
1164
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
1165
1165
  XXH3_copyState(ctx->xxh_state, prev);
1166
1166
  if (ctx->write_tokens)
1167
1167
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -1224,7 +1224,7 @@ _fingerprintScalarArrayOpExpr(FingerprintContext *ctx, const ScalarArrayOpExpr *
1224
1224
 
1225
1225
  hash = XXH3_64bits_digest(ctx->xxh_state);
1226
1226
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
1227
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
1227
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
1228
1228
  XXH3_copyState(ctx->xxh_state, prev);
1229
1229
  if (ctx->write_tokens)
1230
1230
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -1273,7 +1273,7 @@ _fingerprintBoolExpr(FingerprintContext *ctx, const BoolExpr *node, const void *
1273
1273
 
1274
1274
  hash = XXH3_64bits_digest(ctx->xxh_state);
1275
1275
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
1276
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
1276
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
1277
1277
  XXH3_copyState(ctx->xxh_state, prev);
1278
1278
  if (ctx->write_tokens)
1279
1279
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -1303,7 +1303,7 @@ _fingerprintSubLink(FingerprintContext *ctx, const SubLink *node, const void *pa
1303
1303
 
1304
1304
  hash = XXH3_64bits_digest(ctx->xxh_state);
1305
1305
  _fingerprintNode(ctx, node->operName, node, "operName", depth + 1);
1306
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
1306
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->operName) == 1 && linitial(node->operName) == NIL)) {
1307
1307
  XXH3_copyState(ctx->xxh_state, prev);
1308
1308
  if (ctx->write_tokens)
1309
1309
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -1370,7 +1370,7 @@ _fingerprintSubPlan(FingerprintContext *ctx, const SubPlan *node, const void *pa
1370
1370
 
1371
1371
  hash = XXH3_64bits_digest(ctx->xxh_state);
1372
1372
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
1373
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
1373
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
1374
1374
  XXH3_copyState(ctx->xxh_state, prev);
1375
1375
  if (ctx->write_tokens)
1376
1376
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -1407,7 +1407,7 @@ _fingerprintSubPlan(FingerprintContext *ctx, const SubPlan *node, const void *pa
1407
1407
 
1408
1408
  hash = XXH3_64bits_digest(ctx->xxh_state);
1409
1409
  _fingerprintNode(ctx, node->parParam, node, "parParam", depth + 1);
1410
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
1410
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->parParam) == 1 && linitial(node->parParam) == NIL)) {
1411
1411
  XXH3_copyState(ctx->xxh_state, prev);
1412
1412
  if (ctx->write_tokens)
1413
1413
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -1428,7 +1428,7 @@ _fingerprintSubPlan(FingerprintContext *ctx, const SubPlan *node, const void *pa
1428
1428
 
1429
1429
  hash = XXH3_64bits_digest(ctx->xxh_state);
1430
1430
  _fingerprintNode(ctx, node->paramIds, node, "paramIds", depth + 1);
1431
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
1431
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->paramIds) == 1 && linitial(node->paramIds) == NIL)) {
1432
1432
  XXH3_copyState(ctx->xxh_state, prev);
1433
1433
  if (ctx->write_tokens)
1434
1434
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -1463,7 +1463,7 @@ _fingerprintSubPlan(FingerprintContext *ctx, const SubPlan *node, const void *pa
1463
1463
 
1464
1464
  hash = XXH3_64bits_digest(ctx->xxh_state);
1465
1465
  _fingerprintNode(ctx, node->setParam, node, "setParam", depth + 1);
1466
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
1466
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->setParam) == 1 && linitial(node->setParam) == NIL)) {
1467
1467
  XXH3_copyState(ctx->xxh_state, prev);
1468
1468
  if (ctx->write_tokens)
1469
1469
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -1523,7 +1523,7 @@ _fingerprintAlternativeSubPlan(FingerprintContext *ctx, const AlternativeSubPlan
1523
1523
 
1524
1524
  hash = XXH3_64bits_digest(ctx->xxh_state);
1525
1525
  _fingerprintNode(ctx, node->subplans, node, "subplans", depth + 1);
1526
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
1526
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->subplans) == 1 && linitial(node->subplans) == NIL)) {
1527
1527
  XXH3_copyState(ctx->xxh_state, prev);
1528
1528
  if (ctx->write_tokens)
1529
1529
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -1611,7 +1611,7 @@ _fingerprintFieldStore(FingerprintContext *ctx, const FieldStore *node, const vo
1611
1611
 
1612
1612
  hash = XXH3_64bits_digest(ctx->xxh_state);
1613
1613
  _fingerprintNode(ctx, node->fieldnums, node, "fieldnums", depth + 1);
1614
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
1614
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->fieldnums) == 1 && linitial(node->fieldnums) == NIL)) {
1615
1615
  XXH3_copyState(ctx->xxh_state, prev);
1616
1616
  if (ctx->write_tokens)
1617
1617
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -1627,7 +1627,7 @@ _fingerprintFieldStore(FingerprintContext *ctx, const FieldStore *node, const vo
1627
1627
 
1628
1628
  hash = XXH3_64bits_digest(ctx->xxh_state);
1629
1629
  _fingerprintNode(ctx, node->newvals, node, "newvals", depth + 1);
1630
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
1630
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->newvals) == 1 && linitial(node->newvals) == NIL)) {
1631
1631
  XXH3_copyState(ctx->xxh_state, prev);
1632
1632
  if (ctx->write_tokens)
1633
1633
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -1899,7 +1899,7 @@ _fingerprintCaseExpr(FingerprintContext *ctx, const CaseExpr *node, const void *
1899
1899
 
1900
1900
  hash = XXH3_64bits_digest(ctx->xxh_state);
1901
1901
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
1902
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
1902
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
1903
1903
  XXH3_copyState(ctx->xxh_state, prev);
1904
1904
  if (ctx->write_tokens)
1905
1905
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2041,7 +2041,7 @@ _fingerprintArrayExpr(FingerprintContext *ctx, const ArrayExpr *node, const void
2041
2041
 
2042
2042
  hash = XXH3_64bits_digest(ctx->xxh_state);
2043
2043
  _fingerprintNode(ctx, node->elements, node, "elements", depth + 1);
2044
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2044
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->elements) == 1 && linitial(node->elements) == NIL)) {
2045
2045
  XXH3_copyState(ctx->xxh_state, prev);
2046
2046
  if (ctx->write_tokens)
2047
2047
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2069,7 +2069,7 @@ _fingerprintRowExpr(FingerprintContext *ctx, const RowExpr *node, const void *pa
2069
2069
 
2070
2070
  hash = XXH3_64bits_digest(ctx->xxh_state);
2071
2071
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
2072
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2072
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
2073
2073
  XXH3_copyState(ctx->xxh_state, prev);
2074
2074
  if (ctx->write_tokens)
2075
2075
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2085,7 +2085,7 @@ _fingerprintRowExpr(FingerprintContext *ctx, const RowExpr *node, const void *pa
2085
2085
 
2086
2086
  hash = XXH3_64bits_digest(ctx->xxh_state);
2087
2087
  _fingerprintNode(ctx, node->colnames, node, "colnames", depth + 1);
2088
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2088
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colnames) == 1 && linitial(node->colnames) == NIL)) {
2089
2089
  XXH3_copyState(ctx->xxh_state, prev);
2090
2090
  if (ctx->write_tokens)
2091
2091
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2120,7 +2120,7 @@ _fingerprintRowCompareExpr(FingerprintContext *ctx, const RowCompareExpr *node,
2120
2120
 
2121
2121
  hash = XXH3_64bits_digest(ctx->xxh_state);
2122
2122
  _fingerprintNode(ctx, node->inputcollids, node, "inputcollids", depth + 1);
2123
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2123
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->inputcollids) == 1 && linitial(node->inputcollids) == NIL)) {
2124
2124
  XXH3_copyState(ctx->xxh_state, prev);
2125
2125
  if (ctx->write_tokens)
2126
2126
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2136,7 +2136,7 @@ _fingerprintRowCompareExpr(FingerprintContext *ctx, const RowCompareExpr *node,
2136
2136
 
2137
2137
  hash = XXH3_64bits_digest(ctx->xxh_state);
2138
2138
  _fingerprintNode(ctx, node->largs, node, "largs", depth + 1);
2139
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2139
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->largs) == 1 && linitial(node->largs) == NIL)) {
2140
2140
  XXH3_copyState(ctx->xxh_state, prev);
2141
2141
  if (ctx->write_tokens)
2142
2142
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2152,7 +2152,7 @@ _fingerprintRowCompareExpr(FingerprintContext *ctx, const RowCompareExpr *node,
2152
2152
 
2153
2153
  hash = XXH3_64bits_digest(ctx->xxh_state);
2154
2154
  _fingerprintNode(ctx, node->opfamilies, node, "opfamilies", depth + 1);
2155
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2155
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opfamilies) == 1 && linitial(node->opfamilies) == NIL)) {
2156
2156
  XXH3_copyState(ctx->xxh_state, prev);
2157
2157
  if (ctx->write_tokens)
2158
2158
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2168,7 +2168,7 @@ _fingerprintRowCompareExpr(FingerprintContext *ctx, const RowCompareExpr *node,
2168
2168
 
2169
2169
  hash = XXH3_64bits_digest(ctx->xxh_state);
2170
2170
  _fingerprintNode(ctx, node->opnos, node, "opnos", depth + 1);
2171
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2171
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opnos) == 1 && linitial(node->opnos) == NIL)) {
2172
2172
  XXH3_copyState(ctx->xxh_state, prev);
2173
2173
  if (ctx->write_tokens)
2174
2174
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2184,7 +2184,7 @@ _fingerprintRowCompareExpr(FingerprintContext *ctx, const RowCompareExpr *node,
2184
2184
 
2185
2185
  hash = XXH3_64bits_digest(ctx->xxh_state);
2186
2186
  _fingerprintNode(ctx, node->rargs, node, "rargs", depth + 1);
2187
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2187
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->rargs) == 1 && linitial(node->rargs) == NIL)) {
2188
2188
  XXH3_copyState(ctx->xxh_state, prev);
2189
2189
  if (ctx->write_tokens)
2190
2190
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2210,7 +2210,7 @@ _fingerprintCoalesceExpr(FingerprintContext *ctx, const CoalesceExpr *node, cons
2210
2210
 
2211
2211
  hash = XXH3_64bits_digest(ctx->xxh_state);
2212
2212
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
2213
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2213
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
2214
2214
  XXH3_copyState(ctx->xxh_state, prev);
2215
2215
  if (ctx->write_tokens)
2216
2216
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2247,7 +2247,7 @@ _fingerprintMinMaxExpr(FingerprintContext *ctx, const MinMaxExpr *node, const vo
2247
2247
 
2248
2248
  hash = XXH3_64bits_digest(ctx->xxh_state);
2249
2249
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
2250
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2250
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
2251
2251
  XXH3_copyState(ctx->xxh_state, prev);
2252
2252
  if (ctx->write_tokens)
2253
2253
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2322,7 +2322,7 @@ _fingerprintXmlExpr(FingerprintContext *ctx, const XmlExpr *node, const void *pa
2322
2322
 
2323
2323
  hash = XXH3_64bits_digest(ctx->xxh_state);
2324
2324
  _fingerprintNode(ctx, node->arg_names, node, "arg_names", depth + 1);
2325
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2325
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->arg_names) == 1 && linitial(node->arg_names) == NIL)) {
2326
2326
  XXH3_copyState(ctx->xxh_state, prev);
2327
2327
  if (ctx->write_tokens)
2328
2328
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2338,7 +2338,7 @@ _fingerprintXmlExpr(FingerprintContext *ctx, const XmlExpr *node, const void *pa
2338
2338
 
2339
2339
  hash = XXH3_64bits_digest(ctx->xxh_state);
2340
2340
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
2341
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2341
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
2342
2342
  XXH3_copyState(ctx->xxh_state, prev);
2343
2343
  if (ctx->write_tokens)
2344
2344
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2361,7 +2361,7 @@ _fingerprintXmlExpr(FingerprintContext *ctx, const XmlExpr *node, const void *pa
2361
2361
 
2362
2362
  hash = XXH3_64bits_digest(ctx->xxh_state);
2363
2363
  _fingerprintNode(ctx, node->named_args, node, "named_args", depth + 1);
2364
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2364
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->named_args) == 1 && linitial(node->named_args) == NIL)) {
2365
2365
  XXH3_copyState(ctx->xxh_state, prev);
2366
2366
  if (ctx->write_tokens)
2367
2367
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2789,7 +2789,7 @@ _fingerprintJoinExpr(FingerprintContext *ctx, const JoinExpr *node, const void *
2789
2789
 
2790
2790
  hash = XXH3_64bits_digest(ctx->xxh_state);
2791
2791
  _fingerprintNode(ctx, node->usingClause, node, "usingClause", depth + 1);
2792
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2792
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->usingClause) == 1 && linitial(node->usingClause) == NIL)) {
2793
2793
  XXH3_copyState(ctx->xxh_state, prev);
2794
2794
  if (ctx->write_tokens)
2795
2795
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2810,7 +2810,7 @@ _fingerprintFromExpr(FingerprintContext *ctx, const FromExpr *node, const void *
2810
2810
 
2811
2811
  hash = XXH3_64bits_digest(ctx->xxh_state);
2812
2812
  _fingerprintNode(ctx, node->fromlist, node, "fromlist", depth + 1);
2813
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2813
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->fromlist) == 1 && linitial(node->fromlist) == NIL)) {
2814
2814
  XXH3_copyState(ctx->xxh_state, prev);
2815
2815
  if (ctx->write_tokens)
2816
2816
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2853,7 +2853,7 @@ _fingerprintOnConflictExpr(FingerprintContext *ctx, const OnConflictExpr *node,
2853
2853
 
2854
2854
  hash = XXH3_64bits_digest(ctx->xxh_state);
2855
2855
  _fingerprintNode(ctx, node->arbiterElems, node, "arbiterElems", depth + 1);
2856
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2856
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->arbiterElems) == 1 && linitial(node->arbiterElems) == NIL)) {
2857
2857
  XXH3_copyState(ctx->xxh_state, prev);
2858
2858
  if (ctx->write_tokens)
2859
2859
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2900,7 +2900,7 @@ _fingerprintOnConflictExpr(FingerprintContext *ctx, const OnConflictExpr *node,
2900
2900
 
2901
2901
  hash = XXH3_64bits_digest(ctx->xxh_state);
2902
2902
  _fingerprintNode(ctx, node->exclRelTlist, node, "exclRelTlist", depth + 1);
2903
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2903
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->exclRelTlist) == 1 && linitial(node->exclRelTlist) == NIL)) {
2904
2904
  XXH3_copyState(ctx->xxh_state, prev);
2905
2905
  if (ctx->write_tokens)
2906
2906
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2916,7 +2916,7 @@ _fingerprintOnConflictExpr(FingerprintContext *ctx, const OnConflictExpr *node,
2916
2916
 
2917
2917
  hash = XXH3_64bits_digest(ctx->xxh_state);
2918
2918
  _fingerprintNode(ctx, node->onConflictSet, node, "onConflictSet", depth + 1);
2919
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2919
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->onConflictSet) == 1 && linitial(node->onConflictSet) == NIL)) {
2920
2920
  XXH3_copyState(ctx->xxh_state, prev);
2921
2921
  if (ctx->write_tokens)
2922
2922
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2959,7 +2959,7 @@ _fingerprintIntoClause(FingerprintContext *ctx, const IntoClause *node, const vo
2959
2959
 
2960
2960
  hash = XXH3_64bits_digest(ctx->xxh_state);
2961
2961
  _fingerprintNode(ctx, node->colNames, node, "colNames", depth + 1);
2962
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2962
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colNames) == 1 && linitial(node->colNames) == NIL)) {
2963
2963
  XXH3_copyState(ctx->xxh_state, prev);
2964
2964
  if (ctx->write_tokens)
2965
2965
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -2980,7 +2980,7 @@ _fingerprintIntoClause(FingerprintContext *ctx, const IntoClause *node, const vo
2980
2980
 
2981
2981
  hash = XXH3_64bits_digest(ctx->xxh_state);
2982
2982
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
2983
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
2983
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
2984
2984
  XXH3_copyState(ctx->xxh_state, prev);
2985
2985
  if (ctx->write_tokens)
2986
2986
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3081,7 +3081,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
3081
3081
 
3082
3082
  hash = XXH3_64bits_digest(ctx->xxh_state);
3083
3083
  _fingerprintNode(ctx, node->constraintDeps, node, "constraintDeps", depth + 1);
3084
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3084
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->constraintDeps) == 1 && linitial(node->constraintDeps) == NIL)) {
3085
3085
  XXH3_copyState(ctx->xxh_state, prev);
3086
3086
  if (ctx->write_tokens)
3087
3087
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3097,7 +3097,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
3097
3097
 
3098
3098
  hash = XXH3_64bits_digest(ctx->xxh_state);
3099
3099
  _fingerprintNode(ctx, node->cteList, node, "cteList", depth + 1);
3100
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3100
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->cteList) == 1 && linitial(node->cteList) == NIL)) {
3101
3101
  XXH3_copyState(ctx->xxh_state, prev);
3102
3102
  if (ctx->write_tokens)
3103
3103
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3113,7 +3113,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
3113
3113
 
3114
3114
  hash = XXH3_64bits_digest(ctx->xxh_state);
3115
3115
  _fingerprintNode(ctx, node->distinctClause, node, "distinctClause", depth + 1);
3116
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3116
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->distinctClause) == 1 && linitial(node->distinctClause) == NIL)) {
3117
3117
  XXH3_copyState(ctx->xxh_state, prev);
3118
3118
  if (ctx->write_tokens)
3119
3119
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3129,7 +3129,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
3129
3129
 
3130
3130
  hash = XXH3_64bits_digest(ctx->xxh_state);
3131
3131
  _fingerprintNode(ctx, node->groupClause, node, "groupClause", depth + 1);
3132
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3132
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->groupClause) == 1 && linitial(node->groupClause) == NIL)) {
3133
3133
  XXH3_copyState(ctx->xxh_state, prev);
3134
3134
  if (ctx->write_tokens)
3135
3135
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3145,7 +3145,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
3145
3145
 
3146
3146
  hash = XXH3_64bits_digest(ctx->xxh_state);
3147
3147
  _fingerprintNode(ctx, node->groupingSets, node, "groupingSets", depth + 1);
3148
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3148
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->groupingSets) == 1 && linitial(node->groupingSets) == NIL)) {
3149
3149
  XXH3_copyState(ctx->xxh_state, prev);
3150
3150
  if (ctx->write_tokens)
3151
3151
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3320,7 +3320,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
3320
3320
 
3321
3321
  hash = XXH3_64bits_digest(ctx->xxh_state);
3322
3322
  _fingerprintNode(ctx, node->returningList, node, "returningList", depth + 1);
3323
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3323
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->returningList) == 1 && linitial(node->returningList) == NIL)) {
3324
3324
  XXH3_copyState(ctx->xxh_state, prev);
3325
3325
  if (ctx->write_tokens)
3326
3326
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3336,7 +3336,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
3336
3336
 
3337
3337
  hash = XXH3_64bits_digest(ctx->xxh_state);
3338
3338
  _fingerprintNode(ctx, node->rowMarks, node, "rowMarks", depth + 1);
3339
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3339
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->rowMarks) == 1 && linitial(node->rowMarks) == NIL)) {
3340
3340
  XXH3_copyState(ctx->xxh_state, prev);
3341
3341
  if (ctx->write_tokens)
3342
3342
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3352,7 +3352,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
3352
3352
 
3353
3353
  hash = XXH3_64bits_digest(ctx->xxh_state);
3354
3354
  _fingerprintNode(ctx, node->rtable, node, "rtable", depth + 1);
3355
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3355
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->rtable) == 1 && linitial(node->rtable) == NIL)) {
3356
3356
  XXH3_copyState(ctx->xxh_state, prev);
3357
3357
  if (ctx->write_tokens)
3358
3358
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3385,7 +3385,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
3385
3385
 
3386
3386
  hash = XXH3_64bits_digest(ctx->xxh_state);
3387
3387
  _fingerprintNode(ctx, node->sortClause, node, "sortClause", depth + 1);
3388
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3388
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->sortClause) == 1 && linitial(node->sortClause) == NIL)) {
3389
3389
  XXH3_copyState(ctx->xxh_state, prev);
3390
3390
  if (ctx->write_tokens)
3391
3391
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3415,7 +3415,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
3415
3415
 
3416
3416
  hash = XXH3_64bits_digest(ctx->xxh_state);
3417
3417
  _fingerprintNode(ctx, node->targetList, node, "targetList", depth + 1);
3418
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3418
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->targetList) == 1 && linitial(node->targetList) == NIL)) {
3419
3419
  XXH3_copyState(ctx->xxh_state, prev);
3420
3420
  if (ctx->write_tokens)
3421
3421
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3448,7 +3448,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
3448
3448
 
3449
3449
  hash = XXH3_64bits_digest(ctx->xxh_state);
3450
3450
  _fingerprintNode(ctx, node->windowClause, node, "windowClause", depth + 1);
3451
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3451
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->windowClause) == 1 && linitial(node->windowClause) == NIL)) {
3452
3452
  XXH3_copyState(ctx->xxh_state, prev);
3453
3453
  if (ctx->write_tokens)
3454
3454
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3464,7 +3464,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
3464
3464
 
3465
3465
  hash = XXH3_64bits_digest(ctx->xxh_state);
3466
3466
  _fingerprintNode(ctx, node->withCheckOptions, node, "withCheckOptions", depth + 1);
3467
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3467
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->withCheckOptions) == 1 && linitial(node->withCheckOptions) == NIL)) {
3468
3468
  XXH3_copyState(ctx->xxh_state, prev);
3469
3469
  if (ctx->write_tokens)
3470
3470
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3485,7 +3485,7 @@ _fingerprintInsertStmt(FingerprintContext *ctx, const InsertStmt *node, const vo
3485
3485
 
3486
3486
  hash = XXH3_64bits_digest(ctx->xxh_state);
3487
3487
  _fingerprintNode(ctx, node->cols, node, "cols", depth + 1);
3488
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3488
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->cols) == 1 && linitial(node->cols) == NIL)) {
3489
3489
  XXH3_copyState(ctx->xxh_state, prev);
3490
3490
  if (ctx->write_tokens)
3491
3491
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3540,7 +3540,7 @@ _fingerprintInsertStmt(FingerprintContext *ctx, const InsertStmt *node, const vo
3540
3540
 
3541
3541
  hash = XXH3_64bits_digest(ctx->xxh_state);
3542
3542
  _fingerprintNode(ctx, node->returningList, node, "returningList", depth + 1);
3543
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3543
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->returningList) == 1 && linitial(node->returningList) == NIL)) {
3544
3544
  XXH3_copyState(ctx->xxh_state, prev);
3545
3545
  if (ctx->write_tokens)
3546
3546
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3612,7 +3612,7 @@ _fingerprintDeleteStmt(FingerprintContext *ctx, const DeleteStmt *node, const vo
3612
3612
 
3613
3613
  hash = XXH3_64bits_digest(ctx->xxh_state);
3614
3614
  _fingerprintNode(ctx, node->returningList, node, "returningList", depth + 1);
3615
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3615
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->returningList) == 1 && linitial(node->returningList) == NIL)) {
3616
3616
  XXH3_copyState(ctx->xxh_state, prev);
3617
3617
  if (ctx->write_tokens)
3618
3618
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3628,7 +3628,7 @@ _fingerprintDeleteStmt(FingerprintContext *ctx, const DeleteStmt *node, const vo
3628
3628
 
3629
3629
  hash = XXH3_64bits_digest(ctx->xxh_state);
3630
3630
  _fingerprintNode(ctx, node->usingClause, node, "usingClause", depth + 1);
3631
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3631
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->usingClause) == 1 && linitial(node->usingClause) == NIL)) {
3632
3632
  XXH3_copyState(ctx->xxh_state, prev);
3633
3633
  if (ctx->write_tokens)
3634
3634
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3683,7 +3683,7 @@ _fingerprintUpdateStmt(FingerprintContext *ctx, const UpdateStmt *node, const vo
3683
3683
 
3684
3684
  hash = XXH3_64bits_digest(ctx->xxh_state);
3685
3685
  _fingerprintNode(ctx, node->fromClause, node, "fromClause", depth + 1);
3686
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3686
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->fromClause) == 1 && linitial(node->fromClause) == NIL)) {
3687
3687
  XXH3_copyState(ctx->xxh_state, prev);
3688
3688
  if (ctx->write_tokens)
3689
3689
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3716,7 +3716,7 @@ _fingerprintUpdateStmt(FingerprintContext *ctx, const UpdateStmt *node, const vo
3716
3716
 
3717
3717
  hash = XXH3_64bits_digest(ctx->xxh_state);
3718
3718
  _fingerprintNode(ctx, node->returningList, node, "returningList", depth + 1);
3719
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3719
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->returningList) == 1 && linitial(node->returningList) == NIL)) {
3720
3720
  XXH3_copyState(ctx->xxh_state, prev);
3721
3721
  if (ctx->write_tokens)
3722
3722
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3732,7 +3732,7 @@ _fingerprintUpdateStmt(FingerprintContext *ctx, const UpdateStmt *node, const vo
3732
3732
 
3733
3733
  hash = XXH3_64bits_digest(ctx->xxh_state);
3734
3734
  _fingerprintNode(ctx, node->targetList, node, "targetList", depth + 1);
3735
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3735
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->targetList) == 1 && linitial(node->targetList) == NIL)) {
3736
3736
  XXH3_copyState(ctx->xxh_state, prev);
3737
3737
  if (ctx->write_tokens)
3738
3738
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3792,7 +3792,7 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
3792
3792
 
3793
3793
  hash = XXH3_64bits_digest(ctx->xxh_state);
3794
3794
  _fingerprintNode(ctx, node->distinctClause, node, "distinctClause", depth + 1);
3795
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3795
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->distinctClause) == 1 && linitial(node->distinctClause) == NIL)) {
3796
3796
  XXH3_copyState(ctx->xxh_state, prev);
3797
3797
  if (ctx->write_tokens)
3798
3798
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3808,7 +3808,7 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
3808
3808
 
3809
3809
  hash = XXH3_64bits_digest(ctx->xxh_state);
3810
3810
  _fingerprintNode(ctx, node->fromClause, node, "fromClause", depth + 1);
3811
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3811
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->fromClause) == 1 && linitial(node->fromClause) == NIL)) {
3812
3812
  XXH3_copyState(ctx->xxh_state, prev);
3813
3813
  if (ctx->write_tokens)
3814
3814
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3824,7 +3824,7 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
3824
3824
 
3825
3825
  hash = XXH3_64bits_digest(ctx->xxh_state);
3826
3826
  _fingerprintNode(ctx, node->groupClause, node, "groupClause", depth + 1);
3827
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3827
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->groupClause) == 1 && linitial(node->groupClause) == NIL)) {
3828
3828
  XXH3_copyState(ctx->xxh_state, prev);
3829
3829
  if (ctx->write_tokens)
3830
3830
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3930,7 +3930,7 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
3930
3930
 
3931
3931
  hash = XXH3_64bits_digest(ctx->xxh_state);
3932
3932
  _fingerprintNode(ctx, node->lockingClause, node, "lockingClause", depth + 1);
3933
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3933
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->lockingClause) == 1 && linitial(node->lockingClause) == NIL)) {
3934
3934
  XXH3_copyState(ctx->xxh_state, prev);
3935
3935
  if (ctx->write_tokens)
3936
3936
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3968,7 +3968,7 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
3968
3968
 
3969
3969
  hash = XXH3_64bits_digest(ctx->xxh_state);
3970
3970
  _fingerprintNode(ctx, node->sortClause, node, "sortClause", depth + 1);
3971
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3971
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->sortClause) == 1 && linitial(node->sortClause) == NIL)) {
3972
3972
  XXH3_copyState(ctx->xxh_state, prev);
3973
3973
  if (ctx->write_tokens)
3974
3974
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -3984,7 +3984,7 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
3984
3984
 
3985
3985
  hash = XXH3_64bits_digest(ctx->xxh_state);
3986
3986
  _fingerprintNode(ctx, node->targetList, node, "targetList", depth + 1);
3987
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
3987
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->targetList) == 1 && linitial(node->targetList) == NIL)) {
3988
3988
  XXH3_copyState(ctx->xxh_state, prev);
3989
3989
  if (ctx->write_tokens)
3990
3990
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4000,7 +4000,7 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
4000
4000
 
4001
4001
  hash = XXH3_64bits_digest(ctx->xxh_state);
4002
4002
  _fingerprintNode(ctx, node->valuesLists, node, "valuesLists", depth + 1);
4003
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4003
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->valuesLists) == 1 && linitial(node->valuesLists) == NIL)) {
4004
4004
  XXH3_copyState(ctx->xxh_state, prev);
4005
4005
  if (ctx->write_tokens)
4006
4006
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4033,7 +4033,7 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
4033
4033
 
4034
4034
  hash = XXH3_64bits_digest(ctx->xxh_state);
4035
4035
  _fingerprintNode(ctx, node->windowClause, node, "windowClause", depth + 1);
4036
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4036
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->windowClause) == 1 && linitial(node->windowClause) == NIL)) {
4037
4037
  XXH3_copyState(ctx->xxh_state, prev);
4038
4038
  if (ctx->write_tokens)
4039
4039
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4071,7 +4071,7 @@ _fingerprintAlterTableStmt(FingerprintContext *ctx, const AlterTableStmt *node,
4071
4071
 
4072
4072
  hash = XXH3_64bits_digest(ctx->xxh_state);
4073
4073
  _fingerprintNode(ctx, node->cmds, node, "cmds", depth + 1);
4074
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4074
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->cmds) == 1 && linitial(node->cmds) == NIL)) {
4075
4075
  XXH3_copyState(ctx->xxh_state, prev);
4076
4076
  if (ctx->write_tokens)
4077
4077
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4166,6 +4166,11 @@ _fingerprintAlterTableCmd(FingerprintContext *ctx, const AlterTableCmd *node, co
4166
4166
  _fingerprintString(ctx, buffer);
4167
4167
  }
4168
4168
 
4169
+ if (node->recurse) {
4170
+ _fingerprintString(ctx, "recurse");
4171
+ _fingerprintString(ctx, "true");
4172
+ }
4173
+
4169
4174
  if (true) {
4170
4175
  _fingerprintString(ctx, "subtype");
4171
4176
  _fingerprintString(ctx, _enumToStringAlterTableType(node->subtype));
@@ -4223,7 +4228,7 @@ _fingerprintAlterDomainStmt(FingerprintContext *ctx, const AlterDomainStmt *node
4223
4228
 
4224
4229
  hash = XXH3_64bits_digest(ctx->xxh_state);
4225
4230
  _fingerprintNode(ctx, node->typeName, node, "typeName", depth + 1);
4226
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4231
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->typeName) == 1 && linitial(node->typeName) == NIL)) {
4227
4232
  XXH3_copyState(ctx->xxh_state, prev);
4228
4233
  if (ctx->write_tokens)
4229
4234
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4249,7 +4254,7 @@ _fingerprintSetOperationStmt(FingerprintContext *ctx, const SetOperationStmt *no
4249
4254
 
4250
4255
  hash = XXH3_64bits_digest(ctx->xxh_state);
4251
4256
  _fingerprintNode(ctx, node->colCollations, node, "colCollations", depth + 1);
4252
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4257
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colCollations) == 1 && linitial(node->colCollations) == NIL)) {
4253
4258
  XXH3_copyState(ctx->xxh_state, prev);
4254
4259
  if (ctx->write_tokens)
4255
4260
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4265,7 +4270,7 @@ _fingerprintSetOperationStmt(FingerprintContext *ctx, const SetOperationStmt *no
4265
4270
 
4266
4271
  hash = XXH3_64bits_digest(ctx->xxh_state);
4267
4272
  _fingerprintNode(ctx, node->colTypes, node, "colTypes", depth + 1);
4268
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4273
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colTypes) == 1 && linitial(node->colTypes) == NIL)) {
4269
4274
  XXH3_copyState(ctx->xxh_state, prev);
4270
4275
  if (ctx->write_tokens)
4271
4276
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4281,7 +4286,7 @@ _fingerprintSetOperationStmt(FingerprintContext *ctx, const SetOperationStmt *no
4281
4286
 
4282
4287
  hash = XXH3_64bits_digest(ctx->xxh_state);
4283
4288
  _fingerprintNode(ctx, node->colTypmods, node, "colTypmods", depth + 1);
4284
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4289
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colTypmods) == 1 && linitial(node->colTypmods) == NIL)) {
4285
4290
  XXH3_copyState(ctx->xxh_state, prev);
4286
4291
  if (ctx->write_tokens)
4287
4292
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4297,7 +4302,7 @@ _fingerprintSetOperationStmt(FingerprintContext *ctx, const SetOperationStmt *no
4297
4302
 
4298
4303
  hash = XXH3_64bits_digest(ctx->xxh_state);
4299
4304
  _fingerprintNode(ctx, node->groupClauses, node, "groupClauses", depth + 1);
4300
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4305
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->groupClauses) == 1 && linitial(node->groupClauses) == NIL)) {
4301
4306
  XXH3_copyState(ctx->xxh_state, prev);
4302
4307
  if (ctx->write_tokens)
4303
4308
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4367,7 +4372,7 @@ _fingerprintGrantStmt(FingerprintContext *ctx, const GrantStmt *node, const void
4367
4372
 
4368
4373
  hash = XXH3_64bits_digest(ctx->xxh_state);
4369
4374
  _fingerprintNode(ctx, node->grantees, node, "grantees", depth + 1);
4370
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4375
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->grantees) == 1 && linitial(node->grantees) == NIL)) {
4371
4376
  XXH3_copyState(ctx->xxh_state, prev);
4372
4377
  if (ctx->write_tokens)
4373
4378
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4388,7 +4393,7 @@ _fingerprintGrantStmt(FingerprintContext *ctx, const GrantStmt *node, const void
4388
4393
 
4389
4394
  hash = XXH3_64bits_digest(ctx->xxh_state);
4390
4395
  _fingerprintNode(ctx, node->objects, node, "objects", depth + 1);
4391
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4396
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->objects) == 1 && linitial(node->objects) == NIL)) {
4392
4397
  XXH3_copyState(ctx->xxh_state, prev);
4393
4398
  if (ctx->write_tokens)
4394
4399
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4409,7 +4414,7 @@ _fingerprintGrantStmt(FingerprintContext *ctx, const GrantStmt *node, const void
4409
4414
 
4410
4415
  hash = XXH3_64bits_digest(ctx->xxh_state);
4411
4416
  _fingerprintNode(ctx, node->privileges, node, "privileges", depth + 1);
4412
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4417
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->privileges) == 1 && linitial(node->privileges) == NIL)) {
4413
4418
  XXH3_copyState(ctx->xxh_state, prev);
4414
4419
  if (ctx->write_tokens)
4415
4420
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4445,7 +4450,7 @@ _fingerprintGrantRoleStmt(FingerprintContext *ctx, const GrantRoleStmt *node, co
4445
4450
 
4446
4451
  hash = XXH3_64bits_digest(ctx->xxh_state);
4447
4452
  _fingerprintNode(ctx, node->granted_roles, node, "granted_roles", depth + 1);
4448
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4453
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->granted_roles) == 1 && linitial(node->granted_roles) == NIL)) {
4449
4454
  XXH3_copyState(ctx->xxh_state, prev);
4450
4455
  if (ctx->write_tokens)
4451
4456
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4461,7 +4466,7 @@ _fingerprintGrantRoleStmt(FingerprintContext *ctx, const GrantRoleStmt *node, co
4461
4466
 
4462
4467
  hash = XXH3_64bits_digest(ctx->xxh_state);
4463
4468
  _fingerprintNode(ctx, node->grantee_roles, node, "grantee_roles", depth + 1);
4464
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4469
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->grantee_roles) == 1 && linitial(node->grantee_roles) == NIL)) {
4465
4470
  XXH3_copyState(ctx->xxh_state, prev);
4466
4471
  if (ctx->write_tokens)
4467
4472
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4521,7 +4526,7 @@ _fingerprintAlterDefaultPrivilegesStmt(FingerprintContext *ctx, const AlterDefau
4521
4526
 
4522
4527
  hash = XXH3_64bits_digest(ctx->xxh_state);
4523
4528
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
4524
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4529
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
4525
4530
  XXH3_copyState(ctx->xxh_state, prev);
4526
4531
  if (ctx->write_tokens)
4527
4532
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4583,7 +4588,7 @@ _fingerprintCopyStmt(FingerprintContext *ctx, const CopyStmt *node, const void *
4583
4588
 
4584
4589
  hash = XXH3_64bits_digest(ctx->xxh_state);
4585
4590
  _fingerprintNode(ctx, node->attlist, node, "attlist", depth + 1);
4586
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4591
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->attlist) == 1 && linitial(node->attlist) == NIL)) {
4587
4592
  XXH3_copyState(ctx->xxh_state, prev);
4588
4593
  if (ctx->write_tokens)
4589
4594
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4614,7 +4619,7 @@ _fingerprintCopyStmt(FingerprintContext *ctx, const CopyStmt *node, const void *
4614
4619
 
4615
4620
  hash = XXH3_64bits_digest(ctx->xxh_state);
4616
4621
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
4617
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4622
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
4618
4623
  XXH3_copyState(ctx->xxh_state, prev);
4619
4624
  if (ctx->write_tokens)
4620
4625
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4691,7 +4696,7 @@ _fingerprintCreateStmt(FingerprintContext *ctx, const CreateStmt *node, const vo
4691
4696
 
4692
4697
  hash = XXH3_64bits_digest(ctx->xxh_state);
4693
4698
  _fingerprintNode(ctx, node->constraints, node, "constraints", depth + 1);
4694
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4699
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->constraints) == 1 && linitial(node->constraints) == NIL)) {
4695
4700
  XXH3_copyState(ctx->xxh_state, prev);
4696
4701
  if (ctx->write_tokens)
4697
4702
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4712,7 +4717,7 @@ _fingerprintCreateStmt(FingerprintContext *ctx, const CreateStmt *node, const vo
4712
4717
 
4713
4718
  hash = XXH3_64bits_digest(ctx->xxh_state);
4714
4719
  _fingerprintNode(ctx, node->inhRelations, node, "inhRelations", depth + 1);
4715
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4720
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->inhRelations) == 1 && linitial(node->inhRelations) == NIL)) {
4716
4721
  XXH3_copyState(ctx->xxh_state, prev);
4717
4722
  if (ctx->write_tokens)
4718
4723
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4750,7 +4755,7 @@ _fingerprintCreateStmt(FingerprintContext *ctx, const CreateStmt *node, const vo
4750
4755
 
4751
4756
  hash = XXH3_64bits_digest(ctx->xxh_state);
4752
4757
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
4753
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4758
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
4754
4759
  XXH3_copyState(ctx->xxh_state, prev);
4755
4760
  if (ctx->write_tokens)
4756
4761
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4817,7 +4822,7 @@ _fingerprintCreateStmt(FingerprintContext *ctx, const CreateStmt *node, const vo
4817
4822
 
4818
4823
  hash = XXH3_64bits_digest(ctx->xxh_state);
4819
4824
  _fingerprintNode(ctx, node->tableElts, node, "tableElts", depth + 1);
4820
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4825
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->tableElts) == 1 && linitial(node->tableElts) == NIL)) {
4821
4826
  XXH3_copyState(ctx->xxh_state, prev);
4822
4827
  if (ctx->write_tokens)
4823
4828
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4843,7 +4848,7 @@ _fingerprintDefineStmt(FingerprintContext *ctx, const DefineStmt *node, const vo
4843
4848
 
4844
4849
  hash = XXH3_64bits_digest(ctx->xxh_state);
4845
4850
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
4846
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4851
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
4847
4852
  XXH3_copyState(ctx->xxh_state, prev);
4848
4853
  if (ctx->write_tokens)
4849
4854
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4859,7 +4864,7 @@ _fingerprintDefineStmt(FingerprintContext *ctx, const DefineStmt *node, const vo
4859
4864
 
4860
4865
  hash = XXH3_64bits_digest(ctx->xxh_state);
4861
4866
  _fingerprintNode(ctx, node->definition, node, "definition", depth + 1);
4862
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4867
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->definition) == 1 && linitial(node->definition) == NIL)) {
4863
4868
  XXH3_copyState(ctx->xxh_state, prev);
4864
4869
  if (ctx->write_tokens)
4865
4870
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4875,7 +4880,7 @@ _fingerprintDefineStmt(FingerprintContext *ctx, const DefineStmt *node, const vo
4875
4880
 
4876
4881
  hash = XXH3_64bits_digest(ctx->xxh_state);
4877
4882
  _fingerprintNode(ctx, node->defnames, node, "defnames", depth + 1);
4878
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4883
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->defnames) == 1 && linitial(node->defnames) == NIL)) {
4879
4884
  XXH3_copyState(ctx->xxh_state, prev);
4880
4885
  if (ctx->write_tokens)
4881
4886
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4931,7 +4936,7 @@ _fingerprintDropStmt(FingerprintContext *ctx, const DropStmt *node, const void *
4931
4936
 
4932
4937
  hash = XXH3_64bits_digest(ctx->xxh_state);
4933
4938
  _fingerprintNode(ctx, node->objects, node, "objects", depth + 1);
4934
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4939
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->objects) == 1 && linitial(node->objects) == NIL)) {
4935
4940
  XXH3_copyState(ctx->xxh_state, prev);
4936
4941
  if (ctx->write_tokens)
4937
4942
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -4962,7 +4967,7 @@ _fingerprintTruncateStmt(FingerprintContext *ctx, const TruncateStmt *node, cons
4962
4967
 
4963
4968
  hash = XXH3_64bits_digest(ctx->xxh_state);
4964
4969
  _fingerprintNode(ctx, node->relations, node, "relations", depth + 1);
4965
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
4970
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->relations) == 1 && linitial(node->relations) == NIL)) {
4966
4971
  XXH3_copyState(ctx->xxh_state, prev);
4967
4972
  if (ctx->write_tokens)
4968
4973
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5059,7 +5064,7 @@ _fingerprintIndexStmt(FingerprintContext *ctx, const IndexStmt *node, const void
5059
5064
 
5060
5065
  hash = XXH3_64bits_digest(ctx->xxh_state);
5061
5066
  _fingerprintNode(ctx, node->excludeOpNames, node, "excludeOpNames", depth + 1);
5062
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5067
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->excludeOpNames) == 1 && linitial(node->excludeOpNames) == NIL)) {
5063
5068
  XXH3_copyState(ctx->xxh_state, prev);
5064
5069
  if (ctx->write_tokens)
5065
5070
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5090,7 +5095,7 @@ _fingerprintIndexStmt(FingerprintContext *ctx, const IndexStmt *node, const void
5090
5095
 
5091
5096
  hash = XXH3_64bits_digest(ctx->xxh_state);
5092
5097
  _fingerprintNode(ctx, node->indexIncludingParams, node, "indexIncludingParams", depth + 1);
5093
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5098
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->indexIncludingParams) == 1 && linitial(node->indexIncludingParams) == NIL)) {
5094
5099
  XXH3_copyState(ctx->xxh_state, prev);
5095
5100
  if (ctx->write_tokens)
5096
5101
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5113,7 +5118,7 @@ _fingerprintIndexStmt(FingerprintContext *ctx, const IndexStmt *node, const void
5113
5118
 
5114
5119
  hash = XXH3_64bits_digest(ctx->xxh_state);
5115
5120
  _fingerprintNode(ctx, node->indexParams, node, "indexParams", depth + 1);
5116
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5121
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->indexParams) == 1 && linitial(node->indexParams) == NIL)) {
5117
5122
  XXH3_copyState(ctx->xxh_state, prev);
5118
5123
  if (ctx->write_tokens)
5119
5124
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5160,7 +5165,7 @@ _fingerprintIndexStmt(FingerprintContext *ctx, const IndexStmt *node, const void
5160
5165
 
5161
5166
  hash = XXH3_64bits_digest(ctx->xxh_state);
5162
5167
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
5163
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5168
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
5164
5169
  XXH3_copyState(ctx->xxh_state, prev);
5165
5170
  if (ctx->write_tokens)
5166
5171
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5240,7 +5245,7 @@ _fingerprintCreateFunctionStmt(FingerprintContext *ctx, const CreateFunctionStmt
5240
5245
 
5241
5246
  hash = XXH3_64bits_digest(ctx->xxh_state);
5242
5247
  _fingerprintNode(ctx, node->funcname, node, "funcname", depth + 1);
5243
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5248
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funcname) == 1 && linitial(node->funcname) == NIL)) {
5244
5249
  XXH3_copyState(ctx->xxh_state, prev);
5245
5250
  if (ctx->write_tokens)
5246
5251
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5252,22 +5257,8 @@ _fingerprintCreateFunctionStmt(FingerprintContext *ctx, const CreateFunctionStmt
5252
5257
  _fingerprintString(ctx, "true");
5253
5258
  }
5254
5259
 
5255
- if (node->options != NULL && node->options->length > 0) {
5256
- XXH3_state_t* prev = XXH3_createState();
5257
- XXH64_hash_t hash;
5258
-
5259
- XXH3_copyState(prev, ctx->xxh_state);
5260
- _fingerprintString(ctx, "options");
5260
+ // Intentionally ignoring node->options for fingerprinting
5261
5261
 
5262
- hash = XXH3_64bits_digest(ctx->xxh_state);
5263
- _fingerprintNode(ctx, node->options, node, "options", depth + 1);
5264
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5265
- XXH3_copyState(ctx->xxh_state, prev);
5266
- if (ctx->write_tokens)
5267
- dlist_delete(dlist_tail_node(&ctx->tokens));
5268
- }
5269
- XXH3_freeState(prev);
5270
- }
5271
5262
  if (node->parameters != NULL && node->parameters->length > 0) {
5272
5263
  XXH3_state_t* prev = XXH3_createState();
5273
5264
  XXH64_hash_t hash;
@@ -5277,7 +5268,7 @@ _fingerprintCreateFunctionStmt(FingerprintContext *ctx, const CreateFunctionStmt
5277
5268
 
5278
5269
  hash = XXH3_64bits_digest(ctx->xxh_state);
5279
5270
  _fingerprintNode(ctx, node->parameters, node, "parameters", depth + 1);
5280
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5271
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->parameters) == 1 && linitial(node->parameters) == NIL)) {
5281
5272
  XXH3_copyState(ctx->xxh_state, prev);
5282
5273
  if (ctx->write_tokens)
5283
5274
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5320,7 +5311,7 @@ _fingerprintAlterFunctionStmt(FingerprintContext *ctx, const AlterFunctionStmt *
5320
5311
 
5321
5312
  hash = XXH3_64bits_digest(ctx->xxh_state);
5322
5313
  _fingerprintNode(ctx, node->actions, node, "actions", depth + 1);
5323
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5314
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->actions) == 1 && linitial(node->actions) == NIL)) {
5324
5315
  XXH3_copyState(ctx->xxh_state, prev);
5325
5316
  if (ctx->write_tokens)
5326
5317
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5354,22 +5345,8 @@ _fingerprintAlterFunctionStmt(FingerprintContext *ctx, const AlterFunctionStmt *
5354
5345
  static void
5355
5346
  _fingerprintDoStmt(FingerprintContext *ctx, const DoStmt *node, const void *parent, const char *field_name, unsigned int depth)
5356
5347
  {
5357
- if (node->args != NULL && node->args->length > 0) {
5358
- XXH3_state_t* prev = XXH3_createState();
5359
- XXH64_hash_t hash;
5360
-
5361
- XXH3_copyState(prev, ctx->xxh_state);
5362
- _fingerprintString(ctx, "args");
5348
+ // Intentionally ignoring node->args for fingerprinting
5363
5349
 
5364
- hash = XXH3_64bits_digest(ctx->xxh_state);
5365
- _fingerprintNode(ctx, node->args, node, "args", depth + 1);
5366
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5367
- XXH3_copyState(ctx->xxh_state, prev);
5368
- if (ctx->write_tokens)
5369
- dlist_delete(dlist_tail_node(&ctx->tokens));
5370
- }
5371
- XXH3_freeState(prev);
5372
- }
5373
5350
  }
5374
5351
 
5375
5352
  static void
@@ -5453,7 +5430,7 @@ _fingerprintRuleStmt(FingerprintContext *ctx, const RuleStmt *node, const void *
5453
5430
 
5454
5431
  hash = XXH3_64bits_digest(ctx->xxh_state);
5455
5432
  _fingerprintNode(ctx, node->actions, node, "actions", depth + 1);
5456
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5433
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->actions) == 1 && linitial(node->actions) == NIL)) {
5457
5434
  XXH3_copyState(ctx->xxh_state, prev);
5458
5435
  if (ctx->write_tokens)
5459
5436
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5519,10 +5496,7 @@ _fingerprintRuleStmt(FingerprintContext *ctx, const RuleStmt *node, const void *
5519
5496
  static void
5520
5497
  _fingerprintNotifyStmt(FingerprintContext *ctx, const NotifyStmt *node, const void *parent, const char *field_name, unsigned int depth)
5521
5498
  {
5522
- if (node->conditionname != NULL) {
5523
- _fingerprintString(ctx, "conditionname");
5524
- _fingerprintString(ctx, node->conditionname);
5525
- }
5499
+ // Intentionally ignoring node->conditionname for fingerprinting
5526
5500
 
5527
5501
  if (node->payload != NULL) {
5528
5502
  _fingerprintString(ctx, "payload");
@@ -5534,20 +5508,14 @@ _fingerprintNotifyStmt(FingerprintContext *ctx, const NotifyStmt *node, const vo
5534
5508
  static void
5535
5509
  _fingerprintListenStmt(FingerprintContext *ctx, const ListenStmt *node, const void *parent, const char *field_name, unsigned int depth)
5536
5510
  {
5537
- if (node->conditionname != NULL) {
5538
- _fingerprintString(ctx, "conditionname");
5539
- _fingerprintString(ctx, node->conditionname);
5540
- }
5511
+ // Intentionally ignoring node->conditionname for fingerprinting
5541
5512
 
5542
5513
  }
5543
5514
 
5544
5515
  static void
5545
5516
  _fingerprintUnlistenStmt(FingerprintContext *ctx, const UnlistenStmt *node, const void *parent, const char *field_name, unsigned int depth)
5546
5517
  {
5547
- if (node->conditionname != NULL) {
5548
- _fingerprintString(ctx, "conditionname");
5549
- _fingerprintString(ctx, node->conditionname);
5550
- }
5518
+ // Intentionally ignoring node->conditionname for fingerprinting
5551
5519
 
5552
5520
  }
5553
5521
 
@@ -5584,7 +5552,7 @@ _fingerprintViewStmt(FingerprintContext *ctx, const ViewStmt *node, const void *
5584
5552
 
5585
5553
  hash = XXH3_64bits_digest(ctx->xxh_state);
5586
5554
  _fingerprintNode(ctx, node->aliases, node, "aliases", depth + 1);
5587
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5555
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->aliases) == 1 && linitial(node->aliases) == NIL)) {
5588
5556
  XXH3_copyState(ctx->xxh_state, prev);
5589
5557
  if (ctx->write_tokens)
5590
5558
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5600,7 +5568,7 @@ _fingerprintViewStmt(FingerprintContext *ctx, const ViewStmt *node, const void *
5600
5568
 
5601
5569
  hash = XXH3_64bits_digest(ctx->xxh_state);
5602
5570
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
5603
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5571
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
5604
5572
  XXH3_copyState(ctx->xxh_state, prev);
5605
5573
  if (ctx->write_tokens)
5606
5574
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5692,7 +5660,7 @@ _fingerprintCreateDomainStmt(FingerprintContext *ctx, const CreateDomainStmt *no
5692
5660
 
5693
5661
  hash = XXH3_64bits_digest(ctx->xxh_state);
5694
5662
  _fingerprintNode(ctx, node->constraints, node, "constraints", depth + 1);
5695
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5663
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->constraints) == 1 && linitial(node->constraints) == NIL)) {
5696
5664
  XXH3_copyState(ctx->xxh_state, prev);
5697
5665
  if (ctx->write_tokens)
5698
5666
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5708,7 +5676,7 @@ _fingerprintCreateDomainStmt(FingerprintContext *ctx, const CreateDomainStmt *no
5708
5676
 
5709
5677
  hash = XXH3_64bits_digest(ctx->xxh_state);
5710
5678
  _fingerprintNode(ctx, node->domainname, node, "domainname", depth + 1);
5711
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5679
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->domainname) == 1 && linitial(node->domainname) == NIL)) {
5712
5680
  XXH3_copyState(ctx->xxh_state, prev);
5713
5681
  if (ctx->write_tokens)
5714
5682
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5751,7 +5719,7 @@ _fingerprintCreatedbStmt(FingerprintContext *ctx, const CreatedbStmt *node, cons
5751
5719
 
5752
5720
  hash = XXH3_64bits_digest(ctx->xxh_state);
5753
5721
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
5754
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5722
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
5755
5723
  XXH3_copyState(ctx->xxh_state, prev);
5756
5724
  if (ctx->write_tokens)
5757
5725
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5782,7 +5750,7 @@ _fingerprintDropdbStmt(FingerprintContext *ctx, const DropdbStmt *node, const vo
5782
5750
 
5783
5751
  hash = XXH3_64bits_digest(ctx->xxh_state);
5784
5752
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
5785
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5753
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
5786
5754
  XXH3_copyState(ctx->xxh_state, prev);
5787
5755
  if (ctx->write_tokens)
5788
5756
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5808,7 +5776,7 @@ _fingerprintVacuumStmt(FingerprintContext *ctx, const VacuumStmt *node, const vo
5808
5776
 
5809
5777
  hash = XXH3_64bits_digest(ctx->xxh_state);
5810
5778
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
5811
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5779
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
5812
5780
  XXH3_copyState(ctx->xxh_state, prev);
5813
5781
  if (ctx->write_tokens)
5814
5782
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5824,7 +5792,7 @@ _fingerprintVacuumStmt(FingerprintContext *ctx, const VacuumStmt *node, const vo
5824
5792
 
5825
5793
  hash = XXH3_64bits_digest(ctx->xxh_state);
5826
5794
  _fingerprintNode(ctx, node->rels, node, "rels", depth + 1);
5827
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5795
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->rels) == 1 && linitial(node->rels) == NIL)) {
5828
5796
  XXH3_copyState(ctx->xxh_state, prev);
5829
5797
  if (ctx->write_tokens)
5830
5798
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5845,7 +5813,7 @@ _fingerprintExplainStmt(FingerprintContext *ctx, const ExplainStmt *node, const
5845
5813
 
5846
5814
  hash = XXH3_64bits_digest(ctx->xxh_state);
5847
5815
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
5848
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5816
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
5849
5817
  XXH3_copyState(ctx->xxh_state, prev);
5850
5818
  if (ctx->write_tokens)
5851
5819
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -5947,7 +5915,7 @@ _fingerprintCreateSeqStmt(FingerprintContext *ctx, const CreateSeqStmt *node, co
5947
5915
 
5948
5916
  hash = XXH3_64bits_digest(ctx->xxh_state);
5949
5917
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
5950
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5918
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
5951
5919
  XXH3_copyState(ctx->xxh_state, prev);
5952
5920
  if (ctx->write_tokens)
5953
5921
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6002,7 +5970,7 @@ _fingerprintAlterSeqStmt(FingerprintContext *ctx, const AlterSeqStmt *node, cons
6002
5970
 
6003
5971
  hash = XXH3_64bits_digest(ctx->xxh_state);
6004
5972
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
6005
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
5973
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
6006
5974
  XXH3_copyState(ctx->xxh_state, prev);
6007
5975
  if (ctx->write_tokens)
6008
5976
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6040,7 +6008,7 @@ _fingerprintVariableSetStmt(FingerprintContext *ctx, const VariableSetStmt *node
6040
6008
 
6041
6009
  hash = XXH3_64bits_digest(ctx->xxh_state);
6042
6010
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
6043
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6011
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
6044
6012
  XXH3_copyState(ctx->xxh_state, prev);
6045
6013
  if (ctx->write_tokens)
6046
6014
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6096,7 +6064,7 @@ _fingerprintCreateTrigStmt(FingerprintContext *ctx, const CreateTrigStmt *node,
6096
6064
 
6097
6065
  hash = XXH3_64bits_digest(ctx->xxh_state);
6098
6066
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
6099
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6067
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
6100
6068
  XXH3_copyState(ctx->xxh_state, prev);
6101
6069
  if (ctx->write_tokens)
6102
6070
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6112,7 +6080,7 @@ _fingerprintCreateTrigStmt(FingerprintContext *ctx, const CreateTrigStmt *node,
6112
6080
 
6113
6081
  hash = XXH3_64bits_digest(ctx->xxh_state);
6114
6082
  _fingerprintNode(ctx, node->columns, node, "columns", depth + 1);
6115
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6083
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->columns) == 1 && linitial(node->columns) == NIL)) {
6116
6084
  XXH3_copyState(ctx->xxh_state, prev);
6117
6085
  if (ctx->write_tokens)
6118
6086
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6157,7 +6125,7 @@ _fingerprintCreateTrigStmt(FingerprintContext *ctx, const CreateTrigStmt *node,
6157
6125
 
6158
6126
  hash = XXH3_64bits_digest(ctx->xxh_state);
6159
6127
  _fingerprintNode(ctx, node->funcname, node, "funcname", depth + 1);
6160
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6128
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funcname) == 1 && linitial(node->funcname) == NIL)) {
6161
6129
  XXH3_copyState(ctx->xxh_state, prev);
6162
6130
  if (ctx->write_tokens)
6163
6131
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6212,7 +6180,7 @@ _fingerprintCreateTrigStmt(FingerprintContext *ctx, const CreateTrigStmt *node,
6212
6180
 
6213
6181
  hash = XXH3_64bits_digest(ctx->xxh_state);
6214
6182
  _fingerprintNode(ctx, node->transitionRels, node, "transitionRels", depth + 1);
6215
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6183
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->transitionRels) == 1 && linitial(node->transitionRels) == NIL)) {
6216
6184
  XXH3_copyState(ctx->xxh_state, prev);
6217
6185
  if (ctx->write_tokens)
6218
6186
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6255,7 +6223,7 @@ _fingerprintCreatePLangStmt(FingerprintContext *ctx, const CreatePLangStmt *node
6255
6223
 
6256
6224
  hash = XXH3_64bits_digest(ctx->xxh_state);
6257
6225
  _fingerprintNode(ctx, node->plhandler, node, "plhandler", depth + 1);
6258
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6226
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->plhandler) == 1 && linitial(node->plhandler) == NIL)) {
6259
6227
  XXH3_copyState(ctx->xxh_state, prev);
6260
6228
  if (ctx->write_tokens)
6261
6229
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6271,7 +6239,7 @@ _fingerprintCreatePLangStmt(FingerprintContext *ctx, const CreatePLangStmt *node
6271
6239
 
6272
6240
  hash = XXH3_64bits_digest(ctx->xxh_state);
6273
6241
  _fingerprintNode(ctx, node->plinline, node, "plinline", depth + 1);
6274
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6242
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->plinline) == 1 && linitial(node->plinline) == NIL)) {
6275
6243
  XXH3_copyState(ctx->xxh_state, prev);
6276
6244
  if (ctx->write_tokens)
6277
6245
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6297,7 +6265,7 @@ _fingerprintCreatePLangStmt(FingerprintContext *ctx, const CreatePLangStmt *node
6297
6265
 
6298
6266
  hash = XXH3_64bits_digest(ctx->xxh_state);
6299
6267
  _fingerprintNode(ctx, node->plvalidator, node, "plvalidator", depth + 1);
6300
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6268
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->plvalidator) == 1 && linitial(node->plvalidator) == NIL)) {
6301
6269
  XXH3_copyState(ctx->xxh_state, prev);
6302
6270
  if (ctx->write_tokens)
6303
6271
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6323,7 +6291,7 @@ _fingerprintCreateRoleStmt(FingerprintContext *ctx, const CreateRoleStmt *node,
6323
6291
 
6324
6292
  hash = XXH3_64bits_digest(ctx->xxh_state);
6325
6293
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
6326
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6294
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
6327
6295
  XXH3_copyState(ctx->xxh_state, prev);
6328
6296
  if (ctx->write_tokens)
6329
6297
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6361,7 +6329,7 @@ _fingerprintAlterRoleStmt(FingerprintContext *ctx, const AlterRoleStmt *node, co
6361
6329
 
6362
6330
  hash = XXH3_64bits_digest(ctx->xxh_state);
6363
6331
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
6364
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6332
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
6365
6333
  XXH3_copyState(ctx->xxh_state, prev);
6366
6334
  if (ctx->write_tokens)
6367
6335
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6404,7 +6372,7 @@ _fingerprintDropRoleStmt(FingerprintContext *ctx, const DropRoleStmt *node, cons
6404
6372
 
6405
6373
  hash = XXH3_64bits_digest(ctx->xxh_state);
6406
6374
  _fingerprintNode(ctx, node->roles, node, "roles", depth + 1);
6407
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6375
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->roles) == 1 && linitial(node->roles) == NIL)) {
6408
6376
  XXH3_copyState(ctx->xxh_state, prev);
6409
6377
  if (ctx->write_tokens)
6410
6378
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6437,7 +6405,7 @@ _fingerprintLockStmt(FingerprintContext *ctx, const LockStmt *node, const void *
6437
6405
 
6438
6406
  hash = XXH3_64bits_digest(ctx->xxh_state);
6439
6407
  _fingerprintNode(ctx, node->relations, node, "relations", depth + 1);
6440
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6408
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->relations) == 1 && linitial(node->relations) == NIL)) {
6441
6409
  XXH3_copyState(ctx->xxh_state, prev);
6442
6410
  if (ctx->write_tokens)
6443
6411
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6458,7 +6426,7 @@ _fingerprintConstraintsSetStmt(FingerprintContext *ctx, const ConstraintsSetStmt
6458
6426
 
6459
6427
  hash = XXH3_64bits_digest(ctx->xxh_state);
6460
6428
  _fingerprintNode(ctx, node->constraints, node, "constraints", depth + 1);
6461
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6429
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->constraints) == 1 && linitial(node->constraints) == NIL)) {
6462
6430
  XXH3_copyState(ctx->xxh_state, prev);
6463
6431
  if (ctx->write_tokens)
6464
6432
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6555,7 +6523,7 @@ _fingerprintCreateSchemaStmt(FingerprintContext *ctx, const CreateSchemaStmt *no
6555
6523
 
6556
6524
  hash = XXH3_64bits_digest(ctx->xxh_state);
6557
6525
  _fingerprintNode(ctx, node->schemaElts, node, "schemaElts", depth + 1);
6558
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6526
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->schemaElts) == 1 && linitial(node->schemaElts) == NIL)) {
6559
6527
  XXH3_copyState(ctx->xxh_state, prev);
6560
6528
  if (ctx->write_tokens)
6561
6529
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6586,7 +6554,7 @@ _fingerprintAlterDatabaseStmt(FingerprintContext *ctx, const AlterDatabaseStmt *
6586
6554
 
6587
6555
  hash = XXH3_64bits_digest(ctx->xxh_state);
6588
6556
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
6589
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6557
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
6590
6558
  XXH3_copyState(ctx->xxh_state, prev);
6591
6559
  if (ctx->write_tokens)
6592
6560
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6678,7 +6646,7 @@ _fingerprintCreateConversionStmt(FingerprintContext *ctx, const CreateConversion
6678
6646
 
6679
6647
  hash = XXH3_64bits_digest(ctx->xxh_state);
6680
6648
  _fingerprintNode(ctx, node->conversion_name, node, "conversion_name", depth + 1);
6681
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6649
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->conversion_name) == 1 && linitial(node->conversion_name) == NIL)) {
6682
6650
  XXH3_copyState(ctx->xxh_state, prev);
6683
6651
  if (ctx->write_tokens)
6684
6652
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6704,7 +6672,7 @@ _fingerprintCreateConversionStmt(FingerprintContext *ctx, const CreateConversion
6704
6672
 
6705
6673
  hash = XXH3_64bits_digest(ctx->xxh_state);
6706
6674
  _fingerprintNode(ctx, node->func_name, node, "func_name", depth + 1);
6707
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6675
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->func_name) == 1 && linitial(node->func_name) == NIL)) {
6708
6676
  XXH3_copyState(ctx->xxh_state, prev);
6709
6677
  if (ctx->write_tokens)
6710
6678
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6823,7 +6791,7 @@ _fingerprintCreateOpClassStmt(FingerprintContext *ctx, const CreateOpClassStmt *
6823
6791
 
6824
6792
  hash = XXH3_64bits_digest(ctx->xxh_state);
6825
6793
  _fingerprintNode(ctx, node->items, node, "items", depth + 1);
6826
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6794
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->items) == 1 && linitial(node->items) == NIL)) {
6827
6795
  XXH3_copyState(ctx->xxh_state, prev);
6828
6796
  if (ctx->write_tokens)
6829
6797
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6839,7 +6807,7 @@ _fingerprintCreateOpClassStmt(FingerprintContext *ctx, const CreateOpClassStmt *
6839
6807
 
6840
6808
  hash = XXH3_64bits_digest(ctx->xxh_state);
6841
6809
  _fingerprintNode(ctx, node->opclassname, node, "opclassname", depth + 1);
6842
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6810
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opclassname) == 1 && linitial(node->opclassname) == NIL)) {
6843
6811
  XXH3_copyState(ctx->xxh_state, prev);
6844
6812
  if (ctx->write_tokens)
6845
6813
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6855,7 +6823,7 @@ _fingerprintCreateOpClassStmt(FingerprintContext *ctx, const CreateOpClassStmt *
6855
6823
 
6856
6824
  hash = XXH3_64bits_digest(ctx->xxh_state);
6857
6825
  _fingerprintNode(ctx, node->opfamilyname, node, "opfamilyname", depth + 1);
6858
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6826
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opfamilyname) == 1 && linitial(node->opfamilyname) == NIL)) {
6859
6827
  XXH3_copyState(ctx->xxh_state, prev);
6860
6828
  if (ctx->write_tokens)
6861
6829
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6881,7 +6849,7 @@ _fingerprintCreateOpFamilyStmt(FingerprintContext *ctx, const CreateOpFamilyStmt
6881
6849
 
6882
6850
  hash = XXH3_64bits_digest(ctx->xxh_state);
6883
6851
  _fingerprintNode(ctx, node->opfamilyname, node, "opfamilyname", depth + 1);
6884
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6852
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opfamilyname) == 1 && linitial(node->opfamilyname) == NIL)) {
6885
6853
  XXH3_copyState(ctx->xxh_state, prev);
6886
6854
  if (ctx->write_tokens)
6887
6855
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6912,7 +6880,7 @@ _fingerprintAlterOpFamilyStmt(FingerprintContext *ctx, const AlterOpFamilyStmt *
6912
6880
 
6913
6881
  hash = XXH3_64bits_digest(ctx->xxh_state);
6914
6882
  _fingerprintNode(ctx, node->items, node, "items", depth + 1);
6915
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6883
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->items) == 1 && linitial(node->items) == NIL)) {
6916
6884
  XXH3_copyState(ctx->xxh_state, prev);
6917
6885
  if (ctx->write_tokens)
6918
6886
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6928,7 +6896,7 @@ _fingerprintAlterOpFamilyStmt(FingerprintContext *ctx, const AlterOpFamilyStmt *
6928
6896
 
6929
6897
  hash = XXH3_64bits_digest(ctx->xxh_state);
6930
6898
  _fingerprintNode(ctx, node->opfamilyname, node, "opfamilyname", depth + 1);
6931
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6899
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opfamilyname) == 1 && linitial(node->opfamilyname) == NIL)) {
6932
6900
  XXH3_copyState(ctx->xxh_state, prev);
6933
6901
  if (ctx->write_tokens)
6934
6902
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6949,7 +6917,7 @@ _fingerprintPrepareStmt(FingerprintContext *ctx, const PrepareStmt *node, const
6949
6917
 
6950
6918
  hash = XXH3_64bits_digest(ctx->xxh_state);
6951
6919
  _fingerprintNode(ctx, node->argtypes, node, "argtypes", depth + 1);
6952
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6920
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->argtypes) == 1 && linitial(node->argtypes) == NIL)) {
6953
6921
  XXH3_copyState(ctx->xxh_state, prev);
6954
6922
  if (ctx->write_tokens)
6955
6923
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -6991,7 +6959,7 @@ _fingerprintExecuteStmt(FingerprintContext *ctx, const ExecuteStmt *node, const
6991
6959
 
6992
6960
  hash = XXH3_64bits_digest(ctx->xxh_state);
6993
6961
  _fingerprintNode(ctx, node->params, node, "params", depth + 1);
6994
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
6962
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->params) == 1 && linitial(node->params) == NIL)) {
6995
6963
  XXH3_copyState(ctx->xxh_state, prev);
6996
6964
  if (ctx->write_tokens)
6997
6965
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7052,7 +7020,7 @@ _fingerprintCreateTableSpaceStmt(FingerprintContext *ctx, const CreateTableSpace
7052
7020
 
7053
7021
  hash = XXH3_64bits_digest(ctx->xxh_state);
7054
7022
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
7055
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7023
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
7056
7024
  XXH3_copyState(ctx->xxh_state, prev);
7057
7025
  if (ctx->write_tokens)
7058
7026
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7308,7 +7276,7 @@ _fingerprintAlterOperatorStmt(FingerprintContext *ctx, const AlterOperatorStmt *
7308
7276
 
7309
7277
  hash = XXH3_64bits_digest(ctx->xxh_state);
7310
7278
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
7311
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7279
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
7312
7280
  XXH3_copyState(ctx->xxh_state, prev);
7313
7281
  if (ctx->write_tokens)
7314
7282
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7329,7 +7297,7 @@ _fingerprintAlterTypeStmt(FingerprintContext *ctx, const AlterTypeStmt *node, co
7329
7297
 
7330
7298
  hash = XXH3_64bits_digest(ctx->xxh_state);
7331
7299
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
7332
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7300
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
7333
7301
  XXH3_copyState(ctx->xxh_state, prev);
7334
7302
  if (ctx->write_tokens)
7335
7303
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7345,7 +7313,7 @@ _fingerprintAlterTypeStmt(FingerprintContext *ctx, const AlterTypeStmt *node, co
7345
7313
 
7346
7314
  hash = XXH3_64bits_digest(ctx->xxh_state);
7347
7315
  _fingerprintNode(ctx, node->typeName, node, "typeName", depth + 1);
7348
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7316
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->typeName) == 1 && linitial(node->typeName) == NIL)) {
7349
7317
  XXH3_copyState(ctx->xxh_state, prev);
7350
7318
  if (ctx->write_tokens)
7351
7319
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7371,7 +7339,7 @@ _fingerprintDropOwnedStmt(FingerprintContext *ctx, const DropOwnedStmt *node, co
7371
7339
 
7372
7340
  hash = XXH3_64bits_digest(ctx->xxh_state);
7373
7341
  _fingerprintNode(ctx, node->roles, node, "roles", depth + 1);
7374
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7342
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->roles) == 1 && linitial(node->roles) == NIL)) {
7375
7343
  XXH3_copyState(ctx->xxh_state, prev);
7376
7344
  if (ctx->write_tokens)
7377
7345
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7409,7 +7377,7 @@ _fingerprintReassignOwnedStmt(FingerprintContext *ctx, const ReassignOwnedStmt *
7409
7377
 
7410
7378
  hash = XXH3_64bits_digest(ctx->xxh_state);
7411
7379
  _fingerprintNode(ctx, node->roles, node, "roles", depth + 1);
7412
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7380
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->roles) == 1 && linitial(node->roles) == NIL)) {
7413
7381
  XXH3_copyState(ctx->xxh_state, prev);
7414
7382
  if (ctx->write_tokens)
7415
7383
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7430,7 +7398,7 @@ _fingerprintCompositeTypeStmt(FingerprintContext *ctx, const CompositeTypeStmt *
7430
7398
 
7431
7399
  hash = XXH3_64bits_digest(ctx->xxh_state);
7432
7400
  _fingerprintNode(ctx, node->coldeflist, node, "coldeflist", depth + 1);
7433
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7401
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->coldeflist) == 1 && linitial(node->coldeflist) == NIL)) {
7434
7402
  XXH3_copyState(ctx->xxh_state, prev);
7435
7403
  if (ctx->write_tokens)
7436
7404
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7468,7 +7436,7 @@ _fingerprintCreateEnumStmt(FingerprintContext *ctx, const CreateEnumStmt *node,
7468
7436
 
7469
7437
  hash = XXH3_64bits_digest(ctx->xxh_state);
7470
7438
  _fingerprintNode(ctx, node->typeName, node, "typeName", depth + 1);
7471
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7439
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->typeName) == 1 && linitial(node->typeName) == NIL)) {
7472
7440
  XXH3_copyState(ctx->xxh_state, prev);
7473
7441
  if (ctx->write_tokens)
7474
7442
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7484,7 +7452,7 @@ _fingerprintCreateEnumStmt(FingerprintContext *ctx, const CreateEnumStmt *node,
7484
7452
 
7485
7453
  hash = XXH3_64bits_digest(ctx->xxh_state);
7486
7454
  _fingerprintNode(ctx, node->vals, node, "vals", depth + 1);
7487
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7455
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->vals) == 1 && linitial(node->vals) == NIL)) {
7488
7456
  XXH3_copyState(ctx->xxh_state, prev);
7489
7457
  if (ctx->write_tokens)
7490
7458
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7505,7 +7473,7 @@ _fingerprintCreateRangeStmt(FingerprintContext *ctx, const CreateRangeStmt *node
7505
7473
 
7506
7474
  hash = XXH3_64bits_digest(ctx->xxh_state);
7507
7475
  _fingerprintNode(ctx, node->params, node, "params", depth + 1);
7508
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7476
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->params) == 1 && linitial(node->params) == NIL)) {
7509
7477
  XXH3_copyState(ctx->xxh_state, prev);
7510
7478
  if (ctx->write_tokens)
7511
7479
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7521,7 +7489,7 @@ _fingerprintCreateRangeStmt(FingerprintContext *ctx, const CreateRangeStmt *node
7521
7489
 
7522
7490
  hash = XXH3_64bits_digest(ctx->xxh_state);
7523
7491
  _fingerprintNode(ctx, node->typeName, node, "typeName", depth + 1);
7524
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7492
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->typeName) == 1 && linitial(node->typeName) == NIL)) {
7525
7493
  XXH3_copyState(ctx->xxh_state, prev);
7526
7494
  if (ctx->write_tokens)
7527
7495
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7567,7 +7535,7 @@ _fingerprintAlterEnumStmt(FingerprintContext *ctx, const AlterEnumStmt *node, co
7567
7535
 
7568
7536
  hash = XXH3_64bits_digest(ctx->xxh_state);
7569
7537
  _fingerprintNode(ctx, node->typeName, node, "typeName", depth + 1);
7570
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7538
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->typeName) == 1 && linitial(node->typeName) == NIL)) {
7571
7539
  XXH3_copyState(ctx->xxh_state, prev);
7572
7540
  if (ctx->write_tokens)
7573
7541
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7588,7 +7556,7 @@ _fingerprintAlterTSDictionaryStmt(FingerprintContext *ctx, const AlterTSDictiona
7588
7556
 
7589
7557
  hash = XXH3_64bits_digest(ctx->xxh_state);
7590
7558
  _fingerprintNode(ctx, node->dictname, node, "dictname", depth + 1);
7591
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7559
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->dictname) == 1 && linitial(node->dictname) == NIL)) {
7592
7560
  XXH3_copyState(ctx->xxh_state, prev);
7593
7561
  if (ctx->write_tokens)
7594
7562
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7604,7 +7572,7 @@ _fingerprintAlterTSDictionaryStmt(FingerprintContext *ctx, const AlterTSDictiona
7604
7572
 
7605
7573
  hash = XXH3_64bits_digest(ctx->xxh_state);
7606
7574
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
7607
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7575
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
7608
7576
  XXH3_copyState(ctx->xxh_state, prev);
7609
7577
  if (ctx->write_tokens)
7610
7578
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7625,7 +7593,7 @@ _fingerprintAlterTSConfigurationStmt(FingerprintContext *ctx, const AlterTSConfi
7625
7593
 
7626
7594
  hash = XXH3_64bits_digest(ctx->xxh_state);
7627
7595
  _fingerprintNode(ctx, node->cfgname, node, "cfgname", depth + 1);
7628
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7596
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->cfgname) == 1 && linitial(node->cfgname) == NIL)) {
7629
7597
  XXH3_copyState(ctx->xxh_state, prev);
7630
7598
  if (ctx->write_tokens)
7631
7599
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7641,7 +7609,7 @@ _fingerprintAlterTSConfigurationStmt(FingerprintContext *ctx, const AlterTSConfi
7641
7609
 
7642
7610
  hash = XXH3_64bits_digest(ctx->xxh_state);
7643
7611
  _fingerprintNode(ctx, node->dicts, node, "dicts", depth + 1);
7644
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7612
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->dicts) == 1 && linitial(node->dicts) == NIL)) {
7645
7613
  XXH3_copyState(ctx->xxh_state, prev);
7646
7614
  if (ctx->write_tokens)
7647
7615
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7677,7 +7645,7 @@ _fingerprintAlterTSConfigurationStmt(FingerprintContext *ctx, const AlterTSConfi
7677
7645
 
7678
7646
  hash = XXH3_64bits_digest(ctx->xxh_state);
7679
7647
  _fingerprintNode(ctx, node->tokentype, node, "tokentype", depth + 1);
7680
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7648
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->tokentype) == 1 && linitial(node->tokentype) == NIL)) {
7681
7649
  XXH3_copyState(ctx->xxh_state, prev);
7682
7650
  if (ctx->write_tokens)
7683
7651
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7703,7 +7671,7 @@ _fingerprintCreateFdwStmt(FingerprintContext *ctx, const CreateFdwStmt *node, co
7703
7671
 
7704
7672
  hash = XXH3_64bits_digest(ctx->xxh_state);
7705
7673
  _fingerprintNode(ctx, node->func_options, node, "func_options", depth + 1);
7706
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7674
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->func_options) == 1 && linitial(node->func_options) == NIL)) {
7707
7675
  XXH3_copyState(ctx->xxh_state, prev);
7708
7676
  if (ctx->write_tokens)
7709
7677
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7719,7 +7687,7 @@ _fingerprintCreateFdwStmt(FingerprintContext *ctx, const CreateFdwStmt *node, co
7719
7687
 
7720
7688
  hash = XXH3_64bits_digest(ctx->xxh_state);
7721
7689
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
7722
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7690
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
7723
7691
  XXH3_copyState(ctx->xxh_state, prev);
7724
7692
  if (ctx->write_tokens)
7725
7693
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7745,7 +7713,7 @@ _fingerprintAlterFdwStmt(FingerprintContext *ctx, const AlterFdwStmt *node, cons
7745
7713
 
7746
7714
  hash = XXH3_64bits_digest(ctx->xxh_state);
7747
7715
  _fingerprintNode(ctx, node->func_options, node, "func_options", depth + 1);
7748
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7716
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->func_options) == 1 && linitial(node->func_options) == NIL)) {
7749
7717
  XXH3_copyState(ctx->xxh_state, prev);
7750
7718
  if (ctx->write_tokens)
7751
7719
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7761,7 +7729,7 @@ _fingerprintAlterFdwStmt(FingerprintContext *ctx, const AlterFdwStmt *node, cons
7761
7729
 
7762
7730
  hash = XXH3_64bits_digest(ctx->xxh_state);
7763
7731
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
7764
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7732
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
7765
7733
  XXH3_copyState(ctx->xxh_state, prev);
7766
7734
  if (ctx->write_tokens)
7767
7735
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7792,7 +7760,7 @@ _fingerprintCreateForeignServerStmt(FingerprintContext *ctx, const CreateForeign
7792
7760
 
7793
7761
  hash = XXH3_64bits_digest(ctx->xxh_state);
7794
7762
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
7795
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7763
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
7796
7764
  XXH3_copyState(ctx->xxh_state, prev);
7797
7765
  if (ctx->write_tokens)
7798
7766
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7833,7 +7801,7 @@ _fingerprintAlterForeignServerStmt(FingerprintContext *ctx, const AlterForeignSe
7833
7801
 
7834
7802
  hash = XXH3_64bits_digest(ctx->xxh_state);
7835
7803
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
7836
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7804
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
7837
7805
  XXH3_copyState(ctx->xxh_state, prev);
7838
7806
  if (ctx->write_tokens)
7839
7807
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7869,7 +7837,7 @@ _fingerprintCreateUserMappingStmt(FingerprintContext *ctx, const CreateUserMappi
7869
7837
 
7870
7838
  hash = XXH3_64bits_digest(ctx->xxh_state);
7871
7839
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
7872
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7840
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
7873
7841
  XXH3_copyState(ctx->xxh_state, prev);
7874
7842
  if (ctx->write_tokens)
7875
7843
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7912,7 +7880,7 @@ _fingerprintAlterUserMappingStmt(FingerprintContext *ctx, const AlterUserMapping
7912
7880
 
7913
7881
  hash = XXH3_64bits_digest(ctx->xxh_state);
7914
7882
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
7915
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7883
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
7916
7884
  XXH3_copyState(ctx->xxh_state, prev);
7917
7885
  if (ctx->write_tokens)
7918
7886
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -7992,7 +7960,7 @@ _fingerprintAlterTableSpaceOptionsStmt(FingerprintContext *ctx, const AlterTable
7992
7960
 
7993
7961
  hash = XXH3_64bits_digest(ctx->xxh_state);
7994
7962
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
7995
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
7963
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
7996
7964
  XXH3_copyState(ctx->xxh_state, prev);
7997
7965
  if (ctx->write_tokens)
7998
7966
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8038,7 +8006,7 @@ _fingerprintAlterTableMoveAllStmt(FingerprintContext *ctx, const AlterTableMoveA
8038
8006
 
8039
8007
  hash = XXH3_64bits_digest(ctx->xxh_state);
8040
8008
  _fingerprintNode(ctx, node->roles, node, "roles", depth + 1);
8041
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8009
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->roles) == 1 && linitial(node->roles) == NIL)) {
8042
8010
  XXH3_copyState(ctx->xxh_state, prev);
8043
8011
  if (ctx->write_tokens)
8044
8012
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8098,7 +8066,7 @@ _fingerprintCreateForeignTableStmt(FingerprintContext *ctx, const CreateForeignT
8098
8066
 
8099
8067
  hash = XXH3_64bits_digest(ctx->xxh_state);
8100
8068
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
8101
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8069
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
8102
8070
  XXH3_copyState(ctx->xxh_state, prev);
8103
8071
  if (ctx->write_tokens)
8104
8072
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8134,7 +8102,7 @@ _fingerprintImportForeignSchemaStmt(FingerprintContext *ctx, const ImportForeign
8134
8102
 
8135
8103
  hash = XXH3_64bits_digest(ctx->xxh_state);
8136
8104
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
8137
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8105
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
8138
8106
  XXH3_copyState(ctx->xxh_state, prev);
8139
8107
  if (ctx->write_tokens)
8140
8108
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8160,7 +8128,7 @@ _fingerprintImportForeignSchemaStmt(FingerprintContext *ctx, const ImportForeign
8160
8128
 
8161
8129
  hash = XXH3_64bits_digest(ctx->xxh_state);
8162
8130
  _fingerprintNode(ctx, node->table_list, node, "table_list", depth + 1);
8163
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8131
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->table_list) == 1 && linitial(node->table_list) == NIL)) {
8164
8132
  XXH3_copyState(ctx->xxh_state, prev);
8165
8133
  if (ctx->write_tokens)
8166
8134
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8191,7 +8159,7 @@ _fingerprintCreateExtensionStmt(FingerprintContext *ctx, const CreateExtensionSt
8191
8159
 
8192
8160
  hash = XXH3_64bits_digest(ctx->xxh_state);
8193
8161
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
8194
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8162
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
8195
8163
  XXH3_copyState(ctx->xxh_state, prev);
8196
8164
  if (ctx->write_tokens)
8197
8165
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8217,7 +8185,7 @@ _fingerprintAlterExtensionStmt(FingerprintContext *ctx, const AlterExtensionStmt
8217
8185
 
8218
8186
  hash = XXH3_64bits_digest(ctx->xxh_state);
8219
8187
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
8220
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8188
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
8221
8189
  XXH3_copyState(ctx->xxh_state, prev);
8222
8190
  if (ctx->write_tokens)
8223
8191
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8282,7 +8250,7 @@ _fingerprintCreateEventTrigStmt(FingerprintContext *ctx, const CreateEventTrigSt
8282
8250
 
8283
8251
  hash = XXH3_64bits_digest(ctx->xxh_state);
8284
8252
  _fingerprintNode(ctx, node->funcname, node, "funcname", depth + 1);
8285
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8253
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funcname) == 1 && linitial(node->funcname) == NIL)) {
8286
8254
  XXH3_copyState(ctx->xxh_state, prev);
8287
8255
  if (ctx->write_tokens)
8288
8256
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8303,7 +8271,7 @@ _fingerprintCreateEventTrigStmt(FingerprintContext *ctx, const CreateEventTrigSt
8303
8271
 
8304
8272
  hash = XXH3_64bits_digest(ctx->xxh_state);
8305
8273
  _fingerprintNode(ctx, node->whenclause, node, "whenclause", depth + 1);
8306
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8274
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->whenclause) == 1 && linitial(node->whenclause) == NIL)) {
8307
8275
  XXH3_copyState(ctx->xxh_state, prev);
8308
8276
  if (ctx->write_tokens)
8309
8277
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8442,7 +8410,7 @@ _fingerprintCreatePolicyStmt(FingerprintContext *ctx, const CreatePolicyStmt *no
8442
8410
 
8443
8411
  hash = XXH3_64bits_digest(ctx->xxh_state);
8444
8412
  _fingerprintNode(ctx, node->roles, node, "roles", depth + 1);
8445
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8413
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->roles) == 1 && linitial(node->roles) == NIL)) {
8446
8414
  XXH3_copyState(ctx->xxh_state, prev);
8447
8415
  if (ctx->write_tokens)
8448
8416
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8519,7 +8487,7 @@ _fingerprintAlterPolicyStmt(FingerprintContext *ctx, const AlterPolicyStmt *node
8519
8487
 
8520
8488
  hash = XXH3_64bits_digest(ctx->xxh_state);
8521
8489
  _fingerprintNode(ctx, node->roles, node, "roles", depth + 1);
8522
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8490
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->roles) == 1 && linitial(node->roles) == NIL)) {
8523
8491
  XXH3_copyState(ctx->xxh_state, prev);
8524
8492
  if (ctx->write_tokens)
8525
8493
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8651,7 +8619,7 @@ _fingerprintCreateAmStmt(FingerprintContext *ctx, const CreateAmStmt *node, cons
8651
8619
 
8652
8620
  hash = XXH3_64bits_digest(ctx->xxh_state);
8653
8621
  _fingerprintNode(ctx, node->handler_name, node, "handler_name", depth + 1);
8654
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8622
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->handler_name) == 1 && linitial(node->handler_name) == NIL)) {
8655
8623
  XXH3_copyState(ctx->xxh_state, prev);
8656
8624
  if (ctx->write_tokens)
8657
8625
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8677,7 +8645,7 @@ _fingerprintCreatePublicationStmt(FingerprintContext *ctx, const CreatePublicati
8677
8645
 
8678
8646
  hash = XXH3_64bits_digest(ctx->xxh_state);
8679
8647
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
8680
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8648
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
8681
8649
  XXH3_copyState(ctx->xxh_state, prev);
8682
8650
  if (ctx->write_tokens)
8683
8651
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8698,7 +8666,7 @@ _fingerprintCreatePublicationStmt(FingerprintContext *ctx, const CreatePublicati
8698
8666
 
8699
8667
  hash = XXH3_64bits_digest(ctx->xxh_state);
8700
8668
  _fingerprintNode(ctx, node->tables, node, "tables", depth + 1);
8701
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8669
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->tables) == 1 && linitial(node->tables) == NIL)) {
8702
8670
  XXH3_copyState(ctx->xxh_state, prev);
8703
8671
  if (ctx->write_tokens)
8704
8672
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8724,7 +8692,7 @@ _fingerprintAlterPublicationStmt(FingerprintContext *ctx, const AlterPublication
8724
8692
 
8725
8693
  hash = XXH3_64bits_digest(ctx->xxh_state);
8726
8694
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
8727
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8695
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
8728
8696
  XXH3_copyState(ctx->xxh_state, prev);
8729
8697
  if (ctx->write_tokens)
8730
8698
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8750,7 +8718,7 @@ _fingerprintAlterPublicationStmt(FingerprintContext *ctx, const AlterPublication
8750
8718
 
8751
8719
  hash = XXH3_64bits_digest(ctx->xxh_state);
8752
8720
  _fingerprintNode(ctx, node->tables, node, "tables", depth + 1);
8753
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8721
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->tables) == 1 && linitial(node->tables) == NIL)) {
8754
8722
  XXH3_copyState(ctx->xxh_state, prev);
8755
8723
  if (ctx->write_tokens)
8756
8724
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8776,7 +8744,7 @@ _fingerprintCreateSubscriptionStmt(FingerprintContext *ctx, const CreateSubscrip
8776
8744
 
8777
8745
  hash = XXH3_64bits_digest(ctx->xxh_state);
8778
8746
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
8779
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8747
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
8780
8748
  XXH3_copyState(ctx->xxh_state, prev);
8781
8749
  if (ctx->write_tokens)
8782
8750
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8792,7 +8760,7 @@ _fingerprintCreateSubscriptionStmt(FingerprintContext *ctx, const CreateSubscrip
8792
8760
 
8793
8761
  hash = XXH3_64bits_digest(ctx->xxh_state);
8794
8762
  _fingerprintNode(ctx, node->publication, node, "publication", depth + 1);
8795
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8763
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->publication) == 1 && linitial(node->publication) == NIL)) {
8796
8764
  XXH3_copyState(ctx->xxh_state, prev);
8797
8765
  if (ctx->write_tokens)
8798
8766
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8828,7 +8796,7 @@ _fingerprintAlterSubscriptionStmt(FingerprintContext *ctx, const AlterSubscripti
8828
8796
 
8829
8797
  hash = XXH3_64bits_digest(ctx->xxh_state);
8830
8798
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
8831
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8799
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
8832
8800
  XXH3_copyState(ctx->xxh_state, prev);
8833
8801
  if (ctx->write_tokens)
8834
8802
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8844,7 +8812,7 @@ _fingerprintAlterSubscriptionStmt(FingerprintContext *ctx, const AlterSubscripti
8844
8812
 
8845
8813
  hash = XXH3_64bits_digest(ctx->xxh_state);
8846
8814
  _fingerprintNode(ctx, node->publication, node, "publication", depth + 1);
8847
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8815
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->publication) == 1 && linitial(node->publication) == NIL)) {
8848
8816
  XXH3_copyState(ctx->xxh_state, prev);
8849
8817
  if (ctx->write_tokens)
8850
8818
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8890,7 +8858,7 @@ _fingerprintCreateStatsStmt(FingerprintContext *ctx, const CreateStatsStmt *node
8890
8858
 
8891
8859
  hash = XXH3_64bits_digest(ctx->xxh_state);
8892
8860
  _fingerprintNode(ctx, node->defnames, node, "defnames", depth + 1);
8893
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8861
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->defnames) == 1 && linitial(node->defnames) == NIL)) {
8894
8862
  XXH3_copyState(ctx->xxh_state, prev);
8895
8863
  if (ctx->write_tokens)
8896
8864
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8906,7 +8874,7 @@ _fingerprintCreateStatsStmt(FingerprintContext *ctx, const CreateStatsStmt *node
8906
8874
 
8907
8875
  hash = XXH3_64bits_digest(ctx->xxh_state);
8908
8876
  _fingerprintNode(ctx, node->exprs, node, "exprs", depth + 1);
8909
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8877
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->exprs) == 1 && linitial(node->exprs) == NIL)) {
8910
8878
  XXH3_copyState(ctx->xxh_state, prev);
8911
8879
  if (ctx->write_tokens)
8912
8880
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8927,7 +8895,7 @@ _fingerprintCreateStatsStmt(FingerprintContext *ctx, const CreateStatsStmt *node
8927
8895
 
8928
8896
  hash = XXH3_64bits_digest(ctx->xxh_state);
8929
8897
  _fingerprintNode(ctx, node->relations, node, "relations", depth + 1);
8930
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8898
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->relations) == 1 && linitial(node->relations) == NIL)) {
8931
8899
  XXH3_copyState(ctx->xxh_state, prev);
8932
8900
  if (ctx->write_tokens)
8933
8901
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8943,7 +8911,7 @@ _fingerprintCreateStatsStmt(FingerprintContext *ctx, const CreateStatsStmt *node
8943
8911
 
8944
8912
  hash = XXH3_64bits_digest(ctx->xxh_state);
8945
8913
  _fingerprintNode(ctx, node->stat_types, node, "stat_types", depth + 1);
8946
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8914
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->stat_types) == 1 && linitial(node->stat_types) == NIL)) {
8947
8915
  XXH3_copyState(ctx->xxh_state, prev);
8948
8916
  if (ctx->write_tokens)
8949
8917
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -8969,7 +8937,7 @@ _fingerprintAlterCollationStmt(FingerprintContext *ctx, const AlterCollationStmt
8969
8937
 
8970
8938
  hash = XXH3_64bits_digest(ctx->xxh_state);
8971
8939
  _fingerprintNode(ctx, node->collname, node, "collname", depth + 1);
8972
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
8940
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->collname) == 1 && linitial(node->collname) == NIL)) {
8973
8941
  XXH3_copyState(ctx->xxh_state, prev);
8974
8942
  if (ctx->write_tokens)
8975
8943
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9029,7 +8997,7 @@ _fingerprintAlterStatsStmt(FingerprintContext *ctx, const AlterStatsStmt *node,
9029
8997
 
9030
8998
  hash = XXH3_64bits_digest(ctx->xxh_state);
9031
8999
  _fingerprintNode(ctx, node->defnames, node, "defnames", depth + 1);
9032
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9000
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->defnames) == 1 && linitial(node->defnames) == NIL)) {
9033
9001
  XXH3_copyState(ctx->xxh_state, prev);
9034
9002
  if (ctx->write_tokens)
9035
9003
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9089,7 +9057,7 @@ _fingerprintA_Expr(FingerprintContext *ctx, const A_Expr *node, const void *pare
9089
9057
 
9090
9058
  hash = XXH3_64bits_digest(ctx->xxh_state);
9091
9059
  _fingerprintNode(ctx, node->name, node, "name", depth + 1);
9092
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9060
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->name) == 1 && linitial(node->name) == NIL)) {
9093
9061
  XXH3_copyState(ctx->xxh_state, prev);
9094
9062
  if (ctx->write_tokens)
9095
9063
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9127,7 +9095,7 @@ _fingerprintColumnRef(FingerprintContext *ctx, const ColumnRef *node, const void
9127
9095
 
9128
9096
  hash = XXH3_64bits_digest(ctx->xxh_state);
9129
9097
  _fingerprintNode(ctx, node->fields, node, "fields", depth + 1);
9130
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9098
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->fields) == 1 && linitial(node->fields) == NIL)) {
9131
9099
  XXH3_copyState(ctx->xxh_state, prev);
9132
9100
  if (ctx->write_tokens)
9133
9101
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9184,7 +9152,7 @@ _fingerprintFuncCall(FingerprintContext *ctx, const FuncCall *node, const void *
9184
9152
 
9185
9153
  hash = XXH3_64bits_digest(ctx->xxh_state);
9186
9154
  _fingerprintNode(ctx, node->agg_order, node, "agg_order", depth + 1);
9187
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9155
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->agg_order) == 1 && linitial(node->agg_order) == NIL)) {
9188
9156
  XXH3_copyState(ctx->xxh_state, prev);
9189
9157
  if (ctx->write_tokens)
9190
9158
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9210,7 +9178,7 @@ _fingerprintFuncCall(FingerprintContext *ctx, const FuncCall *node, const void *
9210
9178
 
9211
9179
  hash = XXH3_64bits_digest(ctx->xxh_state);
9212
9180
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
9213
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9181
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
9214
9182
  XXH3_copyState(ctx->xxh_state, prev);
9215
9183
  if (ctx->write_tokens)
9216
9184
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9231,7 +9199,7 @@ _fingerprintFuncCall(FingerprintContext *ctx, const FuncCall *node, const void *
9231
9199
 
9232
9200
  hash = XXH3_64bits_digest(ctx->xxh_state);
9233
9201
  _fingerprintNode(ctx, node->funcname, node, "funcname", depth + 1);
9234
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9202
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funcname) == 1 && linitial(node->funcname) == NIL)) {
9235
9203
  XXH3_copyState(ctx->xxh_state, prev);
9236
9204
  if (ctx->write_tokens)
9237
9205
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9337,7 +9305,7 @@ _fingerprintA_Indirection(FingerprintContext *ctx, const A_Indirection *node, co
9337
9305
 
9338
9306
  hash = XXH3_64bits_digest(ctx->xxh_state);
9339
9307
  _fingerprintNode(ctx, node->indirection, node, "indirection", depth + 1);
9340
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9308
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->indirection) == 1 && linitial(node->indirection) == NIL)) {
9341
9309
  XXH3_copyState(ctx->xxh_state, prev);
9342
9310
  if (ctx->write_tokens)
9343
9311
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9358,7 +9326,7 @@ _fingerprintA_ArrayExpr(FingerprintContext *ctx, const A_ArrayExpr *node, const
9358
9326
 
9359
9327
  hash = XXH3_64bits_digest(ctx->xxh_state);
9360
9328
  _fingerprintNode(ctx, node->elements, node, "elements", depth + 1);
9361
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9329
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->elements) == 1 && linitial(node->elements) == NIL)) {
9362
9330
  XXH3_copyState(ctx->xxh_state, prev);
9363
9331
  if (ctx->write_tokens)
9364
9332
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9381,7 +9349,7 @@ _fingerprintResTarget(FingerprintContext *ctx, const ResTarget *node, const void
9381
9349
 
9382
9350
  hash = XXH3_64bits_digest(ctx->xxh_state);
9383
9351
  _fingerprintNode(ctx, node->indirection, node, "indirection", depth + 1);
9384
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9352
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->indirection) == 1 && linitial(node->indirection) == NIL)) {
9385
9353
  XXH3_copyState(ctx->xxh_state, prev);
9386
9354
  if (ctx->write_tokens)
9387
9355
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9520,7 +9488,7 @@ _fingerprintCollateClause(FingerprintContext *ctx, const CollateClause *node, co
9520
9488
 
9521
9489
  hash = XXH3_64bits_digest(ctx->xxh_state);
9522
9490
  _fingerprintNode(ctx, node->collname, node, "collname", depth + 1);
9523
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9491
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->collname) == 1 && linitial(node->collname) == NIL)) {
9524
9492
  XXH3_copyState(ctx->xxh_state, prev);
9525
9493
  if (ctx->write_tokens)
9526
9494
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9572,7 +9540,7 @@ _fingerprintSortBy(FingerprintContext *ctx, const SortBy *node, const void *pare
9572
9540
 
9573
9541
  hash = XXH3_64bits_digest(ctx->xxh_state);
9574
9542
  _fingerprintNode(ctx, node->useOp, node, "useOp", depth + 1);
9575
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9543
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->useOp) == 1 && linitial(node->useOp) == NIL)) {
9576
9544
  XXH3_copyState(ctx->xxh_state, prev);
9577
9545
  if (ctx->write_tokens)
9578
9546
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9624,7 +9592,7 @@ _fingerprintWindowDef(FingerprintContext *ctx, const WindowDef *node, const void
9624
9592
 
9625
9593
  hash = XXH3_64bits_digest(ctx->xxh_state);
9626
9594
  _fingerprintNode(ctx, node->orderClause, node, "orderClause", depth + 1);
9627
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9595
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->orderClause) == 1 && linitial(node->orderClause) == NIL)) {
9628
9596
  XXH3_copyState(ctx->xxh_state, prev);
9629
9597
  if (ctx->write_tokens)
9630
9598
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9640,7 +9608,7 @@ _fingerprintWindowDef(FingerprintContext *ctx, const WindowDef *node, const void
9640
9608
 
9641
9609
  hash = XXH3_64bits_digest(ctx->xxh_state);
9642
9610
  _fingerprintNode(ctx, node->partitionClause, node, "partitionClause", depth + 1);
9643
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9611
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->partitionClause) == 1 && linitial(node->partitionClause) == NIL)) {
9644
9612
  XXH3_copyState(ctx->xxh_state, prev);
9645
9613
  if (ctx->write_tokens)
9646
9614
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9744,7 +9712,7 @@ _fingerprintRangeFunction(FingerprintContext *ctx, const RangeFunction *node, co
9744
9712
 
9745
9713
  hash = XXH3_64bits_digest(ctx->xxh_state);
9746
9714
  _fingerprintNode(ctx, node->coldeflist, node, "coldeflist", depth + 1);
9747
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9715
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->coldeflist) == 1 && linitial(node->coldeflist) == NIL)) {
9748
9716
  XXH3_copyState(ctx->xxh_state, prev);
9749
9717
  if (ctx->write_tokens)
9750
9718
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9760,7 +9728,7 @@ _fingerprintRangeFunction(FingerprintContext *ctx, const RangeFunction *node, co
9760
9728
 
9761
9729
  hash = XXH3_64bits_digest(ctx->xxh_state);
9762
9730
  _fingerprintNode(ctx, node->functions, node, "functions", depth + 1);
9763
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9731
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->functions) == 1 && linitial(node->functions) == NIL)) {
9764
9732
  XXH3_copyState(ctx->xxh_state, prev);
9765
9733
  if (ctx->write_tokens)
9766
9734
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9796,7 +9764,7 @@ _fingerprintRangeTableSample(FingerprintContext *ctx, const RangeTableSample *no
9796
9764
 
9797
9765
  hash = XXH3_64bits_digest(ctx->xxh_state);
9798
9766
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
9799
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9767
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
9800
9768
  XXH3_copyState(ctx->xxh_state, prev);
9801
9769
  if (ctx->write_tokens)
9802
9770
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9814,7 +9782,7 @@ _fingerprintRangeTableSample(FingerprintContext *ctx, const RangeTableSample *no
9814
9782
 
9815
9783
  hash = XXH3_64bits_digest(ctx->xxh_state);
9816
9784
  _fingerprintNode(ctx, node->method, node, "method", depth + 1);
9817
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9785
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->method) == 1 && linitial(node->method) == NIL)) {
9818
9786
  XXH3_copyState(ctx->xxh_state, prev);
9819
9787
  if (ctx->write_tokens)
9820
9788
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9886,7 +9854,7 @@ _fingerprintRangeTableFunc(FingerprintContext *ctx, const RangeTableFunc *node,
9886
9854
 
9887
9855
  hash = XXH3_64bits_digest(ctx->xxh_state);
9888
9856
  _fingerprintNode(ctx, node->columns, node, "columns", depth + 1);
9889
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9857
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->columns) == 1 && linitial(node->columns) == NIL)) {
9890
9858
  XXH3_copyState(ctx->xxh_state, prev);
9891
9859
  if (ctx->write_tokens)
9892
9860
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -9926,7 +9894,7 @@ _fingerprintRangeTableFunc(FingerprintContext *ctx, const RangeTableFunc *node,
9926
9894
 
9927
9895
  hash = XXH3_64bits_digest(ctx->xxh_state);
9928
9896
  _fingerprintNode(ctx, node->namespaces, node, "namespaces", depth + 1);
9929
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
9897
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->namespaces) == 1 && linitial(node->namespaces) == NIL)) {
9930
9898
  XXH3_copyState(ctx->xxh_state, prev);
9931
9899
  if (ctx->write_tokens)
9932
9900
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10037,7 +10005,7 @@ _fingerprintTypeName(FingerprintContext *ctx, const TypeName *node, const void *
10037
10005
 
10038
10006
  hash = XXH3_64bits_digest(ctx->xxh_state);
10039
10007
  _fingerprintNode(ctx, node->arrayBounds, node, "arrayBounds", depth + 1);
10040
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10008
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->arrayBounds) == 1 && linitial(node->arrayBounds) == NIL)) {
10041
10009
  XXH3_copyState(ctx->xxh_state, prev);
10042
10010
  if (ctx->write_tokens)
10043
10011
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10055,7 +10023,7 @@ _fingerprintTypeName(FingerprintContext *ctx, const TypeName *node, const void *
10055
10023
 
10056
10024
  hash = XXH3_64bits_digest(ctx->xxh_state);
10057
10025
  _fingerprintNode(ctx, node->names, node, "names", depth + 1);
10058
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10026
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->names) == 1 && linitial(node->names) == NIL)) {
10059
10027
  XXH3_copyState(ctx->xxh_state, prev);
10060
10028
  if (ctx->write_tokens)
10061
10029
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10095,7 +10063,7 @@ _fingerprintTypeName(FingerprintContext *ctx, const TypeName *node, const void *
10095
10063
 
10096
10064
  hash = XXH3_64bits_digest(ctx->xxh_state);
10097
10065
  _fingerprintNode(ctx, node->typmods, node, "typmods", depth + 1);
10098
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10066
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->typmods) == 1 && linitial(node->typmods) == NIL)) {
10099
10067
  XXH3_copyState(ctx->xxh_state, prev);
10100
10068
  if (ctx->write_tokens)
10101
10069
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10145,7 +10113,7 @@ _fingerprintColumnDef(FingerprintContext *ctx, const ColumnDef *node, const void
10145
10113
 
10146
10114
  hash = XXH3_64bits_digest(ctx->xxh_state);
10147
10115
  _fingerprintNode(ctx, node->constraints, node, "constraints", depth + 1);
10148
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10116
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->constraints) == 1 && linitial(node->constraints) == NIL)) {
10149
10117
  XXH3_copyState(ctx->xxh_state, prev);
10150
10118
  if (ctx->write_tokens)
10151
10119
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10178,7 +10146,7 @@ _fingerprintColumnDef(FingerprintContext *ctx, const ColumnDef *node, const void
10178
10146
 
10179
10147
  hash = XXH3_64bits_digest(ctx->xxh_state);
10180
10148
  _fingerprintNode(ctx, node->fdwoptions, node, "fdwoptions", depth + 1);
10181
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10149
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->fdwoptions) == 1 && linitial(node->fdwoptions) == NIL)) {
10182
10150
  XXH3_copyState(ctx->xxh_state, prev);
10183
10151
  if (ctx->write_tokens)
10184
10152
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10292,7 +10260,7 @@ _fingerprintIndexElem(FingerprintContext *ctx, const IndexElem *node, const void
10292
10260
 
10293
10261
  hash = XXH3_64bits_digest(ctx->xxh_state);
10294
10262
  _fingerprintNode(ctx, node->collation, node, "collation", depth + 1);
10295
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10263
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->collation) == 1 && linitial(node->collation) == NIL)) {
10296
10264
  XXH3_copyState(ctx->xxh_state, prev);
10297
10265
  if (ctx->write_tokens)
10298
10266
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10340,7 +10308,7 @@ _fingerprintIndexElem(FingerprintContext *ctx, const IndexElem *node, const void
10340
10308
 
10341
10309
  hash = XXH3_64bits_digest(ctx->xxh_state);
10342
10310
  _fingerprintNode(ctx, node->opclass, node, "opclass", depth + 1);
10343
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10311
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opclass) == 1 && linitial(node->opclass) == NIL)) {
10344
10312
  XXH3_copyState(ctx->xxh_state, prev);
10345
10313
  if (ctx->write_tokens)
10346
10314
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10356,7 +10324,7 @@ _fingerprintIndexElem(FingerprintContext *ctx, const IndexElem *node, const void
10356
10324
 
10357
10325
  hash = XXH3_64bits_digest(ctx->xxh_state);
10358
10326
  _fingerprintNode(ctx, node->opclassopts, node, "opclassopts", depth + 1);
10359
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10327
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opclassopts) == 1 && linitial(node->opclassopts) == NIL)) {
10360
10328
  XXH3_copyState(ctx->xxh_state, prev);
10361
10329
  if (ctx->write_tokens)
10362
10330
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10407,7 +10375,7 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
10407
10375
 
10408
10376
  hash = XXH3_64bits_digest(ctx->xxh_state);
10409
10377
  _fingerprintNode(ctx, node->exclusions, node, "exclusions", depth + 1);
10410
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10378
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->exclusions) == 1 && linitial(node->exclusions) == NIL)) {
10411
10379
  XXH3_copyState(ctx->xxh_state, prev);
10412
10380
  if (ctx->write_tokens)
10413
10381
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10423,7 +10391,7 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
10423
10391
 
10424
10392
  hash = XXH3_64bits_digest(ctx->xxh_state);
10425
10393
  _fingerprintNode(ctx, node->fk_attrs, node, "fk_attrs", depth + 1);
10426
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10394
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->fk_attrs) == 1 && linitial(node->fk_attrs) == NIL)) {
10427
10395
  XXH3_copyState(ctx->xxh_state, prev);
10428
10396
  if (ctx->write_tokens)
10429
10397
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10463,7 +10431,7 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
10463
10431
 
10464
10432
  hash = XXH3_64bits_digest(ctx->xxh_state);
10465
10433
  _fingerprintNode(ctx, node->including, node, "including", depth + 1);
10466
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10434
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->including) == 1 && linitial(node->including) == NIL)) {
10467
10435
  XXH3_copyState(ctx->xxh_state, prev);
10468
10436
  if (ctx->write_tokens)
10469
10437
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10504,7 +10472,7 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
10504
10472
 
10505
10473
  hash = XXH3_64bits_digest(ctx->xxh_state);
10506
10474
  _fingerprintNode(ctx, node->keys, node, "keys", depth + 1);
10507
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10475
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->keys) == 1 && linitial(node->keys) == NIL)) {
10508
10476
  XXH3_copyState(ctx->xxh_state, prev);
10509
10477
  if (ctx->write_tokens)
10510
10478
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10522,7 +10490,7 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
10522
10490
 
10523
10491
  hash = XXH3_64bits_digest(ctx->xxh_state);
10524
10492
  _fingerprintNode(ctx, node->old_conpfeqop, node, "old_conpfeqop", depth + 1);
10525
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10493
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->old_conpfeqop) == 1 && linitial(node->old_conpfeqop) == NIL)) {
10526
10494
  XXH3_copyState(ctx->xxh_state, prev);
10527
10495
  if (ctx->write_tokens)
10528
10496
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10545,7 +10513,7 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
10545
10513
 
10546
10514
  hash = XXH3_64bits_digest(ctx->xxh_state);
10547
10515
  _fingerprintNode(ctx, node->options, node, "options", depth + 1);
10548
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10516
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
10549
10517
  XXH3_copyState(ctx->xxh_state, prev);
10550
10518
  if (ctx->write_tokens)
10551
10519
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10561,7 +10529,7 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
10561
10529
 
10562
10530
  hash = XXH3_64bits_digest(ctx->xxh_state);
10563
10531
  _fingerprintNode(ctx, node->pk_attrs, node, "pk_attrs", depth + 1);
10564
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10532
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->pk_attrs) == 1 && linitial(node->pk_attrs) == NIL)) {
10565
10533
  XXH3_copyState(ctx->xxh_state, prev);
10566
10534
  if (ctx->write_tokens)
10567
10535
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10706,7 +10674,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
10706
10674
 
10707
10675
  hash = XXH3_64bits_digest(ctx->xxh_state);
10708
10676
  _fingerprintNode(ctx, node->colcollations, node, "colcollations", depth + 1);
10709
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10677
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colcollations) == 1 && linitial(node->colcollations) == NIL)) {
10710
10678
  XXH3_copyState(ctx->xxh_state, prev);
10711
10679
  if (ctx->write_tokens)
10712
10680
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10722,7 +10690,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
10722
10690
 
10723
10691
  hash = XXH3_64bits_digest(ctx->xxh_state);
10724
10692
  _fingerprintNode(ctx, node->coltypes, node, "coltypes", depth + 1);
10725
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10693
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->coltypes) == 1 && linitial(node->coltypes) == NIL)) {
10726
10694
  XXH3_copyState(ctx->xxh_state, prev);
10727
10695
  if (ctx->write_tokens)
10728
10696
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10738,7 +10706,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
10738
10706
 
10739
10707
  hash = XXH3_64bits_digest(ctx->xxh_state);
10740
10708
  _fingerprintNode(ctx, node->coltypmods, node, "coltypmods", depth + 1);
10741
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10709
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->coltypmods) == 1 && linitial(node->coltypmods) == NIL)) {
10742
10710
  XXH3_copyState(ctx->xxh_state, prev);
10743
10711
  if (ctx->write_tokens)
10744
10712
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10815,7 +10783,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
10815
10783
 
10816
10784
  hash = XXH3_64bits_digest(ctx->xxh_state);
10817
10785
  _fingerprintNode(ctx, node->functions, node, "functions", depth + 1);
10818
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10786
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->functions) == 1 && linitial(node->functions) == NIL)) {
10819
10787
  XXH3_copyState(ctx->xxh_state, prev);
10820
10788
  if (ctx->write_tokens)
10821
10789
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10856,7 +10824,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
10856
10824
 
10857
10825
  hash = XXH3_64bits_digest(ctx->xxh_state);
10858
10826
  _fingerprintNode(ctx, node->joinaliasvars, node, "joinaliasvars", depth + 1);
10859
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10827
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->joinaliasvars) == 1 && linitial(node->joinaliasvars) == NIL)) {
10860
10828
  XXH3_copyState(ctx->xxh_state, prev);
10861
10829
  if (ctx->write_tokens)
10862
10830
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10872,7 +10840,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
10872
10840
 
10873
10841
  hash = XXH3_64bits_digest(ctx->xxh_state);
10874
10842
  _fingerprintNode(ctx, node->joinleftcols, node, "joinleftcols", depth + 1);
10875
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10843
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->joinleftcols) == 1 && linitial(node->joinleftcols) == NIL)) {
10876
10844
  XXH3_copyState(ctx->xxh_state, prev);
10877
10845
  if (ctx->write_tokens)
10878
10846
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10895,7 +10863,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
10895
10863
 
10896
10864
  hash = XXH3_64bits_digest(ctx->xxh_state);
10897
10865
  _fingerprintNode(ctx, node->joinrightcols, node, "joinrightcols", depth + 1);
10898
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10866
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->joinrightcols) == 1 && linitial(node->joinrightcols) == NIL)) {
10899
10867
  XXH3_copyState(ctx->xxh_state, prev);
10900
10868
  if (ctx->write_tokens)
10901
10869
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -10953,7 +10921,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
10953
10921
 
10954
10922
  hash = XXH3_64bits_digest(ctx->xxh_state);
10955
10923
  _fingerprintNode(ctx, node->securityQuals, node, "securityQuals", depth + 1);
10956
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
10924
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->securityQuals) == 1 && linitial(node->securityQuals) == NIL)) {
10957
10925
  XXH3_copyState(ctx->xxh_state, prev);
10958
10926
  if (ctx->write_tokens)
10959
10927
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11060,7 +11028,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
11060
11028
 
11061
11029
  hash = XXH3_64bits_digest(ctx->xxh_state);
11062
11030
  _fingerprintNode(ctx, node->values_lists, node, "values_lists", depth + 1);
11063
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11031
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->values_lists) == 1 && linitial(node->values_lists) == NIL)) {
11064
11032
  XXH3_copyState(ctx->xxh_state, prev);
11065
11033
  if (ctx->write_tokens)
11066
11034
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11081,7 +11049,7 @@ _fingerprintRangeTblFunction(FingerprintContext *ctx, const RangeTblFunction *no
11081
11049
 
11082
11050
  hash = XXH3_64bits_digest(ctx->xxh_state);
11083
11051
  _fingerprintNode(ctx, node->funccolcollations, node, "funccolcollations", depth + 1);
11084
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11052
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funccolcollations) == 1 && linitial(node->funccolcollations) == NIL)) {
11085
11053
  XXH3_copyState(ctx->xxh_state, prev);
11086
11054
  if (ctx->write_tokens)
11087
11055
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11104,7 +11072,7 @@ _fingerprintRangeTblFunction(FingerprintContext *ctx, const RangeTblFunction *no
11104
11072
 
11105
11073
  hash = XXH3_64bits_digest(ctx->xxh_state);
11106
11074
  _fingerprintNode(ctx, node->funccolnames, node, "funccolnames", depth + 1);
11107
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11075
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funccolnames) == 1 && linitial(node->funccolnames) == NIL)) {
11108
11076
  XXH3_copyState(ctx->xxh_state, prev);
11109
11077
  if (ctx->write_tokens)
11110
11078
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11120,7 +11088,7 @@ _fingerprintRangeTblFunction(FingerprintContext *ctx, const RangeTblFunction *no
11120
11088
 
11121
11089
  hash = XXH3_64bits_digest(ctx->xxh_state);
11122
11090
  _fingerprintNode(ctx, node->funccoltypes, node, "funccoltypes", depth + 1);
11123
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11091
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funccoltypes) == 1 && linitial(node->funccoltypes) == NIL)) {
11124
11092
  XXH3_copyState(ctx->xxh_state, prev);
11125
11093
  if (ctx->write_tokens)
11126
11094
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11136,7 +11104,7 @@ _fingerprintRangeTblFunction(FingerprintContext *ctx, const RangeTblFunction *no
11136
11104
 
11137
11105
  hash = XXH3_64bits_digest(ctx->xxh_state);
11138
11106
  _fingerprintNode(ctx, node->funccoltypmods, node, "funccoltypmods", depth + 1);
11139
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11107
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funccoltypmods) == 1 && linitial(node->funccoltypmods) == NIL)) {
11140
11108
  XXH3_copyState(ctx->xxh_state, prev);
11141
11109
  if (ctx->write_tokens)
11142
11110
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11189,7 +11157,7 @@ _fingerprintTableSampleClause(FingerprintContext *ctx, const TableSampleClause *
11189
11157
 
11190
11158
  hash = XXH3_64bits_digest(ctx->xxh_state);
11191
11159
  _fingerprintNode(ctx, node->args, node, "args", depth + 1);
11192
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11160
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
11193
11161
  XXH3_copyState(ctx->xxh_state, prev);
11194
11162
  if (ctx->write_tokens)
11195
11163
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11312,7 +11280,7 @@ _fingerprintGroupingSet(FingerprintContext *ctx, const GroupingSet *node, const
11312
11280
 
11313
11281
  hash = XXH3_64bits_digest(ctx->xxh_state);
11314
11282
  _fingerprintNode(ctx, node->content, node, "content", depth + 1);
11315
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11283
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->content) == 1 && linitial(node->content) == NIL)) {
11316
11284
  XXH3_copyState(ctx->xxh_state, prev);
11317
11285
  if (ctx->write_tokens)
11318
11286
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11398,7 +11366,7 @@ _fingerprintWindowClause(FingerprintContext *ctx, const WindowClause *node, cons
11398
11366
 
11399
11367
  hash = XXH3_64bits_digest(ctx->xxh_state);
11400
11368
  _fingerprintNode(ctx, node->orderClause, node, "orderClause", depth + 1);
11401
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11369
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->orderClause) == 1 && linitial(node->orderClause) == NIL)) {
11402
11370
  XXH3_copyState(ctx->xxh_state, prev);
11403
11371
  if (ctx->write_tokens)
11404
11372
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11414,7 +11382,7 @@ _fingerprintWindowClause(FingerprintContext *ctx, const WindowClause *node, cons
11414
11382
 
11415
11383
  hash = XXH3_64bits_digest(ctx->xxh_state);
11416
11384
  _fingerprintNode(ctx, node->partitionClause, node, "partitionClause", depth + 1);
11417
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11385
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->partitionClause) == 1 && linitial(node->partitionClause) == NIL)) {
11418
11386
  XXH3_copyState(ctx->xxh_state, prev);
11419
11387
  if (ctx->write_tokens)
11420
11388
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11476,7 +11444,7 @@ _fingerprintObjectWithArgs(FingerprintContext *ctx, const ObjectWithArgs *node,
11476
11444
 
11477
11445
  hash = XXH3_64bits_digest(ctx->xxh_state);
11478
11446
  _fingerprintNode(ctx, node->objargs, node, "objargs", depth + 1);
11479
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11447
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->objargs) == 1 && linitial(node->objargs) == NIL)) {
11480
11448
  XXH3_copyState(ctx->xxh_state, prev);
11481
11449
  if (ctx->write_tokens)
11482
11450
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11492,7 +11460,7 @@ _fingerprintObjectWithArgs(FingerprintContext *ctx, const ObjectWithArgs *node,
11492
11460
 
11493
11461
  hash = XXH3_64bits_digest(ctx->xxh_state);
11494
11462
  _fingerprintNode(ctx, node->objname, node, "objname", depth + 1);
11495
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11463
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->objname) == 1 && linitial(node->objname) == NIL)) {
11496
11464
  XXH3_copyState(ctx->xxh_state, prev);
11497
11465
  if (ctx->write_tokens)
11498
11466
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11513,7 +11481,7 @@ _fingerprintAccessPriv(FingerprintContext *ctx, const AccessPriv *node, const vo
11513
11481
 
11514
11482
  hash = XXH3_64bits_digest(ctx->xxh_state);
11515
11483
  _fingerprintNode(ctx, node->cols, node, "cols", depth + 1);
11516
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11484
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->cols) == 1 && linitial(node->cols) == NIL)) {
11517
11485
  XXH3_copyState(ctx->xxh_state, prev);
11518
11486
  if (ctx->write_tokens)
11519
11487
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11539,7 +11507,7 @@ _fingerprintCreateOpClassItem(FingerprintContext *ctx, const CreateOpClassItem *
11539
11507
 
11540
11508
  hash = XXH3_64bits_digest(ctx->xxh_state);
11541
11509
  _fingerprintNode(ctx, node->class_args, node, "class_args", depth + 1);
11542
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11510
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->class_args) == 1 && linitial(node->class_args) == NIL)) {
11543
11511
  XXH3_copyState(ctx->xxh_state, prev);
11544
11512
  if (ctx->write_tokens)
11545
11513
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11586,7 +11554,7 @@ _fingerprintCreateOpClassItem(FingerprintContext *ctx, const CreateOpClassItem *
11586
11554
 
11587
11555
  hash = XXH3_64bits_digest(ctx->xxh_state);
11588
11556
  _fingerprintNode(ctx, node->order_family, node, "order_family", depth + 1);
11589
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11557
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->order_family) == 1 && linitial(node->order_family) == NIL)) {
11590
11558
  XXH3_copyState(ctx->xxh_state, prev);
11591
11559
  if (ctx->write_tokens)
11592
11560
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11639,6 +11607,13 @@ _fingerprintTableLikeClause(FingerprintContext *ctx, const TableLikeClause *node
11639
11607
  XXH3_freeState(prev);
11640
11608
  }
11641
11609
 
11610
+ if (node->relationOid != 0) {
11611
+ char buffer[50];
11612
+ sprintf(buffer, "%d", node->relationOid);
11613
+ _fingerprintString(ctx, "relationOid");
11614
+ _fingerprintString(ctx, buffer);
11615
+ }
11616
+
11642
11617
  }
11643
11618
 
11644
11619
  static void
@@ -11683,10 +11658,7 @@ _fingerprintFunctionParameter(FingerprintContext *ctx, const FunctionParameter *
11683
11658
  _fingerprintString(ctx, _enumToStringFunctionParameterMode(node->mode));
11684
11659
  }
11685
11660
 
11686
- if (node->name != NULL) {
11687
- _fingerprintString(ctx, "name");
11688
- _fingerprintString(ctx, node->name);
11689
- }
11661
+ // Intentionally ignoring node->name for fingerprinting
11690
11662
 
11691
11663
  }
11692
11664
 
@@ -11702,7 +11674,7 @@ _fingerprintLockingClause(FingerprintContext *ctx, const LockingClause *node, co
11702
11674
 
11703
11675
  hash = XXH3_64bits_digest(ctx->xxh_state);
11704
11676
  _fingerprintNode(ctx, node->lockedRels, node, "lockedRels", depth + 1);
11705
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11677
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->lockedRels) == 1 && linitial(node->lockedRels) == NIL)) {
11706
11678
  XXH3_copyState(ctx->xxh_state, prev);
11707
11679
  if (ctx->write_tokens)
11708
11680
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11806,7 +11778,7 @@ _fingerprintWithClause(FingerprintContext *ctx, const WithClause *node, const vo
11806
11778
 
11807
11779
  hash = XXH3_64bits_digest(ctx->xxh_state);
11808
11780
  _fingerprintNode(ctx, node->ctes, node, "ctes", depth + 1);
11809
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11781
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->ctes) == 1 && linitial(node->ctes) == NIL)) {
11810
11782
  XXH3_copyState(ctx->xxh_state, prev);
11811
11783
  if (ctx->write_tokens)
11812
11784
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11839,7 +11811,7 @@ _fingerprintInferClause(FingerprintContext *ctx, const InferClause *node, const
11839
11811
 
11840
11812
  hash = XXH3_64bits_digest(ctx->xxh_state);
11841
11813
  _fingerprintNode(ctx, node->indexElems, node, "indexElems", depth + 1);
11842
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11814
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->indexElems) == 1 && linitial(node->indexElems) == NIL)) {
11843
11815
  XXH3_copyState(ctx->xxh_state, prev);
11844
11816
  if (ctx->write_tokens)
11845
11817
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11903,7 +11875,7 @@ _fingerprintOnConflictClause(FingerprintContext *ctx, const OnConflictClause *no
11903
11875
 
11904
11876
  hash = XXH3_64bits_digest(ctx->xxh_state);
11905
11877
  _fingerprintNode(ctx, node->targetList, node, "targetList", depth + 1);
11906
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11878
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->targetList) == 1 && linitial(node->targetList) == NIL)) {
11907
11879
  XXH3_copyState(ctx->xxh_state, prev);
11908
11880
  if (ctx->write_tokens)
11909
11881
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11941,7 +11913,7 @@ _fingerprintCommonTableExpr(FingerprintContext *ctx, const CommonTableExpr *node
11941
11913
 
11942
11914
  hash = XXH3_64bits_digest(ctx->xxh_state);
11943
11915
  _fingerprintNode(ctx, node->aliascolnames, node, "aliascolnames", depth + 1);
11944
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11916
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->aliascolnames) == 1 && linitial(node->aliascolnames) == NIL)) {
11945
11917
  XXH3_copyState(ctx->xxh_state, prev);
11946
11918
  if (ctx->write_tokens)
11947
11919
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11957,7 +11929,7 @@ _fingerprintCommonTableExpr(FingerprintContext *ctx, const CommonTableExpr *node
11957
11929
 
11958
11930
  hash = XXH3_64bits_digest(ctx->xxh_state);
11959
11931
  _fingerprintNode(ctx, node->ctecolcollations, node, "ctecolcollations", depth + 1);
11960
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11932
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->ctecolcollations) == 1 && linitial(node->ctecolcollations) == NIL)) {
11961
11933
  XXH3_copyState(ctx->xxh_state, prev);
11962
11934
  if (ctx->write_tokens)
11963
11935
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11973,7 +11945,7 @@ _fingerprintCommonTableExpr(FingerprintContext *ctx, const CommonTableExpr *node
11973
11945
 
11974
11946
  hash = XXH3_64bits_digest(ctx->xxh_state);
11975
11947
  _fingerprintNode(ctx, node->ctecolnames, node, "ctecolnames", depth + 1);
11976
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11948
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->ctecolnames) == 1 && linitial(node->ctecolnames) == NIL)) {
11977
11949
  XXH3_copyState(ctx->xxh_state, prev);
11978
11950
  if (ctx->write_tokens)
11979
11951
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -11989,7 +11961,7 @@ _fingerprintCommonTableExpr(FingerprintContext *ctx, const CommonTableExpr *node
11989
11961
 
11990
11962
  hash = XXH3_64bits_digest(ctx->xxh_state);
11991
11963
  _fingerprintNode(ctx, node->ctecoltypes, node, "ctecoltypes", depth + 1);
11992
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11964
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->ctecoltypes) == 1 && linitial(node->ctecoltypes) == NIL)) {
11993
11965
  XXH3_copyState(ctx->xxh_state, prev);
11994
11966
  if (ctx->write_tokens)
11995
11967
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -12005,7 +11977,7 @@ _fingerprintCommonTableExpr(FingerprintContext *ctx, const CommonTableExpr *node
12005
11977
 
12006
11978
  hash = XXH3_64bits_digest(ctx->xxh_state);
12007
11979
  _fingerprintNode(ctx, node->ctecoltypmods, node, "ctecoltypmods", depth + 1);
12008
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
11980
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->ctecoltypmods) == 1 && linitial(node->ctecoltypmods) == NIL)) {
12009
11981
  XXH3_copyState(ctx->xxh_state, prev);
12010
11982
  if (ctx->write_tokens)
12011
11983
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -12104,7 +12076,7 @@ _fingerprintPartitionElem(FingerprintContext *ctx, const PartitionElem *node, co
12104
12076
 
12105
12077
  hash = XXH3_64bits_digest(ctx->xxh_state);
12106
12078
  _fingerprintNode(ctx, node->collation, node, "collation", depth + 1);
12107
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
12079
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->collation) == 1 && linitial(node->collation) == NIL)) {
12108
12080
  XXH3_copyState(ctx->xxh_state, prev);
12109
12081
  if (ctx->write_tokens)
12110
12082
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -12144,7 +12116,7 @@ _fingerprintPartitionElem(FingerprintContext *ctx, const PartitionElem *node, co
12144
12116
 
12145
12117
  hash = XXH3_64bits_digest(ctx->xxh_state);
12146
12118
  _fingerprintNode(ctx, node->opclass, node, "opclass", depth + 1);
12147
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
12119
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opclass) == 1 && linitial(node->opclass) == NIL)) {
12148
12120
  XXH3_copyState(ctx->xxh_state, prev);
12149
12121
  if (ctx->write_tokens)
12150
12122
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -12167,7 +12139,7 @@ _fingerprintPartitionSpec(FingerprintContext *ctx, const PartitionSpec *node, co
12167
12139
 
12168
12140
  hash = XXH3_64bits_digest(ctx->xxh_state);
12169
12141
  _fingerprintNode(ctx, node->partParams, node, "partParams", depth + 1);
12170
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
12142
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->partParams) == 1 && linitial(node->partParams) == NIL)) {
12171
12143
  XXH3_copyState(ctx->xxh_state, prev);
12172
12144
  if (ctx->write_tokens)
12173
12145
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -12198,7 +12170,7 @@ _fingerprintPartitionBoundSpec(FingerprintContext *ctx, const PartitionBoundSpec
12198
12170
 
12199
12171
  hash = XXH3_64bits_digest(ctx->xxh_state);
12200
12172
  _fingerprintNode(ctx, node->listdatums, node, "listdatums", depth + 1);
12201
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
12173
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->listdatums) == 1 && linitial(node->listdatums) == NIL)) {
12202
12174
  XXH3_copyState(ctx->xxh_state, prev);
12203
12175
  if (ctx->write_tokens)
12204
12176
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -12216,7 +12188,7 @@ _fingerprintPartitionBoundSpec(FingerprintContext *ctx, const PartitionBoundSpec
12216
12188
 
12217
12189
  hash = XXH3_64bits_digest(ctx->xxh_state);
12218
12190
  _fingerprintNode(ctx, node->lowerdatums, node, "lowerdatums", depth + 1);
12219
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
12191
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->lowerdatums) == 1 && linitial(node->lowerdatums) == NIL)) {
12220
12192
  XXH3_copyState(ctx->xxh_state, prev);
12221
12193
  if (ctx->write_tokens)
12222
12194
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -12252,7 +12224,7 @@ _fingerprintPartitionBoundSpec(FingerprintContext *ctx, const PartitionBoundSpec
12252
12224
 
12253
12225
  hash = XXH3_64bits_digest(ctx->xxh_state);
12254
12226
  _fingerprintNode(ctx, node->upperdatums, node, "upperdatums", depth + 1);
12255
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
12227
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->upperdatums) == 1 && linitial(node->upperdatums) == NIL)) {
12256
12228
  XXH3_copyState(ctx->xxh_state, prev);
12257
12229
  if (ctx->write_tokens)
12258
12230
  dlist_delete(dlist_tail_node(&ctx->tokens));
@@ -12365,7 +12337,7 @@ _fingerprintVacuumRelation(FingerprintContext *ctx, const VacuumRelation *node,
12365
12337
 
12366
12338
  hash = XXH3_64bits_digest(ctx->xxh_state);
12367
12339
  _fingerprintNode(ctx, node->va_cols, node, "va_cols", depth + 1);
12368
- if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
12340
+ if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->va_cols) == 1 && linitial(node->va_cols) == NIL)) {
12369
12341
  XXH3_copyState(ctx->xxh_state, prev);
12370
12342
  if (ctx->write_tokens)
12371
12343
  dlist_delete(dlist_tail_node(&ctx->tokens));