pg_query 2.1.0 → 4.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|