pg_query 2.1.0 → 4.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +104 -0
- data/README.md +59 -31
- data/Rakefile +2 -2
- data/ext/pg_query/extconf.rb +8 -2
- data/ext/pg_query/include/access/amapi.h +45 -1
- data/ext/pg_query/include/access/attmap.h +1 -1
- data/ext/pg_query/include/access/attnum.h +2 -2
- data/ext/pg_query/include/access/clog.h +4 -2
- data/ext/pg_query/include/access/commit_ts.h +6 -9
- data/ext/pg_query/include/access/detoast.h +1 -11
- data/ext/pg_query/include/access/genam.h +15 -12
- data/ext/pg_query/include/access/gin.h +2 -2
- data/ext/pg_query/include/access/htup.h +1 -1
- data/ext/pg_query/include/access/htup_details.h +75 -87
- data/ext/pg_query/include/access/itup.h +7 -1
- data/ext/pg_query/include/access/parallel.h +2 -2
- data/ext/pg_query/include/access/printtup.h +1 -1
- data/ext/pg_query/include/access/relation.h +1 -1
- data/ext/pg_query/include/access/relscan.h +17 -2
- data/ext/pg_query/include/access/rmgr.h +30 -3
- data/ext/pg_query/include/access/rmgrlist.h +23 -23
- data/ext/pg_query/include/access/sdir.h +1 -1
- data/ext/pg_query/include/access/skey.h +1 -1
- data/ext/pg_query/include/access/stratnum.h +4 -2
- data/ext/pg_query/include/access/sysattr.h +1 -1
- data/ext/pg_query/include/access/table.h +2 -1
- data/ext/pg_query/include/access/tableam.h +272 -20
- data/ext/pg_query/include/access/toast_compression.h +73 -0
- data/ext/pg_query/include/access/transam.h +123 -13
- data/ext/pg_query/include/access/tupconvert.h +1 -1
- data/ext/pg_query/include/access/tupdesc.h +1 -1
- data/ext/pg_query/include/access/tupmacs.h +3 -3
- data/ext/pg_query/include/access/twophase.h +5 -1
- data/ext/pg_query/include/access/xact.h +79 -19
- data/ext/pg_query/include/access/xlog.h +60 -155
- data/ext/pg_query/include/access/xlog_internal.h +50 -14
- data/ext/pg_query/include/access/xlogdefs.h +8 -16
- data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
- data/ext/pg_query/include/access/xlogreader.h +148 -32
- data/ext/pg_query/include/access/xlogrecord.h +18 -9
- data/ext/pg_query/include/access/xlogrecovery.h +157 -0
- data/ext/pg_query/include/c.h +101 -44
- data/ext/pg_query/include/catalog/catalog.h +3 -1
- data/ext/pg_query/include/catalog/catversion.h +2 -2
- data/ext/pg_query/include/catalog/dependency.h +10 -16
- data/ext/pg_query/include/catalog/genbki.h +83 -5
- data/ext/pg_query/include/catalog/index.h +18 -3
- data/ext/pg_query/include/catalog/indexing.h +12 -324
- data/ext/pg_query/include/catalog/namespace.h +4 -2
- data/ext/pg_query/include/catalog/objectaccess.h +70 -2
- data/ext/pg_query/include/catalog/objectaddress.h +11 -6
- data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
- data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_am.h +4 -1
- data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
- data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
- data/ext/pg_query/include/catalog/pg_authid.h +7 -2
- data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
- data/ext/pg_query/include/catalog/pg_class.h +45 -15
- data/ext/pg_query/include/catalog/pg_class_d.h +31 -2
- data/ext/pg_query/include/catalog/pg_collation.h +33 -8
- data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
- data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
- data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
- data/ext/pg_query/include/catalog/pg_control.h +5 -5
- data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
- data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_depend.h +11 -7
- data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
- data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_index.h +17 -7
- data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
- data/ext/pg_query/include/catalog/pg_language.h +10 -5
- data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
- data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
- data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_operator.h +21 -16
- data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
- data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
- data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
- data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
- data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
- data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_proc.h +20 -11
- data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
- data/ext/pg_query/include/catalog/pg_publication.h +50 -4
- data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
- data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
- data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
- data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
- data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
- data/ext/pg_query/include/catalog/pg_transform.h +8 -5
- data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
- data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
- data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_type.h +56 -24
- data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
- data/ext/pg_query/include/catalog/storage.h +5 -3
- data/ext/pg_query/include/commands/async.h +4 -5
- data/ext/pg_query/include/commands/dbcommands.h +2 -1
- data/ext/pg_query/include/commands/defrem.h +11 -24
- data/ext/pg_query/include/commands/event_trigger.h +2 -2
- data/ext/pg_query/include/commands/explain.h +1 -1
- data/ext/pg_query/include/commands/prepare.h +1 -1
- data/ext/pg_query/include/commands/tablespace.h +3 -1
- data/ext/pg_query/include/commands/trigger.h +27 -17
- data/ext/pg_query/include/commands/user.h +2 -2
- data/ext/pg_query/include/commands/vacuum.h +88 -41
- data/ext/pg_query/include/commands/variable.h +1 -1
- data/ext/pg_query/include/common/file_perm.h +4 -4
- data/ext/pg_query/include/common/hashfn.h +1 -1
- data/ext/pg_query/include/common/ip.h +1 -7
- data/ext/pg_query/include/common/keywords.h +2 -6
- data/ext/pg_query/include/common/kwlookup.h +1 -1
- data/ext/pg_query/include/common/pg_prng.h +60 -0
- data/ext/pg_query/include/common/relpath.h +2 -2
- data/ext/pg_query/include/common/string.h +24 -1
- data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
- data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
- data/ext/pg_query/include/datatype/timestamp.h +40 -1
- data/ext/pg_query/include/executor/execdesc.h +1 -1
- data/ext/pg_query/include/executor/executor.h +65 -22
- data/ext/pg_query/include/executor/functions.h +17 -3
- data/ext/pg_query/include/executor/instrument.h +33 -16
- data/ext/pg_query/include/executor/spi.h +41 -3
- data/ext/pg_query/include/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/executor/tuptable.h +1 -1
- data/ext/pg_query/include/fmgr.h +13 -7
- data/ext/pg_query/include/funcapi.h +16 -4
- data/ext/pg_query/include/getaddrinfo.h +1 -1
- data/ext/pg_query/include/jit/jit.h +11 -11
- data/ext/pg_query/include/kwlist_d.h +517 -494
- data/ext/pg_query/include/lib/dshash.h +112 -0
- data/ext/pg_query/include/lib/ilist.h +20 -1
- data/ext/pg_query/include/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/lib/simplehash.h +150 -25
- data/ext/pg_query/include/lib/sort_template.h +432 -0
- data/ext/pg_query/include/lib/stringinfo.h +1 -1
- data/ext/pg_query/include/libpq/auth.h +6 -4
- data/ext/pg_query/include/libpq/crypt.h +5 -4
- data/ext/pg_query/include/libpq/hba.h +43 -4
- data/ext/pg_query/include/libpq/libpq-be.h +23 -6
- data/ext/pg_query/include/libpq/libpq.h +31 -20
- data/ext/pg_query/include/libpq/pqcomm.h +17 -31
- data/ext/pg_query/include/libpq/pqformat.h +1 -1
- data/ext/pg_query/include/libpq/pqsignal.h +4 -4
- data/ext/pg_query/include/mb/pg_wchar.h +106 -23
- data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/miscadmin.h +71 -52
- data/ext/pg_query/include/nodes/bitmapset.h +1 -1
- data/ext/pg_query/include/nodes/execnodes.h +272 -80
- data/ext/pg_query/include/nodes/extensible.h +4 -2
- data/ext/pg_query/include/nodes/lockoptions.h +1 -1
- data/ext/pg_query/include/nodes/makefuncs.h +7 -6
- data/ext/pg_query/include/nodes/memnodes.h +5 -3
- data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
- data/ext/pg_query/include/nodes/nodes.h +30 -11
- data/ext/pg_query/include/nodes/params.h +1 -1
- data/ext/pg_query/include/nodes/parsenodes.h +327 -94
- data/ext/pg_query/include/nodes/pathnodes.h +245 -67
- data/ext/pg_query/include/nodes/pg_list.h +75 -68
- data/ext/pg_query/include/nodes/plannodes.h +128 -30
- data/ext/pg_query/include/nodes/primnodes.h +99 -47
- data/ext/pg_query/include/nodes/print.h +1 -1
- data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/nodes/value.h +58 -39
- data/ext/pg_query/include/optimizer/cost.h +9 -2
- data/ext/pg_query/include/optimizer/geqo.h +9 -7
- data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/optimizer/optimizer.h +25 -22
- data/ext/pg_query/include/optimizer/paths.h +6 -6
- data/ext/pg_query/include/optimizer/planmain.h +15 -14
- data/ext/pg_query/include/parser/analyze.h +19 -5
- data/ext/pg_query/include/parser/gram.h +947 -913
- data/ext/pg_query/include/parser/gramparse.h +1 -1
- data/ext/pg_query/include/parser/kwlist.h +463 -453
- data/ext/pg_query/include/parser/parse_agg.h +2 -7
- data/ext/pg_query/include/parser/parse_coerce.h +4 -1
- data/ext/pg_query/include/parser/parse_expr.h +2 -3
- data/ext/pg_query/include/parser/parse_func.h +2 -1
- data/ext/pg_query/include/parser/parse_node.h +21 -9
- data/ext/pg_query/include/parser/parse_oper.h +1 -3
- data/ext/pg_query/include/parser/parse_relation.h +5 -4
- data/ext/pg_query/include/parser/parse_type.h +1 -1
- data/ext/pg_query/include/parser/parser.h +31 -4
- data/ext/pg_query/include/parser/parsetree.h +1 -1
- data/ext/pg_query/include/parser/scanner.h +1 -1
- data/ext/pg_query/include/parser/scansup.h +2 -5
- data/ext/pg_query/include/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/pg_config.h +94 -46
- data/ext/pg_query/include/pg_config_manual.h +74 -21
- data/ext/pg_query/include/pg_getopt.h +6 -6
- data/ext/pg_query/include/pg_query.h +5 -4
- data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +1220 -422
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +152 -26
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +174 -30
- data/ext/pg_query/include/pg_trace.h +1 -1
- data/ext/pg_query/include/pgstat.h +449 -1237
- data/ext/pg_query/include/pgtime.h +14 -4
- data/ext/pg_query/include/pl_gram.h +126 -128
- data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
- data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/include/plerrcodes.h +9 -1
- data/ext/pg_query/include/plpgsql.h +52 -54
- data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
- data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
- data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
- data/ext/pg_query/include/port/atomics/fallback.h +1 -1
- data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
- data/ext/pg_query/include/port/atomics/generic.h +1 -1
- data/ext/pg_query/include/port/atomics.h +1 -1
- data/ext/pg_query/include/port/pg_bitutils.h +88 -12
- data/ext/pg_query/include/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/port/pg_crc32c.h +1 -1
- data/ext/pg_query/include/port.h +72 -43
- data/ext/pg_query/include/portability/instr_time.h +1 -1
- data/ext/pg_query/include/postgres.h +60 -16
- data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
- data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
- data/ext/pg_query/include/postmaster/bgworker.h +2 -1
- data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
- data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
- data/ext/pg_query/include/postmaster/fork_process.h +1 -1
- data/ext/pg_query/include/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postmaster/pgarch.h +42 -8
- data/ext/pg_query/include/postmaster/postmaster.h +18 -17
- data/ext/pg_query/include/postmaster/startup.h +39 -0
- data/ext/pg_query/include/postmaster/syslogger.h +15 -10
- data/ext/pg_query/include/postmaster/walwriter.h +3 -3
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1422 -916
- data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
- data/ext/pg_query/include/regex/regex.h +18 -16
- data/ext/pg_query/include/replication/logicallauncher.h +3 -5
- data/ext/pg_query/include/replication/logicalproto.h +161 -17
- data/ext/pg_query/include/replication/logicalworker.h +1 -1
- data/ext/pg_query/include/replication/origin.h +7 -7
- data/ext/pg_query/include/replication/reorderbuffer.h +262 -44
- data/ext/pg_query/include/replication/slot.h +23 -12
- data/ext/pg_query/include/replication/syncrep.h +5 -5
- data/ext/pg_query/include/replication/walreceiver.h +145 -13
- data/ext/pg_query/include/replication/walsender.h +8 -8
- data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
- data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/storage/backendid.h +3 -3
- data/ext/pg_query/include/storage/block.h +4 -10
- data/ext/pg_query/include/storage/buf.h +1 -1
- data/ext/pg_query/include/storage/bufmgr.h +19 -14
- data/ext/pg_query/include/storage/bufpage.h +6 -8
- data/ext/pg_query/include/storage/condition_variable.h +13 -2
- data/ext/pg_query/include/storage/dsm.h +4 -1
- data/ext/pg_query/include/storage/dsm_impl.h +3 -2
- data/ext/pg_query/include/storage/fd.h +33 -3
- data/ext/pg_query/include/storage/fileset.h +40 -0
- data/ext/pg_query/include/storage/ipc.h +4 -1
- data/ext/pg_query/include/storage/item.h +1 -1
- data/ext/pg_query/include/storage/itemid.h +1 -1
- data/ext/pg_query/include/storage/itemptr.h +3 -1
- data/ext/pg_query/include/storage/large_object.h +2 -2
- data/ext/pg_query/include/storage/latch.h +9 -13
- data/ext/pg_query/include/storage/lmgr.h +2 -1
- data/ext/pg_query/include/storage/lock.h +17 -13
- data/ext/pg_query/include/storage/lockdefs.h +2 -2
- data/ext/pg_query/include/storage/lwlock.h +6 -32
- data/ext/pg_query/include/storage/lwlocknames.h +0 -1
- data/ext/pg_query/include/storage/off.h +1 -1
- data/ext/pg_query/include/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/storage/pg_shmem.h +9 -7
- data/ext/pg_query/include/storage/pmsignal.h +15 -4
- data/ext/pg_query/include/storage/predicate.h +4 -4
- data/ext/pg_query/include/storage/proc.h +183 -55
- data/ext/pg_query/include/storage/procarray.h +98 -0
- data/ext/pg_query/include/storage/proclist_types.h +1 -1
- data/ext/pg_query/include/storage/procsignal.h +3 -7
- data/ext/pg_query/include/storage/relfilenode.h +1 -1
- data/ext/pg_query/include/storage/s_lock.h +67 -4
- data/ext/pg_query/include/storage/sharedfileset.h +3 -11
- data/ext/pg_query/include/storage/shm_mq.h +5 -4
- data/ext/pg_query/include/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/storage/shmem.h +1 -1
- data/ext/pg_query/include/storage/sinval.h +3 -3
- data/ext/pg_query/include/storage/sinvaladt.h +1 -1
- data/ext/pg_query/include/storage/smgr.h +10 -8
- data/ext/pg_query/include/storage/spin.h +2 -2
- data/ext/pg_query/include/storage/standby.h +13 -6
- data/ext/pg_query/include/storage/standbydefs.h +2 -2
- data/ext/pg_query/include/storage/sync.h +7 -3
- data/ext/pg_query/include/tcop/cmdtag.h +1 -1
- data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
- data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
- data/ext/pg_query/include/tcop/dest.h +1 -1
- data/ext/pg_query/include/tcop/fastpath.h +1 -2
- data/ext/pg_query/include/tcop/pquery.h +7 -1
- data/ext/pg_query/include/tcop/tcopprot.h +19 -11
- data/ext/pg_query/include/tcop/utility.h +7 -3
- data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
- data/ext/pg_query/include/utils/acl.h +24 -3
- data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/utils/array.h +7 -2
- data/ext/pg_query/include/utils/backend_progress.h +44 -0
- data/ext/pg_query/include/utils/backend_status.h +321 -0
- data/ext/pg_query/include/utils/builtins.h +11 -11
- data/ext/pg_query/include/utils/bytea.h +3 -2
- data/ext/pg_query/include/utils/catcache.h +1 -1
- data/ext/pg_query/include/utils/date.h +1 -1
- data/ext/pg_query/include/utils/datetime.h +8 -7
- data/ext/pg_query/include/utils/datum.h +9 -1
- data/ext/pg_query/include/utils/dsa.h +1 -1
- data/ext/pg_query/include/utils/dynahash.h +4 -3
- data/ext/pg_query/include/utils/elog.h +52 -21
- data/ext/pg_query/include/utils/errcodes.h +2 -0
- data/ext/pg_query/include/utils/expandeddatum.h +1 -1
- data/ext/pg_query/include/utils/expandedrecord.h +1 -1
- data/ext/pg_query/include/utils/float.h +7 -7
- data/ext/pg_query/include/utils/fmgroids.h +1300 -696
- data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
- data/ext/pg_query/include/utils/fmgrtab.h +6 -5
- data/ext/pg_query/include/utils/guc.h +69 -43
- data/ext/pg_query/include/utils/guc_tables.h +23 -19
- data/ext/pg_query/include/utils/hsearch.h +15 -11
- data/ext/pg_query/include/utils/inval.h +5 -1
- data/ext/pg_query/include/utils/lsyscache.h +11 -1
- data/ext/pg_query/include/utils/memdebug.h +1 -1
- data/ext/pg_query/include/utils/memutils.h +8 -3
- data/ext/pg_query/include/utils/numeric.h +19 -5
- data/ext/pg_query/include/utils/palloc.h +25 -3
- data/ext/pg_query/include/utils/partcache.h +1 -1
- data/ext/pg_query/include/utils/pg_locale.h +17 -9
- data/ext/pg_query/include/utils/pg_lsn.h +1 -1
- data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
- data/ext/pg_query/include/utils/pidfile.h +1 -1
- data/ext/pg_query/include/utils/plancache.h +6 -5
- data/ext/pg_query/include/utils/portal.h +12 -1
- data/ext/pg_query/include/utils/ps_status.h +1 -1
- data/ext/pg_query/include/utils/queryenvironment.h +1 -1
- data/ext/pg_query/include/utils/queryjumble.h +88 -0
- data/ext/pg_query/include/utils/regproc.h +14 -3
- data/ext/pg_query/include/utils/rel.h +71 -20
- data/ext/pg_query/include/utils/relcache.h +9 -7
- data/ext/pg_query/include/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/utils/resowner.h +1 -1
- data/ext/pg_query/include/utils/rls.h +2 -2
- data/ext/pg_query/include/utils/ruleutils.h +4 -1
- data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/utils/snapmgr.h +35 -14
- data/ext/pg_query/include/utils/snapshot.h +14 -1
- data/ext/pg_query/include/utils/sortsupport.h +117 -2
- data/ext/pg_query/include/utils/syscache.h +6 -1
- data/ext/pg_query/include/utils/timeout.h +11 -4
- data/ext/pg_query/include/utils/timestamp.h +6 -5
- data/ext/pg_query/include/utils/tuplesort.h +25 -11
- data/ext/pg_query/include/utils/tuplestore.h +2 -2
- data/ext/pg_query/include/utils/typcache.h +24 -17
- data/ext/pg_query/include/utils/tzparser.h +1 -1
- data/ext/pg_query/include/utils/varlena.h +5 -3
- data/ext/pg_query/include/utils/wait_event.h +289 -0
- data/ext/pg_query/include/utils/xml.h +4 -4
- data/ext/pg_query/pg_query.pb-c.c +4318 -2307
- data/ext/pg_query/pg_query_deparse.c +1114 -381
- data/ext/pg_query/pg_query_fingerprint.c +46 -10
- data/ext/pg_query/pg_query_fingerprint.h +3 -1
- data/ext/pg_query/pg_query_json_plpgsql.c +55 -12
- data/ext/pg_query/pg_query_normalize.c +163 -20
- data/ext/pg_query/pg_query_outfuncs.h +1 -0
- data/ext/pg_query/pg_query_outfuncs_json.c +65 -16
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
- data/ext/pg_query/pg_query_parse.c +1 -1
- data/ext/pg_query/pg_query_parse_plpgsql.c +79 -16
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
- data/ext/pg_query/pg_query_ruby.c +1 -1
- data/ext/pg_query/pg_query_scan.c +2 -1
- data/ext/pg_query/pg_query_split.c +3 -2
- data/ext/pg_query/src_backend_catalog_namespace.c +21 -9
- data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
- data/ext/pg_query/src_backend_commands_define.c +11 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +424 -109
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +291 -46
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +86 -11
- data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
- data/ext/pg_query/src_backend_nodes_value.c +28 -19
- data/ext/pg_query/src_backend_parser_gram.c +33890 -31262
- data/ext/pg_query/src_backend_parser_parser.c +26 -7
- data/ext/pg_query/src_backend_parser_scan.c +644 -441
- data/ext/pg_query/src_backend_parser_scansup.c +4 -28
- data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
- data/ext/pg_query/src_backend_tcop_postgres.c +73 -24
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
- data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +109 -15
- data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
- data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
- data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
- data/ext/pg_query/src_backend_utils_misc_guc.c +207 -45
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
- data/ext/pg_query/src_common_encnames.c +1 -1
- data/ext/pg_query/src_common_hashfn.c +3 -3
- data/ext/pg_query/src_common_keywords.c +15 -2
- data/ext/pg_query/src_common_kwlist_d.h +517 -494
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_pg_prng.c +152 -0
- data/ext/pg_query/src_common_psprintf.c +1 -1
- data/ext/pg_query/src_common_string.c +7 -1
- data/ext/pg_query/src_common_stringinfo.c +1 -1
- data/ext/pg_query/src_common_wchar.c +712 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1235 -1261
- data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/src_port_pg_bitutils.c +41 -52
- data/ext/pg_query/src_port_pgsleep.c +1 -1
- data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
- data/ext/pg_query/src_port_qsort.c +12 -224
- data/ext/pg_query/src_port_snprintf.c +46 -20
- data/ext/pg_query/src_port_strerror.c +9 -19
- data/ext/pg_query/src_port_strnlen.c +1 -1
- data/lib/pg_query/deparse.rb +7 -1
- data/lib/pg_query/filter_columns.rb +6 -4
- data/lib/pg_query/fingerprint.rb +18 -3
- data/lib/pg_query/node.rb +2 -2
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/parse.rb +87 -51
- data/lib/pg_query/pg_query_pb.rb +1109 -942
- data/lib/pg_query/treewalker.rb +6 -0
- data/lib/pg_query/truncate.rb +54 -8
- data/lib/pg_query/version.rb +1 -1
- metadata +29 -18
- data/ext/pg_query/include/access/xloginsert.h +0 -64
- data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
- data/ext/pg_query/include/parser/parse_clause.h +0 -54
- data/ext/pg_query/include/parser/parse_collate.h +0 -27
- data/ext/pg_query/include/parser/parse_target.h +0 -46
- data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
- data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
- data/ext/pg_query/src_port_erand48.c +0 -127
- data/ext/pg_query/src_port_random.c +0 -31
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
static void _fingerprintAlias(FingerprintContext *ctx, const Alias *node, const void *parent, const char *field_name, unsigned int depth);
|
|
2
2
|
static void _fingerprintRangeVar(FingerprintContext *ctx, const RangeVar *node, const void *parent, const char *field_name, unsigned int depth);
|
|
3
3
|
static void _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void *parent, const char *field_name, unsigned int depth);
|
|
4
|
-
static void _fingerprintExpr(FingerprintContext *ctx, const Expr *node, const void *parent, const char *field_name, unsigned int depth);
|
|
5
4
|
static void _fingerprintVar(FingerprintContext *ctx, const Var *node, const void *parent, const char *field_name, unsigned int depth);
|
|
6
5
|
static void _fingerprintConst(FingerprintContext *ctx, const Const *node, const void *parent, const char *field_name, unsigned int depth);
|
|
7
6
|
static void _fingerprintParam(FingerprintContext *ctx, const Param *node, const void *parent, const char *field_name, unsigned int depth);
|
|
@@ -48,12 +47,16 @@ static void _fingerprintJoinExpr(FingerprintContext *ctx, const JoinExpr *node,
|
|
|
48
47
|
static void _fingerprintFromExpr(FingerprintContext *ctx, const FromExpr *node, const void *parent, const char *field_name, unsigned int depth);
|
|
49
48
|
static void _fingerprintOnConflictExpr(FingerprintContext *ctx, const OnConflictExpr *node, const void *parent, const char *field_name, unsigned int depth);
|
|
50
49
|
static void _fingerprintIntoClause(FingerprintContext *ctx, const IntoClause *node, const void *parent, const char *field_name, unsigned int depth);
|
|
50
|
+
static void _fingerprintMergeAction(FingerprintContext *ctx, const MergeAction *node, const void *parent, const char *field_name, unsigned int depth);
|
|
51
51
|
static void _fingerprintRawStmt(FingerprintContext *ctx, const RawStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
52
52
|
static void _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent, const char *field_name, unsigned int depth);
|
|
53
53
|
static void _fingerprintInsertStmt(FingerprintContext *ctx, const InsertStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
54
54
|
static void _fingerprintDeleteStmt(FingerprintContext *ctx, const DeleteStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
55
55
|
static void _fingerprintUpdateStmt(FingerprintContext *ctx, const UpdateStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
56
|
+
static void _fingerprintMergeStmt(FingerprintContext *ctx, const MergeStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
56
57
|
static void _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
58
|
+
static void _fingerprintReturnStmt(FingerprintContext *ctx, const ReturnStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
59
|
+
static void _fingerprintPLAssignStmt(FingerprintContext *ctx, const PLAssignStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
57
60
|
static void _fingerprintAlterTableStmt(FingerprintContext *ctx, const AlterTableStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
58
61
|
static void _fingerprintAlterTableCmd(FingerprintContext *ctx, const AlterTableCmd *node, const void *parent, const char *field_name, unsigned int depth);
|
|
59
62
|
static void _fingerprintAlterDomainStmt(FingerprintContext *ctx, const AlterDomainStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
@@ -104,6 +107,7 @@ static void _fingerprintReindexStmt(FingerprintContext *ctx, const ReindexStmt *
|
|
|
104
107
|
static void _fingerprintCheckPointStmt(FingerprintContext *ctx, const CheckPointStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
105
108
|
static void _fingerprintCreateSchemaStmt(FingerprintContext *ctx, const CreateSchemaStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
106
109
|
static void _fingerprintAlterDatabaseStmt(FingerprintContext *ctx, const AlterDatabaseStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
110
|
+
static void _fingerprintAlterDatabaseRefreshCollStmt(FingerprintContext *ctx, const AlterDatabaseRefreshCollStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
107
111
|
static void _fingerprintAlterDatabaseSetStmt(FingerprintContext *ctx, const AlterDatabaseSetStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
108
112
|
static void _fingerprintAlterRoleSetStmt(FingerprintContext *ctx, const AlterRoleSetStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
109
113
|
static void _fingerprintCreateConversionStmt(FingerprintContext *ctx, const CreateConversionStmt *node, const void *parent, const char *field_name, unsigned int depth);
|
|
@@ -166,7 +170,6 @@ static void _fingerprintAlterStatsStmt(FingerprintContext *ctx, const AlterStats
|
|
|
166
170
|
static void _fingerprintA_Expr(FingerprintContext *ctx, const A_Expr *node, const void *parent, const char *field_name, unsigned int depth);
|
|
167
171
|
static void _fingerprintColumnRef(FingerprintContext *ctx, const ColumnRef *node, const void *parent, const char *field_name, unsigned int depth);
|
|
168
172
|
static void _fingerprintParamRef(FingerprintContext *ctx, const ParamRef *node, const void *parent, const char *field_name, unsigned int depth);
|
|
169
|
-
static void _fingerprintA_Const(FingerprintContext *ctx, const A_Const *node, const void *parent, const char *field_name, unsigned int depth);
|
|
170
173
|
static void _fingerprintFuncCall(FingerprintContext *ctx, const FuncCall *node, const void *parent, const char *field_name, unsigned int depth);
|
|
171
174
|
static void _fingerprintA_Star(FingerprintContext *ctx, const A_Star *node, const void *parent, const char *field_name, unsigned int depth);
|
|
172
175
|
static void _fingerprintA_Indices(FingerprintContext *ctx, const A_Indices *node, const void *parent, const char *field_name, unsigned int depth);
|
|
@@ -186,6 +189,7 @@ static void _fingerprintRangeTableFuncCol(FingerprintContext *ctx, const RangeTa
|
|
|
186
189
|
static void _fingerprintTypeName(FingerprintContext *ctx, const TypeName *node, const void *parent, const char *field_name, unsigned int depth);
|
|
187
190
|
static void _fingerprintColumnDef(FingerprintContext *ctx, const ColumnDef *node, const void *parent, const char *field_name, unsigned int depth);
|
|
188
191
|
static void _fingerprintIndexElem(FingerprintContext *ctx, const IndexElem *node, const void *parent, const char *field_name, unsigned int depth);
|
|
192
|
+
static void _fingerprintStatsElem(FingerprintContext *ctx, const StatsElem *node, const void *parent, const char *field_name, unsigned int depth);
|
|
189
193
|
static void _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const void *parent, const char *field_name, unsigned int depth);
|
|
190
194
|
static void _fingerprintDefElem(FingerprintContext *ctx, const DefElem *node, const void *parent, const char *field_name, unsigned int depth);
|
|
191
195
|
static void _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, const void *parent, const char *field_name, unsigned int depth);
|
|
@@ -206,7 +210,10 @@ static void _fingerprintXmlSerialize(FingerprintContext *ctx, const XmlSerialize
|
|
|
206
210
|
static void _fingerprintWithClause(FingerprintContext *ctx, const WithClause *node, const void *parent, const char *field_name, unsigned int depth);
|
|
207
211
|
static void _fingerprintInferClause(FingerprintContext *ctx, const InferClause *node, const void *parent, const char *field_name, unsigned int depth);
|
|
208
212
|
static void _fingerprintOnConflictClause(FingerprintContext *ctx, const OnConflictClause *node, const void *parent, const char *field_name, unsigned int depth);
|
|
213
|
+
static void _fingerprintCTESearchClause(FingerprintContext *ctx, const CTESearchClause *node, const void *parent, const char *field_name, unsigned int depth);
|
|
214
|
+
static void _fingerprintCTECycleClause(FingerprintContext *ctx, const CTECycleClause *node, const void *parent, const char *field_name, unsigned int depth);
|
|
209
215
|
static void _fingerprintCommonTableExpr(FingerprintContext *ctx, const CommonTableExpr *node, const void *parent, const char *field_name, unsigned int depth);
|
|
216
|
+
static void _fingerprintMergeWhenClause(FingerprintContext *ctx, const MergeWhenClause *node, const void *parent, const char *field_name, unsigned int depth);
|
|
210
217
|
static void _fingerprintRoleSpec(FingerprintContext *ctx, const RoleSpec *node, const void *parent, const char *field_name, unsigned int depth);
|
|
211
218
|
static void _fingerprintTriggerTransition(FingerprintContext *ctx, const TriggerTransition *node, const void *parent, const char *field_name, unsigned int depth);
|
|
212
219
|
static void _fingerprintPartitionElem(FingerprintContext *ctx, const PartitionElem *node, const void *parent, const char *field_name, unsigned int depth);
|
|
@@ -215,6 +222,8 @@ static void _fingerprintPartitionBoundSpec(FingerprintContext *ctx, const Partit
|
|
|
215
222
|
static void _fingerprintPartitionRangeDatum(FingerprintContext *ctx, const PartitionRangeDatum *node, const void *parent, const char *field_name, unsigned int depth);
|
|
216
223
|
static void _fingerprintPartitionCmd(FingerprintContext *ctx, const PartitionCmd *node, const void *parent, const char *field_name, unsigned int depth);
|
|
217
224
|
static void _fingerprintVacuumRelation(FingerprintContext *ctx, const VacuumRelation *node, const void *parent, const char *field_name, unsigned int depth);
|
|
225
|
+
static void _fingerprintPublicationObjSpec(FingerprintContext *ctx, const PublicationObjSpec *node, const void *parent, const char *field_name, unsigned int depth);
|
|
226
|
+
static void _fingerprintPublicationTable(FingerprintContext *ctx, const PublicationTable *node, const void *parent, const char *field_name, unsigned int depth);
|
|
218
227
|
static void _fingerprintInlineCodeBlock(FingerprintContext *ctx, const InlineCodeBlock *node, const void *parent, const char *field_name, unsigned int depth);
|
|
219
228
|
static void _fingerprintCallContext(FingerprintContext *ctx, const CallContext *node, const void *parent, const char *field_name, unsigned int depth);
|
|
220
229
|
|
|
@@ -302,7 +311,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
|
|
|
302
311
|
|
|
303
312
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
304
313
|
_fingerprintNode(ctx, node->colcollations, node, "colcollations", depth + 1);
|
|
305
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
314
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colcollations) == 1 && linitial(node->colcollations) == NIL)) {
|
|
306
315
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
307
316
|
if (ctx->write_tokens)
|
|
308
317
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -318,7 +327,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
|
|
|
318
327
|
|
|
319
328
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
320
329
|
_fingerprintNode(ctx, node->coldefexprs, node, "coldefexprs", depth + 1);
|
|
321
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
330
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->coldefexprs) == 1 && linitial(node->coldefexprs) == NIL)) {
|
|
322
331
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
323
332
|
if (ctx->write_tokens)
|
|
324
333
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -334,7 +343,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
|
|
|
334
343
|
|
|
335
344
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
336
345
|
_fingerprintNode(ctx, node->colexprs, node, "colexprs", depth + 1);
|
|
337
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
346
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colexprs) == 1 && linitial(node->colexprs) == NIL)) {
|
|
338
347
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
339
348
|
if (ctx->write_tokens)
|
|
340
349
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -350,7 +359,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
|
|
|
350
359
|
|
|
351
360
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
352
361
|
_fingerprintNode(ctx, node->colnames, node, "colnames", depth + 1);
|
|
353
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
362
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colnames) == 1 && linitial(node->colnames) == NIL)) {
|
|
354
363
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
355
364
|
if (ctx->write_tokens)
|
|
356
365
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -366,7 +375,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
|
|
|
366
375
|
|
|
367
376
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
368
377
|
_fingerprintNode(ctx, node->coltypes, node, "coltypes", depth + 1);
|
|
369
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
378
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->coltypes) == 1 && linitial(node->coltypes) == NIL)) {
|
|
370
379
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
371
380
|
if (ctx->write_tokens)
|
|
372
381
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -382,7 +391,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
|
|
|
382
391
|
|
|
383
392
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
384
393
|
_fingerprintNode(ctx, node->coltypmods, node, "coltypmods", depth + 1);
|
|
385
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
394
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->coltypmods) == 1 && linitial(node->coltypmods) == NIL)) {
|
|
386
395
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
387
396
|
if (ctx->write_tokens)
|
|
388
397
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -432,7 +441,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
|
|
|
432
441
|
|
|
433
442
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
434
443
|
_fingerprintNode(ctx, node->ns_names, node, "ns_names", depth + 1);
|
|
435
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
444
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->ns_names) == 1 && linitial(node->ns_names) == NIL)) {
|
|
436
445
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
437
446
|
if (ctx->write_tokens)
|
|
438
447
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -448,7 +457,7 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
|
|
|
448
457
|
|
|
449
458
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
450
459
|
_fingerprintNode(ctx, node->ns_uris, node, "ns_uris", depth + 1);
|
|
451
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
460
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->ns_uris) == 1 && linitial(node->ns_uris) == NIL)) {
|
|
452
461
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
453
462
|
if (ctx->write_tokens)
|
|
454
463
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -481,11 +490,6 @@ _fingerprintTableFunc(FingerprintContext *ctx, const TableFunc *node, const void
|
|
|
481
490
|
|
|
482
491
|
}
|
|
483
492
|
|
|
484
|
-
static void
|
|
485
|
-
_fingerprintExpr(FingerprintContext *ctx, const Expr *node, const void *parent, const char *field_name, unsigned int depth)
|
|
486
|
-
{
|
|
487
|
-
}
|
|
488
|
-
|
|
489
493
|
static void
|
|
490
494
|
_fingerprintVar(FingerprintContext *ctx, const Var *node, const void *parent, const char *field_name, unsigned int depth)
|
|
491
495
|
{
|
|
@@ -646,7 +650,7 @@ _fingerprintAggref(FingerprintContext *ctx, const Aggref *node, const void *pare
|
|
|
646
650
|
|
|
647
651
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
648
652
|
_fingerprintNode(ctx, node->aggargtypes, node, "aggargtypes", depth + 1);
|
|
649
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
653
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->aggargtypes) == 1 && linitial(node->aggargtypes) == NIL)) {
|
|
650
654
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
651
655
|
if (ctx->write_tokens)
|
|
652
656
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -669,7 +673,7 @@ _fingerprintAggref(FingerprintContext *ctx, const Aggref *node, const void *pare
|
|
|
669
673
|
|
|
670
674
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
671
675
|
_fingerprintNode(ctx, node->aggdirectargs, node, "aggdirectargs", depth + 1);
|
|
672
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
676
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->aggdirectargs) == 1 && linitial(node->aggdirectargs) == NIL)) {
|
|
673
677
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
674
678
|
if (ctx->write_tokens)
|
|
675
679
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -685,7 +689,7 @@ _fingerprintAggref(FingerprintContext *ctx, const Aggref *node, const void *pare
|
|
|
685
689
|
|
|
686
690
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
687
691
|
_fingerprintNode(ctx, node->aggdistinct, node, "aggdistinct", depth + 1);
|
|
688
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
692
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->aggdistinct) == 1 && linitial(node->aggdistinct) == NIL)) {
|
|
689
693
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
690
694
|
if (ctx->write_tokens)
|
|
691
695
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -729,6 +733,13 @@ _fingerprintAggref(FingerprintContext *ctx, const Aggref *node, const void *pare
|
|
|
729
733
|
_fingerprintString(ctx, buffer);
|
|
730
734
|
}
|
|
731
735
|
|
|
736
|
+
if (node->aggno != 0) {
|
|
737
|
+
char buffer[50];
|
|
738
|
+
sprintf(buffer, "%d", node->aggno);
|
|
739
|
+
_fingerprintString(ctx, "aggno");
|
|
740
|
+
_fingerprintString(ctx, buffer);
|
|
741
|
+
}
|
|
742
|
+
|
|
732
743
|
if (node->aggorder != NULL && node->aggorder->length > 0) {
|
|
733
744
|
XXH3_state_t* prev = XXH3_createState();
|
|
734
745
|
XXH64_hash_t hash;
|
|
@@ -738,7 +749,7 @@ _fingerprintAggref(FingerprintContext *ctx, const Aggref *node, const void *pare
|
|
|
738
749
|
|
|
739
750
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
740
751
|
_fingerprintNode(ctx, node->aggorder, node, "aggorder", depth + 1);
|
|
741
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
752
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->aggorder) == 1 && linitial(node->aggorder) == NIL)) {
|
|
742
753
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
743
754
|
if (ctx->write_tokens)
|
|
744
755
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -755,6 +766,13 @@ _fingerprintAggref(FingerprintContext *ctx, const Aggref *node, const void *pare
|
|
|
755
766
|
_fingerprintString(ctx, "true");
|
|
756
767
|
}
|
|
757
768
|
|
|
769
|
+
if (node->aggtransno != 0) {
|
|
770
|
+
char buffer[50];
|
|
771
|
+
sprintf(buffer, "%d", node->aggtransno);
|
|
772
|
+
_fingerprintString(ctx, "aggtransno");
|
|
773
|
+
_fingerprintString(ctx, buffer);
|
|
774
|
+
}
|
|
775
|
+
|
|
758
776
|
if (node->aggtranstype != 0) {
|
|
759
777
|
char buffer[50];
|
|
760
778
|
sprintf(buffer, "%d", node->aggtranstype);
|
|
@@ -783,7 +801,7 @@ _fingerprintAggref(FingerprintContext *ctx, const Aggref *node, const void *pare
|
|
|
783
801
|
|
|
784
802
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
785
803
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
786
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
804
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
787
805
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
788
806
|
if (ctx->write_tokens)
|
|
789
807
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -820,7 +838,7 @@ _fingerprintGroupingFunc(FingerprintContext *ctx, const GroupingFunc *node, cons
|
|
|
820
838
|
|
|
821
839
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
822
840
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
823
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
841
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
824
842
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
825
843
|
if (ctx->write_tokens)
|
|
826
844
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -836,7 +854,7 @@ _fingerprintGroupingFunc(FingerprintContext *ctx, const GroupingFunc *node, cons
|
|
|
836
854
|
|
|
837
855
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
838
856
|
_fingerprintNode(ctx, node->cols, node, "cols", depth + 1);
|
|
839
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
857
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->cols) == 1 && linitial(node->cols) == NIL)) {
|
|
840
858
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
841
859
|
if (ctx->write_tokens)
|
|
842
860
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -854,7 +872,7 @@ _fingerprintGroupingFunc(FingerprintContext *ctx, const GroupingFunc *node, cons
|
|
|
854
872
|
|
|
855
873
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
856
874
|
_fingerprintNode(ctx, node->refs, node, "refs", depth + 1);
|
|
857
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
875
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->refs) == 1 && linitial(node->refs) == NIL)) {
|
|
858
876
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
859
877
|
if (ctx->write_tokens)
|
|
860
878
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -892,7 +910,7 @@ _fingerprintWindowFunc(FingerprintContext *ctx, const WindowFunc *node, const vo
|
|
|
892
910
|
|
|
893
911
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
894
912
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
895
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
913
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
896
914
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
897
915
|
if (ctx->write_tokens)
|
|
898
916
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -1015,13 +1033,20 @@ _fingerprintSubscriptingRef(FingerprintContext *ctx, const SubscriptingRef *node
|
|
|
1015
1033
|
|
|
1016
1034
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
1017
1035
|
_fingerprintNode(ctx, node->reflowerindexpr, node, "reflowerindexpr", depth + 1);
|
|
1018
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
1036
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->reflowerindexpr) == 1 && linitial(node->reflowerindexpr) == NIL)) {
|
|
1019
1037
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
1020
1038
|
if (ctx->write_tokens)
|
|
1021
1039
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
1022
1040
|
}
|
|
1023
1041
|
XXH3_freeState(prev);
|
|
1024
1042
|
}
|
|
1043
|
+
if (node->refrestype != 0) {
|
|
1044
|
+
char buffer[50];
|
|
1045
|
+
sprintf(buffer, "%d", node->refrestype);
|
|
1046
|
+
_fingerprintString(ctx, "refrestype");
|
|
1047
|
+
_fingerprintString(ctx, buffer);
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1025
1050
|
if (node->reftypmod != 0) {
|
|
1026
1051
|
char buffer[50];
|
|
1027
1052
|
sprintf(buffer, "%d", node->reftypmod);
|
|
@@ -1038,7 +1063,7 @@ _fingerprintSubscriptingRef(FingerprintContext *ctx, const SubscriptingRef *node
|
|
|
1038
1063
|
|
|
1039
1064
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
1040
1065
|
_fingerprintNode(ctx, node->refupperindexpr, node, "refupperindexpr", depth + 1);
|
|
1041
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
1066
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->refupperindexpr) == 1 && linitial(node->refupperindexpr) == NIL)) {
|
|
1042
1067
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
1043
1068
|
if (ctx->write_tokens)
|
|
1044
1069
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -1059,7 +1084,7 @@ _fingerprintFuncExpr(FingerprintContext *ctx, const FuncExpr *node, const void *
|
|
|
1059
1084
|
|
|
1060
1085
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
1061
1086
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
1062
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
1087
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
1063
1088
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
1064
1089
|
if (ctx->write_tokens)
|
|
1065
1090
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -1161,7 +1186,7 @@ _fingerprintOpExpr(FingerprintContext *ctx, const OpExpr *node, const void *pare
|
|
|
1161
1186
|
|
|
1162
1187
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
1163
1188
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
1164
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
1189
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
1165
1190
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
1166
1191
|
if (ctx->write_tokens)
|
|
1167
1192
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -1224,13 +1249,20 @@ _fingerprintScalarArrayOpExpr(FingerprintContext *ctx, const ScalarArrayOpExpr *
|
|
|
1224
1249
|
|
|
1225
1250
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
1226
1251
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
1227
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
1252
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
1228
1253
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
1229
1254
|
if (ctx->write_tokens)
|
|
1230
1255
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
1231
1256
|
}
|
|
1232
1257
|
XXH3_freeState(prev);
|
|
1233
1258
|
}
|
|
1259
|
+
if (node->hashfuncid != 0) {
|
|
1260
|
+
char buffer[50];
|
|
1261
|
+
sprintf(buffer, "%d", node->hashfuncid);
|
|
1262
|
+
_fingerprintString(ctx, "hashfuncid");
|
|
1263
|
+
_fingerprintString(ctx, buffer);
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1234
1266
|
if (node->inputcollid != 0) {
|
|
1235
1267
|
char buffer[50];
|
|
1236
1268
|
sprintf(buffer, "%d", node->inputcollid);
|
|
@@ -1240,6 +1272,13 @@ _fingerprintScalarArrayOpExpr(FingerprintContext *ctx, const ScalarArrayOpExpr *
|
|
|
1240
1272
|
|
|
1241
1273
|
// Intentionally ignoring node->location for fingerprinting
|
|
1242
1274
|
|
|
1275
|
+
if (node->negfuncid != 0) {
|
|
1276
|
+
char buffer[50];
|
|
1277
|
+
sprintf(buffer, "%d", node->negfuncid);
|
|
1278
|
+
_fingerprintString(ctx, "negfuncid");
|
|
1279
|
+
_fingerprintString(ctx, buffer);
|
|
1280
|
+
}
|
|
1281
|
+
|
|
1243
1282
|
if (node->opfuncid != 0) {
|
|
1244
1283
|
char buffer[50];
|
|
1245
1284
|
sprintf(buffer, "%d", node->opfuncid);
|
|
@@ -1273,7 +1312,7 @@ _fingerprintBoolExpr(FingerprintContext *ctx, const BoolExpr *node, const void *
|
|
|
1273
1312
|
|
|
1274
1313
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
1275
1314
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
1276
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
1315
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
1277
1316
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
1278
1317
|
if (ctx->write_tokens)
|
|
1279
1318
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -1303,7 +1342,7 @@ _fingerprintSubLink(FingerprintContext *ctx, const SubLink *node, const void *pa
|
|
|
1303
1342
|
|
|
1304
1343
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
1305
1344
|
_fingerprintNode(ctx, node->operName, node, "operName", depth + 1);
|
|
1306
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
1345
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->operName) == 1 && linitial(node->operName) == NIL)) {
|
|
1307
1346
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
1308
1347
|
if (ctx->write_tokens)
|
|
1309
1348
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -1370,7 +1409,7 @@ _fingerprintSubPlan(FingerprintContext *ctx, const SubPlan *node, const void *pa
|
|
|
1370
1409
|
|
|
1371
1410
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
1372
1411
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
1373
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
1412
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
1374
1413
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
1375
1414
|
if (ctx->write_tokens)
|
|
1376
1415
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -1407,7 +1446,7 @@ _fingerprintSubPlan(FingerprintContext *ctx, const SubPlan *node, const void *pa
|
|
|
1407
1446
|
|
|
1408
1447
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
1409
1448
|
_fingerprintNode(ctx, node->parParam, node, "parParam", depth + 1);
|
|
1410
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
1449
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->parParam) == 1 && linitial(node->parParam) == NIL)) {
|
|
1411
1450
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
1412
1451
|
if (ctx->write_tokens)
|
|
1413
1452
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -1428,7 +1467,7 @@ _fingerprintSubPlan(FingerprintContext *ctx, const SubPlan *node, const void *pa
|
|
|
1428
1467
|
|
|
1429
1468
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
1430
1469
|
_fingerprintNode(ctx, node->paramIds, node, "paramIds", depth + 1);
|
|
1431
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
1470
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->paramIds) == 1 && linitial(node->paramIds) == NIL)) {
|
|
1432
1471
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
1433
1472
|
if (ctx->write_tokens)
|
|
1434
1473
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -1463,7 +1502,7 @@ _fingerprintSubPlan(FingerprintContext *ctx, const SubPlan *node, const void *pa
|
|
|
1463
1502
|
|
|
1464
1503
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
1465
1504
|
_fingerprintNode(ctx, node->setParam, node, "setParam", depth + 1);
|
|
1466
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
1505
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->setParam) == 1 && linitial(node->setParam) == NIL)) {
|
|
1467
1506
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
1468
1507
|
if (ctx->write_tokens)
|
|
1469
1508
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -1523,7 +1562,7 @@ _fingerprintAlternativeSubPlan(FingerprintContext *ctx, const AlternativeSubPlan
|
|
|
1523
1562
|
|
|
1524
1563
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
1525
1564
|
_fingerprintNode(ctx, node->subplans, node, "subplans", depth + 1);
|
|
1526
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
1565
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->subplans) == 1 && linitial(node->subplans) == NIL)) {
|
|
1527
1566
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
1528
1567
|
if (ctx->write_tokens)
|
|
1529
1568
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -1611,7 +1650,7 @@ _fingerprintFieldStore(FingerprintContext *ctx, const FieldStore *node, const vo
|
|
|
1611
1650
|
|
|
1612
1651
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
1613
1652
|
_fingerprintNode(ctx, node->fieldnums, node, "fieldnums", depth + 1);
|
|
1614
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
1653
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->fieldnums) == 1 && linitial(node->fieldnums) == NIL)) {
|
|
1615
1654
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
1616
1655
|
if (ctx->write_tokens)
|
|
1617
1656
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -1627,7 +1666,7 @@ _fingerprintFieldStore(FingerprintContext *ctx, const FieldStore *node, const vo
|
|
|
1627
1666
|
|
|
1628
1667
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
1629
1668
|
_fingerprintNode(ctx, node->newvals, node, "newvals", depth + 1);
|
|
1630
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
1669
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->newvals) == 1 && linitial(node->newvals) == NIL)) {
|
|
1631
1670
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
1632
1671
|
if (ctx->write_tokens)
|
|
1633
1672
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -1899,7 +1938,7 @@ _fingerprintCaseExpr(FingerprintContext *ctx, const CaseExpr *node, const void *
|
|
|
1899
1938
|
|
|
1900
1939
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
1901
1940
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
1902
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
1941
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
1903
1942
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
1904
1943
|
if (ctx->write_tokens)
|
|
1905
1944
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2041,7 +2080,7 @@ _fingerprintArrayExpr(FingerprintContext *ctx, const ArrayExpr *node, const void
|
|
|
2041
2080
|
|
|
2042
2081
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2043
2082
|
_fingerprintNode(ctx, node->elements, node, "elements", depth + 1);
|
|
2044
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2083
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->elements) == 1 && linitial(node->elements) == NIL)) {
|
|
2045
2084
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2046
2085
|
if (ctx->write_tokens)
|
|
2047
2086
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2069,7 +2108,7 @@ _fingerprintRowExpr(FingerprintContext *ctx, const RowExpr *node, const void *pa
|
|
|
2069
2108
|
|
|
2070
2109
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2071
2110
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
2072
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2111
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
2073
2112
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2074
2113
|
if (ctx->write_tokens)
|
|
2075
2114
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2085,7 +2124,7 @@ _fingerprintRowExpr(FingerprintContext *ctx, const RowExpr *node, const void *pa
|
|
|
2085
2124
|
|
|
2086
2125
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2087
2126
|
_fingerprintNode(ctx, node->colnames, node, "colnames", depth + 1);
|
|
2088
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2127
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colnames) == 1 && linitial(node->colnames) == NIL)) {
|
|
2089
2128
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2090
2129
|
if (ctx->write_tokens)
|
|
2091
2130
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2120,7 +2159,7 @@ _fingerprintRowCompareExpr(FingerprintContext *ctx, const RowCompareExpr *node,
|
|
|
2120
2159
|
|
|
2121
2160
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2122
2161
|
_fingerprintNode(ctx, node->inputcollids, node, "inputcollids", depth + 1);
|
|
2123
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2162
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->inputcollids) == 1 && linitial(node->inputcollids) == NIL)) {
|
|
2124
2163
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2125
2164
|
if (ctx->write_tokens)
|
|
2126
2165
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2136,7 +2175,7 @@ _fingerprintRowCompareExpr(FingerprintContext *ctx, const RowCompareExpr *node,
|
|
|
2136
2175
|
|
|
2137
2176
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2138
2177
|
_fingerprintNode(ctx, node->largs, node, "largs", depth + 1);
|
|
2139
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2178
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->largs) == 1 && linitial(node->largs) == NIL)) {
|
|
2140
2179
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2141
2180
|
if (ctx->write_tokens)
|
|
2142
2181
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2152,7 +2191,7 @@ _fingerprintRowCompareExpr(FingerprintContext *ctx, const RowCompareExpr *node,
|
|
|
2152
2191
|
|
|
2153
2192
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2154
2193
|
_fingerprintNode(ctx, node->opfamilies, node, "opfamilies", depth + 1);
|
|
2155
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2194
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opfamilies) == 1 && linitial(node->opfamilies) == NIL)) {
|
|
2156
2195
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2157
2196
|
if (ctx->write_tokens)
|
|
2158
2197
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2168,7 +2207,7 @@ _fingerprintRowCompareExpr(FingerprintContext *ctx, const RowCompareExpr *node,
|
|
|
2168
2207
|
|
|
2169
2208
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2170
2209
|
_fingerprintNode(ctx, node->opnos, node, "opnos", depth + 1);
|
|
2171
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2210
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opnos) == 1 && linitial(node->opnos) == NIL)) {
|
|
2172
2211
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2173
2212
|
if (ctx->write_tokens)
|
|
2174
2213
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2184,7 +2223,7 @@ _fingerprintRowCompareExpr(FingerprintContext *ctx, const RowCompareExpr *node,
|
|
|
2184
2223
|
|
|
2185
2224
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2186
2225
|
_fingerprintNode(ctx, node->rargs, node, "rargs", depth + 1);
|
|
2187
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2226
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->rargs) == 1 && linitial(node->rargs) == NIL)) {
|
|
2188
2227
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2189
2228
|
if (ctx->write_tokens)
|
|
2190
2229
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2210,7 +2249,7 @@ _fingerprintCoalesceExpr(FingerprintContext *ctx, const CoalesceExpr *node, cons
|
|
|
2210
2249
|
|
|
2211
2250
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2212
2251
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
2213
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2252
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
2214
2253
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2215
2254
|
if (ctx->write_tokens)
|
|
2216
2255
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2247,7 +2286,7 @@ _fingerprintMinMaxExpr(FingerprintContext *ctx, const MinMaxExpr *node, const vo
|
|
|
2247
2286
|
|
|
2248
2287
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2249
2288
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
2250
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2289
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
2251
2290
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2252
2291
|
if (ctx->write_tokens)
|
|
2253
2292
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2322,7 +2361,7 @@ _fingerprintXmlExpr(FingerprintContext *ctx, const XmlExpr *node, const void *pa
|
|
|
2322
2361
|
|
|
2323
2362
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2324
2363
|
_fingerprintNode(ctx, node->arg_names, node, "arg_names", depth + 1);
|
|
2325
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2364
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->arg_names) == 1 && linitial(node->arg_names) == NIL)) {
|
|
2326
2365
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2327
2366
|
if (ctx->write_tokens)
|
|
2328
2367
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2338,7 +2377,7 @@ _fingerprintXmlExpr(FingerprintContext *ctx, const XmlExpr *node, const void *pa
|
|
|
2338
2377
|
|
|
2339
2378
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2340
2379
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
2341
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2380
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
2342
2381
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2343
2382
|
if (ctx->write_tokens)
|
|
2344
2383
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2361,7 +2400,7 @@ _fingerprintXmlExpr(FingerprintContext *ctx, const XmlExpr *node, const void *pa
|
|
|
2361
2400
|
|
|
2362
2401
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2363
2402
|
_fingerprintNode(ctx, node->named_args, node, "named_args", depth + 1);
|
|
2364
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2403
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->named_args) == 1 && linitial(node->named_args) == NIL)) {
|
|
2365
2404
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2366
2405
|
if (ctx->write_tokens)
|
|
2367
2406
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2717,6 +2756,23 @@ _fingerprintJoinExpr(FingerprintContext *ctx, const JoinExpr *node, const void *
|
|
|
2717
2756
|
_fingerprintString(ctx, "true");
|
|
2718
2757
|
}
|
|
2719
2758
|
|
|
2759
|
+
if (node->join_using_alias != NULL) {
|
|
2760
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
2761
|
+
XXH64_hash_t hash;
|
|
2762
|
+
|
|
2763
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
2764
|
+
_fingerprintString(ctx, "join_using_alias");
|
|
2765
|
+
|
|
2766
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2767
|
+
_fingerprintAlias(ctx, node->join_using_alias, node, "join_using_alias", depth + 1);
|
|
2768
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2769
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
2770
|
+
if (ctx->write_tokens)
|
|
2771
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
2772
|
+
}
|
|
2773
|
+
XXH3_freeState(prev);
|
|
2774
|
+
}
|
|
2775
|
+
|
|
2720
2776
|
if (true) {
|
|
2721
2777
|
_fingerprintString(ctx, "jointype");
|
|
2722
2778
|
_fingerprintString(ctx, _enumToStringJoinType(node->jointype));
|
|
@@ -2789,7 +2845,7 @@ _fingerprintJoinExpr(FingerprintContext *ctx, const JoinExpr *node, const void *
|
|
|
2789
2845
|
|
|
2790
2846
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2791
2847
|
_fingerprintNode(ctx, node->usingClause, node, "usingClause", depth + 1);
|
|
2792
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2848
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->usingClause) == 1 && linitial(node->usingClause) == NIL)) {
|
|
2793
2849
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2794
2850
|
if (ctx->write_tokens)
|
|
2795
2851
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2810,7 +2866,7 @@ _fingerprintFromExpr(FingerprintContext *ctx, const FromExpr *node, const void *
|
|
|
2810
2866
|
|
|
2811
2867
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2812
2868
|
_fingerprintNode(ctx, node->fromlist, node, "fromlist", depth + 1);
|
|
2813
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2869
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->fromlist) == 1 && linitial(node->fromlist) == NIL)) {
|
|
2814
2870
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2815
2871
|
if (ctx->write_tokens)
|
|
2816
2872
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2853,7 +2909,7 @@ _fingerprintOnConflictExpr(FingerprintContext *ctx, const OnConflictExpr *node,
|
|
|
2853
2909
|
|
|
2854
2910
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2855
2911
|
_fingerprintNode(ctx, node->arbiterElems, node, "arbiterElems", depth + 1);
|
|
2856
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2912
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->arbiterElems) == 1 && linitial(node->arbiterElems) == NIL)) {
|
|
2857
2913
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2858
2914
|
if (ctx->write_tokens)
|
|
2859
2915
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2900,7 +2956,7 @@ _fingerprintOnConflictExpr(FingerprintContext *ctx, const OnConflictExpr *node,
|
|
|
2900
2956
|
|
|
2901
2957
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2902
2958
|
_fingerprintNode(ctx, node->exclRelTlist, node, "exclRelTlist", depth + 1);
|
|
2903
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2959
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->exclRelTlist) == 1 && linitial(node->exclRelTlist) == NIL)) {
|
|
2904
2960
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2905
2961
|
if (ctx->write_tokens)
|
|
2906
2962
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2916,7 +2972,7 @@ _fingerprintOnConflictExpr(FingerprintContext *ctx, const OnConflictExpr *node,
|
|
|
2916
2972
|
|
|
2917
2973
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2918
2974
|
_fingerprintNode(ctx, node->onConflictSet, node, "onConflictSet", depth + 1);
|
|
2919
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
2975
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->onConflictSet) == 1 && linitial(node->onConflictSet) == NIL)) {
|
|
2920
2976
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2921
2977
|
if (ctx->write_tokens)
|
|
2922
2978
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2959,7 +3015,7 @@ _fingerprintIntoClause(FingerprintContext *ctx, const IntoClause *node, const vo
|
|
|
2959
3015
|
|
|
2960
3016
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2961
3017
|
_fingerprintNode(ctx, node->colNames, node, "colNames", depth + 1);
|
|
2962
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3018
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colNames) == 1 && linitial(node->colNames) == NIL)) {
|
|
2963
3019
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2964
3020
|
if (ctx->write_tokens)
|
|
2965
3021
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -2980,7 +3036,7 @@ _fingerprintIntoClause(FingerprintContext *ctx, const IntoClause *node, const vo
|
|
|
2980
3036
|
|
|
2981
3037
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
2982
3038
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
2983
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3039
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
2984
3040
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
2985
3041
|
if (ctx->write_tokens)
|
|
2986
3042
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3033,6 +3089,75 @@ _fingerprintIntoClause(FingerprintContext *ctx, const IntoClause *node, const vo
|
|
|
3033
3089
|
|
|
3034
3090
|
}
|
|
3035
3091
|
|
|
3092
|
+
static void
|
|
3093
|
+
_fingerprintMergeAction(FingerprintContext *ctx, const MergeAction *node, const void *parent, const char *field_name, unsigned int depth)
|
|
3094
|
+
{
|
|
3095
|
+
if (true) {
|
|
3096
|
+
_fingerprintString(ctx, "commandType");
|
|
3097
|
+
_fingerprintString(ctx, _enumToStringCmdType(node->commandType));
|
|
3098
|
+
}
|
|
3099
|
+
|
|
3100
|
+
if (node->matched) {
|
|
3101
|
+
_fingerprintString(ctx, "matched");
|
|
3102
|
+
_fingerprintString(ctx, "true");
|
|
3103
|
+
}
|
|
3104
|
+
|
|
3105
|
+
if (true) {
|
|
3106
|
+
_fingerprintString(ctx, "override");
|
|
3107
|
+
_fingerprintString(ctx, _enumToStringOverridingKind(node->override));
|
|
3108
|
+
}
|
|
3109
|
+
|
|
3110
|
+
if (node->qual != NULL) {
|
|
3111
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
3112
|
+
XXH64_hash_t hash;
|
|
3113
|
+
|
|
3114
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
3115
|
+
_fingerprintString(ctx, "qual");
|
|
3116
|
+
|
|
3117
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3118
|
+
_fingerprintNode(ctx, node->qual, node, "qual", depth + 1);
|
|
3119
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3120
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
3121
|
+
if (ctx->write_tokens)
|
|
3122
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
3123
|
+
}
|
|
3124
|
+
XXH3_freeState(prev);
|
|
3125
|
+
}
|
|
3126
|
+
|
|
3127
|
+
if (node->targetList != NULL && node->targetList->length > 0) {
|
|
3128
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
3129
|
+
XXH64_hash_t hash;
|
|
3130
|
+
|
|
3131
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
3132
|
+
_fingerprintString(ctx, "targetList");
|
|
3133
|
+
|
|
3134
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3135
|
+
_fingerprintNode(ctx, node->targetList, node, "targetList", depth + 1);
|
|
3136
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->targetList) == 1 && linitial(node->targetList) == NIL)) {
|
|
3137
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
3138
|
+
if (ctx->write_tokens)
|
|
3139
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
3140
|
+
}
|
|
3141
|
+
XXH3_freeState(prev);
|
|
3142
|
+
}
|
|
3143
|
+
if (node->updateColnos != NULL && node->updateColnos->length > 0) {
|
|
3144
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
3145
|
+
XXH64_hash_t hash;
|
|
3146
|
+
|
|
3147
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
3148
|
+
_fingerprintString(ctx, "updateColnos");
|
|
3149
|
+
|
|
3150
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3151
|
+
_fingerprintNode(ctx, node->updateColnos, node, "updateColnos", depth + 1);
|
|
3152
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->updateColnos) == 1 && linitial(node->updateColnos) == NIL)) {
|
|
3153
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
3154
|
+
if (ctx->write_tokens)
|
|
3155
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
3156
|
+
}
|
|
3157
|
+
XXH3_freeState(prev);
|
|
3158
|
+
}
|
|
3159
|
+
}
|
|
3160
|
+
|
|
3036
3161
|
static void
|
|
3037
3162
|
_fingerprintRawStmt(FingerprintContext *ctx, const RawStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
3038
3163
|
{
|
|
@@ -3081,7 +3206,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
|
|
|
3081
3206
|
|
|
3082
3207
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3083
3208
|
_fingerprintNode(ctx, node->constraintDeps, node, "constraintDeps", depth + 1);
|
|
3084
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3209
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->constraintDeps) == 1 && linitial(node->constraintDeps) == NIL)) {
|
|
3085
3210
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3086
3211
|
if (ctx->write_tokens)
|
|
3087
3212
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3097,7 +3222,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
|
|
|
3097
3222
|
|
|
3098
3223
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3099
3224
|
_fingerprintNode(ctx, node->cteList, node, "cteList", depth + 1);
|
|
3100
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3225
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->cteList) == 1 && linitial(node->cteList) == NIL)) {
|
|
3101
3226
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3102
3227
|
if (ctx->write_tokens)
|
|
3103
3228
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3113,7 +3238,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
|
|
|
3113
3238
|
|
|
3114
3239
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3115
3240
|
_fingerprintNode(ctx, node->distinctClause, node, "distinctClause", depth + 1);
|
|
3116
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3241
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->distinctClause) == 1 && linitial(node->distinctClause) == NIL)) {
|
|
3117
3242
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3118
3243
|
if (ctx->write_tokens)
|
|
3119
3244
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3129,13 +3254,18 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
|
|
|
3129
3254
|
|
|
3130
3255
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3131
3256
|
_fingerprintNode(ctx, node->groupClause, node, "groupClause", depth + 1);
|
|
3132
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3257
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->groupClause) == 1 && linitial(node->groupClause) == NIL)) {
|
|
3133
3258
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3134
3259
|
if (ctx->write_tokens)
|
|
3135
3260
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
3136
3261
|
}
|
|
3137
3262
|
XXH3_freeState(prev);
|
|
3138
3263
|
}
|
|
3264
|
+
if (node->groupDistinct) {
|
|
3265
|
+
_fingerprintString(ctx, "groupDistinct");
|
|
3266
|
+
_fingerprintString(ctx, "true");
|
|
3267
|
+
}
|
|
3268
|
+
|
|
3139
3269
|
if (node->groupingSets != NULL && node->groupingSets->length > 0) {
|
|
3140
3270
|
XXH3_state_t* prev = XXH3_createState();
|
|
3141
3271
|
XXH64_hash_t hash;
|
|
@@ -3145,7 +3275,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
|
|
|
3145
3275
|
|
|
3146
3276
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3147
3277
|
_fingerprintNode(ctx, node->groupingSets, node, "groupingSets", depth + 1);
|
|
3148
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3278
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->groupingSets) == 1 && linitial(node->groupingSets) == NIL)) {
|
|
3149
3279
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3150
3280
|
if (ctx->write_tokens)
|
|
3151
3281
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3214,6 +3344,11 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
|
|
|
3214
3344
|
XXH3_freeState(prev);
|
|
3215
3345
|
}
|
|
3216
3346
|
|
|
3347
|
+
if (node->isReturn) {
|
|
3348
|
+
_fingerprintString(ctx, "isReturn");
|
|
3349
|
+
_fingerprintString(ctx, "true");
|
|
3350
|
+
}
|
|
3351
|
+
|
|
3217
3352
|
if (node->jointree != NULL) {
|
|
3218
3353
|
XXH3_state_t* prev = XXH3_createState();
|
|
3219
3354
|
XXH64_hash_t hash;
|
|
@@ -3270,6 +3405,27 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
|
|
|
3270
3405
|
_fingerprintString(ctx, _enumToStringLimitOption(node->limitOption));
|
|
3271
3406
|
}
|
|
3272
3407
|
|
|
3408
|
+
if (node->mergeActionList != NULL && node->mergeActionList->length > 0) {
|
|
3409
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
3410
|
+
XXH64_hash_t hash;
|
|
3411
|
+
|
|
3412
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
3413
|
+
_fingerprintString(ctx, "mergeActionList");
|
|
3414
|
+
|
|
3415
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3416
|
+
_fingerprintNode(ctx, node->mergeActionList, node, "mergeActionList", depth + 1);
|
|
3417
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->mergeActionList) == 1 && linitial(node->mergeActionList) == NIL)) {
|
|
3418
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
3419
|
+
if (ctx->write_tokens)
|
|
3420
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
3421
|
+
}
|
|
3422
|
+
XXH3_freeState(prev);
|
|
3423
|
+
}
|
|
3424
|
+
if (node->mergeUseOuterJoin) {
|
|
3425
|
+
_fingerprintString(ctx, "mergeUseOuterJoin");
|
|
3426
|
+
_fingerprintString(ctx, "true");
|
|
3427
|
+
}
|
|
3428
|
+
|
|
3273
3429
|
if (node->onConflict != NULL) {
|
|
3274
3430
|
XXH3_state_t* prev = XXH3_createState();
|
|
3275
3431
|
XXH64_hash_t hash;
|
|
@@ -3320,7 +3476,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
|
|
|
3320
3476
|
|
|
3321
3477
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3322
3478
|
_fingerprintNode(ctx, node->returningList, node, "returningList", depth + 1);
|
|
3323
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3479
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->returningList) == 1 && linitial(node->returningList) == NIL)) {
|
|
3324
3480
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3325
3481
|
if (ctx->write_tokens)
|
|
3326
3482
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3336,7 +3492,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
|
|
|
3336
3492
|
|
|
3337
3493
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3338
3494
|
_fingerprintNode(ctx, node->rowMarks, node, "rowMarks", depth + 1);
|
|
3339
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3495
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->rowMarks) == 1 && linitial(node->rowMarks) == NIL)) {
|
|
3340
3496
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3341
3497
|
if (ctx->write_tokens)
|
|
3342
3498
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3352,7 +3508,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
|
|
|
3352
3508
|
|
|
3353
3509
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3354
3510
|
_fingerprintNode(ctx, node->rtable, node, "rtable", depth + 1);
|
|
3355
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3511
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->rtable) == 1 && linitial(node->rtable) == NIL)) {
|
|
3356
3512
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3357
3513
|
if (ctx->write_tokens)
|
|
3358
3514
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3385,7 +3541,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
|
|
|
3385
3541
|
|
|
3386
3542
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3387
3543
|
_fingerprintNode(ctx, node->sortClause, node, "sortClause", depth + 1);
|
|
3388
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3544
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->sortClause) == 1 && linitial(node->sortClause) == NIL)) {
|
|
3389
3545
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3390
3546
|
if (ctx->write_tokens)
|
|
3391
3547
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3415,7 +3571,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
|
|
|
3415
3571
|
|
|
3416
3572
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3417
3573
|
_fingerprintNode(ctx, node->targetList, node, "targetList", depth + 1);
|
|
3418
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3574
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->targetList) == 1 && linitial(node->targetList) == NIL)) {
|
|
3419
3575
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3420
3576
|
if (ctx->write_tokens)
|
|
3421
3577
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3448,7 +3604,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
|
|
|
3448
3604
|
|
|
3449
3605
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3450
3606
|
_fingerprintNode(ctx, node->windowClause, node, "windowClause", depth + 1);
|
|
3451
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3607
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->windowClause) == 1 && linitial(node->windowClause) == NIL)) {
|
|
3452
3608
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3453
3609
|
if (ctx->write_tokens)
|
|
3454
3610
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3464,7 +3620,7 @@ _fingerprintQuery(FingerprintContext *ctx, const Query *node, const void *parent
|
|
|
3464
3620
|
|
|
3465
3621
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3466
3622
|
_fingerprintNode(ctx, node->withCheckOptions, node, "withCheckOptions", depth + 1);
|
|
3467
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3623
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->withCheckOptions) == 1 && linitial(node->withCheckOptions) == NIL)) {
|
|
3468
3624
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3469
3625
|
if (ctx->write_tokens)
|
|
3470
3626
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3485,7 +3641,7 @@ _fingerprintInsertStmt(FingerprintContext *ctx, const InsertStmt *node, const vo
|
|
|
3485
3641
|
|
|
3486
3642
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3487
3643
|
_fingerprintNode(ctx, node->cols, node, "cols", depth + 1);
|
|
3488
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3644
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->cols) == 1 && linitial(node->cols) == NIL)) {
|
|
3489
3645
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3490
3646
|
if (ctx->write_tokens)
|
|
3491
3647
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3540,7 +3696,7 @@ _fingerprintInsertStmt(FingerprintContext *ctx, const InsertStmt *node, const vo
|
|
|
3540
3696
|
|
|
3541
3697
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3542
3698
|
_fingerprintNode(ctx, node->returningList, node, "returningList", depth + 1);
|
|
3543
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3699
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->returningList) == 1 && linitial(node->returningList) == NIL)) {
|
|
3544
3700
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3545
3701
|
if (ctx->write_tokens)
|
|
3546
3702
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3612,7 +3768,7 @@ _fingerprintDeleteStmt(FingerprintContext *ctx, const DeleteStmt *node, const vo
|
|
|
3612
3768
|
|
|
3613
3769
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3614
3770
|
_fingerprintNode(ctx, node->returningList, node, "returningList", depth + 1);
|
|
3615
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3771
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->returningList) == 1 && linitial(node->returningList) == NIL)) {
|
|
3616
3772
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3617
3773
|
if (ctx->write_tokens)
|
|
3618
3774
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3628,7 +3784,7 @@ _fingerprintDeleteStmt(FingerprintContext *ctx, const DeleteStmt *node, const vo
|
|
|
3628
3784
|
|
|
3629
3785
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3630
3786
|
_fingerprintNode(ctx, node->usingClause, node, "usingClause", depth + 1);
|
|
3631
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3787
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->usingClause) == 1 && linitial(node->usingClause) == NIL)) {
|
|
3632
3788
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3633
3789
|
if (ctx->write_tokens)
|
|
3634
3790
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3683,7 +3839,7 @@ _fingerprintUpdateStmt(FingerprintContext *ctx, const UpdateStmt *node, const vo
|
|
|
3683
3839
|
|
|
3684
3840
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3685
3841
|
_fingerprintNode(ctx, node->fromClause, node, "fromClause", depth + 1);
|
|
3686
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3842
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->fromClause) == 1 && linitial(node->fromClause) == NIL)) {
|
|
3687
3843
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3688
3844
|
if (ctx->write_tokens)
|
|
3689
3845
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3716,7 +3872,7 @@ _fingerprintUpdateStmt(FingerprintContext *ctx, const UpdateStmt *node, const vo
|
|
|
3716
3872
|
|
|
3717
3873
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3718
3874
|
_fingerprintNode(ctx, node->returningList, node, "returningList", depth + 1);
|
|
3719
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3875
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->returningList) == 1 && linitial(node->returningList) == NIL)) {
|
|
3720
3876
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3721
3877
|
if (ctx->write_tokens)
|
|
3722
3878
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3732,7 +3888,7 @@ _fingerprintUpdateStmt(FingerprintContext *ctx, const UpdateStmt *node, const vo
|
|
|
3732
3888
|
|
|
3733
3889
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3734
3890
|
_fingerprintNode(ctx, node->targetList, node, "targetList", depth + 1);
|
|
3735
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3891
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->targetList) == 1 && linitial(node->targetList) == NIL)) {
|
|
3736
3892
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3737
3893
|
if (ctx->write_tokens)
|
|
3738
3894
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3776,22 +3932,17 @@ _fingerprintUpdateStmt(FingerprintContext *ctx, const UpdateStmt *node, const vo
|
|
|
3776
3932
|
}
|
|
3777
3933
|
|
|
3778
3934
|
static void
|
|
3779
|
-
|
|
3935
|
+
_fingerprintMergeStmt(FingerprintContext *ctx, const MergeStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
3780
3936
|
{
|
|
3781
|
-
if (node->
|
|
3782
|
-
_fingerprintString(ctx, "all");
|
|
3783
|
-
_fingerprintString(ctx, "true");
|
|
3784
|
-
}
|
|
3785
|
-
|
|
3786
|
-
if (node->distinctClause != NULL && node->distinctClause->length > 0) {
|
|
3937
|
+
if (node->joinCondition != NULL) {
|
|
3787
3938
|
XXH3_state_t* prev = XXH3_createState();
|
|
3788
3939
|
XXH64_hash_t hash;
|
|
3789
3940
|
|
|
3790
3941
|
XXH3_copyState(prev, ctx->xxh_state);
|
|
3791
|
-
_fingerprintString(ctx, "
|
|
3942
|
+
_fingerprintString(ctx, "joinCondition");
|
|
3792
3943
|
|
|
3793
3944
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3794
|
-
_fingerprintNode(ctx, node->
|
|
3945
|
+
_fingerprintNode(ctx, node->joinCondition, node, "joinCondition", depth + 1);
|
|
3795
3946
|
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3796
3947
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3797
3948
|
if (ctx->write_tokens)
|
|
@@ -3799,31 +3950,32 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
|
|
|
3799
3950
|
}
|
|
3800
3951
|
XXH3_freeState(prev);
|
|
3801
3952
|
}
|
|
3802
|
-
|
|
3953
|
+
|
|
3954
|
+
if (node->mergeWhenClauses != NULL && node->mergeWhenClauses->length > 0) {
|
|
3803
3955
|
XXH3_state_t* prev = XXH3_createState();
|
|
3804
3956
|
XXH64_hash_t hash;
|
|
3805
3957
|
|
|
3806
3958
|
XXH3_copyState(prev, ctx->xxh_state);
|
|
3807
|
-
_fingerprintString(ctx, "
|
|
3959
|
+
_fingerprintString(ctx, "mergeWhenClauses");
|
|
3808
3960
|
|
|
3809
3961
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3810
|
-
_fingerprintNode(ctx, node->
|
|
3811
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3962
|
+
_fingerprintNode(ctx, node->mergeWhenClauses, node, "mergeWhenClauses", depth + 1);
|
|
3963
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->mergeWhenClauses) == 1 && linitial(node->mergeWhenClauses) == NIL)) {
|
|
3812
3964
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3813
3965
|
if (ctx->write_tokens)
|
|
3814
3966
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
3815
3967
|
}
|
|
3816
3968
|
XXH3_freeState(prev);
|
|
3817
3969
|
}
|
|
3818
|
-
if (node->
|
|
3970
|
+
if (node->relation != NULL) {
|
|
3819
3971
|
XXH3_state_t* prev = XXH3_createState();
|
|
3820
3972
|
XXH64_hash_t hash;
|
|
3821
3973
|
|
|
3822
3974
|
XXH3_copyState(prev, ctx->xxh_state);
|
|
3823
|
-
_fingerprintString(ctx, "
|
|
3975
|
+
_fingerprintString(ctx, "relation");
|
|
3824
3976
|
|
|
3825
3977
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3826
|
-
|
|
3978
|
+
_fingerprintRangeVar(ctx, node->relation, node, "relation", depth + 1);
|
|
3827
3979
|
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3828
3980
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3829
3981
|
if (ctx->write_tokens)
|
|
@@ -3831,15 +3983,16 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
|
|
|
3831
3983
|
}
|
|
3832
3984
|
XXH3_freeState(prev);
|
|
3833
3985
|
}
|
|
3834
|
-
|
|
3986
|
+
|
|
3987
|
+
if (node->sourceRelation != NULL) {
|
|
3835
3988
|
XXH3_state_t* prev = XXH3_createState();
|
|
3836
3989
|
XXH64_hash_t hash;
|
|
3837
3990
|
|
|
3838
3991
|
XXH3_copyState(prev, ctx->xxh_state);
|
|
3839
|
-
_fingerprintString(ctx, "
|
|
3992
|
+
_fingerprintString(ctx, "sourceRelation");
|
|
3840
3993
|
|
|
3841
3994
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3842
|
-
_fingerprintNode(ctx, node->
|
|
3995
|
+
_fingerprintNode(ctx, node->sourceRelation, node, "sourceRelation", depth + 1);
|
|
3843
3996
|
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3844
3997
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3845
3998
|
if (ctx->write_tokens)
|
|
@@ -3848,15 +4001,15 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
|
|
|
3848
4001
|
XXH3_freeState(prev);
|
|
3849
4002
|
}
|
|
3850
4003
|
|
|
3851
|
-
if (node->
|
|
4004
|
+
if (node->withClause != NULL) {
|
|
3852
4005
|
XXH3_state_t* prev = XXH3_createState();
|
|
3853
4006
|
XXH64_hash_t hash;
|
|
3854
4007
|
|
|
3855
4008
|
XXH3_copyState(prev, ctx->xxh_state);
|
|
3856
|
-
_fingerprintString(ctx, "
|
|
4009
|
+
_fingerprintString(ctx, "withClause");
|
|
3857
4010
|
|
|
3858
4011
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3859
|
-
|
|
4012
|
+
_fingerprintWithClause(ctx, node->withClause, node, "withClause", depth + 1);
|
|
3860
4013
|
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3861
4014
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3862
4015
|
if (ctx->write_tokens)
|
|
@@ -3865,50 +4018,147 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
|
|
|
3865
4018
|
XXH3_freeState(prev);
|
|
3866
4019
|
}
|
|
3867
4020
|
|
|
3868
|
-
|
|
4021
|
+
}
|
|
4022
|
+
|
|
4023
|
+
static void
|
|
4024
|
+
_fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
4025
|
+
{
|
|
4026
|
+
if (node->all) {
|
|
4027
|
+
_fingerprintString(ctx, "all");
|
|
4028
|
+
_fingerprintString(ctx, "true");
|
|
4029
|
+
}
|
|
4030
|
+
|
|
4031
|
+
if (node->distinctClause != NULL && node->distinctClause->length > 0) {
|
|
3869
4032
|
XXH3_state_t* prev = XXH3_createState();
|
|
3870
4033
|
XXH64_hash_t hash;
|
|
3871
4034
|
|
|
3872
4035
|
XXH3_copyState(prev, ctx->xxh_state);
|
|
3873
|
-
_fingerprintString(ctx, "
|
|
4036
|
+
_fingerprintString(ctx, "distinctClause");
|
|
3874
4037
|
|
|
3875
4038
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3876
|
-
|
|
3877
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4039
|
+
_fingerprintNode(ctx, node->distinctClause, node, "distinctClause", depth + 1);
|
|
4040
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->distinctClause) == 1 && linitial(node->distinctClause) == NIL)) {
|
|
3878
4041
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3879
4042
|
if (ctx->write_tokens)
|
|
3880
4043
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
3881
4044
|
}
|
|
3882
4045
|
XXH3_freeState(prev);
|
|
3883
4046
|
}
|
|
3884
|
-
|
|
3885
|
-
if (node->limitCount != NULL) {
|
|
4047
|
+
if (node->fromClause != NULL && node->fromClause->length > 0) {
|
|
3886
4048
|
XXH3_state_t* prev = XXH3_createState();
|
|
3887
4049
|
XXH64_hash_t hash;
|
|
3888
4050
|
|
|
3889
4051
|
XXH3_copyState(prev, ctx->xxh_state);
|
|
3890
|
-
_fingerprintString(ctx, "
|
|
4052
|
+
_fingerprintString(ctx, "fromClause");
|
|
3891
4053
|
|
|
3892
4054
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3893
|
-
_fingerprintNode(ctx, node->
|
|
3894
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4055
|
+
_fingerprintNode(ctx, node->fromClause, node, "fromClause", depth + 1);
|
|
4056
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->fromClause) == 1 && linitial(node->fromClause) == NIL)) {
|
|
3895
4057
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3896
4058
|
if (ctx->write_tokens)
|
|
3897
4059
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
3898
4060
|
}
|
|
3899
4061
|
XXH3_freeState(prev);
|
|
3900
4062
|
}
|
|
3901
|
-
|
|
3902
|
-
if (node->limitOffset != NULL) {
|
|
4063
|
+
if (node->groupClause != NULL && node->groupClause->length > 0) {
|
|
3903
4064
|
XXH3_state_t* prev = XXH3_createState();
|
|
3904
4065
|
XXH64_hash_t hash;
|
|
3905
4066
|
|
|
3906
4067
|
XXH3_copyState(prev, ctx->xxh_state);
|
|
3907
|
-
_fingerprintString(ctx, "
|
|
4068
|
+
_fingerprintString(ctx, "groupClause");
|
|
3908
4069
|
|
|
3909
4070
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3910
|
-
_fingerprintNode(ctx, node->
|
|
3911
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4071
|
+
_fingerprintNode(ctx, node->groupClause, node, "groupClause", depth + 1);
|
|
4072
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->groupClause) == 1 && linitial(node->groupClause) == NIL)) {
|
|
4073
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
4074
|
+
if (ctx->write_tokens)
|
|
4075
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
4076
|
+
}
|
|
4077
|
+
XXH3_freeState(prev);
|
|
4078
|
+
}
|
|
4079
|
+
if (node->groupDistinct) {
|
|
4080
|
+
_fingerprintString(ctx, "groupDistinct");
|
|
4081
|
+
_fingerprintString(ctx, "true");
|
|
4082
|
+
}
|
|
4083
|
+
|
|
4084
|
+
if (node->havingClause != NULL) {
|
|
4085
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
4086
|
+
XXH64_hash_t hash;
|
|
4087
|
+
|
|
4088
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
4089
|
+
_fingerprintString(ctx, "havingClause");
|
|
4090
|
+
|
|
4091
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4092
|
+
_fingerprintNode(ctx, node->havingClause, node, "havingClause", depth + 1);
|
|
4093
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4094
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
4095
|
+
if (ctx->write_tokens)
|
|
4096
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
4097
|
+
}
|
|
4098
|
+
XXH3_freeState(prev);
|
|
4099
|
+
}
|
|
4100
|
+
|
|
4101
|
+
if (node->intoClause != NULL) {
|
|
4102
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
4103
|
+
XXH64_hash_t hash;
|
|
4104
|
+
|
|
4105
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
4106
|
+
_fingerprintString(ctx, "intoClause");
|
|
4107
|
+
|
|
4108
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4109
|
+
_fingerprintIntoClause(ctx, node->intoClause, node, "intoClause", depth + 1);
|
|
4110
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4111
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
4112
|
+
if (ctx->write_tokens)
|
|
4113
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
4114
|
+
}
|
|
4115
|
+
XXH3_freeState(prev);
|
|
4116
|
+
}
|
|
4117
|
+
|
|
4118
|
+
if (node->larg != NULL) {
|
|
4119
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
4120
|
+
XXH64_hash_t hash;
|
|
4121
|
+
|
|
4122
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
4123
|
+
_fingerprintString(ctx, "larg");
|
|
4124
|
+
|
|
4125
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4126
|
+
_fingerprintSelectStmt(ctx, node->larg, node, "larg", depth + 1);
|
|
4127
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4128
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
4129
|
+
if (ctx->write_tokens)
|
|
4130
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
4131
|
+
}
|
|
4132
|
+
XXH3_freeState(prev);
|
|
4133
|
+
}
|
|
4134
|
+
|
|
4135
|
+
if (node->limitCount != NULL) {
|
|
4136
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
4137
|
+
XXH64_hash_t hash;
|
|
4138
|
+
|
|
4139
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
4140
|
+
_fingerprintString(ctx, "limitCount");
|
|
4141
|
+
|
|
4142
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4143
|
+
_fingerprintNode(ctx, node->limitCount, node, "limitCount", depth + 1);
|
|
4144
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4145
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
4146
|
+
if (ctx->write_tokens)
|
|
4147
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
4148
|
+
}
|
|
4149
|
+
XXH3_freeState(prev);
|
|
4150
|
+
}
|
|
4151
|
+
|
|
4152
|
+
if (node->limitOffset != NULL) {
|
|
4153
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
4154
|
+
XXH64_hash_t hash;
|
|
4155
|
+
|
|
4156
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
4157
|
+
_fingerprintString(ctx, "limitOffset");
|
|
4158
|
+
|
|
4159
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4160
|
+
_fingerprintNode(ctx, node->limitOffset, node, "limitOffset", depth + 1);
|
|
4161
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
3912
4162
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3913
4163
|
if (ctx->write_tokens)
|
|
3914
4164
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3930,7 +4180,7 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
|
|
|
3930
4180
|
|
|
3931
4181
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3932
4182
|
_fingerprintNode(ctx, node->lockingClause, node, "lockingClause", depth + 1);
|
|
3933
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4183
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->lockingClause) == 1 && linitial(node->lockingClause) == NIL)) {
|
|
3934
4184
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3935
4185
|
if (ctx->write_tokens)
|
|
3936
4186
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3968,7 +4218,7 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
|
|
|
3968
4218
|
|
|
3969
4219
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3970
4220
|
_fingerprintNode(ctx, node->sortClause, node, "sortClause", depth + 1);
|
|
3971
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4221
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->sortClause) == 1 && linitial(node->sortClause) == NIL)) {
|
|
3972
4222
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3973
4223
|
if (ctx->write_tokens)
|
|
3974
4224
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -3984,7 +4234,7 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
|
|
|
3984
4234
|
|
|
3985
4235
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
3986
4236
|
_fingerprintNode(ctx, node->targetList, node, "targetList", depth + 1);
|
|
3987
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4237
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->targetList) == 1 && linitial(node->targetList) == NIL)) {
|
|
3988
4238
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
3989
4239
|
if (ctx->write_tokens)
|
|
3990
4240
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4000,7 +4250,7 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
|
|
|
4000
4250
|
|
|
4001
4251
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4002
4252
|
_fingerprintNode(ctx, node->valuesLists, node, "valuesLists", depth + 1);
|
|
4003
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4253
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->valuesLists) == 1 && linitial(node->valuesLists) == NIL)) {
|
|
4004
4254
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4005
4255
|
if (ctx->write_tokens)
|
|
4006
4256
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4033,7 +4283,7 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
|
|
|
4033
4283
|
|
|
4034
4284
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4035
4285
|
_fingerprintNode(ctx, node->windowClause, node, "windowClause", depth + 1);
|
|
4036
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4286
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->windowClause) == 1 && linitial(node->windowClause) == NIL)) {
|
|
4037
4287
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4038
4288
|
if (ctx->write_tokens)
|
|
4039
4289
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4059,6 +4309,80 @@ _fingerprintSelectStmt(FingerprintContext *ctx, const SelectStmt *node, const vo
|
|
|
4059
4309
|
|
|
4060
4310
|
}
|
|
4061
4311
|
|
|
4312
|
+
static void
|
|
4313
|
+
_fingerprintReturnStmt(FingerprintContext *ctx, const ReturnStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
4314
|
+
{
|
|
4315
|
+
if (node->returnval != NULL) {
|
|
4316
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
4317
|
+
XXH64_hash_t hash;
|
|
4318
|
+
|
|
4319
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
4320
|
+
_fingerprintString(ctx, "returnval");
|
|
4321
|
+
|
|
4322
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4323
|
+
_fingerprintNode(ctx, node->returnval, node, "returnval", depth + 1);
|
|
4324
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4325
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
4326
|
+
if (ctx->write_tokens)
|
|
4327
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
4328
|
+
}
|
|
4329
|
+
XXH3_freeState(prev);
|
|
4330
|
+
}
|
|
4331
|
+
|
|
4332
|
+
}
|
|
4333
|
+
|
|
4334
|
+
static void
|
|
4335
|
+
_fingerprintPLAssignStmt(FingerprintContext *ctx, const PLAssignStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
4336
|
+
{
|
|
4337
|
+
if (node->indirection != NULL && node->indirection->length > 0) {
|
|
4338
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
4339
|
+
XXH64_hash_t hash;
|
|
4340
|
+
|
|
4341
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
4342
|
+
_fingerprintString(ctx, "indirection");
|
|
4343
|
+
|
|
4344
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4345
|
+
_fingerprintNode(ctx, node->indirection, node, "indirection", depth + 1);
|
|
4346
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->indirection) == 1 && linitial(node->indirection) == NIL)) {
|
|
4347
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
4348
|
+
if (ctx->write_tokens)
|
|
4349
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
4350
|
+
}
|
|
4351
|
+
XXH3_freeState(prev);
|
|
4352
|
+
}
|
|
4353
|
+
// Intentionally ignoring node->location for fingerprinting
|
|
4354
|
+
|
|
4355
|
+
if (node->name != NULL) {
|
|
4356
|
+
_fingerprintString(ctx, "name");
|
|
4357
|
+
_fingerprintString(ctx, node->name);
|
|
4358
|
+
}
|
|
4359
|
+
|
|
4360
|
+
if (node->nnames != 0) {
|
|
4361
|
+
char buffer[50];
|
|
4362
|
+
sprintf(buffer, "%d", node->nnames);
|
|
4363
|
+
_fingerprintString(ctx, "nnames");
|
|
4364
|
+
_fingerprintString(ctx, buffer);
|
|
4365
|
+
}
|
|
4366
|
+
|
|
4367
|
+
if (node->val != NULL) {
|
|
4368
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
4369
|
+
XXH64_hash_t hash;
|
|
4370
|
+
|
|
4371
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
4372
|
+
_fingerprintString(ctx, "val");
|
|
4373
|
+
|
|
4374
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4375
|
+
_fingerprintSelectStmt(ctx, node->val, node, "val", depth + 1);
|
|
4376
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4377
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
4378
|
+
if (ctx->write_tokens)
|
|
4379
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
4380
|
+
}
|
|
4381
|
+
XXH3_freeState(prev);
|
|
4382
|
+
}
|
|
4383
|
+
|
|
4384
|
+
}
|
|
4385
|
+
|
|
4062
4386
|
static void
|
|
4063
4387
|
_fingerprintAlterTableStmt(FingerprintContext *ctx, const AlterTableStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
4064
4388
|
{
|
|
@@ -4071,7 +4395,7 @@ _fingerprintAlterTableStmt(FingerprintContext *ctx, const AlterTableStmt *node,
|
|
|
4071
4395
|
|
|
4072
4396
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4073
4397
|
_fingerprintNode(ctx, node->cmds, node, "cmds", depth + 1);
|
|
4074
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4398
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->cmds) == 1 && linitial(node->cmds) == NIL)) {
|
|
4075
4399
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4076
4400
|
if (ctx->write_tokens)
|
|
4077
4401
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4083,6 +4407,11 @@ _fingerprintAlterTableStmt(FingerprintContext *ctx, const AlterTableStmt *node,
|
|
|
4083
4407
|
_fingerprintString(ctx, "true");
|
|
4084
4408
|
}
|
|
4085
4409
|
|
|
4410
|
+
if (true) {
|
|
4411
|
+
_fingerprintString(ctx, "objtype");
|
|
4412
|
+
_fingerprintString(ctx, _enumToStringObjectType(node->objtype));
|
|
4413
|
+
}
|
|
4414
|
+
|
|
4086
4415
|
if (node->relation != NULL) {
|
|
4087
4416
|
XXH3_state_t* prev = XXH3_createState();
|
|
4088
4417
|
XXH64_hash_t hash;
|
|
@@ -4100,11 +4429,6 @@ _fingerprintAlterTableStmt(FingerprintContext *ctx, const AlterTableStmt *node,
|
|
|
4100
4429
|
XXH3_freeState(prev);
|
|
4101
4430
|
}
|
|
4102
4431
|
|
|
4103
|
-
if (true) {
|
|
4104
|
-
_fingerprintString(ctx, "relkind");
|
|
4105
|
-
_fingerprintString(ctx, _enumToStringObjectType(node->relkind));
|
|
4106
|
-
}
|
|
4107
|
-
|
|
4108
4432
|
}
|
|
4109
4433
|
|
|
4110
4434
|
static void
|
|
@@ -4166,6 +4490,11 @@ _fingerprintAlterTableCmd(FingerprintContext *ctx, const AlterTableCmd *node, co
|
|
|
4166
4490
|
_fingerprintString(ctx, buffer);
|
|
4167
4491
|
}
|
|
4168
4492
|
|
|
4493
|
+
if (node->recurse) {
|
|
4494
|
+
_fingerprintString(ctx, "recurse");
|
|
4495
|
+
_fingerprintString(ctx, "true");
|
|
4496
|
+
}
|
|
4497
|
+
|
|
4169
4498
|
if (true) {
|
|
4170
4499
|
_fingerprintString(ctx, "subtype");
|
|
4171
4500
|
_fingerprintString(ctx, _enumToStringAlterTableType(node->subtype));
|
|
@@ -4223,7 +4552,7 @@ _fingerprintAlterDomainStmt(FingerprintContext *ctx, const AlterDomainStmt *node
|
|
|
4223
4552
|
|
|
4224
4553
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4225
4554
|
_fingerprintNode(ctx, node->typeName, node, "typeName", depth + 1);
|
|
4226
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4555
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->typeName) == 1 && linitial(node->typeName) == NIL)) {
|
|
4227
4556
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4228
4557
|
if (ctx->write_tokens)
|
|
4229
4558
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4249,7 +4578,7 @@ _fingerprintSetOperationStmt(FingerprintContext *ctx, const SetOperationStmt *no
|
|
|
4249
4578
|
|
|
4250
4579
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4251
4580
|
_fingerprintNode(ctx, node->colCollations, node, "colCollations", depth + 1);
|
|
4252
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4581
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colCollations) == 1 && linitial(node->colCollations) == NIL)) {
|
|
4253
4582
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4254
4583
|
if (ctx->write_tokens)
|
|
4255
4584
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4265,7 +4594,7 @@ _fingerprintSetOperationStmt(FingerprintContext *ctx, const SetOperationStmt *no
|
|
|
4265
4594
|
|
|
4266
4595
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4267
4596
|
_fingerprintNode(ctx, node->colTypes, node, "colTypes", depth + 1);
|
|
4268
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4597
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colTypes) == 1 && linitial(node->colTypes) == NIL)) {
|
|
4269
4598
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4270
4599
|
if (ctx->write_tokens)
|
|
4271
4600
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4281,7 +4610,7 @@ _fingerprintSetOperationStmt(FingerprintContext *ctx, const SetOperationStmt *no
|
|
|
4281
4610
|
|
|
4282
4611
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4283
4612
|
_fingerprintNode(ctx, node->colTypmods, node, "colTypmods", depth + 1);
|
|
4284
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4613
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colTypmods) == 1 && linitial(node->colTypmods) == NIL)) {
|
|
4285
4614
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4286
4615
|
if (ctx->write_tokens)
|
|
4287
4616
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4297,7 +4626,7 @@ _fingerprintSetOperationStmt(FingerprintContext *ctx, const SetOperationStmt *no
|
|
|
4297
4626
|
|
|
4298
4627
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4299
4628
|
_fingerprintNode(ctx, node->groupClauses, node, "groupClauses", depth + 1);
|
|
4300
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4629
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->groupClauses) == 1 && linitial(node->groupClauses) == NIL)) {
|
|
4301
4630
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4302
4631
|
if (ctx->write_tokens)
|
|
4303
4632
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4367,6 +4696,22 @@ _fingerprintGrantStmt(FingerprintContext *ctx, const GrantStmt *node, const void
|
|
|
4367
4696
|
|
|
4368
4697
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4369
4698
|
_fingerprintNode(ctx, node->grantees, node, "grantees", depth + 1);
|
|
4699
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->grantees) == 1 && linitial(node->grantees) == NIL)) {
|
|
4700
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
4701
|
+
if (ctx->write_tokens)
|
|
4702
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
4703
|
+
}
|
|
4704
|
+
XXH3_freeState(prev);
|
|
4705
|
+
}
|
|
4706
|
+
if (node->grantor != NULL) {
|
|
4707
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
4708
|
+
XXH64_hash_t hash;
|
|
4709
|
+
|
|
4710
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
4711
|
+
_fingerprintString(ctx, "grantor");
|
|
4712
|
+
|
|
4713
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4714
|
+
_fingerprintRoleSpec(ctx, node->grantor, node, "grantor", depth + 1);
|
|
4370
4715
|
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4371
4716
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4372
4717
|
if (ctx->write_tokens)
|
|
@@ -4374,6 +4719,7 @@ _fingerprintGrantStmt(FingerprintContext *ctx, const GrantStmt *node, const void
|
|
|
4374
4719
|
}
|
|
4375
4720
|
XXH3_freeState(prev);
|
|
4376
4721
|
}
|
|
4722
|
+
|
|
4377
4723
|
if (node->is_grant) {
|
|
4378
4724
|
_fingerprintString(ctx, "is_grant");
|
|
4379
4725
|
_fingerprintString(ctx, "true");
|
|
@@ -4388,7 +4734,7 @@ _fingerprintGrantStmt(FingerprintContext *ctx, const GrantStmt *node, const void
|
|
|
4388
4734
|
|
|
4389
4735
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4390
4736
|
_fingerprintNode(ctx, node->objects, node, "objects", depth + 1);
|
|
4391
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4737
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->objects) == 1 && linitial(node->objects) == NIL)) {
|
|
4392
4738
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4393
4739
|
if (ctx->write_tokens)
|
|
4394
4740
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4409,7 +4755,7 @@ _fingerprintGrantStmt(FingerprintContext *ctx, const GrantStmt *node, const void
|
|
|
4409
4755
|
|
|
4410
4756
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4411
4757
|
_fingerprintNode(ctx, node->privileges, node, "privileges", depth + 1);
|
|
4412
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4758
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->privileges) == 1 && linitial(node->privileges) == NIL)) {
|
|
4413
4759
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4414
4760
|
if (ctx->write_tokens)
|
|
4415
4761
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4445,7 +4791,7 @@ _fingerprintGrantRoleStmt(FingerprintContext *ctx, const GrantRoleStmt *node, co
|
|
|
4445
4791
|
|
|
4446
4792
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4447
4793
|
_fingerprintNode(ctx, node->granted_roles, node, "granted_roles", depth + 1);
|
|
4448
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4794
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->granted_roles) == 1 && linitial(node->granted_roles) == NIL)) {
|
|
4449
4795
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4450
4796
|
if (ctx->write_tokens)
|
|
4451
4797
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4461,7 +4807,7 @@ _fingerprintGrantRoleStmt(FingerprintContext *ctx, const GrantRoleStmt *node, co
|
|
|
4461
4807
|
|
|
4462
4808
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4463
4809
|
_fingerprintNode(ctx, node->grantee_roles, node, "grantee_roles", depth + 1);
|
|
4464
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4810
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->grantee_roles) == 1 && linitial(node->grantee_roles) == NIL)) {
|
|
4465
4811
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4466
4812
|
if (ctx->write_tokens)
|
|
4467
4813
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4521,7 +4867,7 @@ _fingerprintAlterDefaultPrivilegesStmt(FingerprintContext *ctx, const AlterDefau
|
|
|
4521
4867
|
|
|
4522
4868
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4523
4869
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
4524
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4870
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
4525
4871
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4526
4872
|
if (ctx->write_tokens)
|
|
4527
4873
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4545,13 +4891,22 @@ _fingerprintClusterStmt(FingerprintContext *ctx, const ClusterStmt *node, const
|
|
|
4545
4891
|
_fingerprintString(ctx, node->indexname);
|
|
4546
4892
|
}
|
|
4547
4893
|
|
|
4548
|
-
if (node->
|
|
4549
|
-
|
|
4550
|
-
|
|
4551
|
-
|
|
4552
|
-
|
|
4553
|
-
|
|
4894
|
+
if (node->params != NULL && node->params->length > 0) {
|
|
4895
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
4896
|
+
XXH64_hash_t hash;
|
|
4897
|
+
|
|
4898
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
4899
|
+
_fingerprintString(ctx, "params");
|
|
4554
4900
|
|
|
4901
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4902
|
+
_fingerprintNode(ctx, node->params, node, "params", depth + 1);
|
|
4903
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->params) == 1 && linitial(node->params) == NIL)) {
|
|
4904
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
4905
|
+
if (ctx->write_tokens)
|
|
4906
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
4907
|
+
}
|
|
4908
|
+
XXH3_freeState(prev);
|
|
4909
|
+
}
|
|
4555
4910
|
if (node->relation != NULL) {
|
|
4556
4911
|
XXH3_state_t* prev = XXH3_createState();
|
|
4557
4912
|
XXH64_hash_t hash;
|
|
@@ -4583,7 +4938,7 @@ _fingerprintCopyStmt(FingerprintContext *ctx, const CopyStmt *node, const void *
|
|
|
4583
4938
|
|
|
4584
4939
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4585
4940
|
_fingerprintNode(ctx, node->attlist, node, "attlist", depth + 1);
|
|
4586
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4941
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->attlist) == 1 && linitial(node->attlist) == NIL)) {
|
|
4587
4942
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4588
4943
|
if (ctx->write_tokens)
|
|
4589
4944
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4614,7 +4969,7 @@ _fingerprintCopyStmt(FingerprintContext *ctx, const CopyStmt *node, const void *
|
|
|
4614
4969
|
|
|
4615
4970
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4616
4971
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
4617
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
4972
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
4618
4973
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4619
4974
|
if (ctx->write_tokens)
|
|
4620
4975
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4691,7 +5046,7 @@ _fingerprintCreateStmt(FingerprintContext *ctx, const CreateStmt *node, const vo
|
|
|
4691
5046
|
|
|
4692
5047
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4693
5048
|
_fingerprintNode(ctx, node->constraints, node, "constraints", depth + 1);
|
|
4694
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5049
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->constraints) == 1 && linitial(node->constraints) == NIL)) {
|
|
4695
5050
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4696
5051
|
if (ctx->write_tokens)
|
|
4697
5052
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4712,7 +5067,7 @@ _fingerprintCreateStmt(FingerprintContext *ctx, const CreateStmt *node, const vo
|
|
|
4712
5067
|
|
|
4713
5068
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4714
5069
|
_fingerprintNode(ctx, node->inhRelations, node, "inhRelations", depth + 1);
|
|
4715
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5070
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->inhRelations) == 1 && linitial(node->inhRelations) == NIL)) {
|
|
4716
5071
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4717
5072
|
if (ctx->write_tokens)
|
|
4718
5073
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4750,7 +5105,7 @@ _fingerprintCreateStmt(FingerprintContext *ctx, const CreateStmt *node, const vo
|
|
|
4750
5105
|
|
|
4751
5106
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4752
5107
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
4753
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5108
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
4754
5109
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4755
5110
|
if (ctx->write_tokens)
|
|
4756
5111
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4817,7 +5172,7 @@ _fingerprintCreateStmt(FingerprintContext *ctx, const CreateStmt *node, const vo
|
|
|
4817
5172
|
|
|
4818
5173
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4819
5174
|
_fingerprintNode(ctx, node->tableElts, node, "tableElts", depth + 1);
|
|
4820
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5175
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->tableElts) == 1 && linitial(node->tableElts) == NIL)) {
|
|
4821
5176
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4822
5177
|
if (ctx->write_tokens)
|
|
4823
5178
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4843,7 +5198,7 @@ _fingerprintDefineStmt(FingerprintContext *ctx, const DefineStmt *node, const vo
|
|
|
4843
5198
|
|
|
4844
5199
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4845
5200
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
4846
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5201
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
4847
5202
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4848
5203
|
if (ctx->write_tokens)
|
|
4849
5204
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4859,7 +5214,7 @@ _fingerprintDefineStmt(FingerprintContext *ctx, const DefineStmt *node, const vo
|
|
|
4859
5214
|
|
|
4860
5215
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4861
5216
|
_fingerprintNode(ctx, node->definition, node, "definition", depth + 1);
|
|
4862
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5217
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->definition) == 1 && linitial(node->definition) == NIL)) {
|
|
4863
5218
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4864
5219
|
if (ctx->write_tokens)
|
|
4865
5220
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4875,7 +5230,7 @@ _fingerprintDefineStmt(FingerprintContext *ctx, const DefineStmt *node, const vo
|
|
|
4875
5230
|
|
|
4876
5231
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4877
5232
|
_fingerprintNode(ctx, node->defnames, node, "defnames", depth + 1);
|
|
4878
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5233
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->defnames) == 1 && linitial(node->defnames) == NIL)) {
|
|
4879
5234
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4880
5235
|
if (ctx->write_tokens)
|
|
4881
5236
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4931,7 +5286,7 @@ _fingerprintDropStmt(FingerprintContext *ctx, const DropStmt *node, const void *
|
|
|
4931
5286
|
|
|
4932
5287
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4933
5288
|
_fingerprintNode(ctx, node->objects, node, "objects", depth + 1);
|
|
4934
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5289
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->objects) == 1 && linitial(node->objects) == NIL)) {
|
|
4935
5290
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4936
5291
|
if (ctx->write_tokens)
|
|
4937
5292
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -4962,7 +5317,7 @@ _fingerprintTruncateStmt(FingerprintContext *ctx, const TruncateStmt *node, cons
|
|
|
4962
5317
|
|
|
4963
5318
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
4964
5319
|
_fingerprintNode(ctx, node->relations, node, "relations", depth + 1);
|
|
4965
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5320
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->relations) == 1 && linitial(node->relations) == NIL)) {
|
|
4966
5321
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
4967
5322
|
if (ctx->write_tokens)
|
|
4968
5323
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5059,7 +5414,7 @@ _fingerprintIndexStmt(FingerprintContext *ctx, const IndexStmt *node, const void
|
|
|
5059
5414
|
|
|
5060
5415
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5061
5416
|
_fingerprintNode(ctx, node->excludeOpNames, node, "excludeOpNames", depth + 1);
|
|
5062
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5417
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->excludeOpNames) == 1 && linitial(node->excludeOpNames) == NIL)) {
|
|
5063
5418
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5064
5419
|
if (ctx->write_tokens)
|
|
5065
5420
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5090,7 +5445,7 @@ _fingerprintIndexStmt(FingerprintContext *ctx, const IndexStmt *node, const void
|
|
|
5090
5445
|
|
|
5091
5446
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5092
5447
|
_fingerprintNode(ctx, node->indexIncludingParams, node, "indexIncludingParams", depth + 1);
|
|
5093
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5448
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->indexIncludingParams) == 1 && linitial(node->indexIncludingParams) == NIL)) {
|
|
5094
5449
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5095
5450
|
if (ctx->write_tokens)
|
|
5096
5451
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5113,7 +5468,7 @@ _fingerprintIndexStmt(FingerprintContext *ctx, const IndexStmt *node, const void
|
|
|
5113
5468
|
|
|
5114
5469
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5115
5470
|
_fingerprintNode(ctx, node->indexParams, node, "indexParams", depth + 1);
|
|
5116
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5471
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->indexParams) == 1 && linitial(node->indexParams) == NIL)) {
|
|
5117
5472
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5118
5473
|
if (ctx->write_tokens)
|
|
5119
5474
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5130,6 +5485,11 @@ _fingerprintIndexStmt(FingerprintContext *ctx, const IndexStmt *node, const void
|
|
|
5130
5485
|
_fingerprintString(ctx, "true");
|
|
5131
5486
|
}
|
|
5132
5487
|
|
|
5488
|
+
if (node->nulls_not_distinct) {
|
|
5489
|
+
_fingerprintString(ctx, "nulls_not_distinct");
|
|
5490
|
+
_fingerprintString(ctx, "true");
|
|
5491
|
+
}
|
|
5492
|
+
|
|
5133
5493
|
if (node->oldCreateSubid != 0) {
|
|
5134
5494
|
char buffer[50];
|
|
5135
5495
|
sprintf(buffer, "%d", node->oldCreateSubid);
|
|
@@ -5160,7 +5520,7 @@ _fingerprintIndexStmt(FingerprintContext *ctx, const IndexStmt *node, const void
|
|
|
5160
5520
|
|
|
5161
5521
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5162
5522
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
5163
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5523
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
5164
5524
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5165
5525
|
if (ctx->write_tokens)
|
|
5166
5526
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5240,7 +5600,7 @@ _fingerprintCreateFunctionStmt(FingerprintContext *ctx, const CreateFunctionStmt
|
|
|
5240
5600
|
|
|
5241
5601
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5242
5602
|
_fingerprintNode(ctx, node->funcname, node, "funcname", depth + 1);
|
|
5243
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5603
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funcname) == 1 && linitial(node->funcname) == NIL)) {
|
|
5244
5604
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5245
5605
|
if (ctx->write_tokens)
|
|
5246
5606
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5252,22 +5612,8 @@ _fingerprintCreateFunctionStmt(FingerprintContext *ctx, const CreateFunctionStmt
|
|
|
5252
5612
|
_fingerprintString(ctx, "true");
|
|
5253
5613
|
}
|
|
5254
5614
|
|
|
5255
|
-
|
|
5256
|
-
XXH3_state_t* prev = XXH3_createState();
|
|
5257
|
-
XXH64_hash_t hash;
|
|
5258
|
-
|
|
5259
|
-
XXH3_copyState(prev, ctx->xxh_state);
|
|
5260
|
-
_fingerprintString(ctx, "options");
|
|
5615
|
+
// Intentionally ignoring node->options for fingerprinting
|
|
5261
5616
|
|
|
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
5617
|
if (node->parameters != NULL && node->parameters->length > 0) {
|
|
5272
5618
|
XXH3_state_t* prev = XXH3_createState();
|
|
5273
5619
|
XXH64_hash_t hash;
|
|
@@ -5277,7 +5623,7 @@ _fingerprintCreateFunctionStmt(FingerprintContext *ctx, const CreateFunctionStmt
|
|
|
5277
5623
|
|
|
5278
5624
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5279
5625
|
_fingerprintNode(ctx, node->parameters, node, "parameters", depth + 1);
|
|
5280
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5626
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->parameters) == 1 && linitial(node->parameters) == NIL)) {
|
|
5281
5627
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5282
5628
|
if (ctx->write_tokens)
|
|
5283
5629
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5306,20 +5652,15 @@ _fingerprintCreateFunctionStmt(FingerprintContext *ctx, const CreateFunctionStmt
|
|
|
5306
5652
|
XXH3_freeState(prev);
|
|
5307
5653
|
}
|
|
5308
5654
|
|
|
5309
|
-
|
|
5310
|
-
|
|
5311
|
-
static void
|
|
5312
|
-
_fingerprintAlterFunctionStmt(FingerprintContext *ctx, const AlterFunctionStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
5313
|
-
{
|
|
5314
|
-
if (node->actions != NULL && node->actions->length > 0) {
|
|
5655
|
+
if (node->sql_body != NULL) {
|
|
5315
5656
|
XXH3_state_t* prev = XXH3_createState();
|
|
5316
5657
|
XXH64_hash_t hash;
|
|
5317
5658
|
|
|
5318
5659
|
XXH3_copyState(prev, ctx->xxh_state);
|
|
5319
|
-
_fingerprintString(ctx, "
|
|
5660
|
+
_fingerprintString(ctx, "sql_body");
|
|
5320
5661
|
|
|
5321
5662
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5322
|
-
_fingerprintNode(ctx, node->
|
|
5663
|
+
_fingerprintNode(ctx, node->sql_body, node, "sql_body", depth + 1);
|
|
5323
5664
|
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5324
5665
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5325
5666
|
if (ctx->write_tokens)
|
|
@@ -5327,6 +5668,28 @@ _fingerprintAlterFunctionStmt(FingerprintContext *ctx, const AlterFunctionStmt *
|
|
|
5327
5668
|
}
|
|
5328
5669
|
XXH3_freeState(prev);
|
|
5329
5670
|
}
|
|
5671
|
+
|
|
5672
|
+
}
|
|
5673
|
+
|
|
5674
|
+
static void
|
|
5675
|
+
_fingerprintAlterFunctionStmt(FingerprintContext *ctx, const AlterFunctionStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
5676
|
+
{
|
|
5677
|
+
if (node->actions != NULL && node->actions->length > 0) {
|
|
5678
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
5679
|
+
XXH64_hash_t hash;
|
|
5680
|
+
|
|
5681
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
5682
|
+
_fingerprintString(ctx, "actions");
|
|
5683
|
+
|
|
5684
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5685
|
+
_fingerprintNode(ctx, node->actions, node, "actions", depth + 1);
|
|
5686
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->actions) == 1 && linitial(node->actions) == NIL)) {
|
|
5687
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
5688
|
+
if (ctx->write_tokens)
|
|
5689
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
5690
|
+
}
|
|
5691
|
+
XXH3_freeState(prev);
|
|
5692
|
+
}
|
|
5330
5693
|
if (node->func != NULL) {
|
|
5331
5694
|
XXH3_state_t* prev = XXH3_createState();
|
|
5332
5695
|
XXH64_hash_t hash;
|
|
@@ -5354,22 +5717,8 @@ _fingerprintAlterFunctionStmt(FingerprintContext *ctx, const AlterFunctionStmt *
|
|
|
5354
5717
|
static void
|
|
5355
5718
|
_fingerprintDoStmt(FingerprintContext *ctx, const DoStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
5356
5719
|
{
|
|
5357
|
-
|
|
5358
|
-
XXH3_state_t* prev = XXH3_createState();
|
|
5359
|
-
XXH64_hash_t hash;
|
|
5360
|
-
|
|
5361
|
-
XXH3_copyState(prev, ctx->xxh_state);
|
|
5362
|
-
_fingerprintString(ctx, "args");
|
|
5720
|
+
// Intentionally ignoring node->args for fingerprinting
|
|
5363
5721
|
|
|
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
5722
|
}
|
|
5374
5723
|
|
|
5375
5724
|
static void
|
|
@@ -5453,7 +5802,7 @@ _fingerprintRuleStmt(FingerprintContext *ctx, const RuleStmt *node, const void *
|
|
|
5453
5802
|
|
|
5454
5803
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5455
5804
|
_fingerprintNode(ctx, node->actions, node, "actions", depth + 1);
|
|
5456
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5805
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->actions) == 1 && linitial(node->actions) == NIL)) {
|
|
5457
5806
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5458
5807
|
if (ctx->write_tokens)
|
|
5459
5808
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5519,10 +5868,7 @@ _fingerprintRuleStmt(FingerprintContext *ctx, const RuleStmt *node, const void *
|
|
|
5519
5868
|
static void
|
|
5520
5869
|
_fingerprintNotifyStmt(FingerprintContext *ctx, const NotifyStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
5521
5870
|
{
|
|
5522
|
-
|
|
5523
|
-
_fingerprintString(ctx, "conditionname");
|
|
5524
|
-
_fingerprintString(ctx, node->conditionname);
|
|
5525
|
-
}
|
|
5871
|
+
// Intentionally ignoring node->conditionname for fingerprinting
|
|
5526
5872
|
|
|
5527
5873
|
if (node->payload != NULL) {
|
|
5528
5874
|
_fingerprintString(ctx, "payload");
|
|
@@ -5534,20 +5880,14 @@ _fingerprintNotifyStmt(FingerprintContext *ctx, const NotifyStmt *node, const vo
|
|
|
5534
5880
|
static void
|
|
5535
5881
|
_fingerprintListenStmt(FingerprintContext *ctx, const ListenStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
5536
5882
|
{
|
|
5537
|
-
|
|
5538
|
-
_fingerprintString(ctx, "conditionname");
|
|
5539
|
-
_fingerprintString(ctx, node->conditionname);
|
|
5540
|
-
}
|
|
5883
|
+
// Intentionally ignoring node->conditionname for fingerprinting
|
|
5541
5884
|
|
|
5542
5885
|
}
|
|
5543
5886
|
|
|
5544
5887
|
static void
|
|
5545
5888
|
_fingerprintUnlistenStmt(FingerprintContext *ctx, const UnlistenStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
5546
5889
|
{
|
|
5547
|
-
|
|
5548
|
-
_fingerprintString(ctx, "conditionname");
|
|
5549
|
-
_fingerprintString(ctx, node->conditionname);
|
|
5550
|
-
}
|
|
5890
|
+
// Intentionally ignoring node->conditionname for fingerprinting
|
|
5551
5891
|
|
|
5552
5892
|
}
|
|
5553
5893
|
|
|
@@ -5584,7 +5924,7 @@ _fingerprintViewStmt(FingerprintContext *ctx, const ViewStmt *node, const void *
|
|
|
5584
5924
|
|
|
5585
5925
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5586
5926
|
_fingerprintNode(ctx, node->aliases, node, "aliases", depth + 1);
|
|
5587
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5927
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->aliases) == 1 && linitial(node->aliases) == NIL)) {
|
|
5588
5928
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5589
5929
|
if (ctx->write_tokens)
|
|
5590
5930
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5600,7 +5940,7 @@ _fingerprintViewStmt(FingerprintContext *ctx, const ViewStmt *node, const void *
|
|
|
5600
5940
|
|
|
5601
5941
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5602
5942
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
5603
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
5943
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
5604
5944
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5605
5945
|
if (ctx->write_tokens)
|
|
5606
5946
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5692,7 +6032,7 @@ _fingerprintCreateDomainStmt(FingerprintContext *ctx, const CreateDomainStmt *no
|
|
|
5692
6032
|
|
|
5693
6033
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5694
6034
|
_fingerprintNode(ctx, node->constraints, node, "constraints", depth + 1);
|
|
5695
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6035
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->constraints) == 1 && linitial(node->constraints) == NIL)) {
|
|
5696
6036
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5697
6037
|
if (ctx->write_tokens)
|
|
5698
6038
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5708,7 +6048,7 @@ _fingerprintCreateDomainStmt(FingerprintContext *ctx, const CreateDomainStmt *no
|
|
|
5708
6048
|
|
|
5709
6049
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5710
6050
|
_fingerprintNode(ctx, node->domainname, node, "domainname", depth + 1);
|
|
5711
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6051
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->domainname) == 1 && linitial(node->domainname) == NIL)) {
|
|
5712
6052
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5713
6053
|
if (ctx->write_tokens)
|
|
5714
6054
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5751,7 +6091,7 @@ _fingerprintCreatedbStmt(FingerprintContext *ctx, const CreatedbStmt *node, cons
|
|
|
5751
6091
|
|
|
5752
6092
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5753
6093
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
5754
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6094
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
5755
6095
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5756
6096
|
if (ctx->write_tokens)
|
|
5757
6097
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5782,7 +6122,7 @@ _fingerprintDropdbStmt(FingerprintContext *ctx, const DropdbStmt *node, const vo
|
|
|
5782
6122
|
|
|
5783
6123
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5784
6124
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
5785
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6125
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
5786
6126
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5787
6127
|
if (ctx->write_tokens)
|
|
5788
6128
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5808,7 +6148,7 @@ _fingerprintVacuumStmt(FingerprintContext *ctx, const VacuumStmt *node, const vo
|
|
|
5808
6148
|
|
|
5809
6149
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5810
6150
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
5811
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6151
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
5812
6152
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5813
6153
|
if (ctx->write_tokens)
|
|
5814
6154
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5824,7 +6164,7 @@ _fingerprintVacuumStmt(FingerprintContext *ctx, const VacuumStmt *node, const vo
|
|
|
5824
6164
|
|
|
5825
6165
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5826
6166
|
_fingerprintNode(ctx, node->rels, node, "rels", depth + 1);
|
|
5827
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6167
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->rels) == 1 && linitial(node->rels) == NIL)) {
|
|
5828
6168
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5829
6169
|
if (ctx->write_tokens)
|
|
5830
6170
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5845,7 +6185,7 @@ _fingerprintExplainStmt(FingerprintContext *ctx, const ExplainStmt *node, const
|
|
|
5845
6185
|
|
|
5846
6186
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5847
6187
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
5848
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6188
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
5849
6189
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5850
6190
|
if (ctx->write_tokens)
|
|
5851
6191
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -5901,6 +6241,11 @@ _fingerprintCreateTableAsStmt(FingerprintContext *ctx, const CreateTableAsStmt *
|
|
|
5901
6241
|
_fingerprintString(ctx, "true");
|
|
5902
6242
|
}
|
|
5903
6243
|
|
|
6244
|
+
if (true) {
|
|
6245
|
+
_fingerprintString(ctx, "objtype");
|
|
6246
|
+
_fingerprintString(ctx, _enumToStringObjectType(node->objtype));
|
|
6247
|
+
}
|
|
6248
|
+
|
|
5904
6249
|
if (node->query != NULL) {
|
|
5905
6250
|
XXH3_state_t* prev = XXH3_createState();
|
|
5906
6251
|
XXH64_hash_t hash;
|
|
@@ -5918,11 +6263,6 @@ _fingerprintCreateTableAsStmt(FingerprintContext *ctx, const CreateTableAsStmt *
|
|
|
5918
6263
|
XXH3_freeState(prev);
|
|
5919
6264
|
}
|
|
5920
6265
|
|
|
5921
|
-
if (true) {
|
|
5922
|
-
_fingerprintString(ctx, "relkind");
|
|
5923
|
-
_fingerprintString(ctx, _enumToStringObjectType(node->relkind));
|
|
5924
|
-
}
|
|
5925
|
-
|
|
5926
6266
|
}
|
|
5927
6267
|
|
|
5928
6268
|
static void
|
|
@@ -5947,7 +6287,7 @@ _fingerprintCreateSeqStmt(FingerprintContext *ctx, const CreateSeqStmt *node, co
|
|
|
5947
6287
|
|
|
5948
6288
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
5949
6289
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
5950
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6290
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
5951
6291
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
5952
6292
|
if (ctx->write_tokens)
|
|
5953
6293
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6002,7 +6342,7 @@ _fingerprintAlterSeqStmt(FingerprintContext *ctx, const AlterSeqStmt *node, cons
|
|
|
6002
6342
|
|
|
6003
6343
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6004
6344
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
6005
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6345
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
6006
6346
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6007
6347
|
if (ctx->write_tokens)
|
|
6008
6348
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6040,7 +6380,7 @@ _fingerprintVariableSetStmt(FingerprintContext *ctx, const VariableSetStmt *node
|
|
|
6040
6380
|
|
|
6041
6381
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6042
6382
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
6043
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6383
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
6044
6384
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6045
6385
|
if (ctx->write_tokens)
|
|
6046
6386
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6096,7 +6436,7 @@ _fingerprintCreateTrigStmt(FingerprintContext *ctx, const CreateTrigStmt *node,
|
|
|
6096
6436
|
|
|
6097
6437
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6098
6438
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
6099
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6439
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
6100
6440
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6101
6441
|
if (ctx->write_tokens)
|
|
6102
6442
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6112,7 +6452,7 @@ _fingerprintCreateTrigStmt(FingerprintContext *ctx, const CreateTrigStmt *node,
|
|
|
6112
6452
|
|
|
6113
6453
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6114
6454
|
_fingerprintNode(ctx, node->columns, node, "columns", depth + 1);
|
|
6115
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6455
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->columns) == 1 && linitial(node->columns) == NIL)) {
|
|
6116
6456
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6117
6457
|
if (ctx->write_tokens)
|
|
6118
6458
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6157,7 +6497,7 @@ _fingerprintCreateTrigStmt(FingerprintContext *ctx, const CreateTrigStmt *node,
|
|
|
6157
6497
|
|
|
6158
6498
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6159
6499
|
_fingerprintNode(ctx, node->funcname, node, "funcname", depth + 1);
|
|
6160
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6500
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funcname) == 1 && linitial(node->funcname) == NIL)) {
|
|
6161
6501
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6162
6502
|
if (ctx->write_tokens)
|
|
6163
6503
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6191,6 +6531,11 @@ _fingerprintCreateTrigStmt(FingerprintContext *ctx, const CreateTrigStmt *node,
|
|
|
6191
6531
|
XXH3_freeState(prev);
|
|
6192
6532
|
}
|
|
6193
6533
|
|
|
6534
|
+
if (node->replace) {
|
|
6535
|
+
_fingerprintString(ctx, "replace");
|
|
6536
|
+
_fingerprintString(ctx, "true");
|
|
6537
|
+
}
|
|
6538
|
+
|
|
6194
6539
|
if (node->row) {
|
|
6195
6540
|
_fingerprintString(ctx, "row");
|
|
6196
6541
|
_fingerprintString(ctx, "true");
|
|
@@ -6212,7 +6557,7 @@ _fingerprintCreateTrigStmt(FingerprintContext *ctx, const CreateTrigStmt *node,
|
|
|
6212
6557
|
|
|
6213
6558
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6214
6559
|
_fingerprintNode(ctx, node->transitionRels, node, "transitionRels", depth + 1);
|
|
6215
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6560
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->transitionRels) == 1 && linitial(node->transitionRels) == NIL)) {
|
|
6216
6561
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6217
6562
|
if (ctx->write_tokens)
|
|
6218
6563
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6255,7 +6600,7 @@ _fingerprintCreatePLangStmt(FingerprintContext *ctx, const CreatePLangStmt *node
|
|
|
6255
6600
|
|
|
6256
6601
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6257
6602
|
_fingerprintNode(ctx, node->plhandler, node, "plhandler", depth + 1);
|
|
6258
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6603
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->plhandler) == 1 && linitial(node->plhandler) == NIL)) {
|
|
6259
6604
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6260
6605
|
if (ctx->write_tokens)
|
|
6261
6606
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6271,7 +6616,7 @@ _fingerprintCreatePLangStmt(FingerprintContext *ctx, const CreatePLangStmt *node
|
|
|
6271
6616
|
|
|
6272
6617
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6273
6618
|
_fingerprintNode(ctx, node->plinline, node, "plinline", depth + 1);
|
|
6274
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6619
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->plinline) == 1 && linitial(node->plinline) == NIL)) {
|
|
6275
6620
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6276
6621
|
if (ctx->write_tokens)
|
|
6277
6622
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6297,7 +6642,7 @@ _fingerprintCreatePLangStmt(FingerprintContext *ctx, const CreatePLangStmt *node
|
|
|
6297
6642
|
|
|
6298
6643
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6299
6644
|
_fingerprintNode(ctx, node->plvalidator, node, "plvalidator", depth + 1);
|
|
6300
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6645
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->plvalidator) == 1 && linitial(node->plvalidator) == NIL)) {
|
|
6301
6646
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6302
6647
|
if (ctx->write_tokens)
|
|
6303
6648
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6323,7 +6668,7 @@ _fingerprintCreateRoleStmt(FingerprintContext *ctx, const CreateRoleStmt *node,
|
|
|
6323
6668
|
|
|
6324
6669
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6325
6670
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
6326
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6671
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
6327
6672
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6328
6673
|
if (ctx->write_tokens)
|
|
6329
6674
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6361,7 +6706,7 @@ _fingerprintAlterRoleStmt(FingerprintContext *ctx, const AlterRoleStmt *node, co
|
|
|
6361
6706
|
|
|
6362
6707
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6363
6708
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
6364
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6709
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
6365
6710
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6366
6711
|
if (ctx->write_tokens)
|
|
6367
6712
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6404,7 +6749,7 @@ _fingerprintDropRoleStmt(FingerprintContext *ctx, const DropRoleStmt *node, cons
|
|
|
6404
6749
|
|
|
6405
6750
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6406
6751
|
_fingerprintNode(ctx, node->roles, node, "roles", depth + 1);
|
|
6407
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6752
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->roles) == 1 && linitial(node->roles) == NIL)) {
|
|
6408
6753
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6409
6754
|
if (ctx->write_tokens)
|
|
6410
6755
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6437,7 +6782,7 @@ _fingerprintLockStmt(FingerprintContext *ctx, const LockStmt *node, const void *
|
|
|
6437
6782
|
|
|
6438
6783
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6439
6784
|
_fingerprintNode(ctx, node->relations, node, "relations", depth + 1);
|
|
6440
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6785
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->relations) == 1 && linitial(node->relations) == NIL)) {
|
|
6441
6786
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6442
6787
|
if (ctx->write_tokens)
|
|
6443
6788
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6458,7 +6803,7 @@ _fingerprintConstraintsSetStmt(FingerprintContext *ctx, const ConstraintsSetStmt
|
|
|
6458
6803
|
|
|
6459
6804
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6460
6805
|
_fingerprintNode(ctx, node->constraints, node, "constraints", depth + 1);
|
|
6461
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6806
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->constraints) == 1 && linitial(node->constraints) == NIL)) {
|
|
6462
6807
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6463
6808
|
if (ctx->write_tokens)
|
|
6464
6809
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6475,11 +6820,6 @@ _fingerprintConstraintsSetStmt(FingerprintContext *ctx, const ConstraintsSetStmt
|
|
|
6475
6820
|
static void
|
|
6476
6821
|
_fingerprintReindexStmt(FingerprintContext *ctx, const ReindexStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
6477
6822
|
{
|
|
6478
|
-
if (node->concurrent) {
|
|
6479
|
-
_fingerprintString(ctx, "concurrent");
|
|
6480
|
-
_fingerprintString(ctx, "true");
|
|
6481
|
-
}
|
|
6482
|
-
|
|
6483
6823
|
if (true) {
|
|
6484
6824
|
_fingerprintString(ctx, "kind");
|
|
6485
6825
|
_fingerprintString(ctx, _enumToStringReindexObjectType(node->kind));
|
|
@@ -6490,13 +6830,22 @@ _fingerprintReindexStmt(FingerprintContext *ctx, const ReindexStmt *node, const
|
|
|
6490
6830
|
_fingerprintString(ctx, node->name);
|
|
6491
6831
|
}
|
|
6492
6832
|
|
|
6493
|
-
if (node->
|
|
6494
|
-
|
|
6495
|
-
|
|
6496
|
-
|
|
6497
|
-
|
|
6498
|
-
|
|
6833
|
+
if (node->params != NULL && node->params->length > 0) {
|
|
6834
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
6835
|
+
XXH64_hash_t hash;
|
|
6836
|
+
|
|
6837
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
6838
|
+
_fingerprintString(ctx, "params");
|
|
6499
6839
|
|
|
6840
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6841
|
+
_fingerprintNode(ctx, node->params, node, "params", depth + 1);
|
|
6842
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->params) == 1 && linitial(node->params) == NIL)) {
|
|
6843
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
6844
|
+
if (ctx->write_tokens)
|
|
6845
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
6846
|
+
}
|
|
6847
|
+
XXH3_freeState(prev);
|
|
6848
|
+
}
|
|
6500
6849
|
if (node->relation != NULL) {
|
|
6501
6850
|
XXH3_state_t* prev = XXH3_createState();
|
|
6502
6851
|
XXH64_hash_t hash;
|
|
@@ -6555,7 +6904,7 @@ _fingerprintCreateSchemaStmt(FingerprintContext *ctx, const CreateSchemaStmt *no
|
|
|
6555
6904
|
|
|
6556
6905
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6557
6906
|
_fingerprintNode(ctx, node->schemaElts, node, "schemaElts", depth + 1);
|
|
6558
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6907
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->schemaElts) == 1 && linitial(node->schemaElts) == NIL)) {
|
|
6559
6908
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6560
6909
|
if (ctx->write_tokens)
|
|
6561
6910
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6586,7 +6935,7 @@ _fingerprintAlterDatabaseStmt(FingerprintContext *ctx, const AlterDatabaseStmt *
|
|
|
6586
6935
|
|
|
6587
6936
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6588
6937
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
6589
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
6938
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
6590
6939
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6591
6940
|
if (ctx->write_tokens)
|
|
6592
6941
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6595,6 +6944,16 @@ _fingerprintAlterDatabaseStmt(FingerprintContext *ctx, const AlterDatabaseStmt *
|
|
|
6595
6944
|
}
|
|
6596
6945
|
}
|
|
6597
6946
|
|
|
6947
|
+
static void
|
|
6948
|
+
_fingerprintAlterDatabaseRefreshCollStmt(FingerprintContext *ctx, const AlterDatabaseRefreshCollStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
6949
|
+
{
|
|
6950
|
+
if (node->dbname != NULL) {
|
|
6951
|
+
_fingerprintString(ctx, "dbname");
|
|
6952
|
+
_fingerprintString(ctx, node->dbname);
|
|
6953
|
+
}
|
|
6954
|
+
|
|
6955
|
+
}
|
|
6956
|
+
|
|
6598
6957
|
static void
|
|
6599
6958
|
_fingerprintAlterDatabaseSetStmt(FingerprintContext *ctx, const AlterDatabaseSetStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
6600
6959
|
{
|
|
@@ -6678,7 +7037,7 @@ _fingerprintCreateConversionStmt(FingerprintContext *ctx, const CreateConversion
|
|
|
6678
7037
|
|
|
6679
7038
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6680
7039
|
_fingerprintNode(ctx, node->conversion_name, node, "conversion_name", depth + 1);
|
|
6681
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7040
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->conversion_name) == 1 && linitial(node->conversion_name) == NIL)) {
|
|
6682
7041
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6683
7042
|
if (ctx->write_tokens)
|
|
6684
7043
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6704,7 +7063,7 @@ _fingerprintCreateConversionStmt(FingerprintContext *ctx, const CreateConversion
|
|
|
6704
7063
|
|
|
6705
7064
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6706
7065
|
_fingerprintNode(ctx, node->func_name, node, "func_name", depth + 1);
|
|
6707
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7066
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->func_name) == 1 && linitial(node->func_name) == NIL)) {
|
|
6708
7067
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6709
7068
|
if (ctx->write_tokens)
|
|
6710
7069
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6823,7 +7182,7 @@ _fingerprintCreateOpClassStmt(FingerprintContext *ctx, const CreateOpClassStmt *
|
|
|
6823
7182
|
|
|
6824
7183
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6825
7184
|
_fingerprintNode(ctx, node->items, node, "items", depth + 1);
|
|
6826
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7185
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->items) == 1 && linitial(node->items) == NIL)) {
|
|
6827
7186
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6828
7187
|
if (ctx->write_tokens)
|
|
6829
7188
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6839,7 +7198,7 @@ _fingerprintCreateOpClassStmt(FingerprintContext *ctx, const CreateOpClassStmt *
|
|
|
6839
7198
|
|
|
6840
7199
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6841
7200
|
_fingerprintNode(ctx, node->opclassname, node, "opclassname", depth + 1);
|
|
6842
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7201
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opclassname) == 1 && linitial(node->opclassname) == NIL)) {
|
|
6843
7202
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6844
7203
|
if (ctx->write_tokens)
|
|
6845
7204
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6855,7 +7214,7 @@ _fingerprintCreateOpClassStmt(FingerprintContext *ctx, const CreateOpClassStmt *
|
|
|
6855
7214
|
|
|
6856
7215
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6857
7216
|
_fingerprintNode(ctx, node->opfamilyname, node, "opfamilyname", depth + 1);
|
|
6858
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7217
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opfamilyname) == 1 && linitial(node->opfamilyname) == NIL)) {
|
|
6859
7218
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6860
7219
|
if (ctx->write_tokens)
|
|
6861
7220
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6881,7 +7240,7 @@ _fingerprintCreateOpFamilyStmt(FingerprintContext *ctx, const CreateOpFamilyStmt
|
|
|
6881
7240
|
|
|
6882
7241
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6883
7242
|
_fingerprintNode(ctx, node->opfamilyname, node, "opfamilyname", depth + 1);
|
|
6884
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7243
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opfamilyname) == 1 && linitial(node->opfamilyname) == NIL)) {
|
|
6885
7244
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6886
7245
|
if (ctx->write_tokens)
|
|
6887
7246
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6912,7 +7271,7 @@ _fingerprintAlterOpFamilyStmt(FingerprintContext *ctx, const AlterOpFamilyStmt *
|
|
|
6912
7271
|
|
|
6913
7272
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6914
7273
|
_fingerprintNode(ctx, node->items, node, "items", depth + 1);
|
|
6915
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7274
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->items) == 1 && linitial(node->items) == NIL)) {
|
|
6916
7275
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6917
7276
|
if (ctx->write_tokens)
|
|
6918
7277
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6928,7 +7287,7 @@ _fingerprintAlterOpFamilyStmt(FingerprintContext *ctx, const AlterOpFamilyStmt *
|
|
|
6928
7287
|
|
|
6929
7288
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6930
7289
|
_fingerprintNode(ctx, node->opfamilyname, node, "opfamilyname", depth + 1);
|
|
6931
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7290
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opfamilyname) == 1 && linitial(node->opfamilyname) == NIL)) {
|
|
6932
7291
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6933
7292
|
if (ctx->write_tokens)
|
|
6934
7293
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6949,7 +7308,7 @@ _fingerprintPrepareStmt(FingerprintContext *ctx, const PrepareStmt *node, const
|
|
|
6949
7308
|
|
|
6950
7309
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6951
7310
|
_fingerprintNode(ctx, node->argtypes, node, "argtypes", depth + 1);
|
|
6952
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7311
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->argtypes) == 1 && linitial(node->argtypes) == NIL)) {
|
|
6953
7312
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6954
7313
|
if (ctx->write_tokens)
|
|
6955
7314
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -6991,7 +7350,7 @@ _fingerprintExecuteStmt(FingerprintContext *ctx, const ExecuteStmt *node, const
|
|
|
6991
7350
|
|
|
6992
7351
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
6993
7352
|
_fingerprintNode(ctx, node->params, node, "params", depth + 1);
|
|
6994
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7353
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->params) == 1 && linitial(node->params) == NIL)) {
|
|
6995
7354
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
6996
7355
|
if (ctx->write_tokens)
|
|
6997
7356
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7052,7 +7411,7 @@ _fingerprintCreateTableSpaceStmt(FingerprintContext *ctx, const CreateTableSpace
|
|
|
7052
7411
|
|
|
7053
7412
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7054
7413
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
7055
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7414
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
7056
7415
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7057
7416
|
if (ctx->write_tokens)
|
|
7058
7417
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7101,21 +7460,9 @@ _fingerprintDropTableSpaceStmt(FingerprintContext *ctx, const DropTableSpaceStmt
|
|
|
7101
7460
|
static void
|
|
7102
7461
|
_fingerprintAlterObjectDependsStmt(FingerprintContext *ctx, const AlterObjectDependsStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
7103
7462
|
{
|
|
7104
|
-
if (node->extname
|
|
7105
|
-
XXH3_state_t* prev = XXH3_createState();
|
|
7106
|
-
XXH64_hash_t hash;
|
|
7107
|
-
|
|
7108
|
-
XXH3_copyState(prev, ctx->xxh_state);
|
|
7463
|
+
if (strlen(node->extname->sval) > 0) {
|
|
7109
7464
|
_fingerprintString(ctx, "extname");
|
|
7110
|
-
|
|
7111
|
-
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7112
|
-
_fingerprintNode(ctx, node->extname, node, "extname", depth + 1);
|
|
7113
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7114
|
-
XXH3_copyState(ctx->xxh_state, prev);
|
|
7115
|
-
if (ctx->write_tokens)
|
|
7116
|
-
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
7117
|
-
}
|
|
7118
|
-
XXH3_freeState(prev);
|
|
7465
|
+
_fingerprintString(ctx, node->extname->sval);
|
|
7119
7466
|
}
|
|
7120
7467
|
|
|
7121
7468
|
if (node->object != NULL) {
|
|
@@ -7308,7 +7655,7 @@ _fingerprintAlterOperatorStmt(FingerprintContext *ctx, const AlterOperatorStmt *
|
|
|
7308
7655
|
|
|
7309
7656
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7310
7657
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
7311
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7658
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
7312
7659
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7313
7660
|
if (ctx->write_tokens)
|
|
7314
7661
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7329,7 +7676,7 @@ _fingerprintAlterTypeStmt(FingerprintContext *ctx, const AlterTypeStmt *node, co
|
|
|
7329
7676
|
|
|
7330
7677
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7331
7678
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
7332
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7679
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
7333
7680
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7334
7681
|
if (ctx->write_tokens)
|
|
7335
7682
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7345,7 +7692,7 @@ _fingerprintAlterTypeStmt(FingerprintContext *ctx, const AlterTypeStmt *node, co
|
|
|
7345
7692
|
|
|
7346
7693
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7347
7694
|
_fingerprintNode(ctx, node->typeName, node, "typeName", depth + 1);
|
|
7348
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7695
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->typeName) == 1 && linitial(node->typeName) == NIL)) {
|
|
7349
7696
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7350
7697
|
if (ctx->write_tokens)
|
|
7351
7698
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7371,7 +7718,7 @@ _fingerprintDropOwnedStmt(FingerprintContext *ctx, const DropOwnedStmt *node, co
|
|
|
7371
7718
|
|
|
7372
7719
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7373
7720
|
_fingerprintNode(ctx, node->roles, node, "roles", depth + 1);
|
|
7374
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7721
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->roles) == 1 && linitial(node->roles) == NIL)) {
|
|
7375
7722
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7376
7723
|
if (ctx->write_tokens)
|
|
7377
7724
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7409,7 +7756,7 @@ _fingerprintReassignOwnedStmt(FingerprintContext *ctx, const ReassignOwnedStmt *
|
|
|
7409
7756
|
|
|
7410
7757
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7411
7758
|
_fingerprintNode(ctx, node->roles, node, "roles", depth + 1);
|
|
7412
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7759
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->roles) == 1 && linitial(node->roles) == NIL)) {
|
|
7413
7760
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7414
7761
|
if (ctx->write_tokens)
|
|
7415
7762
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7430,7 +7777,7 @@ _fingerprintCompositeTypeStmt(FingerprintContext *ctx, const CompositeTypeStmt *
|
|
|
7430
7777
|
|
|
7431
7778
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7432
7779
|
_fingerprintNode(ctx, node->coldeflist, node, "coldeflist", depth + 1);
|
|
7433
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7780
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->coldeflist) == 1 && linitial(node->coldeflist) == NIL)) {
|
|
7434
7781
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7435
7782
|
if (ctx->write_tokens)
|
|
7436
7783
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7468,7 +7815,7 @@ _fingerprintCreateEnumStmt(FingerprintContext *ctx, const CreateEnumStmt *node,
|
|
|
7468
7815
|
|
|
7469
7816
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7470
7817
|
_fingerprintNode(ctx, node->typeName, node, "typeName", depth + 1);
|
|
7471
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7818
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->typeName) == 1 && linitial(node->typeName) == NIL)) {
|
|
7472
7819
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7473
7820
|
if (ctx->write_tokens)
|
|
7474
7821
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7484,7 +7831,7 @@ _fingerprintCreateEnumStmt(FingerprintContext *ctx, const CreateEnumStmt *node,
|
|
|
7484
7831
|
|
|
7485
7832
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7486
7833
|
_fingerprintNode(ctx, node->vals, node, "vals", depth + 1);
|
|
7487
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7834
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->vals) == 1 && linitial(node->vals) == NIL)) {
|
|
7488
7835
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7489
7836
|
if (ctx->write_tokens)
|
|
7490
7837
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7505,7 +7852,7 @@ _fingerprintCreateRangeStmt(FingerprintContext *ctx, const CreateRangeStmt *node
|
|
|
7505
7852
|
|
|
7506
7853
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7507
7854
|
_fingerprintNode(ctx, node->params, node, "params", depth + 1);
|
|
7508
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7855
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->params) == 1 && linitial(node->params) == NIL)) {
|
|
7509
7856
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7510
7857
|
if (ctx->write_tokens)
|
|
7511
7858
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7521,7 +7868,7 @@ _fingerprintCreateRangeStmt(FingerprintContext *ctx, const CreateRangeStmt *node
|
|
|
7521
7868
|
|
|
7522
7869
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7523
7870
|
_fingerprintNode(ctx, node->typeName, node, "typeName", depth + 1);
|
|
7524
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7871
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->typeName) == 1 && linitial(node->typeName) == NIL)) {
|
|
7525
7872
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7526
7873
|
if (ctx->write_tokens)
|
|
7527
7874
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7567,7 +7914,7 @@ _fingerprintAlterEnumStmt(FingerprintContext *ctx, const AlterEnumStmt *node, co
|
|
|
7567
7914
|
|
|
7568
7915
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7569
7916
|
_fingerprintNode(ctx, node->typeName, node, "typeName", depth + 1);
|
|
7570
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7917
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->typeName) == 1 && linitial(node->typeName) == NIL)) {
|
|
7571
7918
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7572
7919
|
if (ctx->write_tokens)
|
|
7573
7920
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7588,7 +7935,7 @@ _fingerprintAlterTSDictionaryStmt(FingerprintContext *ctx, const AlterTSDictiona
|
|
|
7588
7935
|
|
|
7589
7936
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7590
7937
|
_fingerprintNode(ctx, node->dictname, node, "dictname", depth + 1);
|
|
7591
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7938
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->dictname) == 1 && linitial(node->dictname) == NIL)) {
|
|
7592
7939
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7593
7940
|
if (ctx->write_tokens)
|
|
7594
7941
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7604,7 +7951,7 @@ _fingerprintAlterTSDictionaryStmt(FingerprintContext *ctx, const AlterTSDictiona
|
|
|
7604
7951
|
|
|
7605
7952
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7606
7953
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
7607
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7954
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
7608
7955
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7609
7956
|
if (ctx->write_tokens)
|
|
7610
7957
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7625,7 +7972,7 @@ _fingerprintAlterTSConfigurationStmt(FingerprintContext *ctx, const AlterTSConfi
|
|
|
7625
7972
|
|
|
7626
7973
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7627
7974
|
_fingerprintNode(ctx, node->cfgname, node, "cfgname", depth + 1);
|
|
7628
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7975
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->cfgname) == 1 && linitial(node->cfgname) == NIL)) {
|
|
7629
7976
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7630
7977
|
if (ctx->write_tokens)
|
|
7631
7978
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7641,7 +7988,7 @@ _fingerprintAlterTSConfigurationStmt(FingerprintContext *ctx, const AlterTSConfi
|
|
|
7641
7988
|
|
|
7642
7989
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7643
7990
|
_fingerprintNode(ctx, node->dicts, node, "dicts", depth + 1);
|
|
7644
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
7991
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->dicts) == 1 && linitial(node->dicts) == NIL)) {
|
|
7645
7992
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7646
7993
|
if (ctx->write_tokens)
|
|
7647
7994
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7677,7 +8024,7 @@ _fingerprintAlterTSConfigurationStmt(FingerprintContext *ctx, const AlterTSConfi
|
|
|
7677
8024
|
|
|
7678
8025
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7679
8026
|
_fingerprintNode(ctx, node->tokentype, node, "tokentype", depth + 1);
|
|
7680
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8027
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->tokentype) == 1 && linitial(node->tokentype) == NIL)) {
|
|
7681
8028
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7682
8029
|
if (ctx->write_tokens)
|
|
7683
8030
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7703,7 +8050,7 @@ _fingerprintCreateFdwStmt(FingerprintContext *ctx, const CreateFdwStmt *node, co
|
|
|
7703
8050
|
|
|
7704
8051
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7705
8052
|
_fingerprintNode(ctx, node->func_options, node, "func_options", depth + 1);
|
|
7706
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8053
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->func_options) == 1 && linitial(node->func_options) == NIL)) {
|
|
7707
8054
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7708
8055
|
if (ctx->write_tokens)
|
|
7709
8056
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7719,7 +8066,7 @@ _fingerprintCreateFdwStmt(FingerprintContext *ctx, const CreateFdwStmt *node, co
|
|
|
7719
8066
|
|
|
7720
8067
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7721
8068
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
7722
|
-
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)) {
|
|
7723
8070
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7724
8071
|
if (ctx->write_tokens)
|
|
7725
8072
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7745,7 +8092,7 @@ _fingerprintAlterFdwStmt(FingerprintContext *ctx, const AlterFdwStmt *node, cons
|
|
|
7745
8092
|
|
|
7746
8093
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7747
8094
|
_fingerprintNode(ctx, node->func_options, node, "func_options", depth + 1);
|
|
7748
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8095
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->func_options) == 1 && linitial(node->func_options) == NIL)) {
|
|
7749
8096
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7750
8097
|
if (ctx->write_tokens)
|
|
7751
8098
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7761,7 +8108,7 @@ _fingerprintAlterFdwStmt(FingerprintContext *ctx, const AlterFdwStmt *node, cons
|
|
|
7761
8108
|
|
|
7762
8109
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7763
8110
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
7764
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8111
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
7765
8112
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7766
8113
|
if (ctx->write_tokens)
|
|
7767
8114
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7792,7 +8139,7 @@ _fingerprintCreateForeignServerStmt(FingerprintContext *ctx, const CreateForeign
|
|
|
7792
8139
|
|
|
7793
8140
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7794
8141
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
7795
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8142
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
7796
8143
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7797
8144
|
if (ctx->write_tokens)
|
|
7798
8145
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7833,7 +8180,7 @@ _fingerprintAlterForeignServerStmt(FingerprintContext *ctx, const AlterForeignSe
|
|
|
7833
8180
|
|
|
7834
8181
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7835
8182
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
7836
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8183
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
7837
8184
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7838
8185
|
if (ctx->write_tokens)
|
|
7839
8186
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7869,7 +8216,7 @@ _fingerprintCreateUserMappingStmt(FingerprintContext *ctx, const CreateUserMappi
|
|
|
7869
8216
|
|
|
7870
8217
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7871
8218
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
7872
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8219
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
7873
8220
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7874
8221
|
if (ctx->write_tokens)
|
|
7875
8222
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7912,7 +8259,7 @@ _fingerprintAlterUserMappingStmt(FingerprintContext *ctx, const AlterUserMapping
|
|
|
7912
8259
|
|
|
7913
8260
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7914
8261
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
7915
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8262
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
7916
8263
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7917
8264
|
if (ctx->write_tokens)
|
|
7918
8265
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -7992,7 +8339,7 @@ _fingerprintAlterTableSpaceOptionsStmt(FingerprintContext *ctx, const AlterTable
|
|
|
7992
8339
|
|
|
7993
8340
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
7994
8341
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
7995
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8342
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
7996
8343
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
7997
8344
|
if (ctx->write_tokens)
|
|
7998
8345
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8038,7 +8385,7 @@ _fingerprintAlterTableMoveAllStmt(FingerprintContext *ctx, const AlterTableMoveA
|
|
|
8038
8385
|
|
|
8039
8386
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8040
8387
|
_fingerprintNode(ctx, node->roles, node, "roles", depth + 1);
|
|
8041
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8388
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->roles) == 1 && linitial(node->roles) == NIL)) {
|
|
8042
8389
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8043
8390
|
if (ctx->write_tokens)
|
|
8044
8391
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8098,7 +8445,7 @@ _fingerprintCreateForeignTableStmt(FingerprintContext *ctx, const CreateForeignT
|
|
|
8098
8445
|
|
|
8099
8446
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8100
8447
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
8101
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8448
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
8102
8449
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8103
8450
|
if (ctx->write_tokens)
|
|
8104
8451
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8134,7 +8481,7 @@ _fingerprintImportForeignSchemaStmt(FingerprintContext *ctx, const ImportForeign
|
|
|
8134
8481
|
|
|
8135
8482
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8136
8483
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
8137
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8484
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
8138
8485
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8139
8486
|
if (ctx->write_tokens)
|
|
8140
8487
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8160,7 +8507,7 @@ _fingerprintImportForeignSchemaStmt(FingerprintContext *ctx, const ImportForeign
|
|
|
8160
8507
|
|
|
8161
8508
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8162
8509
|
_fingerprintNode(ctx, node->table_list, node, "table_list", depth + 1);
|
|
8163
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8510
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->table_list) == 1 && linitial(node->table_list) == NIL)) {
|
|
8164
8511
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8165
8512
|
if (ctx->write_tokens)
|
|
8166
8513
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8191,7 +8538,7 @@ _fingerprintCreateExtensionStmt(FingerprintContext *ctx, const CreateExtensionSt
|
|
|
8191
8538
|
|
|
8192
8539
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8193
8540
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
8194
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8541
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
8195
8542
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8196
8543
|
if (ctx->write_tokens)
|
|
8197
8544
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8217,7 +8564,7 @@ _fingerprintAlterExtensionStmt(FingerprintContext *ctx, const AlterExtensionStmt
|
|
|
8217
8564
|
|
|
8218
8565
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8219
8566
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
8220
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8567
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
8221
8568
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8222
8569
|
if (ctx->write_tokens)
|
|
8223
8570
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8282,7 +8629,7 @@ _fingerprintCreateEventTrigStmt(FingerprintContext *ctx, const CreateEventTrigSt
|
|
|
8282
8629
|
|
|
8283
8630
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8284
8631
|
_fingerprintNode(ctx, node->funcname, node, "funcname", depth + 1);
|
|
8285
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8632
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funcname) == 1 && linitial(node->funcname) == NIL)) {
|
|
8286
8633
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8287
8634
|
if (ctx->write_tokens)
|
|
8288
8635
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8303,7 +8650,7 @@ _fingerprintCreateEventTrigStmt(FingerprintContext *ctx, const CreateEventTrigSt
|
|
|
8303
8650
|
|
|
8304
8651
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8305
8652
|
_fingerprintNode(ctx, node->whenclause, node, "whenclause", depth + 1);
|
|
8306
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8653
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->whenclause) == 1 && linitial(node->whenclause) == NIL)) {
|
|
8307
8654
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8308
8655
|
if (ctx->write_tokens)
|
|
8309
8656
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8442,7 +8789,7 @@ _fingerprintCreatePolicyStmt(FingerprintContext *ctx, const CreatePolicyStmt *no
|
|
|
8442
8789
|
|
|
8443
8790
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8444
8791
|
_fingerprintNode(ctx, node->roles, node, "roles", depth + 1);
|
|
8445
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8792
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->roles) == 1 && linitial(node->roles) == NIL)) {
|
|
8446
8793
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8447
8794
|
if (ctx->write_tokens)
|
|
8448
8795
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8519,7 +8866,7 @@ _fingerprintAlterPolicyStmt(FingerprintContext *ctx, const AlterPolicyStmt *node
|
|
|
8519
8866
|
|
|
8520
8867
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8521
8868
|
_fingerprintNode(ctx, node->roles, node, "roles", depth + 1);
|
|
8522
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
8869
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->roles) == 1 && linitial(node->roles) == NIL)) {
|
|
8523
8870
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8524
8871
|
if (ctx->write_tokens)
|
|
8525
8872
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8651,7 +8998,7 @@ _fingerprintCreateAmStmt(FingerprintContext *ctx, const CreateAmStmt *node, cons
|
|
|
8651
8998
|
|
|
8652
8999
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8653
9000
|
_fingerprintNode(ctx, node->handler_name, node, "handler_name", depth + 1);
|
|
8654
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9001
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->handler_name) == 1 && linitial(node->handler_name) == NIL)) {
|
|
8655
9002
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8656
9003
|
if (ctx->write_tokens)
|
|
8657
9004
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8677,7 +9024,7 @@ _fingerprintCreatePublicationStmt(FingerprintContext *ctx, const CreatePublicati
|
|
|
8677
9024
|
|
|
8678
9025
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8679
9026
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
8680
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9027
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
8681
9028
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8682
9029
|
if (ctx->write_tokens)
|
|
8683
9030
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8689,16 +9036,16 @@ _fingerprintCreatePublicationStmt(FingerprintContext *ctx, const CreatePublicati
|
|
|
8689
9036
|
_fingerprintString(ctx, node->pubname);
|
|
8690
9037
|
}
|
|
8691
9038
|
|
|
8692
|
-
if (node->
|
|
9039
|
+
if (node->pubobjects != NULL && node->pubobjects->length > 0) {
|
|
8693
9040
|
XXH3_state_t* prev = XXH3_createState();
|
|
8694
9041
|
XXH64_hash_t hash;
|
|
8695
9042
|
|
|
8696
9043
|
XXH3_copyState(prev, ctx->xxh_state);
|
|
8697
|
-
_fingerprintString(ctx, "
|
|
9044
|
+
_fingerprintString(ctx, "pubobjects");
|
|
8698
9045
|
|
|
8699
9046
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8700
|
-
_fingerprintNode(ctx, node->
|
|
8701
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9047
|
+
_fingerprintNode(ctx, node->pubobjects, node, "pubobjects", depth + 1);
|
|
9048
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->pubobjects) == 1 && linitial(node->pubobjects) == NIL)) {
|
|
8702
9049
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8703
9050
|
if (ctx->write_tokens)
|
|
8704
9051
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8710,6 +9057,11 @@ _fingerprintCreatePublicationStmt(FingerprintContext *ctx, const CreatePublicati
|
|
|
8710
9057
|
static void
|
|
8711
9058
|
_fingerprintAlterPublicationStmt(FingerprintContext *ctx, const AlterPublicationStmt *node, const void *parent, const char *field_name, unsigned int depth)
|
|
8712
9059
|
{
|
|
9060
|
+
if (true) {
|
|
9061
|
+
_fingerprintString(ctx, "action");
|
|
9062
|
+
_fingerprintString(ctx, _enumToStringAlterPublicationAction(node->action));
|
|
9063
|
+
}
|
|
9064
|
+
|
|
8713
9065
|
if (node->for_all_tables) {
|
|
8714
9066
|
_fingerprintString(ctx, "for_all_tables");
|
|
8715
9067
|
_fingerprintString(ctx, "true");
|
|
@@ -8724,7 +9076,7 @@ _fingerprintAlterPublicationStmt(FingerprintContext *ctx, const AlterPublication
|
|
|
8724
9076
|
|
|
8725
9077
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8726
9078
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
8727
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9079
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
8728
9080
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8729
9081
|
if (ctx->write_tokens)
|
|
8730
9082
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8736,21 +9088,16 @@ _fingerprintAlterPublicationStmt(FingerprintContext *ctx, const AlterPublication
|
|
|
8736
9088
|
_fingerprintString(ctx, node->pubname);
|
|
8737
9089
|
}
|
|
8738
9090
|
|
|
8739
|
-
if (
|
|
8740
|
-
_fingerprintString(ctx, "tableAction");
|
|
8741
|
-
_fingerprintString(ctx, _enumToStringDefElemAction(node->tableAction));
|
|
8742
|
-
}
|
|
8743
|
-
|
|
8744
|
-
if (node->tables != NULL && node->tables->length > 0) {
|
|
9091
|
+
if (node->pubobjects != NULL && node->pubobjects->length > 0) {
|
|
8745
9092
|
XXH3_state_t* prev = XXH3_createState();
|
|
8746
9093
|
XXH64_hash_t hash;
|
|
8747
9094
|
|
|
8748
9095
|
XXH3_copyState(prev, ctx->xxh_state);
|
|
8749
|
-
_fingerprintString(ctx, "
|
|
9096
|
+
_fingerprintString(ctx, "pubobjects");
|
|
8750
9097
|
|
|
8751
9098
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8752
|
-
_fingerprintNode(ctx, node->
|
|
8753
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9099
|
+
_fingerprintNode(ctx, node->pubobjects, node, "pubobjects", depth + 1);
|
|
9100
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->pubobjects) == 1 && linitial(node->pubobjects) == NIL)) {
|
|
8754
9101
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8755
9102
|
if (ctx->write_tokens)
|
|
8756
9103
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8776,7 +9123,7 @@ _fingerprintCreateSubscriptionStmt(FingerprintContext *ctx, const CreateSubscrip
|
|
|
8776
9123
|
|
|
8777
9124
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8778
9125
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
8779
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9126
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
8780
9127
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8781
9128
|
if (ctx->write_tokens)
|
|
8782
9129
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8792,7 +9139,7 @@ _fingerprintCreateSubscriptionStmt(FingerprintContext *ctx, const CreateSubscrip
|
|
|
8792
9139
|
|
|
8793
9140
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8794
9141
|
_fingerprintNode(ctx, node->publication, node, "publication", depth + 1);
|
|
8795
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9142
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->publication) == 1 && linitial(node->publication) == NIL)) {
|
|
8796
9143
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8797
9144
|
if (ctx->write_tokens)
|
|
8798
9145
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8828,7 +9175,7 @@ _fingerprintAlterSubscriptionStmt(FingerprintContext *ctx, const AlterSubscripti
|
|
|
8828
9175
|
|
|
8829
9176
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8830
9177
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
8831
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9178
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
8832
9179
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8833
9180
|
if (ctx->write_tokens)
|
|
8834
9181
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8844,7 +9191,7 @@ _fingerprintAlterSubscriptionStmt(FingerprintContext *ctx, const AlterSubscripti
|
|
|
8844
9191
|
|
|
8845
9192
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8846
9193
|
_fingerprintNode(ctx, node->publication, node, "publication", depth + 1);
|
|
8847
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9194
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->publication) == 1 && linitial(node->publication) == NIL)) {
|
|
8848
9195
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8849
9196
|
if (ctx->write_tokens)
|
|
8850
9197
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8890,7 +9237,7 @@ _fingerprintCreateStatsStmt(FingerprintContext *ctx, const CreateStatsStmt *node
|
|
|
8890
9237
|
|
|
8891
9238
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8892
9239
|
_fingerprintNode(ctx, node->defnames, node, "defnames", depth + 1);
|
|
8893
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9240
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->defnames) == 1 && linitial(node->defnames) == NIL)) {
|
|
8894
9241
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8895
9242
|
if (ctx->write_tokens)
|
|
8896
9243
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8906,7 +9253,7 @@ _fingerprintCreateStatsStmt(FingerprintContext *ctx, const CreateStatsStmt *node
|
|
|
8906
9253
|
|
|
8907
9254
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8908
9255
|
_fingerprintNode(ctx, node->exprs, node, "exprs", depth + 1);
|
|
8909
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9256
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->exprs) == 1 && linitial(node->exprs) == NIL)) {
|
|
8910
9257
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8911
9258
|
if (ctx->write_tokens)
|
|
8912
9259
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8927,7 +9274,7 @@ _fingerprintCreateStatsStmt(FingerprintContext *ctx, const CreateStatsStmt *node
|
|
|
8927
9274
|
|
|
8928
9275
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8929
9276
|
_fingerprintNode(ctx, node->relations, node, "relations", depth + 1);
|
|
8930
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9277
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->relations) == 1 && linitial(node->relations) == NIL)) {
|
|
8931
9278
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8932
9279
|
if (ctx->write_tokens)
|
|
8933
9280
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8943,7 +9290,7 @@ _fingerprintCreateStatsStmt(FingerprintContext *ctx, const CreateStatsStmt *node
|
|
|
8943
9290
|
|
|
8944
9291
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8945
9292
|
_fingerprintNode(ctx, node->stat_types, node, "stat_types", depth + 1);
|
|
8946
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9293
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->stat_types) == 1 && linitial(node->stat_types) == NIL)) {
|
|
8947
9294
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8948
9295
|
if (ctx->write_tokens)
|
|
8949
9296
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -8955,6 +9302,11 @@ _fingerprintCreateStatsStmt(FingerprintContext *ctx, const CreateStatsStmt *node
|
|
|
8955
9302
|
_fingerprintString(ctx, node->stxcomment);
|
|
8956
9303
|
}
|
|
8957
9304
|
|
|
9305
|
+
if (node->transformed) {
|
|
9306
|
+
_fingerprintString(ctx, "transformed");
|
|
9307
|
+
_fingerprintString(ctx, "true");
|
|
9308
|
+
}
|
|
9309
|
+
|
|
8958
9310
|
}
|
|
8959
9311
|
|
|
8960
9312
|
static void
|
|
@@ -8969,7 +9321,7 @@ _fingerprintAlterCollationStmt(FingerprintContext *ctx, const AlterCollationStmt
|
|
|
8969
9321
|
|
|
8970
9322
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
8971
9323
|
_fingerprintNode(ctx, node->collname, node, "collname", depth + 1);
|
|
8972
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9324
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->collname) == 1 && linitial(node->collname) == NIL)) {
|
|
8973
9325
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
8974
9326
|
if (ctx->write_tokens)
|
|
8975
9327
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9015,6 +9367,22 @@ _fingerprintCallStmt(FingerprintContext *ctx, const CallStmt *node, const void *
|
|
|
9015
9367
|
XXH3_freeState(prev);
|
|
9016
9368
|
}
|
|
9017
9369
|
|
|
9370
|
+
if (node->outargs != NULL && node->outargs->length > 0) {
|
|
9371
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
9372
|
+
XXH64_hash_t hash;
|
|
9373
|
+
|
|
9374
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
9375
|
+
_fingerprintString(ctx, "outargs");
|
|
9376
|
+
|
|
9377
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9378
|
+
_fingerprintNode(ctx, node->outargs, node, "outargs", depth + 1);
|
|
9379
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->outargs) == 1 && linitial(node->outargs) == NIL)) {
|
|
9380
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
9381
|
+
if (ctx->write_tokens)
|
|
9382
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
9383
|
+
}
|
|
9384
|
+
XXH3_freeState(prev);
|
|
9385
|
+
}
|
|
9018
9386
|
}
|
|
9019
9387
|
|
|
9020
9388
|
static void
|
|
@@ -9029,7 +9397,7 @@ _fingerprintAlterStatsStmt(FingerprintContext *ctx, const AlterStatsStmt *node,
|
|
|
9029
9397
|
|
|
9030
9398
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9031
9399
|
_fingerprintNode(ctx, node->defnames, node, "defnames", depth + 1);
|
|
9032
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9400
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->defnames) == 1 && linitial(node->defnames) == NIL)) {
|
|
9033
9401
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9034
9402
|
if (ctx->write_tokens)
|
|
9035
9403
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9089,7 +9457,7 @@ _fingerprintA_Expr(FingerprintContext *ctx, const A_Expr *node, const void *pare
|
|
|
9089
9457
|
|
|
9090
9458
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9091
9459
|
_fingerprintNode(ctx, node->name, node, "name", depth + 1);
|
|
9092
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9460
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->name) == 1 && linitial(node->name) == NIL)) {
|
|
9093
9461
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9094
9462
|
if (ctx->write_tokens)
|
|
9095
9463
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9127,7 +9495,7 @@ _fingerprintColumnRef(FingerprintContext *ctx, const ColumnRef *node, const void
|
|
|
9127
9495
|
|
|
9128
9496
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9129
9497
|
_fingerprintNode(ctx, node->fields, node, "fields", depth + 1);
|
|
9130
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9498
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->fields) == 1 && linitial(node->fields) == NIL)) {
|
|
9131
9499
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9132
9500
|
if (ctx->write_tokens)
|
|
9133
9501
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9144,12 +9512,6 @@ _fingerprintParamRef(FingerprintContext *ctx, const ParamRef *node, const void *
|
|
|
9144
9512
|
// Intentionally ignoring all fields for fingerprinting
|
|
9145
9513
|
}
|
|
9146
9514
|
|
|
9147
|
-
static void
|
|
9148
|
-
_fingerprintA_Const(FingerprintContext *ctx, const A_Const *node, const void *parent, const char *field_name, unsigned int depth)
|
|
9149
|
-
{
|
|
9150
|
-
// Intentionally ignoring all fields for fingerprinting
|
|
9151
|
-
}
|
|
9152
|
-
|
|
9153
9515
|
static void
|
|
9154
9516
|
_fingerprintFuncCall(FingerprintContext *ctx, const FuncCall *node, const void *parent, const char *field_name, unsigned int depth)
|
|
9155
9517
|
{
|
|
@@ -9184,7 +9546,7 @@ _fingerprintFuncCall(FingerprintContext *ctx, const FuncCall *node, const void *
|
|
|
9184
9546
|
|
|
9185
9547
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9186
9548
|
_fingerprintNode(ctx, node->agg_order, node, "agg_order", depth + 1);
|
|
9187
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9549
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->agg_order) == 1 && linitial(node->agg_order) == NIL)) {
|
|
9188
9550
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9189
9551
|
if (ctx->write_tokens)
|
|
9190
9552
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9210,7 +9572,7 @@ _fingerprintFuncCall(FingerprintContext *ctx, const FuncCall *node, const void *
|
|
|
9210
9572
|
|
|
9211
9573
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9212
9574
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
9213
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9575
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
9214
9576
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9215
9577
|
if (ctx->write_tokens)
|
|
9216
9578
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9222,6 +9584,11 @@ _fingerprintFuncCall(FingerprintContext *ctx, const FuncCall *node, const void *
|
|
|
9222
9584
|
_fingerprintString(ctx, "true");
|
|
9223
9585
|
}
|
|
9224
9586
|
|
|
9587
|
+
if (true) {
|
|
9588
|
+
_fingerprintString(ctx, "funcformat");
|
|
9589
|
+
_fingerprintString(ctx, _enumToStringCoercionForm(node->funcformat));
|
|
9590
|
+
}
|
|
9591
|
+
|
|
9225
9592
|
if (node->funcname != NULL && node->funcname->length > 0) {
|
|
9226
9593
|
XXH3_state_t* prev = XXH3_createState();
|
|
9227
9594
|
XXH64_hash_t hash;
|
|
@@ -9231,7 +9598,7 @@ _fingerprintFuncCall(FingerprintContext *ctx, const FuncCall *node, const void *
|
|
|
9231
9598
|
|
|
9232
9599
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9233
9600
|
_fingerprintNode(ctx, node->funcname, node, "funcname", depth + 1);
|
|
9234
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9601
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funcname) == 1 && linitial(node->funcname) == NIL)) {
|
|
9235
9602
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9236
9603
|
if (ctx->write_tokens)
|
|
9237
9604
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9337,7 +9704,7 @@ _fingerprintA_Indirection(FingerprintContext *ctx, const A_Indirection *node, co
|
|
|
9337
9704
|
|
|
9338
9705
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9339
9706
|
_fingerprintNode(ctx, node->indirection, node, "indirection", depth + 1);
|
|
9340
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9707
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->indirection) == 1 && linitial(node->indirection) == NIL)) {
|
|
9341
9708
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9342
9709
|
if (ctx->write_tokens)
|
|
9343
9710
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9358,7 +9725,7 @@ _fingerprintA_ArrayExpr(FingerprintContext *ctx, const A_ArrayExpr *node, const
|
|
|
9358
9725
|
|
|
9359
9726
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9360
9727
|
_fingerprintNode(ctx, node->elements, node, "elements", depth + 1);
|
|
9361
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9728
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->elements) == 1 && linitial(node->elements) == NIL)) {
|
|
9362
9729
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9363
9730
|
if (ctx->write_tokens)
|
|
9364
9731
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9381,7 +9748,7 @@ _fingerprintResTarget(FingerprintContext *ctx, const ResTarget *node, const void
|
|
|
9381
9748
|
|
|
9382
9749
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9383
9750
|
_fingerprintNode(ctx, node->indirection, node, "indirection", depth + 1);
|
|
9384
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9751
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->indirection) == 1 && linitial(node->indirection) == NIL)) {
|
|
9385
9752
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9386
9753
|
if (ctx->write_tokens)
|
|
9387
9754
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9520,7 +9887,7 @@ _fingerprintCollateClause(FingerprintContext *ctx, const CollateClause *node, co
|
|
|
9520
9887
|
|
|
9521
9888
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9522
9889
|
_fingerprintNode(ctx, node->collname, node, "collname", depth + 1);
|
|
9523
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9890
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->collname) == 1 && linitial(node->collname) == NIL)) {
|
|
9524
9891
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9525
9892
|
if (ctx->write_tokens)
|
|
9526
9893
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9572,7 +9939,7 @@ _fingerprintSortBy(FingerprintContext *ctx, const SortBy *node, const void *pare
|
|
|
9572
9939
|
|
|
9573
9940
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9574
9941
|
_fingerprintNode(ctx, node->useOp, node, "useOp", depth + 1);
|
|
9575
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9942
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->useOp) == 1 && linitial(node->useOp) == NIL)) {
|
|
9576
9943
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9577
9944
|
if (ctx->write_tokens)
|
|
9578
9945
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9624,7 +9991,7 @@ _fingerprintWindowDef(FingerprintContext *ctx, const WindowDef *node, const void
|
|
|
9624
9991
|
|
|
9625
9992
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9626
9993
|
_fingerprintNode(ctx, node->orderClause, node, "orderClause", depth + 1);
|
|
9627
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
9994
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->orderClause) == 1 && linitial(node->orderClause) == NIL)) {
|
|
9628
9995
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9629
9996
|
if (ctx->write_tokens)
|
|
9630
9997
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9640,7 +10007,7 @@ _fingerprintWindowDef(FingerprintContext *ctx, const WindowDef *node, const void
|
|
|
9640
10007
|
|
|
9641
10008
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9642
10009
|
_fingerprintNode(ctx, node->partitionClause, node, "partitionClause", depth + 1);
|
|
9643
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10010
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->partitionClause) == 1 && linitial(node->partitionClause) == NIL)) {
|
|
9644
10011
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9645
10012
|
if (ctx->write_tokens)
|
|
9646
10013
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9744,7 +10111,7 @@ _fingerprintRangeFunction(FingerprintContext *ctx, const RangeFunction *node, co
|
|
|
9744
10111
|
|
|
9745
10112
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9746
10113
|
_fingerprintNode(ctx, node->coldeflist, node, "coldeflist", depth + 1);
|
|
9747
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10114
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->coldeflist) == 1 && linitial(node->coldeflist) == NIL)) {
|
|
9748
10115
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9749
10116
|
if (ctx->write_tokens)
|
|
9750
10117
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9760,7 +10127,7 @@ _fingerprintRangeFunction(FingerprintContext *ctx, const RangeFunction *node, co
|
|
|
9760
10127
|
|
|
9761
10128
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9762
10129
|
_fingerprintNode(ctx, node->functions, node, "functions", depth + 1);
|
|
9763
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10130
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->functions) == 1 && linitial(node->functions) == NIL)) {
|
|
9764
10131
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9765
10132
|
if (ctx->write_tokens)
|
|
9766
10133
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9796,7 +10163,7 @@ _fingerprintRangeTableSample(FingerprintContext *ctx, const RangeTableSample *no
|
|
|
9796
10163
|
|
|
9797
10164
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9798
10165
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
9799
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10166
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
9800
10167
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9801
10168
|
if (ctx->write_tokens)
|
|
9802
10169
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9814,7 +10181,7 @@ _fingerprintRangeTableSample(FingerprintContext *ctx, const RangeTableSample *no
|
|
|
9814
10181
|
|
|
9815
10182
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9816
10183
|
_fingerprintNode(ctx, node->method, node, "method", depth + 1);
|
|
9817
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10184
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->method) == 1 && linitial(node->method) == NIL)) {
|
|
9818
10185
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9819
10186
|
if (ctx->write_tokens)
|
|
9820
10187
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9886,7 +10253,7 @@ _fingerprintRangeTableFunc(FingerprintContext *ctx, const RangeTableFunc *node,
|
|
|
9886
10253
|
|
|
9887
10254
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9888
10255
|
_fingerprintNode(ctx, node->columns, node, "columns", depth + 1);
|
|
9889
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10256
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->columns) == 1 && linitial(node->columns) == NIL)) {
|
|
9890
10257
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9891
10258
|
if (ctx->write_tokens)
|
|
9892
10259
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -9926,7 +10293,7 @@ _fingerprintRangeTableFunc(FingerprintContext *ctx, const RangeTableFunc *node,
|
|
|
9926
10293
|
|
|
9927
10294
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
9928
10295
|
_fingerprintNode(ctx, node->namespaces, node, "namespaces", depth + 1);
|
|
9929
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10296
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->namespaces) == 1 && linitial(node->namespaces) == NIL)) {
|
|
9930
10297
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
9931
10298
|
if (ctx->write_tokens)
|
|
9932
10299
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10037,7 +10404,7 @@ _fingerprintTypeName(FingerprintContext *ctx, const TypeName *node, const void *
|
|
|
10037
10404
|
|
|
10038
10405
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10039
10406
|
_fingerprintNode(ctx, node->arrayBounds, node, "arrayBounds", depth + 1);
|
|
10040
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10407
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->arrayBounds) == 1 && linitial(node->arrayBounds) == NIL)) {
|
|
10041
10408
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10042
10409
|
if (ctx->write_tokens)
|
|
10043
10410
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10055,7 +10422,7 @@ _fingerprintTypeName(FingerprintContext *ctx, const TypeName *node, const void *
|
|
|
10055
10422
|
|
|
10056
10423
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10057
10424
|
_fingerprintNode(ctx, node->names, node, "names", depth + 1);
|
|
10058
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10425
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->names) == 1 && linitial(node->names) == NIL)) {
|
|
10059
10426
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10060
10427
|
if (ctx->write_tokens)
|
|
10061
10428
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10095,7 +10462,7 @@ _fingerprintTypeName(FingerprintContext *ctx, const TypeName *node, const void *
|
|
|
10095
10462
|
|
|
10096
10463
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10097
10464
|
_fingerprintNode(ctx, node->typmods, node, "typmods", depth + 1);
|
|
10098
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10465
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->typmods) == 1 && linitial(node->typmods) == NIL)) {
|
|
10099
10466
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10100
10467
|
if (ctx->write_tokens)
|
|
10101
10468
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10136,6 +10503,11 @@ _fingerprintColumnDef(FingerprintContext *ctx, const ColumnDef *node, const void
|
|
|
10136
10503
|
_fingerprintString(ctx, node->colname);
|
|
10137
10504
|
}
|
|
10138
10505
|
|
|
10506
|
+
if (node->compression != NULL) {
|
|
10507
|
+
_fingerprintString(ctx, "compression");
|
|
10508
|
+
_fingerprintString(ctx, node->compression);
|
|
10509
|
+
}
|
|
10510
|
+
|
|
10139
10511
|
if (node->constraints != NULL && node->constraints->length > 0) {
|
|
10140
10512
|
XXH3_state_t* prev = XXH3_createState();
|
|
10141
10513
|
XXH64_hash_t hash;
|
|
@@ -10145,7 +10517,7 @@ _fingerprintColumnDef(FingerprintContext *ctx, const ColumnDef *node, const void
|
|
|
10145
10517
|
|
|
10146
10518
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10147
10519
|
_fingerprintNode(ctx, node->constraints, node, "constraints", depth + 1);
|
|
10148
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10520
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->constraints) == 1 && linitial(node->constraints) == NIL)) {
|
|
10149
10521
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10150
10522
|
if (ctx->write_tokens)
|
|
10151
10523
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10178,7 +10550,7 @@ _fingerprintColumnDef(FingerprintContext *ctx, const ColumnDef *node, const void
|
|
|
10178
10550
|
|
|
10179
10551
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10180
10552
|
_fingerprintNode(ctx, node->fdwoptions, node, "fdwoptions", depth + 1);
|
|
10181
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10553
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->fdwoptions) == 1 && linitial(node->fdwoptions) == NIL)) {
|
|
10182
10554
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10183
10555
|
if (ctx->write_tokens)
|
|
10184
10556
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10292,7 +10664,7 @@ _fingerprintIndexElem(FingerprintContext *ctx, const IndexElem *node, const void
|
|
|
10292
10664
|
|
|
10293
10665
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10294
10666
|
_fingerprintNode(ctx, node->collation, node, "collation", depth + 1);
|
|
10295
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10667
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->collation) == 1 && linitial(node->collation) == NIL)) {
|
|
10296
10668
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10297
10669
|
if (ctx->write_tokens)
|
|
10298
10670
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10340,7 +10712,7 @@ _fingerprintIndexElem(FingerprintContext *ctx, const IndexElem *node, const void
|
|
|
10340
10712
|
|
|
10341
10713
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10342
10714
|
_fingerprintNode(ctx, node->opclass, node, "opclass", depth + 1);
|
|
10343
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10715
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opclass) == 1 && linitial(node->opclass) == NIL)) {
|
|
10344
10716
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10345
10717
|
if (ctx->write_tokens)
|
|
10346
10718
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10356,7 +10728,7 @@ _fingerprintIndexElem(FingerprintContext *ctx, const IndexElem *node, const void
|
|
|
10356
10728
|
|
|
10357
10729
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10358
10730
|
_fingerprintNode(ctx, node->opclassopts, node, "opclassopts", depth + 1);
|
|
10359
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10731
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opclassopts) == 1 && linitial(node->opclassopts) == NIL)) {
|
|
10360
10732
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10361
10733
|
if (ctx->write_tokens)
|
|
10362
10734
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10371,12 +10743,39 @@ _fingerprintIndexElem(FingerprintContext *ctx, const IndexElem *node, const void
|
|
|
10371
10743
|
}
|
|
10372
10744
|
|
|
10373
10745
|
static void
|
|
10374
|
-
|
|
10746
|
+
_fingerprintStatsElem(FingerprintContext *ctx, const StatsElem *node, const void *parent, const char *field_name, unsigned int depth)
|
|
10375
10747
|
{
|
|
10376
|
-
if (node->
|
|
10377
|
-
|
|
10378
|
-
|
|
10379
|
-
|
|
10748
|
+
if (node->expr != NULL) {
|
|
10749
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
10750
|
+
XXH64_hash_t hash;
|
|
10751
|
+
|
|
10752
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
10753
|
+
_fingerprintString(ctx, "expr");
|
|
10754
|
+
|
|
10755
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10756
|
+
_fingerprintNode(ctx, node->expr, node, "expr", depth + 1);
|
|
10757
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10758
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
10759
|
+
if (ctx->write_tokens)
|
|
10760
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
10761
|
+
}
|
|
10762
|
+
XXH3_freeState(prev);
|
|
10763
|
+
}
|
|
10764
|
+
|
|
10765
|
+
if (node->name != NULL) {
|
|
10766
|
+
_fingerprintString(ctx, "name");
|
|
10767
|
+
_fingerprintString(ctx, node->name);
|
|
10768
|
+
}
|
|
10769
|
+
|
|
10770
|
+
}
|
|
10771
|
+
|
|
10772
|
+
static void
|
|
10773
|
+
_fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const void *parent, const char *field_name, unsigned int depth)
|
|
10774
|
+
{
|
|
10775
|
+
if (node->access_method != NULL) {
|
|
10776
|
+
_fingerprintString(ctx, "access_method");
|
|
10777
|
+
_fingerprintString(ctx, node->access_method);
|
|
10778
|
+
}
|
|
10380
10779
|
|
|
10381
10780
|
if (node->conname != NULL) {
|
|
10382
10781
|
_fingerprintString(ctx, "conname");
|
|
@@ -10407,7 +10806,7 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
|
|
|
10407
10806
|
|
|
10408
10807
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10409
10808
|
_fingerprintNode(ctx, node->exclusions, node, "exclusions", depth + 1);
|
|
10410
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10809
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->exclusions) == 1 && linitial(node->exclusions) == NIL)) {
|
|
10411
10810
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10412
10811
|
if (ctx->write_tokens)
|
|
10413
10812
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10423,7 +10822,7 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
|
|
|
10423
10822
|
|
|
10424
10823
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10425
10824
|
_fingerprintNode(ctx, node->fk_attrs, node, "fk_attrs", depth + 1);
|
|
10426
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10825
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->fk_attrs) == 1 && linitial(node->fk_attrs) == NIL)) {
|
|
10427
10826
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10428
10827
|
if (ctx->write_tokens)
|
|
10429
10828
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10436,6 +10835,22 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
|
|
|
10436
10835
|
_fingerprintString(ctx, buffer);
|
|
10437
10836
|
}
|
|
10438
10837
|
|
|
10838
|
+
if (node->fk_del_set_cols != NULL && node->fk_del_set_cols->length > 0) {
|
|
10839
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
10840
|
+
XXH64_hash_t hash;
|
|
10841
|
+
|
|
10842
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
10843
|
+
_fingerprintString(ctx, "fk_del_set_cols");
|
|
10844
|
+
|
|
10845
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10846
|
+
_fingerprintNode(ctx, node->fk_del_set_cols, node, "fk_del_set_cols", depth + 1);
|
|
10847
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->fk_del_set_cols) == 1 && linitial(node->fk_del_set_cols) == NIL)) {
|
|
10848
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
10849
|
+
if (ctx->write_tokens)
|
|
10850
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
10851
|
+
}
|
|
10852
|
+
XXH3_freeState(prev);
|
|
10853
|
+
}
|
|
10439
10854
|
if (node->fk_matchtype != 0) {
|
|
10440
10855
|
char buffer[2] = {node->fk_matchtype, '\0'};
|
|
10441
10856
|
_fingerprintString(ctx, "fk_matchtype");
|
|
@@ -10463,7 +10878,7 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
|
|
|
10463
10878
|
|
|
10464
10879
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10465
10880
|
_fingerprintNode(ctx, node->including, node, "including", depth + 1);
|
|
10466
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10881
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->including) == 1 && linitial(node->including) == NIL)) {
|
|
10467
10882
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10468
10883
|
if (ctx->write_tokens)
|
|
10469
10884
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10504,7 +10919,7 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
|
|
|
10504
10919
|
|
|
10505
10920
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10506
10921
|
_fingerprintNode(ctx, node->keys, node, "keys", depth + 1);
|
|
10507
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10922
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->keys) == 1 && linitial(node->keys) == NIL)) {
|
|
10508
10923
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10509
10924
|
if (ctx->write_tokens)
|
|
10510
10925
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10513,6 +10928,11 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
|
|
|
10513
10928
|
}
|
|
10514
10929
|
// Intentionally ignoring node->location for fingerprinting
|
|
10515
10930
|
|
|
10931
|
+
if (node->nulls_not_distinct) {
|
|
10932
|
+
_fingerprintString(ctx, "nulls_not_distinct");
|
|
10933
|
+
_fingerprintString(ctx, "true");
|
|
10934
|
+
}
|
|
10935
|
+
|
|
10516
10936
|
if (node->old_conpfeqop != NULL && node->old_conpfeqop->length > 0) {
|
|
10517
10937
|
XXH3_state_t* prev = XXH3_createState();
|
|
10518
10938
|
XXH64_hash_t hash;
|
|
@@ -10522,7 +10942,7 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
|
|
|
10522
10942
|
|
|
10523
10943
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10524
10944
|
_fingerprintNode(ctx, node->old_conpfeqop, node, "old_conpfeqop", depth + 1);
|
|
10525
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10945
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->old_conpfeqop) == 1 && linitial(node->old_conpfeqop) == NIL)) {
|
|
10526
10946
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10527
10947
|
if (ctx->write_tokens)
|
|
10528
10948
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10545,7 +10965,7 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
|
|
|
10545
10965
|
|
|
10546
10966
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10547
10967
|
_fingerprintNode(ctx, node->options, node, "options", depth + 1);
|
|
10548
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10968
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->options) == 1 && linitial(node->options) == NIL)) {
|
|
10549
10969
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10550
10970
|
if (ctx->write_tokens)
|
|
10551
10971
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10561,7 +10981,7 @@ _fingerprintConstraint(FingerprintContext *ctx, const Constraint *node, const vo
|
|
|
10561
10981
|
|
|
10562
10982
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10563
10983
|
_fingerprintNode(ctx, node->pk_attrs, node, "pk_attrs", depth + 1);
|
|
10564
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
10984
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->pk_attrs) == 1 && linitial(node->pk_attrs) == NIL)) {
|
|
10565
10985
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10566
10986
|
if (ctx->write_tokens)
|
|
10567
10987
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10706,7 +11126,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
|
|
|
10706
11126
|
|
|
10707
11127
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10708
11128
|
_fingerprintNode(ctx, node->colcollations, node, "colcollations", depth + 1);
|
|
10709
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11129
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->colcollations) == 1 && linitial(node->colcollations) == NIL)) {
|
|
10710
11130
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10711
11131
|
if (ctx->write_tokens)
|
|
10712
11132
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10722,7 +11142,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
|
|
|
10722
11142
|
|
|
10723
11143
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10724
11144
|
_fingerprintNode(ctx, node->coltypes, node, "coltypes", depth + 1);
|
|
10725
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11145
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->coltypes) == 1 && linitial(node->coltypes) == NIL)) {
|
|
10726
11146
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10727
11147
|
if (ctx->write_tokens)
|
|
10728
11148
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10738,7 +11158,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
|
|
|
10738
11158
|
|
|
10739
11159
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10740
11160
|
_fingerprintNode(ctx, node->coltypmods, node, "coltypmods", depth + 1);
|
|
10741
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11161
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->coltypmods) == 1 && linitial(node->coltypmods) == NIL)) {
|
|
10742
11162
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10743
11163
|
if (ctx->write_tokens)
|
|
10744
11164
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10815,7 +11235,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
|
|
|
10815
11235
|
|
|
10816
11236
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10817
11237
|
_fingerprintNode(ctx, node->functions, node, "functions", depth + 1);
|
|
10818
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11238
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->functions) == 1 && linitial(node->functions) == NIL)) {
|
|
10819
11239
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10820
11240
|
if (ctx->write_tokens)
|
|
10821
11241
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10847,6 +11267,23 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
|
|
|
10847
11267
|
bms_free(bms);
|
|
10848
11268
|
}
|
|
10849
11269
|
|
|
11270
|
+
if (node->join_using_alias != NULL) {
|
|
11271
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
11272
|
+
XXH64_hash_t hash;
|
|
11273
|
+
|
|
11274
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
11275
|
+
_fingerprintString(ctx, "join_using_alias");
|
|
11276
|
+
|
|
11277
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11278
|
+
_fingerprintAlias(ctx, node->join_using_alias, node, "join_using_alias", depth + 1);
|
|
11279
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11280
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
11281
|
+
if (ctx->write_tokens)
|
|
11282
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
11283
|
+
}
|
|
11284
|
+
XXH3_freeState(prev);
|
|
11285
|
+
}
|
|
11286
|
+
|
|
10850
11287
|
if (node->joinaliasvars != NULL && node->joinaliasvars->length > 0) {
|
|
10851
11288
|
XXH3_state_t* prev = XXH3_createState();
|
|
10852
11289
|
XXH64_hash_t hash;
|
|
@@ -10856,7 +11293,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
|
|
|
10856
11293
|
|
|
10857
11294
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10858
11295
|
_fingerprintNode(ctx, node->joinaliasvars, node, "joinaliasvars", depth + 1);
|
|
10859
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11296
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->joinaliasvars) == 1 && linitial(node->joinaliasvars) == NIL)) {
|
|
10860
11297
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10861
11298
|
if (ctx->write_tokens)
|
|
10862
11299
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10872,7 +11309,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
|
|
|
10872
11309
|
|
|
10873
11310
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10874
11311
|
_fingerprintNode(ctx, node->joinleftcols, node, "joinleftcols", depth + 1);
|
|
10875
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11312
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->joinleftcols) == 1 && linitial(node->joinleftcols) == NIL)) {
|
|
10876
11313
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10877
11314
|
if (ctx->write_tokens)
|
|
10878
11315
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10895,7 +11332,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
|
|
|
10895
11332
|
|
|
10896
11333
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10897
11334
|
_fingerprintNode(ctx, node->joinrightcols, node, "joinrightcols", depth + 1);
|
|
10898
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11335
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->joinrightcols) == 1 && linitial(node->joinrightcols) == NIL)) {
|
|
10899
11336
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10900
11337
|
if (ctx->write_tokens)
|
|
10901
11338
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -10953,7 +11390,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
|
|
|
10953
11390
|
|
|
10954
11391
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
10955
11392
|
_fingerprintNode(ctx, node->securityQuals, node, "securityQuals", depth + 1);
|
|
10956
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11393
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->securityQuals) == 1 && linitial(node->securityQuals) == NIL)) {
|
|
10957
11394
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
10958
11395
|
if (ctx->write_tokens)
|
|
10959
11396
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11060,7 +11497,7 @@ _fingerprintRangeTblEntry(FingerprintContext *ctx, const RangeTblEntry *node, co
|
|
|
11060
11497
|
|
|
11061
11498
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11062
11499
|
_fingerprintNode(ctx, node->values_lists, node, "values_lists", depth + 1);
|
|
11063
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11500
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->values_lists) == 1 && linitial(node->values_lists) == NIL)) {
|
|
11064
11501
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11065
11502
|
if (ctx->write_tokens)
|
|
11066
11503
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11081,7 +11518,7 @@ _fingerprintRangeTblFunction(FingerprintContext *ctx, const RangeTblFunction *no
|
|
|
11081
11518
|
|
|
11082
11519
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11083
11520
|
_fingerprintNode(ctx, node->funccolcollations, node, "funccolcollations", depth + 1);
|
|
11084
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11521
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funccolcollations) == 1 && linitial(node->funccolcollations) == NIL)) {
|
|
11085
11522
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11086
11523
|
if (ctx->write_tokens)
|
|
11087
11524
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11104,7 +11541,7 @@ _fingerprintRangeTblFunction(FingerprintContext *ctx, const RangeTblFunction *no
|
|
|
11104
11541
|
|
|
11105
11542
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11106
11543
|
_fingerprintNode(ctx, node->funccolnames, node, "funccolnames", depth + 1);
|
|
11107
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11544
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funccolnames) == 1 && linitial(node->funccolnames) == NIL)) {
|
|
11108
11545
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11109
11546
|
if (ctx->write_tokens)
|
|
11110
11547
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11120,7 +11557,7 @@ _fingerprintRangeTblFunction(FingerprintContext *ctx, const RangeTblFunction *no
|
|
|
11120
11557
|
|
|
11121
11558
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11122
11559
|
_fingerprintNode(ctx, node->funccoltypes, node, "funccoltypes", depth + 1);
|
|
11123
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11560
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funccoltypes) == 1 && linitial(node->funccoltypes) == NIL)) {
|
|
11124
11561
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11125
11562
|
if (ctx->write_tokens)
|
|
11126
11563
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11136,7 +11573,7 @@ _fingerprintRangeTblFunction(FingerprintContext *ctx, const RangeTblFunction *no
|
|
|
11136
11573
|
|
|
11137
11574
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11138
11575
|
_fingerprintNode(ctx, node->funccoltypmods, node, "funccoltypmods", depth + 1);
|
|
11139
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11576
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->funccoltypmods) == 1 && linitial(node->funccoltypmods) == NIL)) {
|
|
11140
11577
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11141
11578
|
if (ctx->write_tokens)
|
|
11142
11579
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11189,7 +11626,7 @@ _fingerprintTableSampleClause(FingerprintContext *ctx, const TableSampleClause *
|
|
|
11189
11626
|
|
|
11190
11627
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11191
11628
|
_fingerprintNode(ctx, node->args, node, "args", depth + 1);
|
|
11192
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11629
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->args) == 1 && linitial(node->args) == NIL)) {
|
|
11193
11630
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11194
11631
|
if (ctx->write_tokens)
|
|
11195
11632
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11312,7 +11749,7 @@ _fingerprintGroupingSet(FingerprintContext *ctx, const GroupingSet *node, const
|
|
|
11312
11749
|
|
|
11313
11750
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11314
11751
|
_fingerprintNode(ctx, node->content, node, "content", depth + 1);
|
|
11315
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11752
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->content) == 1 && linitial(node->content) == NIL)) {
|
|
11316
11753
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11317
11754
|
if (ctx->write_tokens)
|
|
11318
11755
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11398,7 +11835,7 @@ _fingerprintWindowClause(FingerprintContext *ctx, const WindowClause *node, cons
|
|
|
11398
11835
|
|
|
11399
11836
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11400
11837
|
_fingerprintNode(ctx, node->orderClause, node, "orderClause", depth + 1);
|
|
11401
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11838
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->orderClause) == 1 && linitial(node->orderClause) == NIL)) {
|
|
11402
11839
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11403
11840
|
if (ctx->write_tokens)
|
|
11404
11841
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11414,7 +11851,7 @@ _fingerprintWindowClause(FingerprintContext *ctx, const WindowClause *node, cons
|
|
|
11414
11851
|
|
|
11415
11852
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11416
11853
|
_fingerprintNode(ctx, node->partitionClause, node, "partitionClause", depth + 1);
|
|
11417
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11854
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->partitionClause) == 1 && linitial(node->partitionClause) == NIL)) {
|
|
11418
11855
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11419
11856
|
if (ctx->write_tokens)
|
|
11420
11857
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11426,6 +11863,22 @@ _fingerprintWindowClause(FingerprintContext *ctx, const WindowClause *node, cons
|
|
|
11426
11863
|
_fingerprintString(ctx, node->refname);
|
|
11427
11864
|
}
|
|
11428
11865
|
|
|
11866
|
+
if (node->runCondition != NULL && node->runCondition->length > 0) {
|
|
11867
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
11868
|
+
XXH64_hash_t hash;
|
|
11869
|
+
|
|
11870
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
11871
|
+
_fingerprintString(ctx, "runCondition");
|
|
11872
|
+
|
|
11873
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11874
|
+
_fingerprintNode(ctx, node->runCondition, node, "runCondition", depth + 1);
|
|
11875
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->runCondition) == 1 && linitial(node->runCondition) == NIL)) {
|
|
11876
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
11877
|
+
if (ctx->write_tokens)
|
|
11878
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
11879
|
+
}
|
|
11880
|
+
XXH3_freeState(prev);
|
|
11881
|
+
}
|
|
11429
11882
|
if (node->startInRangeFunc != 0) {
|
|
11430
11883
|
char buffer[50];
|
|
11431
11884
|
sprintf(buffer, "%d", node->startInRangeFunc);
|
|
@@ -11476,7 +11929,23 @@ _fingerprintObjectWithArgs(FingerprintContext *ctx, const ObjectWithArgs *node,
|
|
|
11476
11929
|
|
|
11477
11930
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11478
11931
|
_fingerprintNode(ctx, node->objargs, node, "objargs", depth + 1);
|
|
11479
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11932
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->objargs) == 1 && linitial(node->objargs) == NIL)) {
|
|
11933
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
11934
|
+
if (ctx->write_tokens)
|
|
11935
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
11936
|
+
}
|
|
11937
|
+
XXH3_freeState(prev);
|
|
11938
|
+
}
|
|
11939
|
+
if (node->objfuncargs != NULL && node->objfuncargs->length > 0) {
|
|
11940
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
11941
|
+
XXH64_hash_t hash;
|
|
11942
|
+
|
|
11943
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
11944
|
+
_fingerprintString(ctx, "objfuncargs");
|
|
11945
|
+
|
|
11946
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11947
|
+
_fingerprintNode(ctx, node->objfuncargs, node, "objfuncargs", depth + 1);
|
|
11948
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->objfuncargs) == 1 && linitial(node->objfuncargs) == NIL)) {
|
|
11480
11949
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11481
11950
|
if (ctx->write_tokens)
|
|
11482
11951
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11492,7 +11961,7 @@ _fingerprintObjectWithArgs(FingerprintContext *ctx, const ObjectWithArgs *node,
|
|
|
11492
11961
|
|
|
11493
11962
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11494
11963
|
_fingerprintNode(ctx, node->objname, node, "objname", depth + 1);
|
|
11495
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11964
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->objname) == 1 && linitial(node->objname) == NIL)) {
|
|
11496
11965
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11497
11966
|
if (ctx->write_tokens)
|
|
11498
11967
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11513,7 +11982,7 @@ _fingerprintAccessPriv(FingerprintContext *ctx, const AccessPriv *node, const vo
|
|
|
11513
11982
|
|
|
11514
11983
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11515
11984
|
_fingerprintNode(ctx, node->cols, node, "cols", depth + 1);
|
|
11516
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
11985
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->cols) == 1 && linitial(node->cols) == NIL)) {
|
|
11517
11986
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11518
11987
|
if (ctx->write_tokens)
|
|
11519
11988
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11539,7 +12008,7 @@ _fingerprintCreateOpClassItem(FingerprintContext *ctx, const CreateOpClassItem *
|
|
|
11539
12008
|
|
|
11540
12009
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11541
12010
|
_fingerprintNode(ctx, node->class_args, node, "class_args", depth + 1);
|
|
11542
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12011
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->class_args) == 1 && linitial(node->class_args) == NIL)) {
|
|
11543
12012
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11544
12013
|
if (ctx->write_tokens)
|
|
11545
12014
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11586,7 +12055,7 @@ _fingerprintCreateOpClassItem(FingerprintContext *ctx, const CreateOpClassItem *
|
|
|
11586
12055
|
|
|
11587
12056
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11588
12057
|
_fingerprintNode(ctx, node->order_family, node, "order_family", depth + 1);
|
|
11589
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12058
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->order_family) == 1 && linitial(node->order_family) == NIL)) {
|
|
11590
12059
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11591
12060
|
if (ctx->write_tokens)
|
|
11592
12061
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11639,6 +12108,13 @@ _fingerprintTableLikeClause(FingerprintContext *ctx, const TableLikeClause *node
|
|
|
11639
12108
|
XXH3_freeState(prev);
|
|
11640
12109
|
}
|
|
11641
12110
|
|
|
12111
|
+
if (node->relationOid != 0) {
|
|
12112
|
+
char buffer[50];
|
|
12113
|
+
sprintf(buffer, "%d", node->relationOid);
|
|
12114
|
+
_fingerprintString(ctx, "relationOid");
|
|
12115
|
+
_fingerprintString(ctx, buffer);
|
|
12116
|
+
}
|
|
12117
|
+
|
|
11642
12118
|
}
|
|
11643
12119
|
|
|
11644
12120
|
static void
|
|
@@ -11683,10 +12159,7 @@ _fingerprintFunctionParameter(FingerprintContext *ctx, const FunctionParameter *
|
|
|
11683
12159
|
_fingerprintString(ctx, _enumToStringFunctionParameterMode(node->mode));
|
|
11684
12160
|
}
|
|
11685
12161
|
|
|
11686
|
-
|
|
11687
|
-
_fingerprintString(ctx, "name");
|
|
11688
|
-
_fingerprintString(ctx, node->name);
|
|
11689
|
-
}
|
|
12162
|
+
// Intentionally ignoring node->name for fingerprinting
|
|
11690
12163
|
|
|
11691
12164
|
}
|
|
11692
12165
|
|
|
@@ -11702,7 +12175,7 @@ _fingerprintLockingClause(FingerprintContext *ctx, const LockingClause *node, co
|
|
|
11702
12175
|
|
|
11703
12176
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11704
12177
|
_fingerprintNode(ctx, node->lockedRels, node, "lockedRels", depth + 1);
|
|
11705
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12178
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->lockedRels) == 1 && linitial(node->lockedRels) == NIL)) {
|
|
11706
12179
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11707
12180
|
if (ctx->write_tokens)
|
|
11708
12181
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11806,7 +12279,7 @@ _fingerprintWithClause(FingerprintContext *ctx, const WithClause *node, const vo
|
|
|
11806
12279
|
|
|
11807
12280
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11808
12281
|
_fingerprintNode(ctx, node->ctes, node, "ctes", depth + 1);
|
|
11809
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12282
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->ctes) == 1 && linitial(node->ctes) == NIL)) {
|
|
11810
12283
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11811
12284
|
if (ctx->write_tokens)
|
|
11812
12285
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11839,7 +12312,7 @@ _fingerprintInferClause(FingerprintContext *ctx, const InferClause *node, const
|
|
|
11839
12312
|
|
|
11840
12313
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11841
12314
|
_fingerprintNode(ctx, node->indexElems, node, "indexElems", depth + 1);
|
|
11842
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12315
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->indexElems) == 1 && linitial(node->indexElems) == NIL)) {
|
|
11843
12316
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11844
12317
|
if (ctx->write_tokens)
|
|
11845
12318
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11903,7 +12376,7 @@ _fingerprintOnConflictClause(FingerprintContext *ctx, const OnConflictClause *no
|
|
|
11903
12376
|
|
|
11904
12377
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11905
12378
|
_fingerprintNode(ctx, node->targetList, node, "targetList", depth + 1);
|
|
11906
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12379
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->targetList) == 1 && linitial(node->targetList) == NIL)) {
|
|
11907
12380
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11908
12381
|
if (ctx->write_tokens)
|
|
11909
12382
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11929,6 +12402,134 @@ _fingerprintOnConflictClause(FingerprintContext *ctx, const OnConflictClause *no
|
|
|
11929
12402
|
|
|
11930
12403
|
}
|
|
11931
12404
|
|
|
12405
|
+
static void
|
|
12406
|
+
_fingerprintCTESearchClause(FingerprintContext *ctx, const CTESearchClause *node, const void *parent, const char *field_name, unsigned int depth)
|
|
12407
|
+
{
|
|
12408
|
+
// Intentionally ignoring node->location for fingerprinting
|
|
12409
|
+
|
|
12410
|
+
if (node->search_breadth_first) {
|
|
12411
|
+
_fingerprintString(ctx, "search_breadth_first");
|
|
12412
|
+
_fingerprintString(ctx, "true");
|
|
12413
|
+
}
|
|
12414
|
+
|
|
12415
|
+
if (node->search_col_list != NULL && node->search_col_list->length > 0) {
|
|
12416
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
12417
|
+
XXH64_hash_t hash;
|
|
12418
|
+
|
|
12419
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
12420
|
+
_fingerprintString(ctx, "search_col_list");
|
|
12421
|
+
|
|
12422
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12423
|
+
_fingerprintNode(ctx, node->search_col_list, node, "search_col_list", depth + 1);
|
|
12424
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->search_col_list) == 1 && linitial(node->search_col_list) == NIL)) {
|
|
12425
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
12426
|
+
if (ctx->write_tokens)
|
|
12427
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
12428
|
+
}
|
|
12429
|
+
XXH3_freeState(prev);
|
|
12430
|
+
}
|
|
12431
|
+
if (node->search_seq_column != NULL) {
|
|
12432
|
+
_fingerprintString(ctx, "search_seq_column");
|
|
12433
|
+
_fingerprintString(ctx, node->search_seq_column);
|
|
12434
|
+
}
|
|
12435
|
+
|
|
12436
|
+
}
|
|
12437
|
+
|
|
12438
|
+
static void
|
|
12439
|
+
_fingerprintCTECycleClause(FingerprintContext *ctx, const CTECycleClause *node, const void *parent, const char *field_name, unsigned int depth)
|
|
12440
|
+
{
|
|
12441
|
+
if (node->cycle_col_list != NULL && node->cycle_col_list->length > 0) {
|
|
12442
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
12443
|
+
XXH64_hash_t hash;
|
|
12444
|
+
|
|
12445
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
12446
|
+
_fingerprintString(ctx, "cycle_col_list");
|
|
12447
|
+
|
|
12448
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12449
|
+
_fingerprintNode(ctx, node->cycle_col_list, node, "cycle_col_list", depth + 1);
|
|
12450
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->cycle_col_list) == 1 && linitial(node->cycle_col_list) == NIL)) {
|
|
12451
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
12452
|
+
if (ctx->write_tokens)
|
|
12453
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
12454
|
+
}
|
|
12455
|
+
XXH3_freeState(prev);
|
|
12456
|
+
}
|
|
12457
|
+
if (node->cycle_mark_collation != 0) {
|
|
12458
|
+
char buffer[50];
|
|
12459
|
+
sprintf(buffer, "%d", node->cycle_mark_collation);
|
|
12460
|
+
_fingerprintString(ctx, "cycle_mark_collation");
|
|
12461
|
+
_fingerprintString(ctx, buffer);
|
|
12462
|
+
}
|
|
12463
|
+
|
|
12464
|
+
if (node->cycle_mark_column != NULL) {
|
|
12465
|
+
_fingerprintString(ctx, "cycle_mark_column");
|
|
12466
|
+
_fingerprintString(ctx, node->cycle_mark_column);
|
|
12467
|
+
}
|
|
12468
|
+
|
|
12469
|
+
if (node->cycle_mark_default != NULL) {
|
|
12470
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
12471
|
+
XXH64_hash_t hash;
|
|
12472
|
+
|
|
12473
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
12474
|
+
_fingerprintString(ctx, "cycle_mark_default");
|
|
12475
|
+
|
|
12476
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12477
|
+
_fingerprintNode(ctx, node->cycle_mark_default, node, "cycle_mark_default", depth + 1);
|
|
12478
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12479
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
12480
|
+
if (ctx->write_tokens)
|
|
12481
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
12482
|
+
}
|
|
12483
|
+
XXH3_freeState(prev);
|
|
12484
|
+
}
|
|
12485
|
+
|
|
12486
|
+
if (node->cycle_mark_neop != 0) {
|
|
12487
|
+
char buffer[50];
|
|
12488
|
+
sprintf(buffer, "%d", node->cycle_mark_neop);
|
|
12489
|
+
_fingerprintString(ctx, "cycle_mark_neop");
|
|
12490
|
+
_fingerprintString(ctx, buffer);
|
|
12491
|
+
}
|
|
12492
|
+
|
|
12493
|
+
if (node->cycle_mark_type != 0) {
|
|
12494
|
+
char buffer[50];
|
|
12495
|
+
sprintf(buffer, "%d", node->cycle_mark_type);
|
|
12496
|
+
_fingerprintString(ctx, "cycle_mark_type");
|
|
12497
|
+
_fingerprintString(ctx, buffer);
|
|
12498
|
+
}
|
|
12499
|
+
|
|
12500
|
+
if (node->cycle_mark_typmod != 0) {
|
|
12501
|
+
char buffer[50];
|
|
12502
|
+
sprintf(buffer, "%d", node->cycle_mark_typmod);
|
|
12503
|
+
_fingerprintString(ctx, "cycle_mark_typmod");
|
|
12504
|
+
_fingerprintString(ctx, buffer);
|
|
12505
|
+
}
|
|
12506
|
+
|
|
12507
|
+
if (node->cycle_mark_value != NULL) {
|
|
12508
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
12509
|
+
XXH64_hash_t hash;
|
|
12510
|
+
|
|
12511
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
12512
|
+
_fingerprintString(ctx, "cycle_mark_value");
|
|
12513
|
+
|
|
12514
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12515
|
+
_fingerprintNode(ctx, node->cycle_mark_value, node, "cycle_mark_value", depth + 1);
|
|
12516
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12517
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
12518
|
+
if (ctx->write_tokens)
|
|
12519
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
12520
|
+
}
|
|
12521
|
+
XXH3_freeState(prev);
|
|
12522
|
+
}
|
|
12523
|
+
|
|
12524
|
+
if (node->cycle_path_column != NULL) {
|
|
12525
|
+
_fingerprintString(ctx, "cycle_path_column");
|
|
12526
|
+
_fingerprintString(ctx, node->cycle_path_column);
|
|
12527
|
+
}
|
|
12528
|
+
|
|
12529
|
+
// Intentionally ignoring node->location for fingerprinting
|
|
12530
|
+
|
|
12531
|
+
}
|
|
12532
|
+
|
|
11932
12533
|
static void
|
|
11933
12534
|
_fingerprintCommonTableExpr(FingerprintContext *ctx, const CommonTableExpr *node, const void *parent, const char *field_name, unsigned int depth)
|
|
11934
12535
|
{
|
|
@@ -11941,7 +12542,7 @@ _fingerprintCommonTableExpr(FingerprintContext *ctx, const CommonTableExpr *node
|
|
|
11941
12542
|
|
|
11942
12543
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11943
12544
|
_fingerprintNode(ctx, node->aliascolnames, node, "aliascolnames", depth + 1);
|
|
11944
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12545
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->aliascolnames) == 1 && linitial(node->aliascolnames) == NIL)) {
|
|
11945
12546
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11946
12547
|
if (ctx->write_tokens)
|
|
11947
12548
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11957,7 +12558,7 @@ _fingerprintCommonTableExpr(FingerprintContext *ctx, const CommonTableExpr *node
|
|
|
11957
12558
|
|
|
11958
12559
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11959
12560
|
_fingerprintNode(ctx, node->ctecolcollations, node, "ctecolcollations", depth + 1);
|
|
11960
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12561
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->ctecolcollations) == 1 && linitial(node->ctecolcollations) == NIL)) {
|
|
11961
12562
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11962
12563
|
if (ctx->write_tokens)
|
|
11963
12564
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11973,7 +12574,7 @@ _fingerprintCommonTableExpr(FingerprintContext *ctx, const CommonTableExpr *node
|
|
|
11973
12574
|
|
|
11974
12575
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11975
12576
|
_fingerprintNode(ctx, node->ctecolnames, node, "ctecolnames", depth + 1);
|
|
11976
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12577
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->ctecolnames) == 1 && linitial(node->ctecolnames) == NIL)) {
|
|
11977
12578
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11978
12579
|
if (ctx->write_tokens)
|
|
11979
12580
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -11989,7 +12590,7 @@ _fingerprintCommonTableExpr(FingerprintContext *ctx, const CommonTableExpr *node
|
|
|
11989
12590
|
|
|
11990
12591
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
11991
12592
|
_fingerprintNode(ctx, node->ctecoltypes, node, "ctecoltypes", depth + 1);
|
|
11992
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12593
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->ctecoltypes) == 1 && linitial(node->ctecoltypes) == NIL)) {
|
|
11993
12594
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
11994
12595
|
if (ctx->write_tokens)
|
|
11995
12596
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -12005,7 +12606,7 @@ _fingerprintCommonTableExpr(FingerprintContext *ctx, const CommonTableExpr *node
|
|
|
12005
12606
|
|
|
12006
12607
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12007
12608
|
_fingerprintNode(ctx, node->ctecoltypmods, node, "ctecoltypmods", depth + 1);
|
|
12008
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12609
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->ctecoltypmods) == 1 && linitial(node->ctecoltypmods) == NIL)) {
|
|
12009
12610
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
12010
12611
|
if (ctx->write_tokens)
|
|
12011
12612
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -12051,8 +12652,111 @@ _fingerprintCommonTableExpr(FingerprintContext *ctx, const CommonTableExpr *node
|
|
|
12051
12652
|
_fingerprintString(ctx, buffer);
|
|
12052
12653
|
}
|
|
12053
12654
|
|
|
12655
|
+
if (node->cycle_clause != NULL) {
|
|
12656
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
12657
|
+
XXH64_hash_t hash;
|
|
12658
|
+
|
|
12659
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
12660
|
+
_fingerprintString(ctx, "cycle_clause");
|
|
12661
|
+
|
|
12662
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12663
|
+
_fingerprintCTECycleClause(ctx, node->cycle_clause, node, "cycle_clause", depth + 1);
|
|
12664
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12665
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
12666
|
+
if (ctx->write_tokens)
|
|
12667
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
12668
|
+
}
|
|
12669
|
+
XXH3_freeState(prev);
|
|
12670
|
+
}
|
|
12671
|
+
|
|
12054
12672
|
// Intentionally ignoring node->location for fingerprinting
|
|
12055
12673
|
|
|
12674
|
+
if (node->search_clause != NULL) {
|
|
12675
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
12676
|
+
XXH64_hash_t hash;
|
|
12677
|
+
|
|
12678
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
12679
|
+
_fingerprintString(ctx, "search_clause");
|
|
12680
|
+
|
|
12681
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12682
|
+
_fingerprintCTESearchClause(ctx, node->search_clause, node, "search_clause", depth + 1);
|
|
12683
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12684
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
12685
|
+
if (ctx->write_tokens)
|
|
12686
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
12687
|
+
}
|
|
12688
|
+
XXH3_freeState(prev);
|
|
12689
|
+
}
|
|
12690
|
+
|
|
12691
|
+
}
|
|
12692
|
+
|
|
12693
|
+
static void
|
|
12694
|
+
_fingerprintMergeWhenClause(FingerprintContext *ctx, const MergeWhenClause *node, const void *parent, const char *field_name, unsigned int depth)
|
|
12695
|
+
{
|
|
12696
|
+
if (true) {
|
|
12697
|
+
_fingerprintString(ctx, "commandType");
|
|
12698
|
+
_fingerprintString(ctx, _enumToStringCmdType(node->commandType));
|
|
12699
|
+
}
|
|
12700
|
+
|
|
12701
|
+
if (node->condition != NULL) {
|
|
12702
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
12703
|
+
XXH64_hash_t hash;
|
|
12704
|
+
|
|
12705
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
12706
|
+
_fingerprintString(ctx, "condition");
|
|
12707
|
+
|
|
12708
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12709
|
+
_fingerprintNode(ctx, node->condition, node, "condition", depth + 1);
|
|
12710
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12711
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
12712
|
+
if (ctx->write_tokens)
|
|
12713
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
12714
|
+
}
|
|
12715
|
+
XXH3_freeState(prev);
|
|
12716
|
+
}
|
|
12717
|
+
|
|
12718
|
+
if (node->matched) {
|
|
12719
|
+
_fingerprintString(ctx, "matched");
|
|
12720
|
+
_fingerprintString(ctx, "true");
|
|
12721
|
+
}
|
|
12722
|
+
|
|
12723
|
+
if (true) {
|
|
12724
|
+
_fingerprintString(ctx, "override");
|
|
12725
|
+
_fingerprintString(ctx, _enumToStringOverridingKind(node->override));
|
|
12726
|
+
}
|
|
12727
|
+
|
|
12728
|
+
if (node->targetList != NULL && node->targetList->length > 0) {
|
|
12729
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
12730
|
+
XXH64_hash_t hash;
|
|
12731
|
+
|
|
12732
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
12733
|
+
_fingerprintString(ctx, "targetList");
|
|
12734
|
+
|
|
12735
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12736
|
+
_fingerprintNode(ctx, node->targetList, node, "targetList", depth + 1);
|
|
12737
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->targetList) == 1 && linitial(node->targetList) == NIL)) {
|
|
12738
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
12739
|
+
if (ctx->write_tokens)
|
|
12740
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
12741
|
+
}
|
|
12742
|
+
XXH3_freeState(prev);
|
|
12743
|
+
}
|
|
12744
|
+
if (node->values != NULL && node->values->length > 0) {
|
|
12745
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
12746
|
+
XXH64_hash_t hash;
|
|
12747
|
+
|
|
12748
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
12749
|
+
_fingerprintString(ctx, "values");
|
|
12750
|
+
|
|
12751
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12752
|
+
_fingerprintNode(ctx, node->values, node, "values", depth + 1);
|
|
12753
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->values) == 1 && linitial(node->values) == NIL)) {
|
|
12754
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
12755
|
+
if (ctx->write_tokens)
|
|
12756
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
12757
|
+
}
|
|
12758
|
+
XXH3_freeState(prev);
|
|
12759
|
+
}
|
|
12056
12760
|
}
|
|
12057
12761
|
|
|
12058
12762
|
static void
|
|
@@ -12104,7 +12808,7 @@ _fingerprintPartitionElem(FingerprintContext *ctx, const PartitionElem *node, co
|
|
|
12104
12808
|
|
|
12105
12809
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12106
12810
|
_fingerprintNode(ctx, node->collation, node, "collation", depth + 1);
|
|
12107
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12811
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->collation) == 1 && linitial(node->collation) == NIL)) {
|
|
12108
12812
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
12109
12813
|
if (ctx->write_tokens)
|
|
12110
12814
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -12144,7 +12848,7 @@ _fingerprintPartitionElem(FingerprintContext *ctx, const PartitionElem *node, co
|
|
|
12144
12848
|
|
|
12145
12849
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12146
12850
|
_fingerprintNode(ctx, node->opclass, node, "opclass", depth + 1);
|
|
12147
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12851
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->opclass) == 1 && linitial(node->opclass) == NIL)) {
|
|
12148
12852
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
12149
12853
|
if (ctx->write_tokens)
|
|
12150
12854
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -12167,7 +12871,7 @@ _fingerprintPartitionSpec(FingerprintContext *ctx, const PartitionSpec *node, co
|
|
|
12167
12871
|
|
|
12168
12872
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12169
12873
|
_fingerprintNode(ctx, node->partParams, node, "partParams", depth + 1);
|
|
12170
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12874
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->partParams) == 1 && linitial(node->partParams) == NIL)) {
|
|
12171
12875
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
12172
12876
|
if (ctx->write_tokens)
|
|
12173
12877
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -12198,7 +12902,7 @@ _fingerprintPartitionBoundSpec(FingerprintContext *ctx, const PartitionBoundSpec
|
|
|
12198
12902
|
|
|
12199
12903
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12200
12904
|
_fingerprintNode(ctx, node->listdatums, node, "listdatums", depth + 1);
|
|
12201
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12905
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->listdatums) == 1 && linitial(node->listdatums) == NIL)) {
|
|
12202
12906
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
12203
12907
|
if (ctx->write_tokens)
|
|
12204
12908
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -12216,7 +12920,7 @@ _fingerprintPartitionBoundSpec(FingerprintContext *ctx, const PartitionBoundSpec
|
|
|
12216
12920
|
|
|
12217
12921
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12218
12922
|
_fingerprintNode(ctx, node->lowerdatums, node, "lowerdatums", depth + 1);
|
|
12219
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12923
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->lowerdatums) == 1 && linitial(node->lowerdatums) == NIL)) {
|
|
12220
12924
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
12221
12925
|
if (ctx->write_tokens)
|
|
12222
12926
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -12252,7 +12956,7 @@ _fingerprintPartitionBoundSpec(FingerprintContext *ctx, const PartitionBoundSpec
|
|
|
12252
12956
|
|
|
12253
12957
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12254
12958
|
_fingerprintNode(ctx, node->upperdatums, node, "upperdatums", depth + 1);
|
|
12255
|
-
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12959
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->upperdatums) == 1 && linitial(node->upperdatums) == NIL)) {
|
|
12256
12960
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
12257
12961
|
if (ctx->write_tokens)
|
|
12258
12962
|
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
@@ -12310,6 +13014,11 @@ _fingerprintPartitionCmd(FingerprintContext *ctx, const PartitionCmd *node, cons
|
|
|
12310
13014
|
XXH3_freeState(prev);
|
|
12311
13015
|
}
|
|
12312
13016
|
|
|
13017
|
+
if (node->concurrent) {
|
|
13018
|
+
_fingerprintString(ctx, "concurrent");
|
|
13019
|
+
_fingerprintString(ctx, "true");
|
|
13020
|
+
}
|
|
13021
|
+
|
|
12313
13022
|
if (node->name != NULL) {
|
|
12314
13023
|
XXH3_state_t* prev = XXH3_createState();
|
|
12315
13024
|
XXH64_hash_t hash;
|
|
@@ -12365,6 +13074,39 @@ _fingerprintVacuumRelation(FingerprintContext *ctx, const VacuumRelation *node,
|
|
|
12365
13074
|
|
|
12366
13075
|
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
12367
13076
|
_fingerprintNode(ctx, node->va_cols, node, "va_cols", depth + 1);
|
|
13077
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->va_cols) == 1 && linitial(node->va_cols) == NIL)) {
|
|
13078
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
13079
|
+
if (ctx->write_tokens)
|
|
13080
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
13081
|
+
}
|
|
13082
|
+
XXH3_freeState(prev);
|
|
13083
|
+
}
|
|
13084
|
+
}
|
|
13085
|
+
|
|
13086
|
+
static void
|
|
13087
|
+
_fingerprintPublicationObjSpec(FingerprintContext *ctx, const PublicationObjSpec *node, const void *parent, const char *field_name, unsigned int depth)
|
|
13088
|
+
{
|
|
13089
|
+
// Intentionally ignoring node->location for fingerprinting
|
|
13090
|
+
|
|
13091
|
+
if (node->name != NULL) {
|
|
13092
|
+
_fingerprintString(ctx, "name");
|
|
13093
|
+
_fingerprintString(ctx, node->name);
|
|
13094
|
+
}
|
|
13095
|
+
|
|
13096
|
+
if (true) {
|
|
13097
|
+
_fingerprintString(ctx, "pubobjtype");
|
|
13098
|
+
_fingerprintString(ctx, _enumToStringPublicationObjSpecType(node->pubobjtype));
|
|
13099
|
+
}
|
|
13100
|
+
|
|
13101
|
+
if (node->pubtable != NULL) {
|
|
13102
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
13103
|
+
XXH64_hash_t hash;
|
|
13104
|
+
|
|
13105
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
13106
|
+
_fingerprintString(ctx, "pubtable");
|
|
13107
|
+
|
|
13108
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
13109
|
+
_fingerprintPublicationTable(ctx, node->pubtable, node, "pubtable", depth + 1);
|
|
12368
13110
|
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
12369
13111
|
XXH3_copyState(ctx->xxh_state, prev);
|
|
12370
13112
|
if (ctx->write_tokens)
|
|
@@ -12372,6 +13114,62 @@ _fingerprintVacuumRelation(FingerprintContext *ctx, const VacuumRelation *node,
|
|
|
12372
13114
|
}
|
|
12373
13115
|
XXH3_freeState(prev);
|
|
12374
13116
|
}
|
|
13117
|
+
|
|
13118
|
+
}
|
|
13119
|
+
|
|
13120
|
+
static void
|
|
13121
|
+
_fingerprintPublicationTable(FingerprintContext *ctx, const PublicationTable *node, const void *parent, const char *field_name, unsigned int depth)
|
|
13122
|
+
{
|
|
13123
|
+
if (node->columns != NULL && node->columns->length > 0) {
|
|
13124
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
13125
|
+
XXH64_hash_t hash;
|
|
13126
|
+
|
|
13127
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
13128
|
+
_fingerprintString(ctx, "columns");
|
|
13129
|
+
|
|
13130
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
13131
|
+
_fingerprintNode(ctx, node->columns, node, "columns", depth + 1);
|
|
13132
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state) && !(list_length(node->columns) == 1 && linitial(node->columns) == NIL)) {
|
|
13133
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
13134
|
+
if (ctx->write_tokens)
|
|
13135
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
13136
|
+
}
|
|
13137
|
+
XXH3_freeState(prev);
|
|
13138
|
+
}
|
|
13139
|
+
if (node->relation != NULL) {
|
|
13140
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
13141
|
+
XXH64_hash_t hash;
|
|
13142
|
+
|
|
13143
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
13144
|
+
_fingerprintString(ctx, "relation");
|
|
13145
|
+
|
|
13146
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
13147
|
+
_fingerprintRangeVar(ctx, node->relation, node, "relation", depth + 1);
|
|
13148
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
13149
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
13150
|
+
if (ctx->write_tokens)
|
|
13151
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
13152
|
+
}
|
|
13153
|
+
XXH3_freeState(prev);
|
|
13154
|
+
}
|
|
13155
|
+
|
|
13156
|
+
if (node->whereClause != NULL) {
|
|
13157
|
+
XXH3_state_t* prev = XXH3_createState();
|
|
13158
|
+
XXH64_hash_t hash;
|
|
13159
|
+
|
|
13160
|
+
XXH3_copyState(prev, ctx->xxh_state);
|
|
13161
|
+
_fingerprintString(ctx, "whereClause");
|
|
13162
|
+
|
|
13163
|
+
hash = XXH3_64bits_digest(ctx->xxh_state);
|
|
13164
|
+
_fingerprintNode(ctx, node->whereClause, node, "whereClause", depth + 1);
|
|
13165
|
+
if (hash == XXH3_64bits_digest(ctx->xxh_state)) {
|
|
13166
|
+
XXH3_copyState(ctx->xxh_state, prev);
|
|
13167
|
+
if (ctx->write_tokens)
|
|
13168
|
+
dlist_delete(dlist_tail_node(&ctx->tokens));
|
|
13169
|
+
}
|
|
13170
|
+
XXH3_freeState(prev);
|
|
13171
|
+
}
|
|
13172
|
+
|
|
12375
13173
|
}
|
|
12376
13174
|
|
|
12377
13175
|
static void
|