pg_query 5.1.0 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +30 -0
- data/README.md +1 -1
- data/Rakefile +4 -4
- data/ext/pg_query/ext_symbols_freebsd.sym +1 -0
- data/ext/pg_query/ext_symbols_freebsd_with_ruby_abi_version.sym +2 -0
- data/ext/pg_query/ext_symbols_openbsd.sym +1 -0
- data/ext/pg_query/ext_symbols_openbsd_with_ruby_abi_version.sym +2 -0
- data/ext/pg_query/ext_symbols_with_ruby_abi_version.sym +2 -0
- data/ext/pg_query/extconf.rb +20 -6
- data/ext/pg_query/include/pg_query.h +4 -3
- data/ext/pg_query/include/pg_query_enum_defs.c +424 -154
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +68 -4
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +2952 -1845
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +51 -3
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +210 -23
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +17 -1
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +271 -52
- data/ext/pg_query/include/postgres/access/amapi.h +14 -3
- data/ext/pg_query/include/postgres/access/attmap.h +1 -1
- data/ext/pg_query/include/postgres/access/attnum.h +1 -1
- data/ext/pg_query/include/postgres/access/brin_internal.h +116 -0
- data/ext/pg_query/include/postgres/access/brin_tuple.h +112 -0
- data/ext/pg_query/include/postgres/access/clog.h +2 -3
- data/ext/pg_query/include/postgres/access/commit_ts.h +2 -3
- data/ext/pg_query/include/postgres/access/detoast.h +1 -1
- data/ext/pg_query/include/postgres/access/genam.h +17 -4
- data/ext/pg_query/include/postgres/access/gin.h +1 -1
- data/ext/pg_query/include/postgres/access/htup.h +1 -1
- data/ext/pg_query/include/postgres/access/htup_details.h +11 -11
- data/ext/pg_query/include/postgres/access/itup.h +3 -3
- data/ext/pg_query/include/postgres/access/parallel.h +1 -2
- data/ext/pg_query/include/postgres/access/printtup.h +1 -1
- data/ext/pg_query/include/postgres/access/relation.h +1 -1
- data/ext/pg_query/include/postgres/access/relscan.h +1 -1
- data/ext/pg_query/include/postgres/access/rmgrlist.h +1 -1
- data/ext/pg_query/include/postgres/access/sdir.h +1 -1
- data/ext/pg_query/include/postgres/access/skey.h +1 -1
- data/ext/pg_query/include/postgres/access/slru.h +218 -0
- data/ext/pg_query/include/postgres/access/stratnum.h +1 -1
- data/ext/pg_query/include/postgres/access/sysattr.h +1 -1
- data/ext/pg_query/include/postgres/access/table.h +1 -1
- data/ext/pg_query/include/postgres/access/tableam.h +35 -25
- data/ext/pg_query/include/postgres/access/tidstore.h +50 -0
- data/ext/pg_query/include/postgres/access/toast_compression.h +2 -2
- data/ext/pg_query/include/postgres/access/transam.h +50 -7
- data/ext/pg_query/include/postgres/access/tsmapi.h +1 -1
- data/ext/pg_query/include/postgres/access/tupconvert.h +1 -1
- data/ext/pg_query/include/postgres/access/tupdesc.h +5 -5
- data/ext/pg_query/include/postgres/access/tupmacs.h +1 -1
- data/ext/pg_query/include/postgres/access/twophase.h +2 -2
- data/ext/pg_query/include/postgres/access/xact.h +5 -5
- data/ext/pg_query/include/postgres/access/xlog.h +20 -12
- data/ext/pg_query/include/postgres/access/xlog_internal.h +4 -3
- data/ext/pg_query/include/postgres/access/xlogbackup.h +3 -1
- data/ext/pg_query/include/postgres/access/xlogdefs.h +5 -5
- data/ext/pg_query/include/postgres/access/xlogprefetcher.h +2 -2
- data/ext/pg_query/include/postgres/access/xlogreader.h +2 -2
- data/ext/pg_query/include/postgres/access/xlogrecord.h +3 -3
- data/ext/pg_query/include/postgres/access/xlogrecovery.h +4 -4
- data/ext/pg_query/include/postgres/archive/archive_module.h +9 -1
- data/ext/pg_query/include/postgres/c.h +32 -37
- data/ext/pg_query/include/postgres/catalog/catalog.h +3 -1
- data/ext/pg_query/include/postgres/catalog/catversion.h +2 -2
- data/ext/pg_query/include/postgres/catalog/dependency.h +17 -59
- data/ext/pg_query/include/postgres/catalog/genbki.h +12 -6
- data/ext/pg_query/include/postgres/catalog/index.h +22 -18
- data/ext/pg_query/include/postgres/catalog/indexing.h +1 -1
- data/ext/pg_query/include/postgres/catalog/namespace.h +18 -19
- data/ext/pg_query/include/postgres/catalog/objectaccess.h +2 -2
- data/ext/pg_query/include/postgres/catalog/objectaddress.h +5 -1
- data/ext/pg_query/include/postgres/catalog/pg_aggregate.h +4 -2
- data/ext/pg_query/include/postgres/catalog/pg_aggregate_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_am.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_am_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_attribute.h +31 -14
- data/ext/pg_query/include/postgres/catalog/pg_attribute_d.h +3 -3
- data/ext/pg_query/include/postgres/catalog/pg_authid.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_authid_d.h +2 -1
- data/ext/pg_query/include/postgres/catalog/pg_class.h +10 -5
- data/ext/pg_query/include/postgres/catalog/pg_class_d.h +4 -2
- data/ext/pg_query/include/postgres/catalog/pg_collation.h +11 -5
- data/ext/pg_query/include/postgres/catalog/pg_collation_d.h +5 -2
- data/ext/pg_query/include/postgres/catalog/pg_constraint.h +15 -10
- data/ext/pg_query/include/postgres/catalog/pg_constraint_d.h +2 -1
- data/ext/pg_query/include/postgres/catalog/pg_control.h +5 -3
- data/ext/pg_query/include/postgres/catalog/pg_conversion.h +8 -4
- data/ext/pg_query/include/postgres/catalog/pg_conversion_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_database.h +9 -4
- data/ext/pg_query/include/postgres/catalog/pg_database_d.h +13 -12
- data/ext/pg_query/include/postgres/catalog/pg_depend.h +3 -3
- data/ext/pg_query/include/postgres/catalog/pg_depend_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_event_trigger.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_event_trigger_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_index.h +5 -3
- data/ext/pg_query/include/postgres/catalog/pg_index_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_language.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_language_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_namespace.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_namespace_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_opclass.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_opclass_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_operator.h +20 -3
- data/ext/pg_query/include/postgres/catalog/pg_operator_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_opfamily.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_opfamily_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_partitioned_table.h +4 -2
- data/ext/pg_query/include/postgres/catalog/pg_partitioned_table_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_proc.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_proc_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_publication.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_publication_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_replication_origin.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_replication_origin_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_statistic.h +10 -4
- data/ext/pg_query/include/postgres/catalog/pg_statistic_d.h +7 -3
- data/ext/pg_query/include/postgres/catalog/pg_statistic_ext.h +10 -7
- data/ext/pg_query/include/postgres/catalog/pg_statistic_ext_d.h +3 -3
- data/ext/pg_query/include/postgres/catalog/pg_transform.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_transform_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_trigger.h +4 -4
- data/ext/pg_query/include/postgres/catalog/pg_trigger_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_config.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_config_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_dict.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_dict_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_parser_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_template.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_template_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_type.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_type_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/storage.h +1 -1
- data/ext/pg_query/include/postgres/catalog/syscache_ids.h +104 -0
- data/ext/pg_query/include/postgres/commands/async.h +2 -6
- data/ext/pg_query/include/postgres/commands/dbcommands.h +1 -1
- data/ext/pg_query/include/postgres/commands/defrem.h +6 -6
- data/ext/pg_query/include/postgres/commands/event_trigger.h +11 -2
- data/ext/pg_query/include/postgres/commands/explain.h +19 -3
- data/ext/pg_query/include/postgres/commands/prepare.h +1 -1
- data/ext/pg_query/include/postgres/commands/tablespace.h +1 -1
- data/ext/pg_query/include/postgres/commands/trigger.h +1 -1
- data/ext/pg_query/include/postgres/commands/vacuum.h +28 -26
- data/ext/pg_query/include/postgres/common/cryptohash.h +2 -2
- data/ext/pg_query/include/postgres/common/file_perm.h +1 -1
- data/ext/pg_query/include/postgres/common/file_utils.h +65 -0
- data/ext/pg_query/include/postgres/common/hashfn.h +16 -1
- data/ext/pg_query/include/postgres/common/hashfn_unstable.h +407 -0
- data/ext/pg_query/include/postgres/common/int.h +79 -4
- data/ext/pg_query/include/postgres/common/keywords.h +1 -1
- data/ext/pg_query/include/postgres/common/kwlookup.h +1 -1
- data/ext/pg_query/include/postgres/common/pg_prng.h +2 -1
- data/ext/pg_query/include/postgres/common/relpath.h +4 -4
- data/ext/pg_query/include/postgres/common/scram-common.h +1 -1
- data/ext/pg_query/include/postgres/common/sha2.h +1 -1
- data/ext/pg_query/include/postgres/common/string.h +1 -1
- data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +2 -3
- data/ext/pg_query/include/postgres/copyfuncs.funcs.c +278 -30
- data/ext/pg_query/include/postgres/copyfuncs.switch.c +55 -4
- data/ext/pg_query/include/postgres/datatype/timestamp.h +29 -3
- data/ext/pg_query/include/postgres/equalfuncs.funcs.c +239 -26
- data/ext/pg_query/include/postgres/equalfuncs.switch.c +55 -4
- data/ext/pg_query/include/postgres/executor/execdesc.h +2 -2
- data/ext/pg_query/include/postgres/executor/executor.h +6 -5
- data/ext/pg_query/include/postgres/executor/functions.h +2 -1
- data/ext/pg_query/include/postgres/executor/instrument.h +5 -3
- data/ext/pg_query/include/postgres/executor/spi.h +2 -8
- data/ext/pg_query/include/postgres/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/postgres/executor/tuptable.h +31 -2
- data/ext/pg_query/include/postgres/fmgr.h +2 -2
- data/ext/pg_query/include/postgres/foreign/fdwapi.h +1 -1
- data/ext/pg_query/include/postgres/funcapi.h +2 -2
- data/ext/pg_query/include/postgres/gram.h +871 -830
- data/ext/pg_query/include/postgres/gramparse.h +1 -1
- data/ext/pg_query/include/postgres/jit/jit.h +4 -3
- data/ext/pg_query/include/postgres/kwlist_d.h +511 -466
- data/ext/pg_query/include/postgres/lib/dshash.h +25 -10
- data/ext/pg_query/include/postgres/lib/ilist.h +1 -1
- data/ext/pg_query/include/postgres/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/postgres/lib/simplehash.h +40 -18
- data/ext/pg_query/include/postgres/lib/sort_template.h +14 -1
- data/ext/pg_query/include/postgres/lib/stringinfo.h +93 -11
- data/ext/pg_query/include/postgres/libpq/auth.h +1 -1
- data/ext/pg_query/include/postgres/libpq/crypt.h +2 -2
- data/ext/pg_query/include/postgres/libpq/hba.h +4 -4
- data/ext/pg_query/include/postgres/libpq/libpq-be.h +35 -28
- data/ext/pg_query/include/postgres/libpq/libpq.h +6 -7
- data/ext/pg_query/include/postgres/libpq/pqcomm.h +26 -20
- data/ext/pg_query/include/postgres/libpq/pqformat.h +2 -3
- data/ext/pg_query/include/postgres/libpq/pqsignal.h +1 -1
- data/ext/pg_query/include/postgres/libpq/protocol.h +89 -0
- data/ext/pg_query/include/postgres/libpq/sasl.h +1 -1
- data/ext/pg_query/include/postgres/libpq/scram.h +1 -1
- data/ext/pg_query/include/postgres/mb/pg_wchar.h +103 -82
- data/ext/pg_query/include/postgres/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/postgres/miscadmin.h +72 -52
- data/ext/pg_query/include/postgres/nodes/bitmapset.h +17 -3
- data/ext/pg_query/include/postgres/nodes/execnodes.h +112 -25
- data/ext/pg_query/include/postgres/nodes/extensible.h +1 -1
- data/ext/pg_query/include/postgres/nodes/lockoptions.h +4 -4
- data/ext/pg_query/include/postgres/nodes/makefuncs.h +8 -2
- data/ext/pg_query/include/postgres/nodes/memnodes.h +43 -4
- data/ext/pg_query/include/postgres/nodes/miscnodes.h +1 -1
- data/ext/pg_query/include/postgres/nodes/nodeFuncs.h +1 -1
- data/ext/pg_query/include/postgres/nodes/nodes.h +30 -41
- data/ext/pg_query/include/postgres/nodes/nodetags.h +464 -444
- data/ext/pg_query/include/postgres/nodes/params.h +1 -1
- data/ext/pg_query/include/postgres/nodes/parsenodes.h +358 -175
- data/ext/pg_query/include/postgres/nodes/pathnodes.h +64 -10
- data/ext/pg_query/include/postgres/nodes/pg_list.h +62 -11
- data/ext/pg_query/include/postgres/nodes/plannodes.h +11 -10
- data/ext/pg_query/include/postgres/nodes/primnodes.h +352 -54
- data/ext/pg_query/include/postgres/nodes/print.h +1 -1
- data/ext/pg_query/include/postgres/nodes/queryjumble.h +2 -2
- data/ext/pg_query/include/postgres/nodes/replnodes.h +23 -2
- data/ext/pg_query/include/postgres/nodes/supportnodes.h +1 -1
- data/ext/pg_query/include/postgres/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/postgres/nodes/value.h +1 -1
- data/ext/pg_query/include/postgres/optimizer/cost.h +5 -4
- data/ext/pg_query/include/postgres/optimizer/geqo.h +1 -1
- data/ext/pg_query/include/postgres/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/postgres/optimizer/optimizer.h +5 -2
- data/ext/pg_query/include/postgres/optimizer/paths.h +13 -8
- data/ext/pg_query/include/postgres/optimizer/planmain.h +7 -1
- data/ext/pg_query/include/postgres/parser/analyze.h +3 -1
- data/ext/pg_query/include/postgres/parser/kwlist.h +22 -2
- data/ext/pg_query/include/postgres/parser/parse_agg.h +1 -1
- data/ext/pg_query/include/postgres/parser/parse_coerce.h +5 -2
- data/ext/pg_query/include/postgres/parser/parse_expr.h +1 -1
- data/ext/pg_query/include/postgres/parser/parse_func.h +2 -2
- data/ext/pg_query/include/postgres/parser/parse_node.h +3 -2
- data/ext/pg_query/include/postgres/parser/parse_oper.h +4 -1
- data/ext/pg_query/include/postgres/parser/parse_relation.h +1 -1
- data/ext/pg_query/include/postgres/parser/parse_type.h +2 -2
- data/ext/pg_query/include/postgres/parser/parser.h +3 -3
- data/ext/pg_query/include/postgres/parser/parsetree.h +1 -1
- data/ext/pg_query/include/postgres/parser/scanner.h +1 -1
- data/ext/pg_query/include/postgres/parser/scansup.h +1 -1
- data/ext/pg_query/include/postgres/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/postgres/pg_config.h +53 -45
- data/ext/pg_query/include/postgres/pg_config_manual.h +21 -8
- data/ext/pg_query/include/postgres/pg_getopt.h +1 -1
- data/ext/pg_query/include/postgres/pg_trace.h +1 -1
- data/ext/pg_query/include/postgres/pgstat.h +13 -11
- data/ext/pg_query/include/postgres/pgtime.h +1 -1
- data/ext/pg_query/include/postgres/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/postgres/pl_reserved_kwlist_d.h +1 -1
- data/ext/pg_query/include/postgres/pl_unreserved_kwlist.h +1 -1
- data/ext/pg_query/include/postgres/pl_unreserved_kwlist_d.h +1 -1
- data/ext/pg_query/include/postgres/plerrcodes.h +4 -4
- data/ext/pg_query/include/postgres/plpgsql.h +15 -13
- data/ext/pg_query/include/postgres/port/atomics/arch-arm.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/arch-ppc.h +3 -1
- data/ext/pg_query/include/postgres/port/atomics/arch-x86.h +3 -1
- data/ext/pg_query/include/postgres/port/atomics/fallback.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +38 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +19 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +16 -1
- data/ext/pg_query/include/postgres/port/atomics/generic.h +38 -2
- data/ext/pg_query/include/postgres/port/atomics.h +93 -6
- data/ext/pg_query/include/postgres/port/pg_bitutils.h +91 -9
- data/ext/pg_query/include/postgres/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/postgres/port/pg_crc32c.h +10 -1
- data/ext/pg_query/include/postgres/port/pg_iovec.h +117 -0
- data/ext/pg_query/include/postgres/port/simd.h +48 -1
- data/ext/pg_query/include/postgres/port/win32/sys/socket.h +8 -0
- data/ext/pg_query/include/postgres/port/win32_port.h +1 -13
- data/ext/pg_query/include/postgres/port.h +39 -4
- data/ext/pg_query/include/postgres/portability/instr_time.h +1 -1
- data/ext/pg_query/include/postgres/postgres.h +1 -1
- data/ext/pg_query/include/postgres/postmaster/autovacuum.h +5 -16
- data/ext/pg_query/include/postgres/postmaster/bgworker.h +8 -6
- data/ext/pg_query/include/postgres/postmaster/bgworker_internals.h +3 -7
- data/ext/pg_query/include/postgres/postmaster/bgwriter.h +3 -3
- data/ext/pg_query/include/postgres/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postgres/postmaster/pgarch.h +2 -2
- data/ext/pg_query/include/postgres/postmaster/postmaster.h +25 -5
- data/ext/pg_query/include/postgres/postmaster/startup.h +2 -2
- data/ext/pg_query/include/postgres/postmaster/syslogger.h +2 -4
- data/ext/pg_query/include/postgres/postmaster/walsummarizer.h +35 -0
- data/ext/pg_query/include/postgres/postmaster/walwriter.h +2 -2
- data/ext/pg_query/include/postgres/regex/regex.h +92 -9
- data/ext/pg_query/include/postgres/replication/logicallauncher.h +1 -1
- data/ext/pg_query/include/postgres/replication/logicalproto.h +2 -2
- data/ext/pg_query/include/postgres/replication/logicalworker.h +2 -1
- data/ext/pg_query/include/postgres/replication/origin.h +1 -1
- data/ext/pg_query/include/postgres/replication/reorderbuffer.h +27 -46
- data/ext/pg_query/include/postgres/replication/slot.h +45 -5
- data/ext/pg_query/include/postgres/replication/slotsync.h +38 -0
- data/ext/pg_query/include/postgres/replication/syncrep.h +1 -1
- data/ext/pg_query/include/postgres/replication/walreceiver.h +37 -11
- data/ext/pg_query/include/postgres/replication/walsender.h +5 -3
- data/ext/pg_query/include/postgres/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/postgres/rewrite/rewriteHandler.h +7 -1
- data/ext/pg_query/include/postgres/rewrite/rewriteManip.h +2 -2
- data/ext/pg_query/include/postgres/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/postgres/storage/block.h +1 -1
- data/ext/pg_query/include/postgres/storage/buf.h +1 -1
- data/ext/pg_query/include/postgres/storage/bufmgr.h +59 -41
- data/ext/pg_query/include/postgres/storage/bufpage.h +1 -1
- data/ext/pg_query/include/postgres/storage/condition_variable.h +1 -1
- data/ext/pg_query/include/postgres/storage/dsm.h +1 -1
- data/ext/pg_query/include/postgres/storage/dsm_impl.h +2 -2
- data/ext/pg_query/include/postgres/storage/fd.h +30 -13
- data/ext/pg_query/include/postgres/storage/fileset.h +1 -1
- data/ext/pg_query/include/postgres/storage/ipc.h +4 -1
- data/ext/pg_query/include/postgres/storage/item.h +1 -1
- data/ext/pg_query/include/postgres/storage/itemid.h +1 -1
- data/ext/pg_query/include/postgres/storage/itemptr.h +1 -1
- data/ext/pg_query/include/postgres/storage/large_object.h +1 -1
- data/ext/pg_query/include/postgres/storage/latch.h +4 -2
- data/ext/pg_query/include/postgres/storage/lmgr.h +8 -2
- data/ext/pg_query/include/postgres/storage/lock.h +19 -19
- data/ext/pg_query/include/postgres/storage/lockdefs.h +3 -1
- data/ext/pg_query/include/postgres/storage/lwlock.h +17 -9
- data/ext/pg_query/include/postgres/storage/lwlocknames.h +7 -10
- data/ext/pg_query/include/postgres/storage/off.h +1 -1
- data/ext/pg_query/include/postgres/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/postgres/storage/pg_shmem.h +5 -4
- data/ext/pg_query/include/postgres/storage/pmsignal.h +2 -2
- data/ext/pg_query/include/postgres/storage/predicate.h +1 -5
- data/ext/pg_query/include/postgres/storage/proc.h +48 -26
- data/ext/pg_query/include/postgres/storage/procarray.h +5 -1
- data/ext/pg_query/include/postgres/storage/proclist_types.h +11 -9
- data/ext/pg_query/include/postgres/storage/procnumber.h +43 -0
- data/ext/pg_query/include/postgres/storage/procsignal.h +8 -6
- data/ext/pg_query/include/postgres/storage/read_stream.h +65 -0
- data/ext/pg_query/include/postgres/storage/relfilelocator.h +16 -15
- data/ext/pg_query/include/postgres/storage/s_lock.h +7 -27
- data/ext/pg_query/include/postgres/storage/sharedfileset.h +1 -1
- data/ext/pg_query/include/postgres/storage/shm_mq.h +2 -2
- data/ext/pg_query/include/postgres/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/postgres/storage/shmem.h +1 -1
- data/ext/pg_query/include/postgres/storage/sinval.h +3 -3
- data/ext/pg_query/include/postgres/storage/smgr.h +46 -29
- data/ext/pg_query/include/postgres/storage/spin.h +1 -1
- data/ext/pg_query/include/postgres/storage/standby.h +13 -3
- data/ext/pg_query/include/postgres/storage/standbydefs.h +2 -2
- data/ext/pg_query/include/postgres/storage/sync.h +4 -4
- data/ext/pg_query/include/postgres/tcop/cmdtag.h +1 -2
- data/ext/pg_query/include/postgres/tcop/cmdtaglist.h +3 -2
- data/ext/pg_query/include/postgres/tcop/deparse_utility.h +2 -2
- data/ext/pg_query/include/postgres/tcop/dest.h +3 -2
- data/ext/pg_query/include/postgres/tcop/fastpath.h +1 -1
- data/ext/pg_query/include/postgres/tcop/pquery.h +1 -1
- data/ext/pg_query/include/postgres/tcop/tcopprot.h +9 -5
- data/ext/pg_query/include/postgres/tcop/utility.h +2 -2
- data/ext/pg_query/include/postgres/tsearch/ts_cache.h +1 -1
- data/ext/pg_query/include/postgres/utils/acl.h +19 -7
- data/ext/pg_query/include/postgres/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/postgres/utils/array.h +1 -2
- data/ext/pg_query/include/postgres/utils/ascii.h +84 -0
- data/ext/pg_query/include/postgres/utils/backend_progress.h +3 -2
- data/ext/pg_query/include/postgres/utils/backend_status.h +8 -10
- data/ext/pg_query/include/postgres/utils/builtins.h +4 -1
- data/ext/pg_query/include/postgres/utils/bytea.h +2 -2
- data/ext/pg_query/include/postgres/utils/catcache.h +6 -6
- data/ext/pg_query/include/postgres/utils/date.h +1 -1
- data/ext/pg_query/include/postgres/utils/datetime.h +4 -1
- data/ext/pg_query/include/postgres/utils/datum.h +1 -1
- data/ext/pg_query/include/postgres/utils/dsa.h +44 -5
- data/ext/pg_query/include/postgres/utils/elog.h +3 -8
- data/ext/pg_query/include/postgres/utils/errcodes.h +1 -3
- data/ext/pg_query/include/postgres/utils/expandeddatum.h +1 -1
- data/ext/pg_query/include/postgres/utils/expandedrecord.h +1 -1
- data/ext/pg_query/include/postgres/utils/float.h +1 -1
- data/ext/pg_query/include/postgres/utils/fmgroids.h +49 -16
- data/ext/pg_query/include/postgres/utils/fmgrprotos.h +47 -14
- data/ext/pg_query/include/postgres/utils/fmgrtab.h +1 -1
- data/ext/pg_query/include/postgres/utils/guc.h +20 -6
- data/ext/pg_query/include/postgres/utils/guc_hooks.h +23 -2
- data/ext/pg_query/include/postgres/utils/guc_tables.h +6 -5
- data/ext/pg_query/include/postgres/utils/hsearch.h +2 -2
- data/ext/pg_query/include/postgres/utils/injection_point.h +44 -0
- data/ext/pg_query/include/postgres/utils/inval.h +1 -1
- data/ext/pg_query/include/postgres/utils/logtape.h +5 -5
- data/ext/pg_query/include/postgres/utils/lsyscache.h +6 -3
- data/ext/pg_query/include/postgres/utils/memdebug.h +1 -1
- data/ext/pg_query/include/postgres/utils/memutils.h +12 -5
- data/ext/pg_query/include/postgres/utils/memutils_internal.h +53 -13
- data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +25 -9
- data/ext/pg_query/include/postgres/utils/numeric.h +6 -1
- data/ext/pg_query/include/postgres/utils/palloc.h +1 -15
- data/ext/pg_query/include/postgres/utils/partcache.h +1 -1
- data/ext/pg_query/include/postgres/utils/pg_locale.h +8 -7
- data/ext/pg_query/include/postgres/utils/pgstat_internal.h +30 -17
- data/ext/pg_query/include/postgres/utils/plancache.h +5 -3
- data/ext/pg_query/include/postgres/utils/portal.h +10 -10
- data/ext/pg_query/include/postgres/utils/queryenvironment.h +2 -2
- data/ext/pg_query/include/postgres/utils/regproc.h +1 -1
- data/ext/pg_query/include/postgres/utils/rel.h +14 -15
- data/ext/pg_query/include/postgres/utils/relcache.h +2 -5
- data/ext/pg_query/include/postgres/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/postgres/utils/resowner.h +90 -9
- data/ext/pg_query/include/postgres/utils/ruleutils.h +1 -1
- data/ext/pg_query/include/postgres/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/postgres/utils/snapmgr.h +1 -52
- data/ext/pg_query/include/postgres/utils/snapshot.h +2 -2
- data/ext/pg_query/include/postgres/utils/sortsupport.h +1 -1
- data/ext/pg_query/include/postgres/utils/syscache.h +7 -98
- data/ext/pg_query/include/postgres/utils/timeout.h +3 -2
- data/ext/pg_query/include/postgres/utils/timestamp.h +1 -1
- data/ext/pg_query/include/postgres/utils/tuplesort.h +36 -9
- data/ext/pg_query/include/postgres/utils/tuplestore.h +2 -5
- data/ext/pg_query/include/postgres/utils/typcache.h +2 -1
- data/ext/pg_query/include/postgres/utils/varlena.h +1 -1
- data/ext/pg_query/include/postgres/utils/wait_event.h +28 -214
- data/ext/pg_query/include/postgres/utils/wait_event_types.h +218 -0
- data/ext/pg_query/include/postgres/utils/xml.h +4 -4
- data/ext/pg_query/include/postgres/varatt.h +1 -1
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1546 -792
- data/ext/pg_query/include/protobuf/pg_query.pb.h +58365 -46595
- data/ext/pg_query/pg_query.pb-c.c +6598 -3739
- data/ext/pg_query/pg_query_normalize.c +42 -1
- data/ext/pg_query/pg_query_outfuncs_json.c +3 -1
- data/ext/pg_query/pg_query_parse_plpgsql.c +12 -13
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +2 -2
- data/ext/pg_query/pg_query_scan.c +1 -1
- data/ext/pg_query/postgres_deparse.c +601 -172
- data/ext/pg_query/src_backend_catalog_namespace.c +241 -66
- data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -3
- data/ext/pg_query/src_backend_commands_define.c +2 -3
- data/ext/pg_query/src_backend_nodes_bitmapset.c +137 -94
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +1 -1
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +1 -1
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +3 -7
- data/ext/pg_query/src_backend_nodes_makefuncs.c +59 -20
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +109 -2
- data/ext/pg_query/src_backend_nodes_value.c +1 -1
- data/ext/pg_query/src_backend_parser_gram.c +34491 -32136
- data/ext/pg_query/src_backend_parser_parser.c +8 -8
- data/ext/pg_query/src_backend_parser_scan.c +5637 -3028
- data/ext/pg_query/src_backend_parser_scansup.c +2 -1
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
- data/ext/pg_query/src_backend_tcop_postgres.c +34 -10
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +2 -2
- data/ext/pg_query/src_backend_utils_adt_datum.c +8 -6
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_numutils.c +4 -5
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +101 -28
- data/ext/pg_query/src_backend_utils_error_assert.c +1 -1
- data/ext/pg_query/src_backend_utils_error_elog.c +47 -42
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +4 -2
- data/ext/pg_query/src_backend_utils_init_globals.c +15 -3
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +11 -18
- data/ext/pg_query/src_backend_utils_misc_guc_tables.c +16 -6
- data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +8 -5
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +308 -238
- data/ext/pg_query/src_backend_utils_mmgr_bump.c +728 -0
- data/ext/pg_query/src_backend_utils_mmgr_generation.c +273 -197
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +270 -215
- data/ext/pg_query/src_backend_utils_mmgr_slab.c +154 -96
- data/ext/pg_query/src_common_encnames.c +43 -44
- data/ext/pg_query/src_common_hashfn.c +1 -1
- data/ext/pg_query/src_common_keywords.c +1 -1
- data/ext/pg_query/src_common_kwlist_d.h +511 -466
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_psprintf.c +3 -3
- data/ext/pg_query/src_common_stringinfo.c +18 -1
- data/ext/pg_query/src_common_wchar.c +92 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +99 -5
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +242 -143
- 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 +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +19 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +1 -1
- data/ext/pg_query/src_port_pg_bitutils.c +173 -28
- data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
- data/ext/pg_query/src_port_snprintf.c +15 -18
- data/ext/pg_query/src_port_strerror.c +1 -3
- data/ext/pg_query/src_port_strlcpy.c +1 -1
- data/lib/pg_query/fingerprint.rb +3 -5
- data/lib/pg_query/param_refs.rb +2 -2
- data/lib/pg_query/parse.rb +5 -7
- data/lib/pg_query/parse_error.rb +1 -0
- data/lib/pg_query/pg_query_pb.rb +27 -25
- data/lib/pg_query/scan.rb +1 -0
- data/lib/pg_query/treewalker.rb +38 -15
- data/lib/pg_query/truncate.rb +18 -20
- data/lib/pg_query/version.rb +1 -1
- metadata +31 -82
- data/ext/pg_query/include/postgres/storage/backendid.h +0 -37
- data/ext/pg_query/include/postgres/storage/sinvaladt.h +0 -45
- data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
- data/ext/pg_query/src_backend_nodes_nodes.c +0 -38
- /data/ext/pg_query/{pg_query_ruby.sym → ext_symbols.sym} +0 -0
@@ -4,7 +4,7 @@
|
|
4
4
|
* POSTGRES relation descriptor (a/k/a relcache entry) definitions.
|
5
5
|
*
|
6
6
|
*
|
7
|
-
* Portions Copyright (c) 1996-
|
7
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
9
9
|
*
|
10
10
|
* src/include/utils/rel.h
|
@@ -57,7 +57,7 @@ typedef struct RelationData
|
|
57
57
|
RelFileLocator rd_locator; /* relation physical identifier */
|
58
58
|
SMgrRelation rd_smgr; /* cached file handle, or NULL */
|
59
59
|
int rd_refcnt; /* reference count */
|
60
|
-
|
60
|
+
ProcNumber rd_backend; /* owning backend's proc number, if temp rel */
|
61
61
|
bool rd_islocaltemp; /* rel is a temp rel of this session */
|
62
62
|
bool rd_isnailed; /* rel is nailed in cache */
|
63
63
|
bool rd_isvalid; /* relcache entry is valid */
|
@@ -150,7 +150,8 @@ typedef struct RelationData
|
|
150
150
|
|
151
151
|
/* data managed by RelationGetIndexList: */
|
152
152
|
List *rd_indexlist; /* list of OIDs of indexes on relation */
|
153
|
-
Oid rd_pkindex; /* OID of primary key, if any */
|
153
|
+
Oid rd_pkindex; /* OID of (deferrable?) primary key, if any */
|
154
|
+
bool rd_ispkdeferrable; /* is rd_pkindex a deferrable PK? */
|
154
155
|
Oid rd_replidindex; /* OID of replica identity index, if any */
|
155
156
|
|
156
157
|
/* data managed by RelationGetStatExtList: */
|
@@ -329,7 +330,7 @@ typedef enum StdRdOptIndexCleanup
|
|
329
330
|
{
|
330
331
|
STDRD_OPTION_VACUUM_INDEX_CLEANUP_AUTO = 0,
|
331
332
|
STDRD_OPTION_VACUUM_INDEX_CLEANUP_OFF,
|
332
|
-
STDRD_OPTION_VACUUM_INDEX_CLEANUP_ON
|
333
|
+
STDRD_OPTION_VACUUM_INDEX_CLEANUP_ON,
|
333
334
|
} StdRdOptIndexCleanup;
|
334
335
|
|
335
336
|
typedef struct StdRdOptions
|
@@ -402,7 +403,7 @@ typedef enum ViewOptCheckOption
|
|
402
403
|
{
|
403
404
|
VIEW_OPTION_CHECK_OPTION_NOT_SET,
|
404
405
|
VIEW_OPTION_CHECK_OPTION_LOCAL,
|
405
|
-
VIEW_OPTION_CHECK_OPTION_CASCADED
|
406
|
+
VIEW_OPTION_CHECK_OPTION_CASCADED,
|
406
407
|
} ViewOptCheckOption;
|
407
408
|
|
408
409
|
/*
|
@@ -561,18 +562,15 @@ typedef struct ViewOptions
|
|
561
562
|
*
|
562
563
|
* Very little code is authorized to touch rel->rd_smgr directly. Instead
|
563
564
|
* use this function to fetch its value.
|
564
|
-
*
|
565
|
-
* Note: since a relcache flush can cause the file handle to be closed again,
|
566
|
-
* it's unwise to hold onto the pointer returned by this function for any
|
567
|
-
* long period. Recommended practice is to just re-execute RelationGetSmgr
|
568
|
-
* each time you need to access the SMgrRelation. It's quite cheap in
|
569
|
-
* comparison to whatever an smgr function is going to do.
|
570
565
|
*/
|
571
566
|
static inline SMgrRelation
|
572
567
|
RelationGetSmgr(Relation rel)
|
573
568
|
{
|
574
569
|
if (unlikely(rel->rd_smgr == NULL))
|
575
|
-
|
570
|
+
{
|
571
|
+
rel->rd_smgr = smgropen(rel->rd_locator, rel->rd_backend);
|
572
|
+
smgrpin(rel->rd_smgr);
|
573
|
+
}
|
576
574
|
return rel->rd_smgr;
|
577
575
|
}
|
578
576
|
|
@@ -584,10 +582,11 @@ static inline void
|
|
584
582
|
RelationCloseSmgr(Relation relation)
|
585
583
|
{
|
586
584
|
if (relation->rd_smgr != NULL)
|
585
|
+
{
|
586
|
+
smgrunpin(relation->rd_smgr);
|
587
587
|
smgrclose(relation->rd_smgr);
|
588
|
-
|
589
|
-
|
590
|
-
Assert(relation->rd_smgr == NULL);
|
588
|
+
relation->rd_smgr = NULL;
|
589
|
+
}
|
591
590
|
}
|
592
591
|
#endif /* !FRONTEND */
|
593
592
|
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* Relation descriptor cache definitions.
|
5
5
|
*
|
6
6
|
*
|
7
|
-
* Portions Copyright (c) 1996-
|
7
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
9
9
|
*
|
10
10
|
* src/include/utils/relcache.h
|
@@ -51,7 +51,6 @@ extern Oid RelationGetReplicaIndex(Relation relation);
|
|
51
51
|
extern List *RelationGetIndexExpressions(Relation relation);
|
52
52
|
extern List *RelationGetDummyIndexExpressions(Relation relation);
|
53
53
|
extern List *RelationGetIndexPredicate(Relation relation);
|
54
|
-
extern Datum *RelationGetIndexRawAttOptions(Relation indexrel);
|
55
54
|
extern bytea **RelationGetIndexAttOptions(Relation relation, bool copy);
|
56
55
|
|
57
56
|
/*
|
@@ -63,7 +62,7 @@ typedef enum IndexAttrBitmapKind
|
|
63
62
|
INDEX_ATTR_BITMAP_PRIMARY_KEY,
|
64
63
|
INDEX_ATTR_BITMAP_IDENTITY_KEY,
|
65
64
|
INDEX_ATTR_BITMAP_HOT_BLOCKING,
|
66
|
-
INDEX_ATTR_BITMAP_SUMMARIZED
|
65
|
+
INDEX_ATTR_BITMAP_SUMMARIZED,
|
67
66
|
} IndexAttrBitmapKind;
|
68
67
|
|
69
68
|
extern Bitmapset *RelationGetIndexAttrBitmap(Relation relation,
|
@@ -130,8 +129,6 @@ extern void RelationCacheInvalidateEntry(Oid relationId);
|
|
130
129
|
|
131
130
|
extern void RelationCacheInvalidate(bool debug_discard);
|
132
131
|
|
133
|
-
extern void RelationCloseSmgrByOid(Oid relationId);
|
134
|
-
|
135
132
|
#ifdef USE_ASSERT_CHECKING
|
136
133
|
extern void AssertPendingSyncs_RelationCache(void);
|
137
134
|
#else
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* POSTGRES relation trigger definitions.
|
5
5
|
*
|
6
6
|
*
|
7
|
-
* Portions Copyright (c) 1996-
|
7
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
9
9
|
*
|
10
10
|
* src/include/utils/reltrigger.h
|
@@ -9,7 +9,7 @@
|
|
9
9
|
* See utils/resowner/README for more info.
|
10
10
|
*
|
11
11
|
*
|
12
|
-
* Portions Copyright (c) 1996-
|
12
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
13
13
|
* Portions Copyright (c) 1994, Regents of the University of California
|
14
14
|
*
|
15
15
|
* src/include/utils/resowner.h
|
@@ -37,19 +37,88 @@ extern PGDLLIMPORT ResourceOwner AuxProcessResourceOwner;
|
|
37
37
|
|
38
38
|
/*
|
39
39
|
* Resource releasing is done in three phases: pre-locks, locks, and
|
40
|
-
* post-locks. The pre-lock phase must release any resources that are
|
41
|
-
*
|
42
|
-
*
|
43
|
-
*
|
44
|
-
*
|
40
|
+
* post-locks. The pre-lock phase must release any resources that are visible
|
41
|
+
* to other backends (such as pinned buffers); this ensures that when we
|
42
|
+
* release a lock that another backend may be waiting on, it will see us as
|
43
|
+
* being fully out of our transaction. The post-lock phase should be used for
|
44
|
+
* backend-internal cleanup.
|
45
|
+
*
|
46
|
+
* Within each phase, resources are released in priority order. Priority is
|
47
|
+
* just an integer specified in ResourceOwnerDesc. The priorities of built-in
|
48
|
+
* resource types are given below, extensions may use any priority relative to
|
49
|
+
* those or RELEASE_PRIO_FIRST/LAST. RELEASE_PRIO_FIRST is a fine choice if
|
50
|
+
* your resource doesn't depend on any other resources.
|
45
51
|
*/
|
46
52
|
typedef enum
|
47
53
|
{
|
48
|
-
RESOURCE_RELEASE_BEFORE_LOCKS,
|
54
|
+
RESOURCE_RELEASE_BEFORE_LOCKS = 1,
|
49
55
|
RESOURCE_RELEASE_LOCKS,
|
50
|
-
RESOURCE_RELEASE_AFTER_LOCKS
|
56
|
+
RESOURCE_RELEASE_AFTER_LOCKS,
|
51
57
|
} ResourceReleasePhase;
|
52
58
|
|
59
|
+
typedef uint32 ResourceReleasePriority;
|
60
|
+
|
61
|
+
/* priorities of built-in BEFORE_LOCKS resources */
|
62
|
+
#define RELEASE_PRIO_BUFFER_IOS 100
|
63
|
+
#define RELEASE_PRIO_BUFFER_PINS 200
|
64
|
+
#define RELEASE_PRIO_RELCACHE_REFS 300
|
65
|
+
#define RELEASE_PRIO_DSMS 400
|
66
|
+
#define RELEASE_PRIO_JIT_CONTEXTS 500
|
67
|
+
#define RELEASE_PRIO_CRYPTOHASH_CONTEXTS 600
|
68
|
+
#define RELEASE_PRIO_HMAC_CONTEXTS 700
|
69
|
+
|
70
|
+
/* priorities of built-in AFTER_LOCKS resources */
|
71
|
+
#define RELEASE_PRIO_CATCACHE_REFS 100
|
72
|
+
#define RELEASE_PRIO_CATCACHE_LIST_REFS 200
|
73
|
+
#define RELEASE_PRIO_PLANCACHE_REFS 300
|
74
|
+
#define RELEASE_PRIO_TUPDESC_REFS 400
|
75
|
+
#define RELEASE_PRIO_SNAPSHOT_REFS 500
|
76
|
+
#define RELEASE_PRIO_FILES 600
|
77
|
+
#define RELEASE_PRIO_WAITEVENTSETS 700
|
78
|
+
|
79
|
+
/* 0 is considered invalid */
|
80
|
+
#define RELEASE_PRIO_FIRST 1
|
81
|
+
#define RELEASE_PRIO_LAST UINT32_MAX
|
82
|
+
|
83
|
+
/*
|
84
|
+
* In order to track an object, resowner.c needs a few callbacks for it.
|
85
|
+
* The callbacks for resources of a specific kind are encapsulated in
|
86
|
+
* ResourceOwnerDesc.
|
87
|
+
*
|
88
|
+
* Note that the callbacks occur post-commit or post-abort, so the callback
|
89
|
+
* functions can only do noncritical cleanup and must not fail.
|
90
|
+
*/
|
91
|
+
typedef struct ResourceOwnerDesc
|
92
|
+
{
|
93
|
+
const char *name; /* name for the object kind, for debugging */
|
94
|
+
|
95
|
+
/* when are these objects released? */
|
96
|
+
ResourceReleasePhase release_phase;
|
97
|
+
ResourceReleasePriority release_priority;
|
98
|
+
|
99
|
+
/*
|
100
|
+
* Release resource.
|
101
|
+
*
|
102
|
+
* This is called for each resource in the resource owner, in the order
|
103
|
+
* specified by 'release_phase' and 'release_priority' when the whole
|
104
|
+
* resource owner is been released or when ResourceOwnerReleaseAllOfKind()
|
105
|
+
* is called. The resource is implicitly removed from the owner, the
|
106
|
+
* callback function doesn't need to call ResourceOwnerForget.
|
107
|
+
*/
|
108
|
+
void (*ReleaseResource) (Datum res);
|
109
|
+
|
110
|
+
/*
|
111
|
+
* Format a string describing the resource, for debugging purposes. If a
|
112
|
+
* resource has not been properly released before commit, this is used to
|
113
|
+
* print a WARNING.
|
114
|
+
*
|
115
|
+
* This can be left to NULL, in which case a generic "[resource name]: %p"
|
116
|
+
* format is used.
|
117
|
+
*/
|
118
|
+
char *(*DebugPrint) (Datum res);
|
119
|
+
|
120
|
+
} ResourceOwnerDesc;
|
121
|
+
|
53
122
|
/*
|
54
123
|
* Dynamically loaded modules can get control during ResourceOwnerRelease
|
55
124
|
* by providing a callback of this form.
|
@@ -71,16 +140,28 @@ extern void ResourceOwnerRelease(ResourceOwner owner,
|
|
71
140
|
ResourceReleasePhase phase,
|
72
141
|
bool isCommit,
|
73
142
|
bool isTopLevel);
|
74
|
-
extern void ResourceOwnerReleaseAllPlanCacheRefs(ResourceOwner owner);
|
75
143
|
extern void ResourceOwnerDelete(ResourceOwner owner);
|
76
144
|
extern ResourceOwner ResourceOwnerGetParent(ResourceOwner owner);
|
77
145
|
extern void ResourceOwnerNewParent(ResourceOwner owner,
|
78
146
|
ResourceOwner newparent);
|
147
|
+
|
148
|
+
extern void ResourceOwnerEnlarge(ResourceOwner owner);
|
149
|
+
extern void ResourceOwnerRemember(ResourceOwner owner, Datum value, const ResourceOwnerDesc *kind);
|
150
|
+
extern void ResourceOwnerForget(ResourceOwner owner, Datum value, const ResourceOwnerDesc *kind);
|
151
|
+
|
152
|
+
extern void ResourceOwnerReleaseAllOfKind(ResourceOwner owner, const ResourceOwnerDesc *kind);
|
153
|
+
|
79
154
|
extern void RegisterResourceReleaseCallback(ResourceReleaseCallback callback,
|
80
155
|
void *arg);
|
81
156
|
extern void UnregisterResourceReleaseCallback(ResourceReleaseCallback callback,
|
82
157
|
void *arg);
|
158
|
+
|
83
159
|
extern void CreateAuxProcessResourceOwner(void);
|
84
160
|
extern void ReleaseAuxProcessResources(bool isCommit);
|
85
161
|
|
162
|
+
/* special support for local lock management */
|
163
|
+
struct LOCALLOCK;
|
164
|
+
extern void ResourceOwnerRememberLock(ResourceOwner owner, struct LOCALLOCK *locallock);
|
165
|
+
extern void ResourceOwnerForgetLock(ResourceOwner owner, struct LOCALLOCK *locallock);
|
166
|
+
|
86
167
|
#endif /* RESOWNER_H */
|
@@ -3,7 +3,7 @@
|
|
3
3
|
* ruleutils.h
|
4
4
|
* Declarations for ruleutils.c
|
5
5
|
*
|
6
|
-
* Portions Copyright (c) 1996-
|
6
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
8
8
|
*
|
9
9
|
* src/include/utils/ruleutils.h
|
@@ -3,7 +3,7 @@
|
|
3
3
|
* sharedtuplestore.h
|
4
4
|
* Simple mechanism for sharing tuples between backends.
|
5
5
|
*
|
6
|
-
* Portions Copyright (c) 1996-
|
6
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
8
8
|
*
|
9
9
|
* src/include/utils/sharedtuplestore.h
|
@@ -3,7 +3,7 @@
|
|
3
3
|
* snapmgr.h
|
4
4
|
* POSTGRES snapshot manager
|
5
5
|
*
|
6
|
-
* Portions Copyright (c) 1996-
|
6
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
8
8
|
*
|
9
9
|
* src/include/utils/snapmgr.h
|
@@ -19,40 +19,6 @@
|
|
19
19
|
#include "utils/snapshot.h"
|
20
20
|
|
21
21
|
|
22
|
-
/*
|
23
|
-
* The structure used to map times to TransactionId values for the "snapshot
|
24
|
-
* too old" feature must have a few entries at the tail to hold old values;
|
25
|
-
* otherwise the lookup will often fail and the expected early pruning or
|
26
|
-
* vacuum will not usually occur. It is best if this padding is for a number
|
27
|
-
* of minutes greater than a thread would normally be stalled, but it's OK if
|
28
|
-
* early vacuum opportunities are occasionally missed, so there's no need to
|
29
|
-
* use an extreme value or get too fancy. 10 minutes seems plenty.
|
30
|
-
*/
|
31
|
-
#define OLD_SNAPSHOT_PADDING_ENTRIES 10
|
32
|
-
#define OLD_SNAPSHOT_TIME_MAP_ENTRIES (old_snapshot_threshold + OLD_SNAPSHOT_PADDING_ENTRIES)
|
33
|
-
|
34
|
-
/*
|
35
|
-
* Common definition of relation properties that allow early pruning/vacuuming
|
36
|
-
* when old_snapshot_threshold >= 0.
|
37
|
-
*/
|
38
|
-
#define RelationAllowsEarlyPruning(rel) \
|
39
|
-
( \
|
40
|
-
RelationIsPermanent(rel) && !IsCatalogRelation(rel) \
|
41
|
-
&& !RelationIsAccessibleInLogicalDecoding(rel) \
|
42
|
-
)
|
43
|
-
|
44
|
-
#define EarlyPruningEnabled(rel) (old_snapshot_threshold >= 0 && RelationAllowsEarlyPruning(rel))
|
45
|
-
|
46
|
-
/* GUC variables */
|
47
|
-
extern PGDLLIMPORT int old_snapshot_threshold;
|
48
|
-
|
49
|
-
|
50
|
-
extern Size SnapMgrShmemSize(void);
|
51
|
-
extern void SnapMgrInit(void);
|
52
|
-
extern TimestampTz GetSnapshotCurrentTimestamp(void);
|
53
|
-
extern TimestampTz GetOldSnapshotThresholdTimestamp(void);
|
54
|
-
extern void SnapshotTooOldMagicForTest(void);
|
55
|
-
|
56
22
|
extern PGDLLIMPORT bool FirstSnapshotSet;
|
57
23
|
|
58
24
|
extern PGDLLIMPORT TransactionId TransactionXmin;
|
@@ -97,14 +63,6 @@ extern PGDLLIMPORT SnapshotData CatalogSnapshotData;
|
|
97
63
|
((snapshot)->snapshot_type == SNAPSHOT_MVCC || \
|
98
64
|
(snapshot)->snapshot_type == SNAPSHOT_HISTORIC_MVCC)
|
99
65
|
|
100
|
-
#ifndef FRONTEND
|
101
|
-
static inline bool
|
102
|
-
OldSnapshotThresholdActive(void)
|
103
|
-
{
|
104
|
-
return old_snapshot_threshold >= 0;
|
105
|
-
}
|
106
|
-
#endif
|
107
|
-
|
108
66
|
extern Snapshot GetTransactionSnapshot(void);
|
109
67
|
extern Snapshot GetLatestSnapshot(void);
|
110
68
|
extern void SnapshotSetCommandId(CommandId curcid);
|
@@ -138,13 +96,6 @@ extern void DeleteAllExportedSnapshotFiles(void);
|
|
138
96
|
extern void WaitForOlderSnapshots(TransactionId limitXmin, bool progress);
|
139
97
|
extern bool ThereAreNoPriorRegisteredSnapshots(void);
|
140
98
|
extern bool HaveRegisteredOrActiveSnapshot(void);
|
141
|
-
extern bool TransactionIdLimitedForOldSnapshots(TransactionId recentXmin,
|
142
|
-
Relation relation,
|
143
|
-
TransactionId *limit_xid,
|
144
|
-
TimestampTz *limit_ts);
|
145
|
-
extern void SetOldSnapshotThresholdTimestamp(TimestampTz ts, TransactionId xlimit);
|
146
|
-
extern void MaintainOldSnapshotTimeMapping(TimestampTz whenTaken,
|
147
|
-
TransactionId xmin);
|
148
99
|
|
149
100
|
extern char *ExportSnapshot(Snapshot snapshot);
|
150
101
|
|
@@ -156,8 +107,6 @@ typedef struct GlobalVisState GlobalVisState;
|
|
156
107
|
extern GlobalVisState *GlobalVisTestFor(Relation rel);
|
157
108
|
extern bool GlobalVisTestIsRemovableXid(GlobalVisState *state, TransactionId xid);
|
158
109
|
extern bool GlobalVisTestIsRemovableFullXid(GlobalVisState *state, FullTransactionId fxid);
|
159
|
-
extern FullTransactionId GlobalVisTestNonRemovableFullHorizon(GlobalVisState *state);
|
160
|
-
extern TransactionId GlobalVisTestNonRemovableHorizon(GlobalVisState *state);
|
161
110
|
extern bool GlobalVisCheckRemovableXid(Relation rel, TransactionId xid);
|
162
111
|
extern bool GlobalVisCheckRemovableFullXid(Relation rel, FullTransactionId fxid);
|
163
112
|
|
@@ -3,7 +3,7 @@
|
|
3
3
|
* snapshot.h
|
4
4
|
* POSTGRES snapshot definition
|
5
5
|
*
|
6
|
-
* Portions Copyright (c) 1996-
|
6
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
8
8
|
*
|
9
9
|
* src/include/utils/snapshot.h
|
@@ -115,7 +115,7 @@ typedef enum SnapshotType
|
|
115
115
|
* For visibility checks snapshot->min must have been set up with the xmin
|
116
116
|
* horizon to use.
|
117
117
|
*/
|
118
|
-
SNAPSHOT_NON_VACUUMABLE
|
118
|
+
SNAPSHOT_NON_VACUUMABLE,
|
119
119
|
} SnapshotType;
|
120
120
|
|
121
121
|
typedef struct SnapshotData *Snapshot;
|
@@ -42,7 +42,7 @@
|
|
42
42
|
* function for such cases, but probably not any other acceleration method.
|
43
43
|
*
|
44
44
|
*
|
45
|
-
* Portions Copyright (c) 1996-
|
45
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
46
46
|
* Portions Copyright (c) 1994, Regents of the University of California
|
47
47
|
*
|
48
48
|
* src/include/utils/sortsupport.h
|
@@ -6,7 +6,7 @@
|
|
6
6
|
* See also lsyscache.h, which provides convenience routines for
|
7
7
|
* common cache-lookup operations.
|
8
8
|
*
|
9
|
-
* Portions Copyright (c) 1996-
|
9
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
10
10
|
* Portions Copyright (c) 1994, Regents of the University of California
|
11
11
|
*
|
12
12
|
* src/include/utils/syscache.h
|
@@ -20,103 +20,7 @@
|
|
20
20
|
#include "access/htup.h"
|
21
21
|
/* we intentionally do not include utils/catcache.h here */
|
22
22
|
|
23
|
-
|
24
|
-
* SysCache identifiers.
|
25
|
-
*
|
26
|
-
* The order of these identifiers must match the order
|
27
|
-
* of the entries in the array cacheinfo[] in syscache.c.
|
28
|
-
* Keep them in alphabetical order (renumbering only costs a
|
29
|
-
* backend rebuild).
|
30
|
-
*/
|
31
|
-
|
32
|
-
enum SysCacheIdentifier
|
33
|
-
{
|
34
|
-
AGGFNOID = 0,
|
35
|
-
AMNAME,
|
36
|
-
AMOID,
|
37
|
-
AMOPOPID,
|
38
|
-
AMOPSTRATEGY,
|
39
|
-
AMPROCNUM,
|
40
|
-
ATTNAME,
|
41
|
-
ATTNUM,
|
42
|
-
AUTHMEMMEMROLE,
|
43
|
-
AUTHMEMROLEMEM,
|
44
|
-
AUTHNAME,
|
45
|
-
AUTHOID,
|
46
|
-
CASTSOURCETARGET,
|
47
|
-
CLAAMNAMENSP,
|
48
|
-
CLAOID,
|
49
|
-
COLLNAMEENCNSP,
|
50
|
-
COLLOID,
|
51
|
-
CONDEFAULT,
|
52
|
-
CONNAMENSP,
|
53
|
-
CONSTROID,
|
54
|
-
CONVOID,
|
55
|
-
DATABASEOID,
|
56
|
-
DEFACLROLENSPOBJ,
|
57
|
-
ENUMOID,
|
58
|
-
ENUMTYPOIDNAME,
|
59
|
-
EVENTTRIGGERNAME,
|
60
|
-
EVENTTRIGGEROID,
|
61
|
-
FOREIGNDATAWRAPPERNAME,
|
62
|
-
FOREIGNDATAWRAPPEROID,
|
63
|
-
FOREIGNSERVERNAME,
|
64
|
-
FOREIGNSERVEROID,
|
65
|
-
FOREIGNTABLEREL,
|
66
|
-
INDEXRELID,
|
67
|
-
LANGNAME,
|
68
|
-
LANGOID,
|
69
|
-
NAMESPACENAME,
|
70
|
-
NAMESPACEOID,
|
71
|
-
OPERNAMENSP,
|
72
|
-
OPEROID,
|
73
|
-
OPFAMILYAMNAMENSP,
|
74
|
-
OPFAMILYOID,
|
75
|
-
PARAMETERACLNAME,
|
76
|
-
PARAMETERACLOID,
|
77
|
-
PARTRELID,
|
78
|
-
PROCNAMEARGSNSP,
|
79
|
-
PROCOID,
|
80
|
-
PUBLICATIONNAME,
|
81
|
-
PUBLICATIONNAMESPACE,
|
82
|
-
PUBLICATIONNAMESPACEMAP,
|
83
|
-
PUBLICATIONOID,
|
84
|
-
PUBLICATIONREL,
|
85
|
-
PUBLICATIONRELMAP,
|
86
|
-
RANGEMULTIRANGE,
|
87
|
-
RANGETYPE,
|
88
|
-
RELNAMENSP,
|
89
|
-
RELOID,
|
90
|
-
REPLORIGIDENT,
|
91
|
-
REPLORIGNAME,
|
92
|
-
RULERELNAME,
|
93
|
-
SEQRELID,
|
94
|
-
STATEXTDATASTXOID,
|
95
|
-
STATEXTNAMENSP,
|
96
|
-
STATEXTOID,
|
97
|
-
STATRELATTINH,
|
98
|
-
SUBSCRIPTIONNAME,
|
99
|
-
SUBSCRIPTIONOID,
|
100
|
-
SUBSCRIPTIONRELMAP,
|
101
|
-
TABLESPACEOID,
|
102
|
-
TRFOID,
|
103
|
-
TRFTYPELANG,
|
104
|
-
TSCONFIGMAP,
|
105
|
-
TSCONFIGNAMENSP,
|
106
|
-
TSCONFIGOID,
|
107
|
-
TSDICTNAMENSP,
|
108
|
-
TSDICTOID,
|
109
|
-
TSPARSERNAMENSP,
|
110
|
-
TSPARSEROID,
|
111
|
-
TSTEMPLATENAMENSP,
|
112
|
-
TSTEMPLATEOID,
|
113
|
-
TYPENAMENSP,
|
114
|
-
TYPEOID,
|
115
|
-
USERMAPPINGOID,
|
116
|
-
USERMAPPINGUSERSERVER
|
117
|
-
|
118
|
-
#define SysCacheSize (USERMAPPINGUSERSERVER + 1)
|
119
|
-
};
|
23
|
+
#include "catalog/syscache_ids.h"
|
120
24
|
|
121
25
|
extern void InitCatalogCache(void);
|
122
26
|
extern void InitCatalogCachePhase2(void);
|
@@ -139,9 +43,14 @@ extern HeapTuple SearchSysCache4(int cacheId,
|
|
139
43
|
|
140
44
|
extern void ReleaseSysCache(HeapTuple tuple);
|
141
45
|
|
46
|
+
extern HeapTuple SearchSysCacheLocked1(int cacheId,
|
47
|
+
Datum key1);
|
48
|
+
|
142
49
|
/* convenience routines */
|
143
50
|
extern HeapTuple SearchSysCacheCopy(int cacheId,
|
144
51
|
Datum key1, Datum key2, Datum key3, Datum key4);
|
52
|
+
extern HeapTuple SearchSysCacheLockedCopy1(int cacheId,
|
53
|
+
Datum key1);
|
145
54
|
extern bool SearchSysCacheExists(int cacheId,
|
146
55
|
Datum key1, Datum key2, Datum key3, Datum key4);
|
147
56
|
extern Oid GetSysCacheOid(int cacheId, AttrNumber oidcol,
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* Routines to multiplex SIGALRM interrupts for multiple timeout reasons.
|
5
5
|
*
|
6
6
|
*
|
7
|
-
* Portions Copyright (c) 1996-
|
7
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
9
9
|
*
|
10
10
|
* src/include/utils/timeout.h
|
@@ -31,6 +31,7 @@ typedef enum TimeoutId
|
|
31
31
|
STANDBY_TIMEOUT,
|
32
32
|
STANDBY_LOCK_TIMEOUT,
|
33
33
|
IDLE_IN_TRANSACTION_SESSION_TIMEOUT,
|
34
|
+
TRANSACTION_TIMEOUT,
|
34
35
|
IDLE_SESSION_TIMEOUT,
|
35
36
|
IDLE_STATS_UPDATE_TIMEOUT,
|
36
37
|
CLIENT_CONNECTION_CHECK_TIMEOUT,
|
@@ -51,7 +52,7 @@ typedef enum TimeoutType
|
|
51
52
|
{
|
52
53
|
TMPARAM_AFTER,
|
53
54
|
TMPARAM_AT,
|
54
|
-
TMPARAM_EVERY
|
55
|
+
TMPARAM_EVERY,
|
55
56
|
} TimeoutType;
|
56
57
|
|
57
58
|
typedef struct
|
@@ -3,7 +3,7 @@
|
|
3
3
|
* timestamp.h
|
4
4
|
* Definitions for the SQL "timestamp" and "interval" types.
|
5
5
|
*
|
6
|
-
* Portions Copyright (c) 1996-
|
6
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
8
8
|
*
|
9
9
|
* src/include/utils/timestamp.h
|
@@ -11,7 +11,7 @@
|
|
11
11
|
* algorithm. Parallel sorts use a variant of this external sort
|
12
12
|
* algorithm, and are typically only used for large amounts of data.
|
13
13
|
*
|
14
|
-
* Portions Copyright (c) 1996-
|
14
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
15
15
|
* Portions Copyright (c) 1994, Regents of the University of California
|
16
16
|
*
|
17
17
|
* src/include/utils/tuplesort.h
|
@@ -21,6 +21,7 @@
|
|
21
21
|
#ifndef TUPLESORT_H
|
22
22
|
#define TUPLESORT_H
|
23
23
|
|
24
|
+
#include "access/brin_tuple.h"
|
24
25
|
#include "access/itup.h"
|
25
26
|
#include "executor/tuptable.h"
|
26
27
|
#include "storage/dsm.h"
|
@@ -77,7 +78,7 @@ typedef enum
|
|
77
78
|
SORT_TYPE_TOP_N_HEAPSORT = 1 << 0,
|
78
79
|
SORT_TYPE_QUICKSORT = 1 << 1,
|
79
80
|
SORT_TYPE_EXTERNAL_SORT = 1 << 2,
|
80
|
-
SORT_TYPE_EXTERNAL_MERGE = 1 << 3
|
81
|
+
SORT_TYPE_EXTERNAL_MERGE = 1 << 3,
|
81
82
|
} TuplesortMethod;
|
82
83
|
|
83
84
|
#define NUM_TUPLESORTMETHODS 4
|
@@ -85,7 +86,7 @@ typedef enum
|
|
85
86
|
typedef enum
|
86
87
|
{
|
87
88
|
SORT_SPACE_TYPE_DISK,
|
88
|
-
SORT_SPACE_TYPE_MEMORY
|
89
|
+
SORT_SPACE_TYPE_MEMORY,
|
89
90
|
} TuplesortSpaceType;
|
90
91
|
|
91
92
|
/* Bitwise option flags for tuple sorts */
|
@@ -97,6 +98,15 @@ typedef enum
|
|
97
98
|
/* specifies if the tuplesort is able to support bounded sorts */
|
98
99
|
#define TUPLESORT_ALLOWBOUNDED (1 << 1)
|
99
100
|
|
101
|
+
/*
|
102
|
+
* For bounded sort, tuples get pfree'd when they fall outside of the bound.
|
103
|
+
* When bounded sorts are not required, we can use a bump context for tuple
|
104
|
+
* allocation as there's no risk that pfree will ever be called for a tuple.
|
105
|
+
* Define a macro to make it easier for code to figure out if we're using a
|
106
|
+
* bump allocator.
|
107
|
+
*/
|
108
|
+
#define TupleSortUseBumpTupleCxt(opt) (((opt) & TUPLESORT_ALLOWBOUNDED) == 0)
|
109
|
+
|
100
110
|
typedef struct TuplesortInstrumentation
|
101
111
|
{
|
102
112
|
TuplesortMethod sortMethod; /* sort algorithm used */
|
@@ -108,10 +118,11 @@ typedef struct TuplesortInstrumentation
|
|
108
118
|
* The objects we actually sort are SortTuple structs. These contain
|
109
119
|
* a pointer to the tuple proper (might be a MinimalTuple or IndexTuple),
|
110
120
|
* which is a separate palloc chunk --- we assume it is just one chunk and
|
111
|
-
* can be freed by a simple pfree() (except during merge,
|
112
|
-
* simple slab allocator
|
113
|
-
*
|
114
|
-
*
|
121
|
+
* can be freed by a simple pfree() (except during merge, where we use a
|
122
|
+
* simple slab allocator, and during a non-bounded sort where we use a bump
|
123
|
+
* allocator). SortTuples also contain the tuple's first key column in
|
124
|
+
* Datum/nullflag format, and a source/input tape number that tracks which
|
125
|
+
* tape each heap element/slot belongs to during merging.
|
115
126
|
*
|
116
127
|
* Storing the first key column lets us save heap_getattr or index_getattr
|
117
128
|
* calls during tuple comparisons. We could extract and save all the key
|
@@ -162,6 +173,13 @@ typedef struct
|
|
162
173
|
*/
|
163
174
|
SortTupleComparator comparetup;
|
164
175
|
|
176
|
+
/*
|
177
|
+
* Fall back to the full tuple for comparison, but only compare the first
|
178
|
+
* sortkey if it was abbreviated. Otherwise, only compare second and later
|
179
|
+
* sortkeys.
|
180
|
+
*/
|
181
|
+
SortTupleComparator comparetup_tiebreak;
|
182
|
+
|
165
183
|
/*
|
166
184
|
* Alter datum1 representation in the SortTuple's array back from the
|
167
185
|
* abbreviated key to the first column value.
|
@@ -275,6 +293,9 @@ typedef struct
|
|
275
293
|
* The "index_hash" API is similar to index_btree, but the tuples are
|
276
294
|
* actually sorted by their hash codes not the raw data.
|
277
295
|
*
|
296
|
+
* The "index_brin" API is similar to index_btree, but the tuples are
|
297
|
+
* BrinTuple and are sorted by their block number not the raw data.
|
298
|
+
*
|
278
299
|
* Parallel sort callers are required to coordinate multiple tuplesort states
|
279
300
|
* in a leader process and one or more worker processes. The leader process
|
280
301
|
* must launch workers, and have each perform an independent "partial"
|
@@ -356,7 +377,8 @@ extern Tuplesortstate *tuplesort_begin_common(int workMem,
|
|
356
377
|
extern void tuplesort_set_bound(Tuplesortstate *state, int64 bound);
|
357
378
|
extern bool tuplesort_used_bound(Tuplesortstate *state);
|
358
379
|
extern void tuplesort_puttuple_common(Tuplesortstate *state,
|
359
|
-
SortTuple *tuple, bool useAbbrev
|
380
|
+
SortTuple *tuple, bool useAbbrev,
|
381
|
+
Size tuplen);
|
360
382
|
extern void tuplesort_performsort(Tuplesortstate *state);
|
361
383
|
extern bool tuplesort_gettuple_common(Tuplesortstate *state, bool forward,
|
362
384
|
SortTuple *stup);
|
@@ -419,6 +441,8 @@ extern Tuplesortstate *tuplesort_begin_index_gist(Relation heapRel,
|
|
419
441
|
Relation indexRel,
|
420
442
|
int workMem, SortCoordinate coordinate,
|
421
443
|
int sortopt);
|
444
|
+
extern Tuplesortstate *tuplesort_begin_index_brin(int workMem, SortCoordinate coordinate,
|
445
|
+
int sortopt);
|
422
446
|
extern Tuplesortstate *tuplesort_begin_datum(Oid datumType,
|
423
447
|
Oid sortOperator, Oid sortCollation,
|
424
448
|
bool nullsFirstFlag,
|
@@ -430,7 +454,8 @@ extern void tuplesort_puttupleslot(Tuplesortstate *state,
|
|
430
454
|
extern void tuplesort_putheaptuple(Tuplesortstate *state, HeapTuple tup);
|
431
455
|
extern void tuplesort_putindextuplevalues(Tuplesortstate *state,
|
432
456
|
Relation rel, ItemPointer self,
|
433
|
-
Datum *values, bool *isnull);
|
457
|
+
const Datum *values, const bool *isnull);
|
458
|
+
extern void tuplesort_putbrintuple(Tuplesortstate *state, BrinTuple *tuple, Size size);
|
434
459
|
extern void tuplesort_putdatum(Tuplesortstate *state, Datum val,
|
435
460
|
bool isNull);
|
436
461
|
|
@@ -438,6 +463,8 @@ extern bool tuplesort_gettupleslot(Tuplesortstate *state, bool forward,
|
|
438
463
|
bool copy, TupleTableSlot *slot, Datum *abbrev);
|
439
464
|
extern HeapTuple tuplesort_getheaptuple(Tuplesortstate *state, bool forward);
|
440
465
|
extern IndexTuple tuplesort_getindextuple(Tuplesortstate *state, bool forward);
|
466
|
+
extern BrinTuple *tuplesort_getbrintuple(Tuplesortstate *state, Size *len,
|
467
|
+
bool forward);
|
441
468
|
extern bool tuplesort_getdatum(Tuplesortstate *state, bool forward, bool copy,
|
442
469
|
Datum *val, bool *isNull, Datum *abbrev);
|
443
470
|
|