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
@@ -2,8 +2,11 @@
|
|
2
2
|
* Symbols referenced in this file:
|
3
3
|
* - SlabAlloc
|
4
4
|
* - SlabBlocklistIndex
|
5
|
+
* - SlabAllocInvalidSize
|
6
|
+
* - SlabAllocFromNewBlock
|
5
7
|
* - SlabGetNextFreeChunk
|
6
8
|
* - SlabFindNextBlockListIndex
|
9
|
+
* - SlabAllocSetupNewChunk
|
7
10
|
* - SlabFree
|
8
11
|
* - SlabRealloc
|
9
12
|
* - SlabReset
|
@@ -26,7 +29,7 @@
|
|
26
29
|
* with minimal memory wastage and fragmentation.
|
27
30
|
*
|
28
31
|
*
|
29
|
-
* Portions Copyright (c) 2017-
|
32
|
+
* Portions Copyright (c) 2017-2024, PostgreSQL Global Development Group
|
30
33
|
*
|
31
34
|
* IDENTIFICATION
|
32
35
|
* src/backend/utils/mmgr/slab.c
|
@@ -89,8 +92,8 @@
|
|
89
92
|
#include "lib/ilist.h"
|
90
93
|
#include "utils/memdebug.h"
|
91
94
|
#include "utils/memutils.h"
|
92
|
-
#include "utils/memutils_memorychunk.h"
|
93
95
|
#include "utils/memutils_internal.h"
|
96
|
+
#include "utils/memutils_memorychunk.h"
|
94
97
|
|
95
98
|
#define Slab_BLOCKHDRSZ MAXALIGN(sizeof(SlabBlock))
|
96
99
|
|
@@ -122,9 +125,9 @@ typedef struct SlabContext
|
|
122
125
|
{
|
123
126
|
MemoryContextData header; /* Standard memory-context fields */
|
124
127
|
/* Allocation parameters for this context: */
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
+
uint32 chunkSize; /* the requested (non-aligned) chunk size */
|
129
|
+
uint32 fullChunkSize; /* chunk size with chunk header and alignment */
|
130
|
+
uint32 blockSize; /* the size to make each block of chunks */
|
128
131
|
int32 chunksPerBlock; /* number of chunks that fit in 1 block */
|
129
132
|
int32 curBlocklistIndex; /* index into the blocklist[] element
|
130
133
|
* containing the fullest, blocks */
|
@@ -332,7 +335,9 @@ SlabGetNextFreeChunk(SlabContext *slab, SlabBlock *block)
|
|
332
335
|
* blockSize: allocation block size
|
333
336
|
* chunkSize: allocation chunk size
|
334
337
|
*
|
335
|
-
* The MAXALIGN(chunkSize) may not exceed
|
338
|
+
* The Slab_CHUNKHDRSZ + MAXALIGN(chunkSize + 1) may not exceed
|
339
|
+
* MEMORYCHUNK_MAX_VALUE.
|
340
|
+
* 'blockSize' may not exceed MEMORYCHUNK_MAX_BLOCKOFFSET.
|
336
341
|
*/
|
337
342
|
#ifdef MEMORY_CONTEXT_CHECKING
|
338
343
|
#else
|
@@ -411,85 +416,169 @@ SlabDelete(MemoryContext context)
|
|
411
416
|
}
|
412
417
|
|
413
418
|
/*
|
414
|
-
*
|
415
|
-
*
|
416
|
-
* request could not be completed; memory is added to the slab.
|
419
|
+
* Small helper for allocating a new chunk from a chunk, to avoid duplicating
|
420
|
+
* the code between SlabAlloc() and SlabAllocFromNewBlock().
|
417
421
|
*/
|
418
|
-
void *
|
419
|
-
|
422
|
+
static inline void *
|
423
|
+
SlabAllocSetupNewChunk(MemoryContext context, SlabBlock *block,
|
424
|
+
MemoryChunk *chunk, Size size)
|
425
|
+
{
|
426
|
+
SlabContext *slab = (SlabContext *) context;
|
427
|
+
|
428
|
+
/*
|
429
|
+
* Check that the chunk pointer is actually somewhere on the block and is
|
430
|
+
* aligned as expected.
|
431
|
+
*/
|
432
|
+
Assert(chunk >= SlabBlockGetChunk(slab, block, 0));
|
433
|
+
Assert(chunk <= SlabBlockGetChunk(slab, block, slab->chunksPerBlock - 1));
|
434
|
+
Assert(SlabChunkMod(slab, block, chunk) == 0);
|
435
|
+
|
436
|
+
/* Prepare to initialize the chunk header. */
|
437
|
+
VALGRIND_MAKE_MEM_UNDEFINED(chunk, Slab_CHUNKHDRSZ);
|
438
|
+
|
439
|
+
MemoryChunkSetHdrMask(chunk, block, MAXALIGN(slab->chunkSize), MCTX_SLAB_ID);
|
440
|
+
|
441
|
+
#ifdef MEMORY_CONTEXT_CHECKING
|
442
|
+
/* slab mark to catch clobber of "unused" space */
|
443
|
+
Assert(slab->chunkSize < (slab->fullChunkSize - Slab_CHUNKHDRSZ));
|
444
|
+
set_sentinel(MemoryChunkGetPointer(chunk), size);
|
445
|
+
VALGRIND_MAKE_MEM_NOACCESS(((char *) chunk) + Slab_CHUNKHDRSZ +
|
446
|
+
slab->chunkSize,
|
447
|
+
slab->fullChunkSize -
|
448
|
+
(slab->chunkSize + Slab_CHUNKHDRSZ));
|
449
|
+
#endif
|
450
|
+
|
451
|
+
#ifdef RANDOMIZE_ALLOCATED_MEMORY
|
452
|
+
/* fill the allocated space with junk */
|
453
|
+
randomize_mem((char *) MemoryChunkGetPointer(chunk), size);
|
454
|
+
#endif
|
455
|
+
|
456
|
+
/* Disallow access to the chunk header. */
|
457
|
+
VALGRIND_MAKE_MEM_NOACCESS(chunk, Slab_CHUNKHDRSZ);
|
458
|
+
|
459
|
+
return MemoryChunkGetPointer(chunk);
|
460
|
+
}
|
461
|
+
|
462
|
+
pg_noinline
|
463
|
+
static void *
|
464
|
+
SlabAllocFromNewBlock(MemoryContext context, Size size, int flags)
|
420
465
|
{
|
421
466
|
SlabContext *slab = (SlabContext *) context;
|
422
467
|
SlabBlock *block;
|
423
468
|
MemoryChunk *chunk;
|
469
|
+
dlist_head *blocklist;
|
470
|
+
int blocklist_idx;
|
424
471
|
|
425
|
-
|
472
|
+
/* to save allocating a new one, first check the empty blocks list */
|
473
|
+
if (dclist_count(&slab->emptyblocks) > 0)
|
474
|
+
{
|
475
|
+
dlist_node *node = dclist_pop_head_node(&slab->emptyblocks);
|
426
476
|
|
427
|
-
|
428
|
-
Assert(slab->curBlocklistIndex >= 0);
|
429
|
-
Assert(slab->curBlocklistIndex <= SlabBlocklistIndex(slab, slab->chunksPerBlock));
|
477
|
+
block = dlist_container(SlabBlock, node, node);
|
430
478
|
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
479
|
+
/*
|
480
|
+
* SlabFree() should have left this block in a valid state with all
|
481
|
+
* chunks free. Ensure that's the case.
|
482
|
+
*/
|
483
|
+
Assert(block->nfree == slab->chunksPerBlock);
|
435
484
|
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
* SlabAlloc() we will set the curBlocklistIndex to zero if we end up
|
441
|
-
* filling the final block.
|
442
|
-
*/
|
443
|
-
if (unlikely(slab->curBlocklistIndex == 0))
|
485
|
+
/* fetch the next chunk from this block */
|
486
|
+
chunk = SlabGetNextFreeChunk(slab, block);
|
487
|
+
}
|
488
|
+
else
|
444
489
|
{
|
445
|
-
|
446
|
-
int blocklist_idx;
|
490
|
+
block = (SlabBlock *) malloc(slab->blockSize);
|
447
491
|
|
448
|
-
|
449
|
-
|
450
|
-
{
|
451
|
-
dlist_node *node = dclist_pop_head_node(&slab->emptyblocks);
|
492
|
+
if (unlikely(block == NULL))
|
493
|
+
return MemoryContextAllocationFailure(context, size, flags);
|
452
494
|
|
453
|
-
|
495
|
+
block->slab = slab;
|
496
|
+
context->mem_allocated += slab->blockSize;
|
454
497
|
|
455
|
-
|
456
|
-
|
457
|
-
* all chunks free. Ensure that's the case.
|
458
|
-
*/
|
459
|
-
Assert(block->nfree == slab->chunksPerBlock);
|
498
|
+
/* use the first chunk in the new block */
|
499
|
+
chunk = SlabBlockGetChunk(slab, block, 0);
|
460
500
|
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
block = (SlabBlock *) malloc(slab->blockSize);
|
501
|
+
block->nfree = slab->chunksPerBlock - 1;
|
502
|
+
block->unused = SlabBlockGetChunk(slab, block, 1);
|
503
|
+
block->freehead = NULL;
|
504
|
+
block->nunused = slab->chunksPerBlock - 1;
|
505
|
+
}
|
467
506
|
|
468
|
-
|
469
|
-
|
507
|
+
/* find the blocklist element for storing blocks with 1 used chunk */
|
508
|
+
blocklist_idx = SlabBlocklistIndex(slab, block->nfree);
|
509
|
+
blocklist = &slab->blocklist[blocklist_idx];
|
470
510
|
|
471
|
-
|
472
|
-
|
511
|
+
/* this better be empty. We just added a block thinking it was */
|
512
|
+
Assert(dlist_is_empty(blocklist));
|
473
513
|
|
474
|
-
|
475
|
-
chunk = SlabBlockGetChunk(slab, block, 0);
|
514
|
+
dlist_push_head(blocklist, &block->node);
|
476
515
|
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
516
|
+
slab->curBlocklistIndex = blocklist_idx;
|
517
|
+
|
518
|
+
return SlabAllocSetupNewChunk(context, block, chunk, size);
|
519
|
+
}
|
520
|
+
|
521
|
+
/*
|
522
|
+
* SlabAllocInvalidSize
|
523
|
+
* Handle raising an ERROR for an invalid size request. We don't do this
|
524
|
+
* in slab alloc as calling the elog functions would force the compiler
|
525
|
+
* to setup the stack frame in SlabAlloc. For performance reasons, we
|
526
|
+
* want to avoid that.
|
527
|
+
*/
|
528
|
+
pg_noinline
|
529
|
+
static void
|
530
|
+
pg_attribute_noreturn()
|
531
|
+
SlabAllocInvalidSize(MemoryContext context, Size size)
|
532
|
+
{
|
533
|
+
SlabContext *slab = (SlabContext *) context;
|
534
|
+
|
535
|
+
elog(ERROR, "unexpected alloc chunk size %zu (expected %u)", size,
|
536
|
+
slab->chunkSize);
|
537
|
+
}
|
538
|
+
|
539
|
+
/*
|
540
|
+
* SlabAlloc
|
541
|
+
* Returns a pointer to a newly allocated memory chunk or raises an ERROR
|
542
|
+
* on allocation failure, or returns NULL when flags contains
|
543
|
+
* MCXT_ALLOC_NO_OOM. 'size' must be the same size as was specified
|
544
|
+
* during SlabContextCreate().
|
545
|
+
*
|
546
|
+
* This function should only contain the most common code paths. Everything
|
547
|
+
* else should be in pg_noinline helper functions, thus avoiding the overhead
|
548
|
+
* of creating a stack frame for the common cases. Allocating memory is often
|
549
|
+
* a bottleneck in many workloads, so avoiding stack frame setup is
|
550
|
+
* worthwhile. Helper functions should always directly return the newly
|
551
|
+
* allocated memory so that we can just return that address directly as a tail
|
552
|
+
* call.
|
553
|
+
*/
|
554
|
+
void *
|
555
|
+
SlabAlloc(MemoryContext context, Size size, int flags)
|
556
|
+
{
|
557
|
+
SlabContext *slab = (SlabContext *) context;
|
558
|
+
SlabBlock *block;
|
559
|
+
MemoryChunk *chunk;
|
482
560
|
|
483
|
-
|
484
|
-
blocklist_idx = SlabBlocklistIndex(slab, block->nfree);
|
485
|
-
blocklist = &slab->blocklist[blocklist_idx];
|
561
|
+
Assert(SlabIsValid(slab));
|
486
562
|
|
487
|
-
|
488
|
-
|
563
|
+
/* sanity check that this is pointing to a valid blocklist */
|
564
|
+
Assert(slab->curBlocklistIndex >= 0);
|
565
|
+
Assert(slab->curBlocklistIndex <= SlabBlocklistIndex(slab, slab->chunksPerBlock));
|
489
566
|
|
490
|
-
|
567
|
+
/*
|
568
|
+
* Make sure we only allow correct request size. This doubles as the
|
569
|
+
* MemoryContextCheckSize check.
|
570
|
+
*/
|
571
|
+
if (unlikely(size != slab->chunkSize))
|
572
|
+
SlabAllocInvalidSize(context, size);
|
491
573
|
|
492
|
-
|
574
|
+
if (unlikely(slab->curBlocklistIndex == 0))
|
575
|
+
{
|
576
|
+
/*
|
577
|
+
* Handle the case when there are no partially filled blocks
|
578
|
+
* available. This happens either when the last allocation took the
|
579
|
+
* last chunk in the block, or when SlabFree() free'd the final block.
|
580
|
+
*/
|
581
|
+
return SlabAllocFromNewBlock(context, size, flags);
|
493
582
|
}
|
494
583
|
else
|
495
584
|
{
|
@@ -526,38 +615,7 @@ SlabAlloc(MemoryContext context, Size size)
|
|
526
615
|
}
|
527
616
|
}
|
528
617
|
|
529
|
-
|
530
|
-
* Check that the chunk pointer is actually somewhere on the block and is
|
531
|
-
* aligned as expected.
|
532
|
-
*/
|
533
|
-
Assert(chunk >= SlabBlockGetChunk(slab, block, 0));
|
534
|
-
Assert(chunk <= SlabBlockGetChunk(slab, block, slab->chunksPerBlock - 1));
|
535
|
-
Assert(SlabChunkMod(slab, block, chunk) == 0);
|
536
|
-
|
537
|
-
/* Prepare to initialize the chunk header. */
|
538
|
-
VALGRIND_MAKE_MEM_UNDEFINED(chunk, Slab_CHUNKHDRSZ);
|
539
|
-
|
540
|
-
MemoryChunkSetHdrMask(chunk, block, MAXALIGN(slab->chunkSize),
|
541
|
-
MCTX_SLAB_ID);
|
542
|
-
#ifdef MEMORY_CONTEXT_CHECKING
|
543
|
-
/* slab mark to catch clobber of "unused" space */
|
544
|
-
Assert(slab->chunkSize < (slab->fullChunkSize - Slab_CHUNKHDRSZ));
|
545
|
-
set_sentinel(MemoryChunkGetPointer(chunk), size);
|
546
|
-
VALGRIND_MAKE_MEM_NOACCESS(((char *) chunk) +
|
547
|
-
Slab_CHUNKHDRSZ + slab->chunkSize,
|
548
|
-
slab->fullChunkSize -
|
549
|
-
(slab->chunkSize + Slab_CHUNKHDRSZ));
|
550
|
-
#endif
|
551
|
-
|
552
|
-
#ifdef RANDOMIZE_ALLOCATED_MEMORY
|
553
|
-
/* fill the allocated space with junk */
|
554
|
-
randomize_mem((char *) MemoryChunkGetPointer(chunk), size);
|
555
|
-
#endif
|
556
|
-
|
557
|
-
/* Disallow access to the chunk header. */
|
558
|
-
VALGRIND_MAKE_MEM_NOACCESS(chunk, Slab_CHUNKHDRSZ);
|
559
|
-
|
560
|
-
return MemoryChunkGetPointer(chunk);
|
618
|
+
return SlabAllocSetupNewChunk(context, block, chunk, size);
|
561
619
|
}
|
562
620
|
|
563
621
|
/*
|
@@ -690,7 +748,7 @@ SlabFree(void *pointer)
|
|
690
748
|
* realloc is usually used to enlarge the chunk.
|
691
749
|
*/
|
692
750
|
void *
|
693
|
-
SlabRealloc(void *pointer, Size size)
|
751
|
+
SlabRealloc(void *pointer, Size size, int flags)
|
694
752
|
{
|
695
753
|
MemoryChunk *chunk = PointerGetMemoryChunk(pointer);
|
696
754
|
SlabBlock *block;
|
@@ -9,7 +9,7 @@
|
|
9
9
|
* encnames.c
|
10
10
|
* Encoding names and routines for working with them.
|
11
11
|
*
|
12
|
-
* Portions Copyright (c) 2001-
|
12
|
+
* Portions Copyright (c) 2001-2024, PostgreSQL Global Development Group
|
13
13
|
*
|
14
14
|
* IDENTIFICATION
|
15
15
|
* src/common/encnames.c
|
@@ -46,7 +46,6 @@ typedef struct pg_encname
|
|
46
46
|
|
47
47
|
/* ----------
|
48
48
|
* These are "official" encoding names.
|
49
|
-
* XXX must be sorted by the same order as enum pg_enc (in mb/pg_wchar.h)
|
50
49
|
* ----------
|
51
50
|
*/
|
52
51
|
#ifndef WIN32
|
@@ -57,48 +56,48 @@ typedef struct pg_encname
|
|
57
56
|
|
58
57
|
const pg_enc2name pg_enc2name_tbl[] =
|
59
58
|
{
|
60
|
-
DEF_ENC2NAME(SQL_ASCII, 0),
|
61
|
-
DEF_ENC2NAME(EUC_JP, 20932),
|
62
|
-
DEF_ENC2NAME(EUC_CN, 20936),
|
63
|
-
DEF_ENC2NAME(EUC_KR, 51949),
|
64
|
-
DEF_ENC2NAME(EUC_TW, 0),
|
65
|
-
DEF_ENC2NAME(EUC_JIS_2004, 20932),
|
66
|
-
DEF_ENC2NAME(UTF8, 65001),
|
67
|
-
DEF_ENC2NAME(MULE_INTERNAL, 0),
|
68
|
-
DEF_ENC2NAME(LATIN1, 28591),
|
69
|
-
DEF_ENC2NAME(LATIN2, 28592),
|
70
|
-
DEF_ENC2NAME(LATIN3, 28593),
|
71
|
-
DEF_ENC2NAME(LATIN4, 28594),
|
72
|
-
DEF_ENC2NAME(LATIN5, 28599),
|
73
|
-
DEF_ENC2NAME(LATIN6, 0),
|
74
|
-
DEF_ENC2NAME(LATIN7, 0),
|
75
|
-
DEF_ENC2NAME(LATIN8, 0),
|
76
|
-
DEF_ENC2NAME(LATIN9, 28605),
|
77
|
-
DEF_ENC2NAME(LATIN10, 0),
|
78
|
-
DEF_ENC2NAME(WIN1256, 1256),
|
79
|
-
DEF_ENC2NAME(WIN1258, 1258),
|
80
|
-
DEF_ENC2NAME(WIN866, 866),
|
81
|
-
DEF_ENC2NAME(WIN874, 874),
|
82
|
-
DEF_ENC2NAME(KOI8R, 20866),
|
83
|
-
DEF_ENC2NAME(WIN1251, 1251),
|
84
|
-
DEF_ENC2NAME(WIN1252, 1252),
|
85
|
-
DEF_ENC2NAME(ISO_8859_5, 28595),
|
86
|
-
DEF_ENC2NAME(ISO_8859_6, 28596),
|
87
|
-
DEF_ENC2NAME(ISO_8859_7, 28597),
|
88
|
-
DEF_ENC2NAME(ISO_8859_8, 28598),
|
89
|
-
DEF_ENC2NAME(WIN1250, 1250),
|
90
|
-
DEF_ENC2NAME(WIN1253, 1253),
|
91
|
-
DEF_ENC2NAME(WIN1254, 1254),
|
92
|
-
DEF_ENC2NAME(WIN1255, 1255),
|
93
|
-
DEF_ENC2NAME(WIN1257, 1257),
|
94
|
-
DEF_ENC2NAME(KOI8U, 21866),
|
95
|
-
DEF_ENC2NAME(SJIS, 932),
|
96
|
-
DEF_ENC2NAME(BIG5, 950),
|
97
|
-
DEF_ENC2NAME(GBK, 936),
|
98
|
-
DEF_ENC2NAME(UHC, 949),
|
99
|
-
DEF_ENC2NAME(GB18030, 54936),
|
100
|
-
DEF_ENC2NAME(JOHAB, 0),
|
101
|
-
DEF_ENC2NAME(SHIFT_JIS_2004, 932)
|
59
|
+
[PG_SQL_ASCII] = DEF_ENC2NAME(SQL_ASCII, 0),
|
60
|
+
[PG_EUC_JP] = DEF_ENC2NAME(EUC_JP, 20932),
|
61
|
+
[PG_EUC_CN] = DEF_ENC2NAME(EUC_CN, 20936),
|
62
|
+
[PG_EUC_KR] = DEF_ENC2NAME(EUC_KR, 51949),
|
63
|
+
[PG_EUC_TW] = DEF_ENC2NAME(EUC_TW, 0),
|
64
|
+
[PG_EUC_JIS_2004] = DEF_ENC2NAME(EUC_JIS_2004, 20932),
|
65
|
+
[PG_UTF8] = DEF_ENC2NAME(UTF8, 65001),
|
66
|
+
[PG_MULE_INTERNAL] = DEF_ENC2NAME(MULE_INTERNAL, 0),
|
67
|
+
[PG_LATIN1] = DEF_ENC2NAME(LATIN1, 28591),
|
68
|
+
[PG_LATIN2] = DEF_ENC2NAME(LATIN2, 28592),
|
69
|
+
[PG_LATIN3] = DEF_ENC2NAME(LATIN3, 28593),
|
70
|
+
[PG_LATIN4] = DEF_ENC2NAME(LATIN4, 28594),
|
71
|
+
[PG_LATIN5] = DEF_ENC2NAME(LATIN5, 28599),
|
72
|
+
[PG_LATIN6] = DEF_ENC2NAME(LATIN6, 0),
|
73
|
+
[PG_LATIN7] = DEF_ENC2NAME(LATIN7, 0),
|
74
|
+
[PG_LATIN8] = DEF_ENC2NAME(LATIN8, 0),
|
75
|
+
[PG_LATIN9] = DEF_ENC2NAME(LATIN9, 28605),
|
76
|
+
[PG_LATIN10] = DEF_ENC2NAME(LATIN10, 0),
|
77
|
+
[PG_WIN1256] = DEF_ENC2NAME(WIN1256, 1256),
|
78
|
+
[PG_WIN1258] = DEF_ENC2NAME(WIN1258, 1258),
|
79
|
+
[PG_WIN866] = DEF_ENC2NAME(WIN866, 866),
|
80
|
+
[PG_WIN874] = DEF_ENC2NAME(WIN874, 874),
|
81
|
+
[PG_KOI8R] = DEF_ENC2NAME(KOI8R, 20866),
|
82
|
+
[PG_WIN1251] = DEF_ENC2NAME(WIN1251, 1251),
|
83
|
+
[PG_WIN1252] = DEF_ENC2NAME(WIN1252, 1252),
|
84
|
+
[PG_ISO_8859_5] = DEF_ENC2NAME(ISO_8859_5, 28595),
|
85
|
+
[PG_ISO_8859_6] = DEF_ENC2NAME(ISO_8859_6, 28596),
|
86
|
+
[PG_ISO_8859_7] = DEF_ENC2NAME(ISO_8859_7, 28597),
|
87
|
+
[PG_ISO_8859_8] = DEF_ENC2NAME(ISO_8859_8, 28598),
|
88
|
+
[PG_WIN1250] = DEF_ENC2NAME(WIN1250, 1250),
|
89
|
+
[PG_WIN1253] = DEF_ENC2NAME(WIN1253, 1253),
|
90
|
+
[PG_WIN1254] = DEF_ENC2NAME(WIN1254, 1254),
|
91
|
+
[PG_WIN1255] = DEF_ENC2NAME(WIN1255, 1255),
|
92
|
+
[PG_WIN1257] = DEF_ENC2NAME(WIN1257, 1257),
|
93
|
+
[PG_KOI8U] = DEF_ENC2NAME(KOI8U, 21866),
|
94
|
+
[PG_SJIS] = DEF_ENC2NAME(SJIS, 932),
|
95
|
+
[PG_BIG5] = DEF_ENC2NAME(BIG5, 950),
|
96
|
+
[PG_GBK] = DEF_ENC2NAME(GBK, 936),
|
97
|
+
[PG_UHC] = DEF_ENC2NAME(UHC, 949),
|
98
|
+
[PG_GB18030] = DEF_ENC2NAME(GB18030, 54936),
|
99
|
+
[PG_JOHAB] = DEF_ENC2NAME(JOHAB, 0),
|
100
|
+
[PG_SHIFT_JIS_2004] = DEF_ENC2NAME(SHIFT_JIS_2004, 932),
|
102
101
|
};
|
103
102
|
|
104
103
|
/* ----------
|
@@ -10,7 +10,7 @@
|
|
10
10
|
* PostgreSQL's list of SQL keywords
|
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
|
*
|