pg_query 2.1.4 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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));