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
@@ -0,0 +1,218 @@
|
|
1
|
+
/*-------------------------------------------------------------------------
|
2
|
+
*
|
3
|
+
* slru.h
|
4
|
+
* Simple LRU buffering for transaction status logfiles
|
5
|
+
*
|
6
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
7
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
8
|
+
*
|
9
|
+
* src/include/access/slru.h
|
10
|
+
*
|
11
|
+
*-------------------------------------------------------------------------
|
12
|
+
*/
|
13
|
+
#ifndef SLRU_H
|
14
|
+
#define SLRU_H
|
15
|
+
|
16
|
+
#include "access/xlogdefs.h"
|
17
|
+
#include "storage/lwlock.h"
|
18
|
+
#include "storage/sync.h"
|
19
|
+
|
20
|
+
/*
|
21
|
+
* To avoid overflowing internal arithmetic and the size_t data type, the
|
22
|
+
* number of buffers must not exceed this number.
|
23
|
+
*/
|
24
|
+
#define SLRU_MAX_ALLOWED_BUFFERS ((1024 * 1024 * 1024) / BLCKSZ)
|
25
|
+
|
26
|
+
/*
|
27
|
+
* Define SLRU segment size. A page is the same BLCKSZ as is used everywhere
|
28
|
+
* else in Postgres. The segment size can be chosen somewhat arbitrarily;
|
29
|
+
* we make it 32 pages by default, or 256Kb, i.e. 1M transactions for CLOG
|
30
|
+
* or 64K transactions for SUBTRANS.
|
31
|
+
*
|
32
|
+
* Note: because TransactionIds are 32 bits and wrap around at 0xFFFFFFFF,
|
33
|
+
* page numbering also wraps around at 0xFFFFFFFF/xxxx_XACTS_PER_PAGE (where
|
34
|
+
* xxxx is CLOG or SUBTRANS, respectively), and segment numbering at
|
35
|
+
* 0xFFFFFFFF/xxxx_XACTS_PER_PAGE/SLRU_PAGES_PER_SEGMENT. We need
|
36
|
+
* take no explicit notice of that fact in slru.c, except when comparing
|
37
|
+
* segment and page numbers in SimpleLruTruncate (see PagePrecedes()).
|
38
|
+
*/
|
39
|
+
#define SLRU_PAGES_PER_SEGMENT 32
|
40
|
+
|
41
|
+
/*
|
42
|
+
* Page status codes. Note that these do not include the "dirty" bit.
|
43
|
+
* page_dirty can be true only in the VALID or WRITE_IN_PROGRESS states;
|
44
|
+
* in the latter case it implies that the page has been re-dirtied since
|
45
|
+
* the write started.
|
46
|
+
*/
|
47
|
+
typedef enum
|
48
|
+
{
|
49
|
+
SLRU_PAGE_EMPTY, /* buffer is not in use */
|
50
|
+
SLRU_PAGE_READ_IN_PROGRESS, /* page is being read in */
|
51
|
+
SLRU_PAGE_VALID, /* page is valid and not being written */
|
52
|
+
SLRU_PAGE_WRITE_IN_PROGRESS, /* page is being written out */
|
53
|
+
} SlruPageStatus;
|
54
|
+
|
55
|
+
/*
|
56
|
+
* Shared-memory state
|
57
|
+
*
|
58
|
+
* ControlLock is used to protect access to the other fields, except
|
59
|
+
* latest_page_number, which uses atomics; see comment in slru.c.
|
60
|
+
*/
|
61
|
+
typedef struct SlruSharedData
|
62
|
+
{
|
63
|
+
/* Number of buffers managed by this SLRU structure */
|
64
|
+
int num_slots;
|
65
|
+
|
66
|
+
/*
|
67
|
+
* Arrays holding info for each buffer slot. Page number is undefined
|
68
|
+
* when status is EMPTY, as is page_lru_count.
|
69
|
+
*/
|
70
|
+
char **page_buffer;
|
71
|
+
SlruPageStatus *page_status;
|
72
|
+
bool *page_dirty;
|
73
|
+
int64 *page_number;
|
74
|
+
int *page_lru_count;
|
75
|
+
|
76
|
+
/* The buffer_locks protects the I/O on each buffer slots */
|
77
|
+
LWLockPadded *buffer_locks;
|
78
|
+
|
79
|
+
/* Locks to protect the in memory buffer slot access in SLRU bank. */
|
80
|
+
LWLockPadded *bank_locks;
|
81
|
+
|
82
|
+
/*----------
|
83
|
+
* A bank-wise LRU counter is maintained because we do a victim buffer
|
84
|
+
* search within a bank. Furthermore, manipulating an individual bank
|
85
|
+
* counter avoids frequent cache invalidation since we update it every time
|
86
|
+
* we access the page.
|
87
|
+
*
|
88
|
+
* We mark a page "most recently used" by setting
|
89
|
+
* page_lru_count[slotno] = ++bank_cur_lru_count[bankno];
|
90
|
+
* The oldest page in the bank is therefore the one with the highest value
|
91
|
+
* of
|
92
|
+
* bank_cur_lru_count[bankno] - page_lru_count[slotno]
|
93
|
+
* The counts will eventually wrap around, but this calculation still
|
94
|
+
* works as long as no page's age exceeds INT_MAX counts.
|
95
|
+
*----------
|
96
|
+
*/
|
97
|
+
int *bank_cur_lru_count;
|
98
|
+
|
99
|
+
/*
|
100
|
+
* Optional array of WAL flush LSNs associated with entries in the SLRU
|
101
|
+
* pages. If not zero/NULL, we must flush WAL before writing pages (true
|
102
|
+
* for pg_xact, false for everything else). group_lsn[] has
|
103
|
+
* lsn_groups_per_page entries per buffer slot, each containing the
|
104
|
+
* highest LSN known for a contiguous group of SLRU entries on that slot's
|
105
|
+
* page.
|
106
|
+
*/
|
107
|
+
XLogRecPtr *group_lsn;
|
108
|
+
int lsn_groups_per_page;
|
109
|
+
|
110
|
+
/*
|
111
|
+
* latest_page_number is the page number of the current end of the log;
|
112
|
+
* this is not critical data, since we use it only to avoid swapping out
|
113
|
+
* the latest page.
|
114
|
+
*/
|
115
|
+
pg_atomic_uint64 latest_page_number;
|
116
|
+
|
117
|
+
/* SLRU's index for statistics purposes (might not be unique) */
|
118
|
+
int slru_stats_idx;
|
119
|
+
} SlruSharedData;
|
120
|
+
|
121
|
+
typedef SlruSharedData *SlruShared;
|
122
|
+
|
123
|
+
/*
|
124
|
+
* SlruCtlData is an unshared structure that points to the active information
|
125
|
+
* in shared memory.
|
126
|
+
*/
|
127
|
+
typedef struct SlruCtlData
|
128
|
+
{
|
129
|
+
SlruShared shared;
|
130
|
+
|
131
|
+
/* Number of banks in this SLRU. */
|
132
|
+
uint16 nbanks;
|
133
|
+
|
134
|
+
/*
|
135
|
+
* If true, use long segment file names. Otherwise, use short file names.
|
136
|
+
*
|
137
|
+
* For details about the file name format, see SlruFileName().
|
138
|
+
*/
|
139
|
+
bool long_segment_names;
|
140
|
+
|
141
|
+
/*
|
142
|
+
* Which sync handler function to use when handing sync requests over to
|
143
|
+
* the checkpointer. SYNC_HANDLER_NONE to disable fsync (eg pg_notify).
|
144
|
+
*/
|
145
|
+
SyncRequestHandler sync_handler;
|
146
|
+
|
147
|
+
/*
|
148
|
+
* Decide whether a page is "older" for truncation and as a hint for
|
149
|
+
* evicting pages in LRU order. Return true if every entry of the first
|
150
|
+
* argument is older than every entry of the second argument. Note that
|
151
|
+
* !PagePrecedes(a,b) && !PagePrecedes(b,a) need not imply a==b; it also
|
152
|
+
* arises when some entries are older and some are not. For SLRUs using
|
153
|
+
* SimpleLruTruncate(), this must use modular arithmetic. (For others,
|
154
|
+
* the behavior of this callback has no functional implications.) Use
|
155
|
+
* SlruPagePrecedesUnitTests() in SLRUs meeting its criteria.
|
156
|
+
*/
|
157
|
+
bool (*PagePrecedes) (int64, int64);
|
158
|
+
|
159
|
+
/*
|
160
|
+
* Dir is set during SimpleLruInit and does not change thereafter. Since
|
161
|
+
* it's always the same, it doesn't need to be in shared memory.
|
162
|
+
*/
|
163
|
+
char Dir[64];
|
164
|
+
} SlruCtlData;
|
165
|
+
|
166
|
+
typedef SlruCtlData *SlruCtl;
|
167
|
+
|
168
|
+
/*
|
169
|
+
* Get the SLRU bank lock for given SlruCtl and the pageno.
|
170
|
+
*
|
171
|
+
* This lock needs to be acquired to access the slru buffer slots in the
|
172
|
+
* respective bank.
|
173
|
+
*/
|
174
|
+
static inline LWLock *
|
175
|
+
SimpleLruGetBankLock(SlruCtl ctl, int64 pageno)
|
176
|
+
{
|
177
|
+
int bankno;
|
178
|
+
|
179
|
+
bankno = pageno % ctl->nbanks;
|
180
|
+
return &(ctl->shared->bank_locks[bankno].lock);
|
181
|
+
}
|
182
|
+
|
183
|
+
extern Size SimpleLruShmemSize(int nslots, int nlsns);
|
184
|
+
extern int SimpleLruAutotuneBuffers(int divisor, int max);
|
185
|
+
extern void SimpleLruInit(SlruCtl ctl, const char *name, int nslots, int nlsns,
|
186
|
+
const char *subdir, int buffer_tranche_id,
|
187
|
+
int bank_tranche_id, SyncRequestHandler sync_handler,
|
188
|
+
bool long_segment_names);
|
189
|
+
extern int SimpleLruZeroPage(SlruCtl ctl, int64 pageno);
|
190
|
+
extern int SimpleLruReadPage(SlruCtl ctl, int64 pageno, bool write_ok,
|
191
|
+
TransactionId xid);
|
192
|
+
extern int SimpleLruReadPage_ReadOnly(SlruCtl ctl, int64 pageno,
|
193
|
+
TransactionId xid);
|
194
|
+
extern void SimpleLruWritePage(SlruCtl ctl, int slotno);
|
195
|
+
extern void SimpleLruWriteAll(SlruCtl ctl, bool allow_redirtied);
|
196
|
+
#ifdef USE_ASSERT_CHECKING
|
197
|
+
extern void SlruPagePrecedesUnitTests(SlruCtl ctl, int per_page);
|
198
|
+
#else
|
199
|
+
#define SlruPagePrecedesUnitTests(ctl, per_page) do {} while (0)
|
200
|
+
#endif
|
201
|
+
extern void SimpleLruTruncate(SlruCtl ctl, int64 cutoffPage);
|
202
|
+
extern bool SimpleLruDoesPhysicalPageExist(SlruCtl ctl, int64 pageno);
|
203
|
+
|
204
|
+
typedef bool (*SlruScanCallback) (SlruCtl ctl, char *filename, int64 segpage,
|
205
|
+
void *data);
|
206
|
+
extern bool SlruScanDirectory(SlruCtl ctl, SlruScanCallback callback, void *data);
|
207
|
+
extern void SlruDeleteSegment(SlruCtl ctl, int64 segno);
|
208
|
+
|
209
|
+
extern int SlruSyncFileTag(SlruCtl ctl, const FileTag *ftag, char *path);
|
210
|
+
|
211
|
+
/* SlruScanDirectory public callbacks */
|
212
|
+
extern bool SlruScanDirCbReportPresence(SlruCtl ctl, char *filename,
|
213
|
+
int64 segpage, void *data);
|
214
|
+
extern bool SlruScanDirCbDeleteAll(SlruCtl ctl, char *filename, int64 segpage,
|
215
|
+
void *data);
|
216
|
+
extern bool check_slru_buffers(const char *name, int *newval);
|
217
|
+
|
218
|
+
#endif /* SLRU_H */
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* POSTGRES strategy number 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/access/stratnum.h
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* POSTGRES system attribute 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/access/sysattr.h
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* Generic routines for table related code.
|
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/access/table.h
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* POSTGRES table access method 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/access/tableam.h
|
@@ -21,6 +21,7 @@
|
|
21
21
|
#include "access/sdir.h"
|
22
22
|
#include "access/xact.h"
|
23
23
|
#include "executor/tuptable.h"
|
24
|
+
#include "storage/read_stream.h"
|
24
25
|
#include "utils/rel.h"
|
25
26
|
#include "utils/snapshot.h"
|
26
27
|
|
@@ -61,8 +62,15 @@ typedef enum ScanOptions
|
|
61
62
|
SO_ALLOW_PAGEMODE = 1 << 8,
|
62
63
|
|
63
64
|
/* unregister snapshot at scan end? */
|
64
|
-
SO_TEMP_SNAPSHOT = 1 << 9
|
65
|
-
|
65
|
+
SO_TEMP_SNAPSHOT = 1 << 9,
|
66
|
+
|
67
|
+
/*
|
68
|
+
* At the discretion of the table AM, bitmap table scans may be able to
|
69
|
+
* skip fetching a block from the table if none of the table data is
|
70
|
+
* needed. If table data may be needed, set SO_NEED_TUPLES.
|
71
|
+
*/
|
72
|
+
SO_NEED_TUPLES = 1 << 10,
|
73
|
+
} ScanOptions;
|
66
74
|
|
67
75
|
/*
|
68
76
|
* Result codes for table_{update,delete,lock_tuple}, and for visibility
|
@@ -99,7 +107,7 @@ typedef enum TM_Result
|
|
99
107
|
TM_BeingModified,
|
100
108
|
|
101
109
|
/* lock couldn't be acquired, action skipped. Only used by lock_tuple */
|
102
|
-
TM_WouldBlock
|
110
|
+
TM_WouldBlock,
|
103
111
|
} TM_Result;
|
104
112
|
|
105
113
|
/*
|
@@ -115,7 +123,7 @@ typedef enum TU_UpdateIndexes
|
|
115
123
|
TU_All,
|
116
124
|
|
117
125
|
/* Only summarized columns were updated, TID is unchanged */
|
118
|
-
TU_Summarizing
|
126
|
+
TU_Summarizing,
|
119
127
|
} TU_UpdateIndexes;
|
120
128
|
|
121
129
|
/*
|
@@ -129,7 +137,8 @@ typedef enum TU_UpdateIndexes
|
|
129
137
|
*
|
130
138
|
* xmax is the outdating transaction's XID. If the caller wants to visit the
|
131
139
|
* replacement tuple, it must check that this matches before believing the
|
132
|
-
* replacement is really a match.
|
140
|
+
* replacement is really a match. This is InvalidTransactionId if the target
|
141
|
+
* was !LP_NORMAL (expected only for a TID retrieved from syscache).
|
133
142
|
*
|
134
143
|
* cmax is the outdating command's CID, but only when the failure code is
|
135
144
|
* TM_SelfModified (i.e., something in the current transaction outdated the
|
@@ -617,8 +626,8 @@ typedef struct TableAmRoutine
|
|
617
626
|
const RelFileLocator *newrlocator);
|
618
627
|
|
619
628
|
/* See table_relation_copy_for_cluster() */
|
620
|
-
void (*relation_copy_for_cluster) (Relation
|
621
|
-
Relation
|
629
|
+
void (*relation_copy_for_cluster) (Relation OldTable,
|
630
|
+
Relation NewTable,
|
622
631
|
Relation OldIndex,
|
623
632
|
bool use_sort,
|
624
633
|
TransactionId OldestXmin,
|
@@ -665,8 +674,7 @@ typedef struct TableAmRoutine
|
|
665
674
|
* isn't one yet.
|
666
675
|
*/
|
667
676
|
bool (*scan_analyze_next_block) (TableScanDesc scan,
|
668
|
-
|
669
|
-
BufferAccessStrategy bstrategy);
|
677
|
+
ReadStream *stream);
|
670
678
|
|
671
679
|
/*
|
672
680
|
* See table_scan_analyze_next_tuple().
|
@@ -944,10 +952,13 @@ table_beginscan_strat(Relation rel, Snapshot snapshot,
|
|
944
952
|
*/
|
945
953
|
static inline TableScanDesc
|
946
954
|
table_beginscan_bm(Relation rel, Snapshot snapshot,
|
947
|
-
int nkeys, struct ScanKeyData *key)
|
955
|
+
int nkeys, struct ScanKeyData *key, bool need_tuple)
|
948
956
|
{
|
949
957
|
uint32 flags = SO_TYPE_BITMAPSCAN | SO_ALLOW_PAGEMODE;
|
950
958
|
|
959
|
+
if (need_tuple)
|
960
|
+
flags |= SO_NEED_TUPLES;
|
961
|
+
|
951
962
|
return rel->rd_tableam->scan_begin(rel, snapshot, nkeys, key, NULL, flags);
|
952
963
|
}
|
953
964
|
|
@@ -1038,11 +1049,6 @@ table_rescan_set_params(TableScanDesc scan, struct ScanKeyData *key,
|
|
1038
1049
|
allow_pagemode);
|
1039
1050
|
}
|
1040
1051
|
|
1041
|
-
/*
|
1042
|
-
* Update snapshot used by the scan.
|
1043
|
-
*/
|
1044
|
-
extern void table_scan_update_snapshot(TableScanDesc scan, Snapshot snapshot);
|
1045
|
-
|
1046
1052
|
/*
|
1047
1053
|
* Return next tuple from `scan`, store in slot.
|
1048
1054
|
*/
|
@@ -1479,8 +1485,8 @@ table_multi_insert(Relation rel, TupleTableSlot **slots, int nslots,
|
|
1479
1485
|
* TM_BeingModified (the last only possible if wait == false).
|
1480
1486
|
*
|
1481
1487
|
* In the failure cases, the routine fills *tmfd with the tuple's t_ctid,
|
1482
|
-
* t_xmax, and, if possible,
|
1483
|
-
*
|
1488
|
+
* t_xmax, and, if possible, t_cmax. See comments for struct
|
1489
|
+
* TM_FailureData for additional info.
|
1484
1490
|
*/
|
1485
1491
|
static inline TM_Result
|
1486
1492
|
table_tuple_delete(Relation rel, ItemPointer tid, CommandId cid,
|
@@ -1706,19 +1712,17 @@ table_relation_vacuum(Relation rel, struct VacuumParams *params,
|
|
1706
1712
|
}
|
1707
1713
|
|
1708
1714
|
/*
|
1709
|
-
* Prepare to analyze block
|
1710
|
-
* started with table_beginscan_analyze(). Note that this routine
|
1711
|
-
* acquire resources like locks that are held until
|
1715
|
+
* Prepare to analyze the next block in the read stream. The scan needs to
|
1716
|
+
* have been started with table_beginscan_analyze(). Note that this routine
|
1717
|
+
* might acquire resources like locks that are held until
|
1712
1718
|
* table_scan_analyze_next_tuple() returns false.
|
1713
1719
|
*
|
1714
1720
|
* Returns false if block is unsuitable for sampling, true otherwise.
|
1715
1721
|
*/
|
1716
1722
|
static inline bool
|
1717
|
-
table_scan_analyze_next_block(TableScanDesc scan,
|
1718
|
-
BufferAccessStrategy bstrategy)
|
1723
|
+
table_scan_analyze_next_block(TableScanDesc scan, ReadStream *stream)
|
1719
1724
|
{
|
1720
|
-
return scan->rs_rd->rd_tableam->scan_analyze_next_block(scan,
|
1721
|
-
bstrategy);
|
1725
|
+
return scan->rs_rd->rd_tableam->scan_analyze_next_block(scan, stream);
|
1722
1726
|
}
|
1723
1727
|
|
1724
1728
|
/*
|
@@ -2095,6 +2099,12 @@ extern void table_block_relation_estimate_size(Relation rel,
|
|
2095
2099
|
*/
|
2096
2100
|
|
2097
2101
|
extern const TableAmRoutine *GetTableAmRoutine(Oid amhandler);
|
2102
|
+
|
2103
|
+
/* ----------------------------------------------------------------------------
|
2104
|
+
* Functions in heapam_handler.c
|
2105
|
+
* ----------------------------------------------------------------------------
|
2106
|
+
*/
|
2107
|
+
|
2098
2108
|
extern const TableAmRoutine *GetHeapamTableAmRoutine(void);
|
2099
2109
|
|
2100
2110
|
#endif /* TABLEAM_H */
|
@@ -0,0 +1,50 @@
|
|
1
|
+
/*-------------------------------------------------------------------------
|
2
|
+
*
|
3
|
+
* tidstore.h
|
4
|
+
* TidStore interface.
|
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/access/tidstore.h
|
11
|
+
*
|
12
|
+
*-------------------------------------------------------------------------
|
13
|
+
*/
|
14
|
+
#ifndef TIDSTORE_H
|
15
|
+
#define TIDSTORE_H
|
16
|
+
|
17
|
+
#include "storage/itemptr.h"
|
18
|
+
#include "utils/dsa.h"
|
19
|
+
|
20
|
+
typedef struct TidStore TidStore;
|
21
|
+
typedef struct TidStoreIter TidStoreIter;
|
22
|
+
|
23
|
+
/* Result struct for TidStoreIterateNext */
|
24
|
+
typedef struct TidStoreIterResult
|
25
|
+
{
|
26
|
+
BlockNumber blkno;
|
27
|
+
int max_offset;
|
28
|
+
int num_offsets;
|
29
|
+
OffsetNumber *offsets;
|
30
|
+
} TidStoreIterResult;
|
31
|
+
|
32
|
+
extern TidStore *TidStoreCreateLocal(size_t max_bytes, bool insert_only);
|
33
|
+
extern TidStore *TidStoreCreateShared(size_t max_bytes, int tranche_id);
|
34
|
+
extern TidStore *TidStoreAttach(dsa_handle area_handle, dsa_pointer handle);
|
35
|
+
extern void TidStoreDetach(TidStore *ts);
|
36
|
+
extern void TidStoreLockExclusive(TidStore *ts);
|
37
|
+
extern void TidStoreLockShare(TidStore *ts);
|
38
|
+
extern void TidStoreUnlock(TidStore *ts);
|
39
|
+
extern void TidStoreDestroy(TidStore *ts);
|
40
|
+
extern void TidStoreSetBlockOffsets(TidStore *ts, BlockNumber blkno, OffsetNumber *offsets,
|
41
|
+
int num_offsets);
|
42
|
+
extern bool TidStoreIsMember(TidStore *ts, ItemPointer tid);
|
43
|
+
extern TidStoreIter *TidStoreBeginIterate(TidStore *ts);
|
44
|
+
extern TidStoreIterResult *TidStoreIterateNext(TidStoreIter *iter);
|
45
|
+
extern void TidStoreEndIterate(TidStoreIter *iter);
|
46
|
+
extern size_t TidStoreMemoryUsage(TidStore *ts);
|
47
|
+
extern dsa_pointer TidStoreGetHandle(TidStore *ts);
|
48
|
+
extern dsa_area *TidStoreGetDSA(TidStore *ts);
|
49
|
+
|
50
|
+
#endif /* TIDSTORE_H */
|
@@ -3,7 +3,7 @@
|
|
3
3
|
* toast_compression.h
|
4
4
|
* Functions for toast compression.
|
5
5
|
*
|
6
|
-
* Copyright (c) 2021-
|
6
|
+
* Copyright (c) 2021-2024, PostgreSQL Global Development Group
|
7
7
|
*
|
8
8
|
* src/include/access/toast_compression.h
|
9
9
|
*
|
@@ -38,7 +38,7 @@ typedef enum ToastCompressionId
|
|
38
38
|
{
|
39
39
|
TOAST_PGLZ_COMPRESSION_ID = 0,
|
40
40
|
TOAST_LZ4_COMPRESSION_ID = 1,
|
41
|
-
TOAST_INVALID_COMPRESSION_ID = 2
|
41
|
+
TOAST_INVALID_COMPRESSION_ID = 2,
|
42
42
|
} ToastCompressionId;
|
43
43
|
|
44
44
|
/*
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* postgres transaction access method support code
|
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/access/transam.h
|
@@ -197,7 +197,7 @@ FullTransactionIdAdvance(FullTransactionId *dest)
|
|
197
197
|
#define FirstNormalObjectId 16384
|
198
198
|
|
199
199
|
/*
|
200
|
-
*
|
200
|
+
* TransamVariables is a data structure in shared memory that is used to track
|
201
201
|
* OID and XID assignment state. For largely historical reasons, there is
|
202
202
|
* just one struct with different fields that are protected by different
|
203
203
|
* LWLocks.
|
@@ -206,7 +206,7 @@ FullTransactionIdAdvance(FullTransactionId *dest)
|
|
206
206
|
* used just to generate useful messages when xidWarnLimit or xidStopLimit
|
207
207
|
* are exceeded.
|
208
208
|
*/
|
209
|
-
typedef struct
|
209
|
+
typedef struct TransamVariablesData
|
210
210
|
{
|
211
211
|
/*
|
212
212
|
* These fields are protected by OidGenLock.
|
@@ -252,9 +252,7 @@ typedef struct VariableCacheData
|
|
252
252
|
*/
|
253
253
|
TransactionId oldestClogXid; /* oldest it's safe to look up in clog */
|
254
254
|
|
255
|
-
}
|
256
|
-
|
257
|
-
typedef VariableCacheData *VariableCache;
|
255
|
+
} TransamVariablesData;
|
258
256
|
|
259
257
|
|
260
258
|
/* ----------------
|
@@ -266,7 +264,7 @@ typedef VariableCacheData *VariableCache;
|
|
266
264
|
extern bool TransactionStartedDuringRecovery(void);
|
267
265
|
|
268
266
|
/* in transam/varsup.c */
|
269
|
-
extern PGDLLIMPORT
|
267
|
+
extern PGDLLIMPORT TransamVariablesData *TransamVariables;
|
270
268
|
|
271
269
|
/*
|
272
270
|
* prototypes for functions in transam/transam.c
|
@@ -285,6 +283,8 @@ extern TransactionId TransactionIdLatest(TransactionId mainxid,
|
|
285
283
|
extern XLogRecPtr TransactionIdGetCommitLSN(TransactionId xid);
|
286
284
|
|
287
285
|
/* in transam/varsup.c */
|
286
|
+
extern Size VarsupShmemSize(void);
|
287
|
+
extern void VarsupShmemInit(void);
|
288
288
|
extern FullTransactionId GetNewTransactionId(bool isSubXact);
|
289
289
|
extern void AdvanceNextFullTransactionIdPastXid(TransactionId xid);
|
290
290
|
extern FullTransactionId ReadNextFullTransactionId(void);
|
@@ -370,6 +370,49 @@ FullTransactionIdNewer(FullTransactionId a, FullTransactionId b)
|
|
370
370
|
return b;
|
371
371
|
}
|
372
372
|
|
373
|
+
/*
|
374
|
+
* Compute FullTransactionId for the given TransactionId, assuming xid was
|
375
|
+
* between [oldestXid, nextXid] at the time when TransamVariables->nextXid was
|
376
|
+
* nextFullXid. When adding calls, evaluate what prevents xid from preceding
|
377
|
+
* oldestXid if SetTransactionIdLimit() runs between the collection of xid and
|
378
|
+
* the collection of nextFullXid.
|
379
|
+
*/
|
380
|
+
static inline FullTransactionId
|
381
|
+
FullTransactionIdFromAllowableAt(FullTransactionId nextFullXid,
|
382
|
+
TransactionId xid)
|
383
|
+
{
|
384
|
+
uint32 epoch;
|
385
|
+
|
386
|
+
/* Special transaction ID. */
|
387
|
+
if (!TransactionIdIsNormal(xid))
|
388
|
+
return FullTransactionIdFromEpochAndXid(0, xid);
|
389
|
+
|
390
|
+
Assert(TransactionIdPrecedesOrEquals(xid,
|
391
|
+
XidFromFullTransactionId(nextFullXid)));
|
392
|
+
|
393
|
+
/*
|
394
|
+
* The 64 bit result must be <= nextFullXid, since nextFullXid hadn't been
|
395
|
+
* issued yet when xid was in the past. The xid must therefore be from
|
396
|
+
* the epoch of nextFullXid or the epoch before. We know this because we
|
397
|
+
* must remove (by freezing) an XID before assigning the XID half an epoch
|
398
|
+
* ahead of it.
|
399
|
+
*
|
400
|
+
* The unlikely() branch hint is dubious. It's perfect for the first 2^32
|
401
|
+
* XIDs of a cluster's life. Right at 2^32 XIDs, misprediction shoots to
|
402
|
+
* 100%, then improves until perfection returns 2^31 XIDs later. Since
|
403
|
+
* current callers pass relatively-recent XIDs, expect >90% prediction
|
404
|
+
* accuracy overall. This favors average latency over tail latency.
|
405
|
+
*/
|
406
|
+
epoch = EpochFromFullTransactionId(nextFullXid);
|
407
|
+
if (unlikely(xid > XidFromFullTransactionId(nextFullXid)))
|
408
|
+
{
|
409
|
+
Assert(epoch != 0);
|
410
|
+
epoch--;
|
411
|
+
}
|
412
|
+
|
413
|
+
return FullTransactionIdFromEpochAndXid(epoch, xid);
|
414
|
+
}
|
415
|
+
|
373
416
|
#endif /* FRONTEND */
|
374
417
|
|
375
418
|
#endif /* TRANSAM_H */
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* Tuple conversion support.
|
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/access/tupconvert.h
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* POSTGRES tuple descriptor 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/access/tupdesc.h
|
@@ -126,8 +126,8 @@ extern void DecrTupleDescRefCount(TupleDesc tupdesc);
|
|
126
126
|
} while (0)
|
127
127
|
|
128
128
|
extern bool equalTupleDescs(TupleDesc tupdesc1, TupleDesc tupdesc2);
|
129
|
-
|
130
|
-
extern uint32
|
129
|
+
extern bool equalRowTypes(TupleDesc tupdesc1, TupleDesc tupdesc2);
|
130
|
+
extern uint32 hashRowType(TupleDesc desc);
|
131
131
|
|
132
132
|
extern void TupleDescInitEntry(TupleDesc desc,
|
133
133
|
AttrNumber attributeNumber,
|
@@ -147,8 +147,8 @@ extern void TupleDescInitEntryCollation(TupleDesc desc,
|
|
147
147
|
AttrNumber attributeNumber,
|
148
148
|
Oid collationid);
|
149
149
|
|
150
|
-
extern TupleDesc
|
150
|
+
extern TupleDesc BuildDescFromLists(const List *names, const List *types, const List *typmods, const List *collations);
|
151
151
|
|
152
|
-
extern
|
152
|
+
extern Node *TupleDescGetDefault(TupleDesc tupdesc, AttrNumber attnum);
|
153
153
|
|
154
154
|
#endif /* TUPDESC_H */
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* Tuple macros used by both index tuples and heap tuples.
|
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/access/tupmacs.h
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* Two-phase-commit related declarations.
|
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/access/twophase.h
|
@@ -37,7 +37,7 @@ extern void PostPrepare_Twophase(void);
|
|
37
37
|
extern TransactionId TwoPhaseGetXidByVirtualXID(VirtualTransactionId vxid,
|
38
38
|
bool *have_more);
|
39
39
|
extern PGPROC *TwoPhaseGetDummyProc(TransactionId xid, bool lock_held);
|
40
|
-
extern
|
40
|
+
extern int TwoPhaseGetDummyProcNumber(TransactionId xid, bool lock_held);
|
41
41
|
|
42
42
|
extern GlobalTransaction MarkAsPreparing(TransactionId xid, const char *gid,
|
43
43
|
TimestampTz prepared_at,
|