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 low-level lock mechanism
|
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/storage/lock.h
|
@@ -19,9 +19,9 @@
|
|
19
19
|
#endif
|
20
20
|
|
21
21
|
#include "lib/ilist.h"
|
22
|
-
#include "storage/backendid.h"
|
23
22
|
#include "storage/lockdefs.h"
|
24
23
|
#include "storage/lwlock.h"
|
24
|
+
#include "storage/procnumber.h"
|
25
25
|
#include "storage/shmem.h"
|
26
26
|
#include "utils/timestamp.h"
|
27
27
|
|
@@ -42,7 +42,7 @@ extern PGDLLIMPORT bool Debug_deadlocks;
|
|
42
42
|
|
43
43
|
/*
|
44
44
|
* Top-level transactions are identified by VirtualTransactionIDs comprising
|
45
|
-
* PGPROC fields
|
45
|
+
* PGPROC fields procNumber and lxid. For recovered prepared transactions, the
|
46
46
|
* LocalTransactionId is an ordinary XID; LOCKTAG_VIRTUALTRANSACTION never
|
47
47
|
* refers to that kind. These are guaranteed unique over the short term, but
|
48
48
|
* will be reused after a database restart or XID wraparound; hence they
|
@@ -50,7 +50,7 @@ extern PGDLLIMPORT bool Debug_deadlocks;
|
|
50
50
|
*
|
51
51
|
* Note that struct VirtualTransactionId can not be assumed to be atomically
|
52
52
|
* assignable as a whole. However, type LocalTransactionId is assumed to
|
53
|
-
* be atomically assignable, and the
|
53
|
+
* be atomically assignable, and the proc number doesn't change often enough
|
54
54
|
* to be a problem, so we can fetch or assign the two fields separately.
|
55
55
|
* We deliberately refrain from using the struct within PGPROC, to prevent
|
56
56
|
* coding errors from trying to use struct assignment with it; instead use
|
@@ -58,7 +58,7 @@ extern PGDLLIMPORT bool Debug_deadlocks;
|
|
58
58
|
*/
|
59
59
|
typedef struct
|
60
60
|
{
|
61
|
-
|
61
|
+
ProcNumber procNumber; /* proc number of the PGPROC */
|
62
62
|
LocalTransactionId localTransactionId; /* lxid from PGPROC */
|
63
63
|
} VirtualTransactionId;
|
64
64
|
|
@@ -67,16 +67,16 @@ typedef struct
|
|
67
67
|
#define VirtualTransactionIdIsValid(vxid) \
|
68
68
|
(LocalTransactionIdIsValid((vxid).localTransactionId))
|
69
69
|
#define VirtualTransactionIdIsRecoveredPreparedXact(vxid) \
|
70
|
-
((vxid).
|
70
|
+
((vxid).procNumber == INVALID_PROC_NUMBER)
|
71
71
|
#define VirtualTransactionIdEquals(vxid1, vxid2) \
|
72
|
-
((vxid1).
|
72
|
+
((vxid1).procNumber == (vxid2).procNumber && \
|
73
73
|
(vxid1).localTransactionId == (vxid2).localTransactionId)
|
74
74
|
#define SetInvalidVirtualTransactionId(vxid) \
|
75
|
-
((vxid).
|
75
|
+
((vxid).procNumber = INVALID_PROC_NUMBER, \
|
76
76
|
(vxid).localTransactionId = InvalidLocalTransactionId)
|
77
|
-
#define GET_VXID_FROM_PGPROC(
|
78
|
-
((
|
79
|
-
|
77
|
+
#define GET_VXID_FROM_PGPROC(vxid_dst, proc) \
|
78
|
+
((vxid_dst).procNumber = (proc).vxid.procNumber, \
|
79
|
+
(vxid_dst).localTransactionId = (proc).vxid.lxid)
|
80
80
|
|
81
81
|
/* MAX_LOCKMODES cannot be larger than the # of bits in LOCKMASK */
|
82
82
|
#define MAX_LOCKMODES 10
|
@@ -145,7 +145,7 @@ typedef enum LockTagType
|
|
145
145
|
LOCKTAG_OBJECT, /* non-relation database object */
|
146
146
|
LOCKTAG_USERLOCK, /* reserved for old contrib/userlock code */
|
147
147
|
LOCKTAG_ADVISORY, /* advisory user locks */
|
148
|
-
LOCKTAG_APPLY_TRANSACTION /* transaction being applied on a logical
|
148
|
+
LOCKTAG_APPLY_TRANSACTION, /* transaction being applied on a logical
|
149
149
|
* replication subscriber */
|
150
150
|
} LockTagType;
|
151
151
|
|
@@ -233,7 +233,7 @@ typedef struct LOCKTAG
|
|
233
233
|
|
234
234
|
/* ID info for a virtual transaction is its VirtualTransactionId */
|
235
235
|
#define SET_LOCKTAG_VIRTUALTRANSACTION(locktag,vxid) \
|
236
|
-
((locktag).locktag_field1 = (vxid).
|
236
|
+
((locktag).locktag_field1 = (vxid).procNumber, \
|
237
237
|
(locktag).locktag_field2 = (vxid).localTransactionId, \
|
238
238
|
(locktag).locktag_field3 = 0, \
|
239
239
|
(locktag).locktag_field4 = 0, \
|
@@ -454,8 +454,7 @@ typedef struct LockInstanceData
|
|
454
454
|
LOCKTAG locktag; /* tag for locked object */
|
455
455
|
LOCKMASK holdMask; /* locks held by this PGPROC */
|
456
456
|
LOCKMODE waitLockMode; /* lock awaited by this PGPROC, if any */
|
457
|
-
|
458
|
-
LocalTransactionId lxid; /* local transaction ID of this PGPROC */
|
457
|
+
VirtualTransactionId vxid; /* virtual transaction ID of this PGPROC */
|
459
458
|
TimestampTz waitStart; /* time at which this PGPROC started waiting
|
460
459
|
* for lock */
|
461
460
|
int pid; /* pid of this PGPROC */
|
@@ -502,7 +501,7 @@ typedef enum
|
|
502
501
|
LOCKACQUIRE_NOT_AVAIL, /* lock not available, and dontWait=true */
|
503
502
|
LOCKACQUIRE_OK, /* lock successfully acquired */
|
504
503
|
LOCKACQUIRE_ALREADY_HELD, /* incremented count for lock already held */
|
505
|
-
LOCKACQUIRE_ALREADY_CLEAR /* incremented count for lock already clear */
|
504
|
+
LOCKACQUIRE_ALREADY_CLEAR, /* incremented count for lock already clear */
|
506
505
|
} LockAcquireResult;
|
507
506
|
|
508
507
|
/* Deadlock states identified by DeadLockCheck() */
|
@@ -512,7 +511,7 @@ typedef enum
|
|
512
511
|
DS_NO_DEADLOCK, /* no deadlock detected */
|
513
512
|
DS_SOFT_DEADLOCK, /* deadlock avoided by queue rearrangement */
|
514
513
|
DS_HARD_DEADLOCK, /* deadlock, no way out but ERROR */
|
515
|
-
DS_BLOCKED_BY_AUTOVACUUM /* no deadlock; queue blocked by autovacuum
|
514
|
+
DS_BLOCKED_BY_AUTOVACUUM, /* no deadlock; queue blocked by autovacuum
|
516
515
|
* worker */
|
517
516
|
} DeadLockState;
|
518
517
|
|
@@ -540,7 +539,7 @@ typedef enum
|
|
540
539
|
* used for a given lock group is determined by the group leader's pgprocno.
|
541
540
|
*/
|
542
541
|
#define LockHashPartitionLockByProc(leader_pgproc) \
|
543
|
-
LockHashPartitionLock((leader_pgproc)
|
542
|
+
LockHashPartitionLock(GetNumberFromPGProc(leader_pgproc))
|
544
543
|
|
545
544
|
/*
|
546
545
|
* function prototypes
|
@@ -568,7 +567,8 @@ extern void LockReleaseAll(LOCKMETHODID lockmethodid, bool allLocks);
|
|
568
567
|
extern void LockReleaseSession(LOCKMETHODID lockmethodid);
|
569
568
|
extern void LockReleaseCurrentOwner(LOCALLOCK **locallocks, int nlocks);
|
570
569
|
extern void LockReassignCurrentOwner(LOCALLOCK **locallocks, int nlocks);
|
571
|
-
extern bool LockHeldByMe(const LOCKTAG *locktag,
|
570
|
+
extern bool LockHeldByMe(const LOCKTAG *locktag,
|
571
|
+
LOCKMODE lockmode, bool orstronger);
|
572
572
|
#ifdef USE_ASSERT_CHECKING
|
573
573
|
extern HTAB *GetLockMethodLocalHash(void);
|
574
574
|
#endif
|
@@ -7,7 +7,7 @@
|
|
7
7
|
* contains definition that have to (indirectly) be available when included by
|
8
8
|
* FRONTEND code.
|
9
9
|
*
|
10
|
-
* Portions Copyright (c) 1996-
|
10
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
11
11
|
* Portions Copyright (c) 1994, Regents of the University of California
|
12
12
|
*
|
13
13
|
* src/include/storage/lockdefs.h
|
@@ -47,6 +47,8 @@ typedef int LOCKMODE;
|
|
47
47
|
|
48
48
|
#define MaxLockMode 8 /* highest standard lock mode */
|
49
49
|
|
50
|
+
/* See README.tuplock section "Locking to write inplace-updated tables" */
|
51
|
+
#define InplaceUpdateTupleLock ExclusiveLock
|
50
52
|
|
51
53
|
/* WAL representation of an AccessExclusiveLock on a table */
|
52
54
|
typedef struct xl_standby_lock
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* Lightweight lock manager
|
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/storage/lwlock.h
|
@@ -19,6 +19,7 @@
|
|
19
19
|
#endif
|
20
20
|
|
21
21
|
#include "port/atomics.h"
|
22
|
+
#include "storage/lwlocknames.h"
|
22
23
|
#include "storage/proclist_types.h"
|
23
24
|
|
24
25
|
struct PGPROC;
|
@@ -82,9 +83,6 @@ typedef struct NamedLWLockTranche
|
|
82
83
|
extern PGDLLIMPORT NamedLWLockTranche *NamedLWLockTrancheArray;
|
83
84
|
extern PGDLLIMPORT int NamedLWLockTrancheRequests;
|
84
85
|
|
85
|
-
/* Names for fixed lwlocks */
|
86
|
-
#include "storage/lwlocknames.h"
|
87
|
-
|
88
86
|
/*
|
89
87
|
* It's a bit odd to declare NUM_BUFFER_PARTITIONS and NUM_LOCK_PARTITIONS
|
90
88
|
* here, but we need them to figure out offsets within MainLWLockArray, and
|
@@ -115,7 +113,7 @@ typedef enum LWLockMode
|
|
115
113
|
{
|
116
114
|
LW_EXCLUSIVE,
|
117
115
|
LW_SHARED,
|
118
|
-
LW_WAIT_UNTIL_FREE /* A special mode used in PGPROC->lwWaitMode,
|
116
|
+
LW_WAIT_UNTIL_FREE, /* A special mode used in PGPROC->lwWaitMode,
|
119
117
|
* when waiting for lock to become free. Not
|
120
118
|
* to be used as LWLockAcquire argument */
|
121
119
|
} LWLockMode;
|
@@ -129,14 +127,14 @@ extern bool LWLockAcquire(LWLock *lock, LWLockMode mode);
|
|
129
127
|
extern bool LWLockConditionalAcquire(LWLock *lock, LWLockMode mode);
|
130
128
|
extern bool LWLockAcquireOrWait(LWLock *lock, LWLockMode mode);
|
131
129
|
extern void LWLockRelease(LWLock *lock);
|
132
|
-
extern void LWLockReleaseClearVar(LWLock *lock,
|
130
|
+
extern void LWLockReleaseClearVar(LWLock *lock, pg_atomic_uint64 *valptr, uint64 val);
|
133
131
|
extern void LWLockReleaseAll(void);
|
134
132
|
extern bool LWLockHeldByMe(LWLock *lock);
|
135
133
|
extern bool LWLockAnyHeldByMe(LWLock *lock, int nlocks, size_t stride);
|
136
134
|
extern bool LWLockHeldByMeInMode(LWLock *lock, LWLockMode mode);
|
137
135
|
|
138
|
-
extern bool LWLockWaitForVar(LWLock *lock,
|
139
|
-
extern void LWLockUpdateVar(LWLock *lock,
|
136
|
+
extern bool LWLockWaitForVar(LWLock *lock, pg_atomic_uint64 *valptr, uint64 oldval, uint64 *newval);
|
137
|
+
extern void LWLockUpdateVar(LWLock *lock, pg_atomic_uint64 *valptr, uint64 val);
|
140
138
|
|
141
139
|
extern Size LWLockShmemSize(void);
|
142
140
|
extern void CreateLWLocks(void);
|
@@ -207,7 +205,17 @@ typedef enum BuiltinTrancheIds
|
|
207
205
|
LWTRANCHE_PGSTATS_DATA,
|
208
206
|
LWTRANCHE_LAUNCHER_DSA,
|
209
207
|
LWTRANCHE_LAUNCHER_HASH,
|
210
|
-
|
208
|
+
LWTRANCHE_DSM_REGISTRY_DSA,
|
209
|
+
LWTRANCHE_DSM_REGISTRY_HASH,
|
210
|
+
LWTRANCHE_COMMITTS_SLRU,
|
211
|
+
LWTRANCHE_MULTIXACTMEMBER_SLRU,
|
212
|
+
LWTRANCHE_MULTIXACTOFFSET_SLRU,
|
213
|
+
LWTRANCHE_NOTIFY_SLRU,
|
214
|
+
LWTRANCHE_SERIAL_SLRU,
|
215
|
+
LWTRANCHE_SUBTRANS_SLRU,
|
216
|
+
LWTRANCHE_XACT_SLRU,
|
217
|
+
LWTRANCHE_PARALLEL_VACUUM_DSA,
|
218
|
+
LWTRANCHE_FIRST_USER_DEFINED,
|
211
219
|
} BuiltinTrancheIds;
|
212
220
|
|
213
221
|
/*
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/* autogenerated from src/
|
1
|
+
/* autogenerated from src/include/storage/lwlocklist.h, do not edit */
|
2
2
|
/* there is deliberately not an #ifndef LWLOCKNAMES_H here */
|
3
3
|
|
4
4
|
#define ShmemIndexLock (&MainLWLockArray[1].lock)
|
@@ -10,11 +10,7 @@
|
|
10
10
|
#define WALBufMappingLock (&MainLWLockArray[7].lock)
|
11
11
|
#define WALWriteLock (&MainLWLockArray[8].lock)
|
12
12
|
#define ControlFileLock (&MainLWLockArray[9].lock)
|
13
|
-
#define XactSLRULock (&MainLWLockArray[11].lock)
|
14
|
-
#define SubtransSLRULock (&MainLWLockArray[12].lock)
|
15
13
|
#define MultiXactGenLock (&MainLWLockArray[13].lock)
|
16
|
-
#define MultiXactOffsetSLRULock (&MainLWLockArray[14].lock)
|
17
|
-
#define MultiXactMemberSLRULock (&MainLWLockArray[15].lock)
|
18
14
|
#define RelCacheInitLock (&MainLWLockArray[16].lock)
|
19
15
|
#define CheckpointerCommLock (&MainLWLockArray[17].lock)
|
20
16
|
#define TwoPhaseStateLock (&MainLWLockArray[18].lock)
|
@@ -25,26 +21,27 @@
|
|
25
21
|
#define AutovacuumScheduleLock (&MainLWLockArray[23].lock)
|
26
22
|
#define SyncScanLock (&MainLWLockArray[24].lock)
|
27
23
|
#define RelationMappingLock (&MainLWLockArray[25].lock)
|
28
|
-
#define NotifySLRULock (&MainLWLockArray[26].lock)
|
29
24
|
#define NotifyQueueLock (&MainLWLockArray[27].lock)
|
30
25
|
#define SerializableXactHashLock (&MainLWLockArray[28].lock)
|
31
26
|
#define SerializableFinishedListLock (&MainLWLockArray[29].lock)
|
32
27
|
#define SerializablePredicateListLock (&MainLWLockArray[30].lock)
|
33
|
-
#define SerialSLRULock (&MainLWLockArray[31].lock)
|
34
28
|
#define SyncRepLock (&MainLWLockArray[32].lock)
|
35
29
|
#define BackgroundWorkerLock (&MainLWLockArray[33].lock)
|
36
30
|
#define DynamicSharedMemoryControlLock (&MainLWLockArray[34].lock)
|
37
31
|
#define AutoFileLock (&MainLWLockArray[35].lock)
|
38
32
|
#define ReplicationSlotAllocationLock (&MainLWLockArray[36].lock)
|
39
33
|
#define ReplicationSlotControlLock (&MainLWLockArray[37].lock)
|
40
|
-
#define CommitTsSLRULock (&MainLWLockArray[38].lock)
|
41
34
|
#define CommitTsLock (&MainLWLockArray[39].lock)
|
42
35
|
#define ReplicationOriginLock (&MainLWLockArray[40].lock)
|
43
36
|
#define MultiXactTruncationLock (&MainLWLockArray[41].lock)
|
44
|
-
#define OldSnapshotTimeMapLock (&MainLWLockArray[42].lock)
|
45
37
|
#define LogicalRepWorkerLock (&MainLWLockArray[43].lock)
|
46
38
|
#define XactTruncationLock (&MainLWLockArray[44].lock)
|
47
39
|
#define WrapLimitsVacuumLock (&MainLWLockArray[46].lock)
|
48
40
|
#define NotifyQueueTailLock (&MainLWLockArray[47].lock)
|
41
|
+
#define WaitEventCustomLock (&MainLWLockArray[48].lock)
|
42
|
+
#define WALSummarizerLock (&MainLWLockArray[49].lock)
|
43
|
+
#define DSMRegistryLock (&MainLWLockArray[50].lock)
|
44
|
+
#define InjectionPointLock (&MainLWLockArray[51].lock)
|
45
|
+
#define SerialControlLock (&MainLWLockArray[52].lock)
|
49
46
|
|
50
|
-
#define NUM_INDIVIDUAL_LWLOCKS
|
47
|
+
#define NUM_INDIVIDUAL_LWLOCKS 53
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* POSTGRES disk "offset" 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/storage/off.h
|
@@ -10,7 +10,7 @@
|
|
10
10
|
* be provided by each port.
|
11
11
|
*
|
12
12
|
*
|
13
|
-
* Portions Copyright (c) 1996-
|
13
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
14
14
|
* Portions Copyright (c) 1994, Regents of the University of California
|
15
15
|
*
|
16
16
|
* src/include/storage/pg_sema.h
|
@@ -14,7 +14,7 @@
|
|
14
14
|
* only one ID number.
|
15
15
|
*
|
16
16
|
*
|
17
|
-
* Portions Copyright (c) 1996-
|
17
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
18
18
|
* Portions Copyright (c) 1994, Regents of the University of California
|
19
19
|
*
|
20
20
|
* src/include/storage/pg_shmem.h
|
@@ -46,12 +46,13 @@ extern PGDLLIMPORT int shared_memory_type;
|
|
46
46
|
extern PGDLLIMPORT int huge_pages;
|
47
47
|
extern PGDLLIMPORT int huge_page_size;
|
48
48
|
|
49
|
-
/* Possible values for huge_pages */
|
49
|
+
/* Possible values for huge_pages and huge_pages_status */
|
50
50
|
typedef enum
|
51
51
|
{
|
52
52
|
HUGE_PAGES_OFF,
|
53
53
|
HUGE_PAGES_ON,
|
54
|
-
HUGE_PAGES_TRY
|
54
|
+
HUGE_PAGES_TRY, /* only for huge_pages */
|
55
|
+
HUGE_PAGES_UNKNOWN, /* only for huge_pages_status */
|
55
56
|
} HugePagesType;
|
56
57
|
|
57
58
|
/* Possible values for shared_memory_type */
|
@@ -59,7 +60,7 @@ typedef enum
|
|
59
60
|
{
|
60
61
|
SHMEM_TYPE_WINDOWS,
|
61
62
|
SHMEM_TYPE_SYSV,
|
62
|
-
SHMEM_TYPE_MMAP
|
63
|
+
SHMEM_TYPE_MMAP,
|
63
64
|
} PGShmemType;
|
64
65
|
|
65
66
|
#ifndef WIN32
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* routines for signaling between the postmaster and its child processes
|
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/storage/pmsignal.h
|
@@ -51,7 +51,7 @@ typedef enum
|
|
51
51
|
{
|
52
52
|
PMQUIT_NOT_SENT = 0, /* postmaster hasn't sent SIGQUIT */
|
53
53
|
PMQUIT_FOR_CRASH, /* some other backend bought the farm */
|
54
|
-
PMQUIT_FOR_STOP
|
54
|
+
PMQUIT_FOR_STOP, /* immediate stop was commanded */
|
55
55
|
} QuitSignalReason;
|
56
56
|
|
57
57
|
/* PMSignalData is an opaque struct, details known only within pmsignal.c */
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* POSTGRES public predicate locking 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/storage/predicate.h
|
@@ -26,10 +26,6 @@ extern PGDLLIMPORT int max_predicate_locks_per_xact;
|
|
26
26
|
extern PGDLLIMPORT int max_predicate_locks_per_relation;
|
27
27
|
extern PGDLLIMPORT int max_predicate_locks_per_page;
|
28
28
|
|
29
|
-
|
30
|
-
/* Number of SLRU buffers to use for Serial SLRU */
|
31
|
-
#define NUM_SERIAL_BUFFERS 16
|
32
|
-
|
33
29
|
/*
|
34
30
|
* A handle used for sharing SERIALIZABLEXACT objects between the participants
|
35
31
|
* in a parallel query.
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* per-process shared memory data structures
|
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/storage/proc.h
|
@@ -21,6 +21,7 @@
|
|
21
21
|
#include "storage/lock.h"
|
22
22
|
#include "storage/pg_sema.h"
|
23
23
|
#include "storage/proclist_types.h"
|
24
|
+
#include "storage/procnumber.h"
|
24
25
|
|
25
26
|
/*
|
26
27
|
* Each backend advertises up to PGPROC_MAX_CACHED_SUBXIDS TransactionIds
|
@@ -84,12 +85,6 @@ struct XidCache
|
|
84
85
|
*/
|
85
86
|
#define FP_LOCK_SLOTS_PER_BACKEND 16
|
86
87
|
|
87
|
-
/*
|
88
|
-
* An invalid pgprocno. Must be larger than the maximum number of PGPROC
|
89
|
-
* structures we could possibly have. See comments for MAX_BACKENDS.
|
90
|
-
*/
|
91
|
-
#define INVALID_PGPROCNO PG_INT32_MAX
|
92
|
-
|
93
88
|
/*
|
94
89
|
* Flags for PGPROC.delayChkptFlags
|
95
90
|
*
|
@@ -186,28 +181,38 @@ struct PGPROC
|
|
186
181
|
* vacuum must not remove tuples deleted by
|
187
182
|
* xid >= xmin ! */
|
188
183
|
|
189
|
-
LocalTransactionId lxid; /* local id of top-level transaction currently
|
190
|
-
* being executed by this proc, if running;
|
191
|
-
* else InvalidLocalTransactionId */
|
192
184
|
int pid; /* Backend's process ID; 0 if prepared xact */
|
193
185
|
|
194
186
|
int pgxactoff; /* offset into various ProcGlobal->arrays with
|
195
187
|
* data mirrored from this PGPROC */
|
196
188
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
189
|
+
/*
|
190
|
+
* Currently running top-level transaction's virtual xid. Together these
|
191
|
+
* form a VirtualTransactionId, but we don't use that struct because this
|
192
|
+
* is not atomically assignable as whole, and we want to enforce code to
|
193
|
+
* consider both parts separately. See comments at VirtualTransactionId.
|
194
|
+
*/
|
195
|
+
struct
|
196
|
+
{
|
197
|
+
ProcNumber procNumber; /* For regular backends, equal to
|
198
|
+
* GetNumberFromPGProc(proc). For prepared
|
199
|
+
* xacts, ID of the original backend that
|
200
|
+
* processed the transaction. For unused
|
201
|
+
* PGPROC entries, INVALID_PROC_NUMBER. */
|
202
|
+
LocalTransactionId lxid; /* local id of top-level transaction
|
203
|
+
* currently * being executed by this
|
204
|
+
* proc, if running; else
|
205
|
+
* InvalidLocalTransactionId */
|
206
|
+
} vxid;
|
201
207
|
|
202
208
|
/* These fields are zero while a backend is still starting up: */
|
203
|
-
BackendId backendId; /* This backend's backend ID (if assigned) */
|
204
209
|
Oid databaseId; /* OID of database this backend is using */
|
205
210
|
Oid roleId; /* OID of role using this backend */
|
206
211
|
|
207
212
|
Oid tempNamespaceId; /* OID of temp schema this backend is
|
208
213
|
* using */
|
209
214
|
|
210
|
-
bool isBackgroundWorker; /* true if
|
215
|
+
bool isBackgroundWorker; /* true if not a regular backend. */
|
211
216
|
|
212
217
|
/*
|
213
218
|
* While in hot standby mode, shows that a conflict signal has been sent
|
@@ -281,7 +286,7 @@ struct PGPROC
|
|
281
286
|
TransactionId clogGroupMemberXid; /* transaction id of clog group member */
|
282
287
|
XidStatus clogGroupMemberXidStatus; /* transaction status of clog
|
283
288
|
* group member */
|
284
|
-
|
289
|
+
int64 clogGroupMemberPage; /* clog page corresponding to
|
285
290
|
* transaction id of clog group member */
|
286
291
|
XLogRecPtr clogGroupMemberLsn; /* WAL location of commit record for clog
|
287
292
|
* group member */
|
@@ -386,7 +391,7 @@ typedef struct PROC_HDR
|
|
386
391
|
uint32 allProcCount;
|
387
392
|
/* Head of list of free PGPROC structures */
|
388
393
|
dlist_head freeProcs;
|
389
|
-
/* Head of list of autovacuum
|
394
|
+
/* Head of list of autovacuum & special worker free PGPROC structures */
|
390
395
|
dlist_head autovacFreeProcs;
|
391
396
|
/* Head of list of bgworker free PGPROC structures */
|
392
397
|
dlist_head bgworkerFreeProcs;
|
@@ -410,24 +415,39 @@ extern PGDLLIMPORT PROC_HDR *ProcGlobal;
|
|
410
415
|
|
411
416
|
extern PGDLLIMPORT PGPROC *PreparedXactProcs;
|
412
417
|
|
413
|
-
/*
|
418
|
+
/*
|
419
|
+
* Accessors for getting PGPROC given a ProcNumber and vice versa.
|
420
|
+
*/
|
414
421
|
#define GetPGProcByNumber(n) (&ProcGlobal->allProcs[(n)])
|
422
|
+
#define GetNumberFromPGProc(proc) ((proc) - &ProcGlobal->allProcs[0])
|
423
|
+
|
424
|
+
/*
|
425
|
+
* We set aside some extra PGPROC structures for "special worker" processes,
|
426
|
+
* which are full-fledged backends (they can run transactions)
|
427
|
+
* but are unique animals that there's never more than one of.
|
428
|
+
* Currently there are two such processes: the autovacuum launcher
|
429
|
+
* and the slotsync worker.
|
430
|
+
*/
|
431
|
+
#define NUM_SPECIAL_WORKER_PROCS 2
|
415
432
|
|
416
433
|
/*
|
417
434
|
* We set aside some extra PGPROC structures for auxiliary processes,
|
418
|
-
* ie things that aren't full-fledged backends
|
435
|
+
* ie things that aren't full-fledged backends (they cannot run transactions
|
436
|
+
* or take heavyweight locks) but need shmem access.
|
419
437
|
*
|
420
|
-
* Background writer, checkpointer, WAL writer and archiver
|
421
|
-
* operation. Startup process and WAL receiver also consume
|
422
|
-
* writer is launched only after startup has exited, so we
|
438
|
+
* Background writer, checkpointer, WAL writer, WAL summarizer, and archiver
|
439
|
+
* run during normal operation. Startup process and WAL receiver also consume
|
440
|
+
* 2 slots, but WAL writer is launched only after startup has exited, so we
|
441
|
+
* only need 6 slots.
|
423
442
|
*/
|
424
|
-
#define NUM_AUXILIARY_PROCS
|
443
|
+
#define NUM_AUXILIARY_PROCS 6
|
425
444
|
|
426
445
|
/* configurable options */
|
427
446
|
extern PGDLLIMPORT int DeadlockTimeout;
|
428
447
|
extern PGDLLIMPORT int StatementTimeout;
|
429
448
|
extern PGDLLIMPORT int LockTimeout;
|
430
449
|
extern PGDLLIMPORT int IdleInTransactionSessionTimeout;
|
450
|
+
extern PGDLLIMPORT int TransactionTimeout;
|
431
451
|
extern PGDLLIMPORT int IdleSessionTimeout;
|
432
452
|
extern PGDLLIMPORT bool log_lock_waits;
|
433
453
|
|
@@ -448,7 +468,9 @@ extern int GetStartupBufferPinWaitBufId(void);
|
|
448
468
|
extern bool HaveNFreeProcs(int n, int *nfree);
|
449
469
|
extern void ProcReleaseLocks(bool isCommit);
|
450
470
|
|
451
|
-
extern ProcWaitStatus ProcSleep(LOCALLOCK *locallock,
|
471
|
+
extern ProcWaitStatus ProcSleep(LOCALLOCK *locallock,
|
472
|
+
LockMethod lockMethodTable,
|
473
|
+
bool dontWait);
|
452
474
|
extern void ProcWakeup(PGPROC *proc, ProcWaitStatus waitStatus);
|
453
475
|
extern void ProcLockWakeup(LockMethod lockMethodTable, LOCK *lock);
|
454
476
|
extern void CheckDeadLockAlert(void);
|
@@ -456,7 +478,7 @@ extern bool IsWaitingForLock(void);
|
|
456
478
|
extern void LockErrorCleanup(void);
|
457
479
|
|
458
480
|
extern void ProcWaitForSignal(uint32 wait_event_info);
|
459
|
-
extern void ProcSendSignal(
|
481
|
+
extern void ProcSendSignal(ProcNumber procNumber);
|
460
482
|
|
461
483
|
extern PGPROC *AuxiliaryPidGetProc(int pid);
|
462
484
|
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* POSTGRES process array 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/storage/procarray.h
|
@@ -64,6 +64,10 @@ extern VirtualTransactionId *GetVirtualXIDsDelayingChkpt(int *nvxids, int type);
|
|
64
64
|
extern bool HaveVirtualXIDsDelayingChkpt(VirtualTransactionId *vxids,
|
65
65
|
int nvxids, int type);
|
66
66
|
|
67
|
+
extern PGPROC *ProcNumberGetProc(int procNumber);
|
68
|
+
extern void ProcNumberGetTransactionIds(int procNumber, TransactionId *xid,
|
69
|
+
TransactionId *xmin, int *nsubxid,
|
70
|
+
bool *overflowed);
|
67
71
|
extern PGPROC *BackendPidGetProc(int pid);
|
68
72
|
extern PGPROC *BackendPidGetProcWithLock(int pid);
|
69
73
|
extern int BackendXidGetPid(TransactionId xid);
|
@@ -5,7 +5,7 @@
|
|
5
5
|
*
|
6
6
|
* See proclist.h for functions that operate on these types.
|
7
7
|
*
|
8
|
-
* Portions Copyright (c) 2016-
|
8
|
+
* Portions Copyright (c) 2016-2024, PostgreSQL Global Development Group
|
9
9
|
*
|
10
10
|
* IDENTIFICATION
|
11
11
|
* src/include/storage/proclist_types.h
|
@@ -15,28 +15,30 @@
|
|
15
15
|
#ifndef PROCLIST_TYPES_H
|
16
16
|
#define PROCLIST_TYPES_H
|
17
17
|
|
18
|
+
#include "storage/procnumber.h"
|
19
|
+
|
18
20
|
/*
|
19
21
|
* A node in a doubly-linked list of processes. The link fields contain
|
20
22
|
* the 0-based PGPROC indexes of the next and previous process, or
|
21
|
-
*
|
23
|
+
* INVALID_PROC_NUMBER in the next-link of the last node and the prev-link
|
22
24
|
* of the first node. A node that is currently not in any list
|
23
25
|
* should have next == prev == 0; this is not a possible state for a node
|
24
26
|
* that is in a list, because we disallow circularity.
|
25
27
|
*/
|
26
28
|
typedef struct proclist_node
|
27
29
|
{
|
28
|
-
|
29
|
-
|
30
|
+
ProcNumber next; /* pgprocno of the next PGPROC */
|
31
|
+
ProcNumber prev; /* pgprocno of the prev PGPROC */
|
30
32
|
} proclist_node;
|
31
33
|
|
32
34
|
/*
|
33
35
|
* Header of a doubly-linked list of PGPROCs, identified by pgprocno.
|
34
|
-
* An empty list is represented by head == tail ==
|
36
|
+
* An empty list is represented by head == tail == INVALID_PROC_NUMBER.
|
35
37
|
*/
|
36
38
|
typedef struct proclist_head
|
37
39
|
{
|
38
|
-
|
39
|
-
|
40
|
+
ProcNumber head; /* pgprocno of the head PGPROC */
|
41
|
+
ProcNumber tail; /* pgprocno of the tail PGPROC */
|
40
42
|
} proclist_head;
|
41
43
|
|
42
44
|
/*
|
@@ -44,8 +46,8 @@ typedef struct proclist_head
|
|
44
46
|
*/
|
45
47
|
typedef struct proclist_mutable_iter
|
46
48
|
{
|
47
|
-
|
48
|
-
|
49
|
+
ProcNumber cur; /* pgprocno of the current PGPROC */
|
50
|
+
ProcNumber next; /* pgprocno of the next PGPROC */
|
49
51
|
} proclist_mutable_iter;
|
50
52
|
|
51
53
|
#endif /* PROCLIST_TYPES_H */
|
@@ -0,0 +1,43 @@
|
|
1
|
+
/*-------------------------------------------------------------------------
|
2
|
+
*
|
3
|
+
* procnumber.h
|
4
|
+
* definition of process number
|
5
|
+
*
|
6
|
+
*
|
7
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
8
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
9
|
+
*
|
10
|
+
* src/include/storage/procnumber.h
|
11
|
+
*
|
12
|
+
*-------------------------------------------------------------------------
|
13
|
+
*/
|
14
|
+
#ifndef PROCNUMBER_H
|
15
|
+
#define PROCNUMBER_H
|
16
|
+
|
17
|
+
/*
|
18
|
+
* ProcNumber uniquely identifies an active backend or auxiliary process.
|
19
|
+
* It's assigned at backend startup after authentication, when the process
|
20
|
+
* adds itself to the proc array. It is an index into the proc array,
|
21
|
+
* starting from 0. Note that a ProcNumber can be reused for a different
|
22
|
+
* backend immediately after a backend exits.
|
23
|
+
*/
|
24
|
+
typedef int ProcNumber;
|
25
|
+
|
26
|
+
#define INVALID_PROC_NUMBER (-1)
|
27
|
+
|
28
|
+
/*
|
29
|
+
* Proc number of this backend (same as GetNumberFromPGProc(MyProc))
|
30
|
+
*/
|
31
|
+
extern PGDLLIMPORT ProcNumber MyProcNumber;
|
32
|
+
|
33
|
+
/* proc number of our parallel session leader, or INVALID_PROC_NUMBER if none */
|
34
|
+
extern PGDLLIMPORT ProcNumber ParallelLeaderProcNumber;
|
35
|
+
|
36
|
+
/*
|
37
|
+
* The ProcNumber to use for our session's temp relations is normally our own,
|
38
|
+
* but parallel workers should use their leader's proc number.
|
39
|
+
*/
|
40
|
+
#define ProcNumberForTempRelations() \
|
41
|
+
(ParallelLeaderProcNumber == INVALID_PROC_NUMBER ? MyProcNumber : ParallelLeaderProcNumber)
|
42
|
+
|
43
|
+
#endif /* PROCNUMBER_H */
|