pg_query 5.1.0 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +30 -0
- data/README.md +1 -1
- data/Rakefile +4 -4
- data/ext/pg_query/ext_symbols_freebsd.sym +1 -0
- data/ext/pg_query/ext_symbols_freebsd_with_ruby_abi_version.sym +2 -0
- data/ext/pg_query/ext_symbols_openbsd.sym +1 -0
- data/ext/pg_query/ext_symbols_openbsd_with_ruby_abi_version.sym +2 -0
- data/ext/pg_query/ext_symbols_with_ruby_abi_version.sym +2 -0
- data/ext/pg_query/extconf.rb +20 -6
- data/ext/pg_query/include/pg_query.h +4 -3
- data/ext/pg_query/include/pg_query_enum_defs.c +424 -154
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +68 -4
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +2952 -1845
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +51 -3
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +210 -23
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +17 -1
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +271 -52
- data/ext/pg_query/include/postgres/access/amapi.h +14 -3
- data/ext/pg_query/include/postgres/access/attmap.h +1 -1
- data/ext/pg_query/include/postgres/access/attnum.h +1 -1
- data/ext/pg_query/include/postgres/access/brin_internal.h +116 -0
- data/ext/pg_query/include/postgres/access/brin_tuple.h +112 -0
- data/ext/pg_query/include/postgres/access/clog.h +2 -3
- data/ext/pg_query/include/postgres/access/commit_ts.h +2 -3
- data/ext/pg_query/include/postgres/access/detoast.h +1 -1
- data/ext/pg_query/include/postgres/access/genam.h +17 -4
- data/ext/pg_query/include/postgres/access/gin.h +1 -1
- data/ext/pg_query/include/postgres/access/htup.h +1 -1
- data/ext/pg_query/include/postgres/access/htup_details.h +11 -11
- data/ext/pg_query/include/postgres/access/itup.h +3 -3
- data/ext/pg_query/include/postgres/access/parallel.h +1 -2
- data/ext/pg_query/include/postgres/access/printtup.h +1 -1
- data/ext/pg_query/include/postgres/access/relation.h +1 -1
- data/ext/pg_query/include/postgres/access/relscan.h +1 -1
- data/ext/pg_query/include/postgres/access/rmgrlist.h +1 -1
- data/ext/pg_query/include/postgres/access/sdir.h +1 -1
- data/ext/pg_query/include/postgres/access/skey.h +1 -1
- data/ext/pg_query/include/postgres/access/slru.h +218 -0
- data/ext/pg_query/include/postgres/access/stratnum.h +1 -1
- data/ext/pg_query/include/postgres/access/sysattr.h +1 -1
- data/ext/pg_query/include/postgres/access/table.h +1 -1
- data/ext/pg_query/include/postgres/access/tableam.h +35 -25
- data/ext/pg_query/include/postgres/access/tidstore.h +50 -0
- data/ext/pg_query/include/postgres/access/toast_compression.h +2 -2
- data/ext/pg_query/include/postgres/access/transam.h +50 -7
- data/ext/pg_query/include/postgres/access/tsmapi.h +1 -1
- data/ext/pg_query/include/postgres/access/tupconvert.h +1 -1
- data/ext/pg_query/include/postgres/access/tupdesc.h +5 -5
- data/ext/pg_query/include/postgres/access/tupmacs.h +1 -1
- data/ext/pg_query/include/postgres/access/twophase.h +2 -2
- data/ext/pg_query/include/postgres/access/xact.h +5 -5
- data/ext/pg_query/include/postgres/access/xlog.h +20 -12
- data/ext/pg_query/include/postgres/access/xlog_internal.h +4 -3
- data/ext/pg_query/include/postgres/access/xlogbackup.h +3 -1
- data/ext/pg_query/include/postgres/access/xlogdefs.h +5 -5
- data/ext/pg_query/include/postgres/access/xlogprefetcher.h +2 -2
- data/ext/pg_query/include/postgres/access/xlogreader.h +2 -2
- data/ext/pg_query/include/postgres/access/xlogrecord.h +3 -3
- data/ext/pg_query/include/postgres/access/xlogrecovery.h +4 -4
- data/ext/pg_query/include/postgres/archive/archive_module.h +9 -1
- data/ext/pg_query/include/postgres/c.h +32 -37
- data/ext/pg_query/include/postgres/catalog/catalog.h +3 -1
- data/ext/pg_query/include/postgres/catalog/catversion.h +2 -2
- data/ext/pg_query/include/postgres/catalog/dependency.h +17 -59
- data/ext/pg_query/include/postgres/catalog/genbki.h +12 -6
- data/ext/pg_query/include/postgres/catalog/index.h +22 -18
- data/ext/pg_query/include/postgres/catalog/indexing.h +1 -1
- data/ext/pg_query/include/postgres/catalog/namespace.h +18 -19
- data/ext/pg_query/include/postgres/catalog/objectaccess.h +2 -2
- data/ext/pg_query/include/postgres/catalog/objectaddress.h +5 -1
- data/ext/pg_query/include/postgres/catalog/pg_aggregate.h +4 -2
- data/ext/pg_query/include/postgres/catalog/pg_aggregate_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_am.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_am_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_attribute.h +31 -14
- data/ext/pg_query/include/postgres/catalog/pg_attribute_d.h +3 -3
- data/ext/pg_query/include/postgres/catalog/pg_authid.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_authid_d.h +2 -1
- data/ext/pg_query/include/postgres/catalog/pg_class.h +10 -5
- data/ext/pg_query/include/postgres/catalog/pg_class_d.h +4 -2
- data/ext/pg_query/include/postgres/catalog/pg_collation.h +11 -5
- data/ext/pg_query/include/postgres/catalog/pg_collation_d.h +5 -2
- data/ext/pg_query/include/postgres/catalog/pg_constraint.h +15 -10
- data/ext/pg_query/include/postgres/catalog/pg_constraint_d.h +2 -1
- data/ext/pg_query/include/postgres/catalog/pg_control.h +5 -3
- data/ext/pg_query/include/postgres/catalog/pg_conversion.h +8 -4
- data/ext/pg_query/include/postgres/catalog/pg_conversion_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_database.h +9 -4
- data/ext/pg_query/include/postgres/catalog/pg_database_d.h +13 -12
- data/ext/pg_query/include/postgres/catalog/pg_depend.h +3 -3
- data/ext/pg_query/include/postgres/catalog/pg_depend_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_event_trigger.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_event_trigger_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_index.h +5 -3
- data/ext/pg_query/include/postgres/catalog/pg_index_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_language.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_language_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_namespace.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_namespace_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_opclass.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_opclass_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_operator.h +20 -3
- data/ext/pg_query/include/postgres/catalog/pg_operator_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_opfamily.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_opfamily_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_partitioned_table.h +4 -2
- data/ext/pg_query/include/postgres/catalog/pg_partitioned_table_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_proc.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_proc_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_publication.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_publication_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_replication_origin.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_replication_origin_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_statistic.h +10 -4
- data/ext/pg_query/include/postgres/catalog/pg_statistic_d.h +7 -3
- data/ext/pg_query/include/postgres/catalog/pg_statistic_ext.h +10 -7
- data/ext/pg_query/include/postgres/catalog/pg_statistic_ext_d.h +3 -3
- data/ext/pg_query/include/postgres/catalog/pg_transform.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_transform_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_trigger.h +4 -4
- data/ext/pg_query/include/postgres/catalog/pg_trigger_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_config.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_config_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_dict.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_dict_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_parser_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_template.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_template_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_type.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_type_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/storage.h +1 -1
- data/ext/pg_query/include/postgres/catalog/syscache_ids.h +104 -0
- data/ext/pg_query/include/postgres/commands/async.h +2 -6
- data/ext/pg_query/include/postgres/commands/dbcommands.h +1 -1
- data/ext/pg_query/include/postgres/commands/defrem.h +6 -6
- data/ext/pg_query/include/postgres/commands/event_trigger.h +11 -2
- data/ext/pg_query/include/postgres/commands/explain.h +19 -3
- data/ext/pg_query/include/postgres/commands/prepare.h +1 -1
- data/ext/pg_query/include/postgres/commands/tablespace.h +1 -1
- data/ext/pg_query/include/postgres/commands/trigger.h +1 -1
- data/ext/pg_query/include/postgres/commands/vacuum.h +28 -26
- data/ext/pg_query/include/postgres/common/cryptohash.h +2 -2
- data/ext/pg_query/include/postgres/common/file_perm.h +1 -1
- data/ext/pg_query/include/postgres/common/file_utils.h +65 -0
- data/ext/pg_query/include/postgres/common/hashfn.h +16 -1
- data/ext/pg_query/include/postgres/common/hashfn_unstable.h +407 -0
- data/ext/pg_query/include/postgres/common/int.h +79 -4
- data/ext/pg_query/include/postgres/common/keywords.h +1 -1
- data/ext/pg_query/include/postgres/common/kwlookup.h +1 -1
- data/ext/pg_query/include/postgres/common/pg_prng.h +2 -1
- data/ext/pg_query/include/postgres/common/relpath.h +4 -4
- data/ext/pg_query/include/postgres/common/scram-common.h +1 -1
- data/ext/pg_query/include/postgres/common/sha2.h +1 -1
- data/ext/pg_query/include/postgres/common/string.h +1 -1
- data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +2 -3
- data/ext/pg_query/include/postgres/copyfuncs.funcs.c +278 -30
- data/ext/pg_query/include/postgres/copyfuncs.switch.c +55 -4
- data/ext/pg_query/include/postgres/datatype/timestamp.h +29 -3
- data/ext/pg_query/include/postgres/equalfuncs.funcs.c +239 -26
- data/ext/pg_query/include/postgres/equalfuncs.switch.c +55 -4
- data/ext/pg_query/include/postgres/executor/execdesc.h +2 -2
- data/ext/pg_query/include/postgres/executor/executor.h +6 -5
- data/ext/pg_query/include/postgres/executor/functions.h +2 -1
- data/ext/pg_query/include/postgres/executor/instrument.h +5 -3
- data/ext/pg_query/include/postgres/executor/spi.h +2 -8
- data/ext/pg_query/include/postgres/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/postgres/executor/tuptable.h +31 -2
- data/ext/pg_query/include/postgres/fmgr.h +2 -2
- data/ext/pg_query/include/postgres/foreign/fdwapi.h +1 -1
- data/ext/pg_query/include/postgres/funcapi.h +2 -2
- data/ext/pg_query/include/postgres/gram.h +871 -830
- data/ext/pg_query/include/postgres/gramparse.h +1 -1
- data/ext/pg_query/include/postgres/jit/jit.h +4 -3
- data/ext/pg_query/include/postgres/kwlist_d.h +511 -466
- data/ext/pg_query/include/postgres/lib/dshash.h +25 -10
- data/ext/pg_query/include/postgres/lib/ilist.h +1 -1
- data/ext/pg_query/include/postgres/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/postgres/lib/simplehash.h +40 -18
- data/ext/pg_query/include/postgres/lib/sort_template.h +14 -1
- data/ext/pg_query/include/postgres/lib/stringinfo.h +93 -11
- data/ext/pg_query/include/postgres/libpq/auth.h +1 -1
- data/ext/pg_query/include/postgres/libpq/crypt.h +2 -2
- data/ext/pg_query/include/postgres/libpq/hba.h +4 -4
- data/ext/pg_query/include/postgres/libpq/libpq-be.h +35 -28
- data/ext/pg_query/include/postgres/libpq/libpq.h +6 -7
- data/ext/pg_query/include/postgres/libpq/pqcomm.h +26 -20
- data/ext/pg_query/include/postgres/libpq/pqformat.h +2 -3
- data/ext/pg_query/include/postgres/libpq/pqsignal.h +1 -1
- data/ext/pg_query/include/postgres/libpq/protocol.h +89 -0
- data/ext/pg_query/include/postgres/libpq/sasl.h +1 -1
- data/ext/pg_query/include/postgres/libpq/scram.h +1 -1
- data/ext/pg_query/include/postgres/mb/pg_wchar.h +103 -82
- data/ext/pg_query/include/postgres/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/postgres/miscadmin.h +72 -52
- data/ext/pg_query/include/postgres/nodes/bitmapset.h +17 -3
- data/ext/pg_query/include/postgres/nodes/execnodes.h +112 -25
- data/ext/pg_query/include/postgres/nodes/extensible.h +1 -1
- data/ext/pg_query/include/postgres/nodes/lockoptions.h +4 -4
- data/ext/pg_query/include/postgres/nodes/makefuncs.h +8 -2
- data/ext/pg_query/include/postgres/nodes/memnodes.h +43 -4
- data/ext/pg_query/include/postgres/nodes/miscnodes.h +1 -1
- data/ext/pg_query/include/postgres/nodes/nodeFuncs.h +1 -1
- data/ext/pg_query/include/postgres/nodes/nodes.h +30 -41
- data/ext/pg_query/include/postgres/nodes/nodetags.h +464 -444
- data/ext/pg_query/include/postgres/nodes/params.h +1 -1
- data/ext/pg_query/include/postgres/nodes/parsenodes.h +358 -175
- data/ext/pg_query/include/postgres/nodes/pathnodes.h +64 -10
- data/ext/pg_query/include/postgres/nodes/pg_list.h +62 -11
- data/ext/pg_query/include/postgres/nodes/plannodes.h +11 -10
- data/ext/pg_query/include/postgres/nodes/primnodes.h +352 -54
- data/ext/pg_query/include/postgres/nodes/print.h +1 -1
- data/ext/pg_query/include/postgres/nodes/queryjumble.h +2 -2
- data/ext/pg_query/include/postgres/nodes/replnodes.h +23 -2
- data/ext/pg_query/include/postgres/nodes/supportnodes.h +1 -1
- data/ext/pg_query/include/postgres/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/postgres/nodes/value.h +1 -1
- data/ext/pg_query/include/postgres/optimizer/cost.h +5 -4
- data/ext/pg_query/include/postgres/optimizer/geqo.h +1 -1
- data/ext/pg_query/include/postgres/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/postgres/optimizer/optimizer.h +5 -2
- data/ext/pg_query/include/postgres/optimizer/paths.h +13 -8
- data/ext/pg_query/include/postgres/optimizer/planmain.h +7 -1
- data/ext/pg_query/include/postgres/parser/analyze.h +3 -1
- data/ext/pg_query/include/postgres/parser/kwlist.h +22 -2
- data/ext/pg_query/include/postgres/parser/parse_agg.h +1 -1
- data/ext/pg_query/include/postgres/parser/parse_coerce.h +5 -2
- data/ext/pg_query/include/postgres/parser/parse_expr.h +1 -1
- data/ext/pg_query/include/postgres/parser/parse_func.h +2 -2
- data/ext/pg_query/include/postgres/parser/parse_node.h +3 -2
- data/ext/pg_query/include/postgres/parser/parse_oper.h +4 -1
- data/ext/pg_query/include/postgres/parser/parse_relation.h +1 -1
- data/ext/pg_query/include/postgres/parser/parse_type.h +2 -2
- data/ext/pg_query/include/postgres/parser/parser.h +3 -3
- data/ext/pg_query/include/postgres/parser/parsetree.h +1 -1
- data/ext/pg_query/include/postgres/parser/scanner.h +1 -1
- data/ext/pg_query/include/postgres/parser/scansup.h +1 -1
- data/ext/pg_query/include/postgres/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/postgres/pg_config.h +53 -45
- data/ext/pg_query/include/postgres/pg_config_manual.h +21 -8
- data/ext/pg_query/include/postgres/pg_getopt.h +1 -1
- data/ext/pg_query/include/postgres/pg_trace.h +1 -1
- data/ext/pg_query/include/postgres/pgstat.h +13 -11
- data/ext/pg_query/include/postgres/pgtime.h +1 -1
- data/ext/pg_query/include/postgres/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/postgres/pl_reserved_kwlist_d.h +1 -1
- data/ext/pg_query/include/postgres/pl_unreserved_kwlist.h +1 -1
- data/ext/pg_query/include/postgres/pl_unreserved_kwlist_d.h +1 -1
- data/ext/pg_query/include/postgres/plerrcodes.h +4 -4
- data/ext/pg_query/include/postgres/plpgsql.h +15 -13
- data/ext/pg_query/include/postgres/port/atomics/arch-arm.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/arch-ppc.h +3 -1
- data/ext/pg_query/include/postgres/port/atomics/arch-x86.h +3 -1
- data/ext/pg_query/include/postgres/port/atomics/fallback.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +38 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +19 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +16 -1
- data/ext/pg_query/include/postgres/port/atomics/generic.h +38 -2
- data/ext/pg_query/include/postgres/port/atomics.h +93 -6
- data/ext/pg_query/include/postgres/port/pg_bitutils.h +91 -9
- data/ext/pg_query/include/postgres/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/postgres/port/pg_crc32c.h +10 -1
- data/ext/pg_query/include/postgres/port/pg_iovec.h +117 -0
- data/ext/pg_query/include/postgres/port/simd.h +48 -1
- data/ext/pg_query/include/postgres/port/win32/sys/socket.h +8 -0
- data/ext/pg_query/include/postgres/port/win32_port.h +1 -13
- data/ext/pg_query/include/postgres/port.h +39 -4
- data/ext/pg_query/include/postgres/portability/instr_time.h +1 -1
- data/ext/pg_query/include/postgres/postgres.h +1 -1
- data/ext/pg_query/include/postgres/postmaster/autovacuum.h +5 -16
- data/ext/pg_query/include/postgres/postmaster/bgworker.h +8 -6
- data/ext/pg_query/include/postgres/postmaster/bgworker_internals.h +3 -7
- data/ext/pg_query/include/postgres/postmaster/bgwriter.h +3 -3
- data/ext/pg_query/include/postgres/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postgres/postmaster/pgarch.h +2 -2
- data/ext/pg_query/include/postgres/postmaster/postmaster.h +25 -5
- data/ext/pg_query/include/postgres/postmaster/startup.h +2 -2
- data/ext/pg_query/include/postgres/postmaster/syslogger.h +2 -4
- data/ext/pg_query/include/postgres/postmaster/walsummarizer.h +35 -0
- data/ext/pg_query/include/postgres/postmaster/walwriter.h +2 -2
- data/ext/pg_query/include/postgres/regex/regex.h +92 -9
- data/ext/pg_query/include/postgres/replication/logicallauncher.h +1 -1
- data/ext/pg_query/include/postgres/replication/logicalproto.h +2 -2
- data/ext/pg_query/include/postgres/replication/logicalworker.h +2 -1
- data/ext/pg_query/include/postgres/replication/origin.h +1 -1
- data/ext/pg_query/include/postgres/replication/reorderbuffer.h +27 -46
- data/ext/pg_query/include/postgres/replication/slot.h +45 -5
- data/ext/pg_query/include/postgres/replication/slotsync.h +38 -0
- data/ext/pg_query/include/postgres/replication/syncrep.h +1 -1
- data/ext/pg_query/include/postgres/replication/walreceiver.h +37 -11
- data/ext/pg_query/include/postgres/replication/walsender.h +5 -3
- data/ext/pg_query/include/postgres/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/postgres/rewrite/rewriteHandler.h +7 -1
- data/ext/pg_query/include/postgres/rewrite/rewriteManip.h +2 -2
- data/ext/pg_query/include/postgres/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/postgres/storage/block.h +1 -1
- data/ext/pg_query/include/postgres/storage/buf.h +1 -1
- data/ext/pg_query/include/postgres/storage/bufmgr.h +59 -41
- data/ext/pg_query/include/postgres/storage/bufpage.h +1 -1
- data/ext/pg_query/include/postgres/storage/condition_variable.h +1 -1
- data/ext/pg_query/include/postgres/storage/dsm.h +1 -1
- data/ext/pg_query/include/postgres/storage/dsm_impl.h +2 -2
- data/ext/pg_query/include/postgres/storage/fd.h +30 -13
- data/ext/pg_query/include/postgres/storage/fileset.h +1 -1
- data/ext/pg_query/include/postgres/storage/ipc.h +4 -1
- data/ext/pg_query/include/postgres/storage/item.h +1 -1
- data/ext/pg_query/include/postgres/storage/itemid.h +1 -1
- data/ext/pg_query/include/postgres/storage/itemptr.h +1 -1
- data/ext/pg_query/include/postgres/storage/large_object.h +1 -1
- data/ext/pg_query/include/postgres/storage/latch.h +4 -2
- data/ext/pg_query/include/postgres/storage/lmgr.h +8 -2
- data/ext/pg_query/include/postgres/storage/lock.h +19 -19
- data/ext/pg_query/include/postgres/storage/lockdefs.h +3 -1
- data/ext/pg_query/include/postgres/storage/lwlock.h +17 -9
- data/ext/pg_query/include/postgres/storage/lwlocknames.h +7 -10
- data/ext/pg_query/include/postgres/storage/off.h +1 -1
- data/ext/pg_query/include/postgres/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/postgres/storage/pg_shmem.h +5 -4
- data/ext/pg_query/include/postgres/storage/pmsignal.h +2 -2
- data/ext/pg_query/include/postgres/storage/predicate.h +1 -5
- data/ext/pg_query/include/postgres/storage/proc.h +48 -26
- data/ext/pg_query/include/postgres/storage/procarray.h +5 -1
- data/ext/pg_query/include/postgres/storage/proclist_types.h +11 -9
- data/ext/pg_query/include/postgres/storage/procnumber.h +43 -0
- data/ext/pg_query/include/postgres/storage/procsignal.h +8 -6
- data/ext/pg_query/include/postgres/storage/read_stream.h +65 -0
- data/ext/pg_query/include/postgres/storage/relfilelocator.h +16 -15
- data/ext/pg_query/include/postgres/storage/s_lock.h +7 -27
- data/ext/pg_query/include/postgres/storage/sharedfileset.h +1 -1
- data/ext/pg_query/include/postgres/storage/shm_mq.h +2 -2
- data/ext/pg_query/include/postgres/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/postgres/storage/shmem.h +1 -1
- data/ext/pg_query/include/postgres/storage/sinval.h +3 -3
- data/ext/pg_query/include/postgres/storage/smgr.h +46 -29
- data/ext/pg_query/include/postgres/storage/spin.h +1 -1
- data/ext/pg_query/include/postgres/storage/standby.h +13 -3
- data/ext/pg_query/include/postgres/storage/standbydefs.h +2 -2
- data/ext/pg_query/include/postgres/storage/sync.h +4 -4
- data/ext/pg_query/include/postgres/tcop/cmdtag.h +1 -2
- data/ext/pg_query/include/postgres/tcop/cmdtaglist.h +3 -2
- data/ext/pg_query/include/postgres/tcop/deparse_utility.h +2 -2
- data/ext/pg_query/include/postgres/tcop/dest.h +3 -2
- data/ext/pg_query/include/postgres/tcop/fastpath.h +1 -1
- data/ext/pg_query/include/postgres/tcop/pquery.h +1 -1
- data/ext/pg_query/include/postgres/tcop/tcopprot.h +9 -5
- data/ext/pg_query/include/postgres/tcop/utility.h +2 -2
- data/ext/pg_query/include/postgres/tsearch/ts_cache.h +1 -1
- data/ext/pg_query/include/postgres/utils/acl.h +19 -7
- data/ext/pg_query/include/postgres/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/postgres/utils/array.h +1 -2
- data/ext/pg_query/include/postgres/utils/ascii.h +84 -0
- data/ext/pg_query/include/postgres/utils/backend_progress.h +3 -2
- data/ext/pg_query/include/postgres/utils/backend_status.h +8 -10
- data/ext/pg_query/include/postgres/utils/builtins.h +4 -1
- data/ext/pg_query/include/postgres/utils/bytea.h +2 -2
- data/ext/pg_query/include/postgres/utils/catcache.h +6 -6
- data/ext/pg_query/include/postgres/utils/date.h +1 -1
- data/ext/pg_query/include/postgres/utils/datetime.h +4 -1
- data/ext/pg_query/include/postgres/utils/datum.h +1 -1
- data/ext/pg_query/include/postgres/utils/dsa.h +44 -5
- data/ext/pg_query/include/postgres/utils/elog.h +3 -8
- data/ext/pg_query/include/postgres/utils/errcodes.h +1 -3
- data/ext/pg_query/include/postgres/utils/expandeddatum.h +1 -1
- data/ext/pg_query/include/postgres/utils/expandedrecord.h +1 -1
- data/ext/pg_query/include/postgres/utils/float.h +1 -1
- data/ext/pg_query/include/postgres/utils/fmgroids.h +49 -16
- data/ext/pg_query/include/postgres/utils/fmgrprotos.h +47 -14
- data/ext/pg_query/include/postgres/utils/fmgrtab.h +1 -1
- data/ext/pg_query/include/postgres/utils/guc.h +20 -6
- data/ext/pg_query/include/postgres/utils/guc_hooks.h +23 -2
- data/ext/pg_query/include/postgres/utils/guc_tables.h +6 -5
- data/ext/pg_query/include/postgres/utils/hsearch.h +2 -2
- data/ext/pg_query/include/postgres/utils/injection_point.h +44 -0
- data/ext/pg_query/include/postgres/utils/inval.h +1 -1
- data/ext/pg_query/include/postgres/utils/logtape.h +5 -5
- data/ext/pg_query/include/postgres/utils/lsyscache.h +6 -3
- data/ext/pg_query/include/postgres/utils/memdebug.h +1 -1
- data/ext/pg_query/include/postgres/utils/memutils.h +12 -5
- data/ext/pg_query/include/postgres/utils/memutils_internal.h +53 -13
- data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +25 -9
- data/ext/pg_query/include/postgres/utils/numeric.h +6 -1
- data/ext/pg_query/include/postgres/utils/palloc.h +1 -15
- data/ext/pg_query/include/postgres/utils/partcache.h +1 -1
- data/ext/pg_query/include/postgres/utils/pg_locale.h +8 -7
- data/ext/pg_query/include/postgres/utils/pgstat_internal.h +30 -17
- data/ext/pg_query/include/postgres/utils/plancache.h +5 -3
- data/ext/pg_query/include/postgres/utils/portal.h +10 -10
- data/ext/pg_query/include/postgres/utils/queryenvironment.h +2 -2
- data/ext/pg_query/include/postgres/utils/regproc.h +1 -1
- data/ext/pg_query/include/postgres/utils/rel.h +14 -15
- data/ext/pg_query/include/postgres/utils/relcache.h +2 -5
- data/ext/pg_query/include/postgres/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/postgres/utils/resowner.h +90 -9
- data/ext/pg_query/include/postgres/utils/ruleutils.h +1 -1
- data/ext/pg_query/include/postgres/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/postgres/utils/snapmgr.h +1 -52
- data/ext/pg_query/include/postgres/utils/snapshot.h +2 -2
- data/ext/pg_query/include/postgres/utils/sortsupport.h +1 -1
- data/ext/pg_query/include/postgres/utils/syscache.h +7 -98
- data/ext/pg_query/include/postgres/utils/timeout.h +3 -2
- data/ext/pg_query/include/postgres/utils/timestamp.h +1 -1
- data/ext/pg_query/include/postgres/utils/tuplesort.h +36 -9
- data/ext/pg_query/include/postgres/utils/tuplestore.h +2 -5
- data/ext/pg_query/include/postgres/utils/typcache.h +2 -1
- data/ext/pg_query/include/postgres/utils/varlena.h +1 -1
- data/ext/pg_query/include/postgres/utils/wait_event.h +28 -214
- data/ext/pg_query/include/postgres/utils/wait_event_types.h +218 -0
- data/ext/pg_query/include/postgres/utils/xml.h +4 -4
- data/ext/pg_query/include/postgres/varatt.h +1 -1
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1546 -792
- data/ext/pg_query/include/protobuf/pg_query.pb.h +58365 -46595
- data/ext/pg_query/pg_query.pb-c.c +6598 -3739
- data/ext/pg_query/pg_query_normalize.c +42 -1
- data/ext/pg_query/pg_query_outfuncs_json.c +3 -1
- data/ext/pg_query/pg_query_parse_plpgsql.c +12 -13
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +2 -2
- data/ext/pg_query/pg_query_scan.c +1 -1
- data/ext/pg_query/postgres_deparse.c +601 -172
- data/ext/pg_query/src_backend_catalog_namespace.c +241 -66
- data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -3
- data/ext/pg_query/src_backend_commands_define.c +2 -3
- data/ext/pg_query/src_backend_nodes_bitmapset.c +137 -94
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +1 -1
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +1 -1
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +3 -7
- data/ext/pg_query/src_backend_nodes_makefuncs.c +59 -20
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +109 -2
- data/ext/pg_query/src_backend_nodes_value.c +1 -1
- data/ext/pg_query/src_backend_parser_gram.c +34491 -32136
- data/ext/pg_query/src_backend_parser_parser.c +8 -8
- data/ext/pg_query/src_backend_parser_scan.c +5637 -3028
- data/ext/pg_query/src_backend_parser_scansup.c +2 -1
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
- data/ext/pg_query/src_backend_tcop_postgres.c +34 -10
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +2 -2
- data/ext/pg_query/src_backend_utils_adt_datum.c +8 -6
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_numutils.c +4 -5
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +101 -28
- data/ext/pg_query/src_backend_utils_error_assert.c +1 -1
- data/ext/pg_query/src_backend_utils_error_elog.c +47 -42
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +4 -2
- data/ext/pg_query/src_backend_utils_init_globals.c +15 -3
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +11 -18
- data/ext/pg_query/src_backend_utils_misc_guc_tables.c +16 -6
- data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +8 -5
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +308 -238
- data/ext/pg_query/src_backend_utils_mmgr_bump.c +728 -0
- data/ext/pg_query/src_backend_utils_mmgr_generation.c +273 -197
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +270 -215
- data/ext/pg_query/src_backend_utils_mmgr_slab.c +154 -96
- data/ext/pg_query/src_common_encnames.c +43 -44
- data/ext/pg_query/src_common_hashfn.c +1 -1
- data/ext/pg_query/src_common_keywords.c +1 -1
- data/ext/pg_query/src_common_kwlist_d.h +511 -466
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_psprintf.c +3 -3
- data/ext/pg_query/src_common_stringinfo.c +18 -1
- data/ext/pg_query/src_common_wchar.c +92 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +99 -5
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +242 -143
- data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +19 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +1 -1
- data/ext/pg_query/src_port_pg_bitutils.c +173 -28
- data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
- data/ext/pg_query/src_port_snprintf.c +15 -18
- data/ext/pg_query/src_port_strerror.c +1 -3
- data/ext/pg_query/src_port_strlcpy.c +1 -1
- data/lib/pg_query/fingerprint.rb +3 -5
- data/lib/pg_query/param_refs.rb +2 -2
- data/lib/pg_query/parse.rb +5 -7
- data/lib/pg_query/parse_error.rb +1 -0
- data/lib/pg_query/pg_query_pb.rb +27 -25
- data/lib/pg_query/scan.rb +1 -0
- data/lib/pg_query/treewalker.rb +38 -15
- data/lib/pg_query/truncate.rb +18 -20
- data/lib/pg_query/version.rb +1 -1
- metadata +31 -82
- data/ext/pg_query/include/postgres/storage/backendid.h +0 -37
- data/ext/pg_query/include/postgres/storage/sinvaladt.h +0 -45
- data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
- data/ext/pg_query/src_backend_nodes_nodes.c +0 -38
- /data/ext/pg_query/{pg_query_ruby.sym → ext_symbols.sym} +0 -0
@@ -4,6 +4,7 @@
|
|
4
4
|
* - MemoryContextReset
|
5
5
|
* - MemoryContextDeleteChildren
|
6
6
|
* - MemoryContextDelete
|
7
|
+
* - MemoryContextDeleteOnly
|
7
8
|
* - TopMemoryContext
|
8
9
|
* - CurrentMemoryContext
|
9
10
|
* - MemoryContextSetParent
|
@@ -11,11 +12,13 @@
|
|
11
12
|
* - MemoryContextResetOnly
|
12
13
|
* - repalloc
|
13
14
|
* - GetMemoryChunkContext
|
15
|
+
* - mcxt_methods
|
16
|
+
* - MemoryContextAllocationFailure
|
14
17
|
* - MemoryContextStats
|
15
18
|
* - MemoryContextStatsDetail
|
16
19
|
* - MemoryContextStatsInternal
|
17
20
|
* - MemoryContextStatsPrint
|
18
|
-
* -
|
21
|
+
* - MemoryContextTraverseNext
|
19
22
|
* - GetMemoryChunkSpace
|
20
23
|
* - MemoryContextAllocAligned
|
21
24
|
* - MemoryContextAllocExtended
|
@@ -30,14 +33,14 @@
|
|
30
33
|
* - MemoryContextStrdup
|
31
34
|
* - MemoryContextAlloc
|
32
35
|
* - palloc
|
33
|
-
* - MemoryContextAllocZeroAligned
|
34
|
-
* - MemoryContextAllocZero
|
35
36
|
* - palloc0
|
36
37
|
* - MemoryContextCreate
|
37
38
|
* - MemoryContextInit
|
38
39
|
* - MemoryContextAllowInCriticalSection
|
39
40
|
* - CurrentMemoryContext
|
40
41
|
* - MemoryContextDelete
|
42
|
+
* - MemoryContextAllocZero
|
43
|
+
* - MemoryContextSizeFailure
|
41
44
|
* - palloc0
|
42
45
|
* - MemoryContextAllocExtended
|
43
46
|
*--------------------------------------------------------------------
|
@@ -54,7 +57,7 @@
|
|
54
57
|
* context's MemoryContextMethods struct.
|
55
58
|
*
|
56
59
|
*
|
57
|
-
* Portions Copyright (c) 1996-
|
60
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
58
61
|
* Portions Copyright (c) 1994, Regents of the University of California
|
59
62
|
*
|
60
63
|
*
|
@@ -68,10 +71,6 @@
|
|
68
71
|
|
69
72
|
#include "mb/pg_wchar.h"
|
70
73
|
#include "miscadmin.h"
|
71
|
-
#include "storage/proc.h"
|
72
|
-
#include "storage/procarray.h"
|
73
|
-
#include "storage/procsignal.h"
|
74
|
-
#include "utils/fmgrprotos.h"
|
75
74
|
#include "utils/memdebug.h"
|
76
75
|
#include "utils/memutils.h"
|
77
76
|
#include "utils/memutils_internal.h"
|
@@ -79,13 +78,18 @@
|
|
79
78
|
|
80
79
|
|
81
80
|
static void BogusFree(void *pointer);
|
82
|
-
static void *BogusRealloc(void *pointer, Size size);
|
81
|
+
static void *BogusRealloc(void *pointer, Size size, int flags);
|
83
82
|
static MemoryContext BogusGetChunkContext(void *pointer);
|
84
83
|
static Size BogusGetChunkSpace(void *pointer);
|
85
84
|
|
86
85
|
/*****************************************************************************
|
87
86
|
* GLOBAL MEMORY *
|
88
87
|
*****************************************************************************/
|
88
|
+
#define BOGUS_MCTX(id) \
|
89
|
+
[id].free_p = BogusFree, \
|
90
|
+
[id].realloc = BogusRealloc, \
|
91
|
+
[id].get_chunk_context = BogusGetChunkContext, \
|
92
|
+
[id].get_chunk_space = BogusGetChunkSpace
|
89
93
|
|
90
94
|
static const MemoryContextMethods mcxt_methods[] = {
|
91
95
|
/* aset.c */
|
@@ -144,35 +148,42 @@ static const MemoryContextMethods mcxt_methods[] = {
|
|
144
148
|
[MCTX_ALIGNED_REDIRECT_ID].check = NULL, /* not required */
|
145
149
|
#endif
|
146
150
|
|
151
|
+
/* bump.c */
|
152
|
+
[MCTX_BUMP_ID].alloc = BumpAlloc,
|
153
|
+
[MCTX_BUMP_ID].free_p = BumpFree,
|
154
|
+
[MCTX_BUMP_ID].realloc = BumpRealloc,
|
155
|
+
[MCTX_BUMP_ID].reset = BumpReset,
|
156
|
+
[MCTX_BUMP_ID].delete_context = BumpDelete,
|
157
|
+
[MCTX_BUMP_ID].get_chunk_context = BumpGetChunkContext,
|
158
|
+
[MCTX_BUMP_ID].get_chunk_space = BumpGetChunkSpace,
|
159
|
+
[MCTX_BUMP_ID].is_empty = BumpIsEmpty,
|
160
|
+
[MCTX_BUMP_ID].stats = BumpStats,
|
161
|
+
#ifdef MEMORY_CONTEXT_CHECKING
|
162
|
+
[MCTX_BUMP_ID].check = BumpCheck,
|
163
|
+
#endif
|
164
|
+
|
147
165
|
|
148
166
|
/*
|
149
|
-
*
|
150
|
-
* fail cleanly if a bogus pointer is passed to pfree or the like. It
|
167
|
+
* Reserved and unused IDs should have dummy entries here. This allows us
|
168
|
+
* to fail cleanly if a bogus pointer is passed to pfree or the like. It
|
151
169
|
* seems sufficient to provide routines for the methods that might get
|
152
170
|
* invoked from inspection of a chunk (see MCXT_METHOD calls below).
|
153
171
|
*/
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
[MCTX_UNUSED3_ID].free_p = BogusFree,
|
166
|
-
[MCTX_UNUSED3_ID].realloc = BogusRealloc,
|
167
|
-
[MCTX_UNUSED3_ID].get_chunk_context = BogusGetChunkContext,
|
168
|
-
[MCTX_UNUSED3_ID].get_chunk_space = BogusGetChunkSpace,
|
169
|
-
|
170
|
-
[MCTX_UNUSED4_ID].free_p = BogusFree,
|
171
|
-
[MCTX_UNUSED4_ID].realloc = BogusRealloc,
|
172
|
-
[MCTX_UNUSED4_ID].get_chunk_context = BogusGetChunkContext,
|
173
|
-
[MCTX_UNUSED4_ID].get_chunk_space = BogusGetChunkSpace,
|
172
|
+
BOGUS_MCTX(MCTX_1_RESERVED_GLIBC_ID),
|
173
|
+
BOGUS_MCTX(MCTX_2_RESERVED_GLIBC_ID),
|
174
|
+
BOGUS_MCTX(MCTX_8_UNUSED_ID),
|
175
|
+
BOGUS_MCTX(MCTX_9_UNUSED_ID),
|
176
|
+
BOGUS_MCTX(MCTX_10_UNUSED_ID),
|
177
|
+
BOGUS_MCTX(MCTX_11_UNUSED_ID),
|
178
|
+
BOGUS_MCTX(MCTX_12_UNUSED_ID),
|
179
|
+
BOGUS_MCTX(MCTX_13_UNUSED_ID),
|
180
|
+
BOGUS_MCTX(MCTX_14_UNUSED_ID),
|
181
|
+
BOGUS_MCTX(MCTX_0_RESERVED_UNUSEDMEM_ID),
|
182
|
+
BOGUS_MCTX(MCTX_15_RESERVED_WIPEDMEM_ID)
|
174
183
|
};
|
175
184
|
|
185
|
+
#undef BOGUS_MCTX
|
186
|
+
|
176
187
|
/*
|
177
188
|
* CurrentMemoryContext
|
178
189
|
* Default memory context for allocations.
|
@@ -197,9 +208,10 @@ __thread MemoryContext ErrorContext = NULL;
|
|
197
208
|
/* This is a transient link to the active portal's memory context: */
|
198
209
|
|
199
210
|
|
211
|
+
static void MemoryContextDeleteOnly(MemoryContext context);
|
200
212
|
static void MemoryContextCallResetCallbacks(MemoryContext context);
|
201
213
|
static void MemoryContextStatsInternal(MemoryContext context, int level,
|
202
|
-
|
214
|
+
int max_level, int max_children,
|
203
215
|
MemoryContextCounters *totals,
|
204
216
|
bool print_to_stderr);
|
205
217
|
static void MemoryContextStatsPrint(MemoryContext context, void *passthru,
|
@@ -271,6 +283,50 @@ GetMemoryChunkHeader(const void *pointer)
|
|
271
283
|
return header;
|
272
284
|
}
|
273
285
|
|
286
|
+
/*
|
287
|
+
* MemoryContextTraverseNext
|
288
|
+
* Helper function to traverse all descendants of a memory context
|
289
|
+
* without recursion.
|
290
|
+
*
|
291
|
+
* Recursion could lead to out-of-stack errors with deep context hierarchies,
|
292
|
+
* which would be unpleasant in error cleanup code paths.
|
293
|
+
*
|
294
|
+
* To process 'context' and all its descendants, use a loop like this:
|
295
|
+
*
|
296
|
+
* <process 'context'>
|
297
|
+
* for (MemoryContext curr = context->firstchild;
|
298
|
+
* curr != NULL;
|
299
|
+
* curr = MemoryContextTraverseNext(curr, context))
|
300
|
+
* {
|
301
|
+
* <process 'curr'>
|
302
|
+
* }
|
303
|
+
*
|
304
|
+
* This visits all the contexts in pre-order, that is a node is visited
|
305
|
+
* before its children.
|
306
|
+
*/
|
307
|
+
static MemoryContext
|
308
|
+
MemoryContextTraverseNext(MemoryContext curr, MemoryContext top)
|
309
|
+
{
|
310
|
+
/* After processing a node, traverse to its first child if any */
|
311
|
+
if (curr->firstchild != NULL)
|
312
|
+
return curr->firstchild;
|
313
|
+
|
314
|
+
/*
|
315
|
+
* After processing a childless node, traverse to its next sibling if
|
316
|
+
* there is one. If there isn't, traverse back up to the parent (which
|
317
|
+
* has already been visited, and now so have all its descendants). We're
|
318
|
+
* done if that is "top", otherwise traverse to its next sibling if any,
|
319
|
+
* otherwise repeat moving up.
|
320
|
+
*/
|
321
|
+
while (curr->nextchild == NULL)
|
322
|
+
{
|
323
|
+
curr = curr->parent;
|
324
|
+
if (curr == top)
|
325
|
+
return NULL;
|
326
|
+
}
|
327
|
+
return curr->nextchild;
|
328
|
+
}
|
329
|
+
|
274
330
|
/*
|
275
331
|
* Support routines to trap use of invalid memory context method IDs
|
276
332
|
* (from calling pfree or the like on a bogus pointer). As a possible
|
@@ -285,7 +341,7 @@ BogusFree(void *pointer)
|
|
285
341
|
}
|
286
342
|
|
287
343
|
static void *
|
288
|
-
BogusRealloc(void *pointer, Size size)
|
344
|
+
BogusRealloc(void *pointer, Size size, int flags)
|
289
345
|
{
|
290
346
|
elog(ERROR, "repalloc called with invalid pointer %p (header 0x%016llx)",
|
291
347
|
pointer, (unsigned long long) GetMemoryChunkHeader(pointer));
|
@@ -432,21 +488,60 @@ MemoryContextResetOnly(MemoryContext context)
|
|
432
488
|
* allocated therein.
|
433
489
|
*
|
434
490
|
* The type-specific delete routine removes all storage for the context,
|
435
|
-
* but we have to
|
436
|
-
* We must also delink the context from its parent, if it has one.
|
491
|
+
* but we have to deal with descendant nodes here.
|
437
492
|
*/
|
438
493
|
void
|
439
494
|
MemoryContextDelete(MemoryContext context)
|
495
|
+
{
|
496
|
+
MemoryContext curr;
|
497
|
+
|
498
|
+
Assert(MemoryContextIsValid(context));
|
499
|
+
|
500
|
+
/*
|
501
|
+
* Delete subcontexts from the bottom up.
|
502
|
+
*
|
503
|
+
* Note: Do not use recursion here. A "stack depth limit exceeded" error
|
504
|
+
* would be unpleasant if we're already in the process of cleaning up from
|
505
|
+
* transaction abort. We also cannot use MemoryContextTraverseNext() here
|
506
|
+
* because we modify the tree as we go.
|
507
|
+
*/
|
508
|
+
curr = context;
|
509
|
+
for (;;)
|
510
|
+
{
|
511
|
+
MemoryContext parent;
|
512
|
+
|
513
|
+
/* Descend down until we find a leaf context with no children */
|
514
|
+
while (curr->firstchild != NULL)
|
515
|
+
curr = curr->firstchild;
|
516
|
+
|
517
|
+
/*
|
518
|
+
* We're now at a leaf with no children. Free it and continue from the
|
519
|
+
* parent. Or if this was the original node, we're all done.
|
520
|
+
*/
|
521
|
+
parent = curr->parent;
|
522
|
+
MemoryContextDeleteOnly(curr);
|
523
|
+
|
524
|
+
if (curr == context)
|
525
|
+
break;
|
526
|
+
curr = parent;
|
527
|
+
}
|
528
|
+
}
|
529
|
+
|
530
|
+
/*
|
531
|
+
* Subroutine of MemoryContextDelete,
|
532
|
+
* to delete a context that has no children.
|
533
|
+
* We must also delink the context from its parent, if it has one.
|
534
|
+
*/
|
535
|
+
static void
|
536
|
+
MemoryContextDeleteOnly(MemoryContext context)
|
440
537
|
{
|
441
538
|
Assert(MemoryContextIsValid(context));
|
442
539
|
/* We had better not be deleting TopMemoryContext ... */
|
443
540
|
Assert(context != TopMemoryContext);
|
444
541
|
/* And not CurrentMemoryContext, either */
|
445
542
|
Assert(context != CurrentMemoryContext);
|
446
|
-
|
447
|
-
|
448
|
-
if (context->firstchild != NULL)
|
449
|
-
MemoryContextDeleteChildren(context);
|
543
|
+
/* All the children should've been deleted already */
|
544
|
+
Assert(context->firstchild == NULL);
|
450
545
|
|
451
546
|
/*
|
452
547
|
* It's not entirely clear whether 'tis better to do this before or after
|
@@ -670,6 +765,12 @@ GetMemoryChunkSpace(void *pointer)
|
|
670
765
|
*/
|
671
766
|
|
672
767
|
|
768
|
+
/*
|
769
|
+
* Return the memory consumption statistics about the given context and its
|
770
|
+
* children.
|
771
|
+
*/
|
772
|
+
|
773
|
+
|
673
774
|
/*
|
674
775
|
* MemoryContextStats
|
675
776
|
* Print statistics about the named context and all its descendants.
|
@@ -681,8 +782,8 @@ GetMemoryChunkSpace(void *pointer)
|
|
681
782
|
void
|
682
783
|
MemoryContextStats(MemoryContext context)
|
683
784
|
{
|
684
|
-
/*
|
685
|
-
MemoryContextStatsDetail(context, 100, true);
|
785
|
+
/* Hard-wired limits are usually good enough */
|
786
|
+
MemoryContextStatsDetail(context, 100, 100, true);
|
686
787
|
}
|
687
788
|
|
688
789
|
/*
|
@@ -694,14 +795,16 @@ MemoryContextStats(MemoryContext context)
|
|
694
795
|
* with fprintf(stderr), otherwise use ereport().
|
695
796
|
*/
|
696
797
|
void
|
697
|
-
MemoryContextStatsDetail(MemoryContext context,
|
798
|
+
MemoryContextStatsDetail(MemoryContext context,
|
799
|
+
int max_level, int max_children,
|
698
800
|
bool print_to_stderr)
|
699
801
|
{
|
700
802
|
MemoryContextCounters grand_totals;
|
701
803
|
|
702
804
|
memset(&grand_totals, 0, sizeof(grand_totals));
|
703
805
|
|
704
|
-
MemoryContextStatsInternal(context, 0,
|
806
|
+
MemoryContextStatsInternal(context, 0, max_level, max_children,
|
807
|
+
&grand_totals, print_to_stderr);
|
705
808
|
|
706
809
|
if (print_to_stderr)
|
707
810
|
fprintf(stderr,
|
@@ -710,7 +813,7 @@ MemoryContextStatsDetail(MemoryContext context, int max_children,
|
|
710
813
|
grand_totals.freespace, grand_totals.freechunks,
|
711
814
|
grand_totals.totalspace - grand_totals.freespace);
|
712
815
|
else
|
713
|
-
|
816
|
+
{
|
714
817
|
/*
|
715
818
|
* Use LOG_SERVER_ONLY to prevent the memory contexts from being sent
|
716
819
|
* to the connected client.
|
@@ -728,22 +831,22 @@ MemoryContextStatsDetail(MemoryContext context, int max_children,
|
|
728
831
|
grand_totals.totalspace, grand_totals.nblocks,
|
729
832
|
grand_totals.freespace, grand_totals.freechunks,
|
730
833
|
grand_totals.totalspace - grand_totals.freespace)));
|
834
|
+
}
|
731
835
|
}
|
732
836
|
|
733
837
|
/*
|
734
838
|
* MemoryContextStatsInternal
|
735
839
|
* One recursion level for MemoryContextStats
|
736
840
|
*
|
737
|
-
* Print this context if
|
738
|
-
* *totals (if
|
841
|
+
* Print stats for this context if possible, but in any case accumulate counts
|
842
|
+
* into *totals (if not NULL).
|
739
843
|
*/
|
740
844
|
static void
|
741
845
|
MemoryContextStatsInternal(MemoryContext context, int level,
|
742
|
-
|
846
|
+
int max_level, int max_children,
|
743
847
|
MemoryContextCounters *totals,
|
744
848
|
bool print_to_stderr)
|
745
849
|
{
|
746
|
-
MemoryContextCounters local_totals;
|
747
850
|
MemoryContext child;
|
748
851
|
int ichild;
|
749
852
|
|
@@ -751,66 +854,73 @@ MemoryContextStatsInternal(MemoryContext context, int level,
|
|
751
854
|
|
752
855
|
/* Examine the context itself */
|
753
856
|
context->methods->stats(context,
|
754
|
-
|
857
|
+
MemoryContextStatsPrint,
|
755
858
|
(void *) &level,
|
756
859
|
totals, print_to_stderr);
|
757
860
|
|
758
861
|
/*
|
759
|
-
* Examine children.
|
760
|
-
*
|
862
|
+
* Examine children.
|
863
|
+
*
|
864
|
+
* If we are past the recursion depth limit or already running low on
|
865
|
+
* stack, do not print them explicitly but just summarize them. Similarly,
|
866
|
+
* if there are more than max_children of them, we do not print the rest
|
867
|
+
* explicitly, but just summarize them.
|
761
868
|
*/
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
child != NULL;
|
766
|
-
child = child->nextchild, ichild++)
|
869
|
+
child = context->firstchild;
|
870
|
+
ichild = 0;
|
871
|
+
if (level < max_level && !stack_is_too_deep())
|
767
872
|
{
|
768
|
-
|
873
|
+
for (; child != NULL && ichild < max_children;
|
874
|
+
child = child->nextchild, ichild++)
|
875
|
+
{
|
769
876
|
MemoryContextStatsInternal(child, level + 1,
|
770
|
-
|
877
|
+
max_level, max_children,
|
771
878
|
totals,
|
772
879
|
print_to_stderr);
|
773
|
-
|
774
|
-
MemoryContextStatsInternal(child, level + 1,
|
775
|
-
false, max_children,
|
776
|
-
&local_totals,
|
777
|
-
print_to_stderr);
|
880
|
+
}
|
778
881
|
}
|
779
882
|
|
780
|
-
|
781
|
-
if (ichild > max_children)
|
883
|
+
if (child != NULL)
|
782
884
|
{
|
783
|
-
|
885
|
+
/* Summarize the rest of the children, avoiding recursion. */
|
886
|
+
MemoryContextCounters local_totals;
|
887
|
+
|
888
|
+
memset(&local_totals, 0, sizeof(local_totals));
|
889
|
+
|
890
|
+
ichild = 0;
|
891
|
+
while (child != NULL)
|
784
892
|
{
|
785
|
-
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
for (i = 0; i <= level; i++)
|
790
|
-
fprintf(stderr, " ");
|
791
|
-
fprintf(stderr,
|
792
|
-
"%d more child contexts containing %zu total in %zu blocks; %zu free (%zu chunks); %zu used\n",
|
793
|
-
ichild - max_children,
|
794
|
-
local_totals.totalspace,
|
795
|
-
local_totals.nblocks,
|
796
|
-
local_totals.freespace,
|
797
|
-
local_totals.freechunks,
|
798
|
-
local_totals.totalspace - local_totals.freespace);
|
799
|
-
}
|
800
|
-
else
|
801
|
-
ereport(LOG_SERVER_ONLY,
|
802
|
-
(errhidestmt(true),
|
803
|
-
errhidecontext(true),
|
804
|
-
errmsg_internal("level: %d; %d more child contexts containing %zu total in %zu blocks; %zu free (%zu chunks); %zu used",
|
805
|
-
level,
|
806
|
-
ichild - max_children,
|
807
|
-
local_totals.totalspace,
|
808
|
-
local_totals.nblocks,
|
809
|
-
local_totals.freespace,
|
810
|
-
local_totals.freechunks,
|
811
|
-
local_totals.totalspace - local_totals.freespace)));
|
893
|
+
child->methods->stats(child, NULL, NULL, &local_totals, false);
|
894
|
+
ichild++;
|
895
|
+
child = MemoryContextTraverseNext(child, context);
|
812
896
|
}
|
813
897
|
|
898
|
+
if (print_to_stderr)
|
899
|
+
{
|
900
|
+
for (int i = 0; i <= level; i++)
|
901
|
+
fprintf(stderr, " ");
|
902
|
+
fprintf(stderr,
|
903
|
+
"%d more child contexts containing %zu total in %zu blocks; %zu free (%zu chunks); %zu used\n",
|
904
|
+
ichild,
|
905
|
+
local_totals.totalspace,
|
906
|
+
local_totals.nblocks,
|
907
|
+
local_totals.freespace,
|
908
|
+
local_totals.freechunks,
|
909
|
+
local_totals.totalspace - local_totals.freespace);
|
910
|
+
}
|
911
|
+
else
|
912
|
+
ereport(LOG_SERVER_ONLY,
|
913
|
+
(errhidestmt(true),
|
914
|
+
errhidecontext(true),
|
915
|
+
errmsg_internal("level: %d; %d more child contexts containing %zu total in %zu blocks; %zu free (%zu chunks); %zu used",
|
916
|
+
level,
|
917
|
+
ichild,
|
918
|
+
local_totals.totalspace,
|
919
|
+
local_totals.nblocks,
|
920
|
+
local_totals.freespace,
|
921
|
+
local_totals.freechunks,
|
922
|
+
local_totals.totalspace - local_totals.freespace)));
|
923
|
+
|
814
924
|
if (totals)
|
815
925
|
{
|
816
926
|
totals->nblocks += local_totals.nblocks;
|
@@ -902,7 +1012,7 @@ MemoryContextStatsPrint(MemoryContext context, void *passthru,
|
|
902
1012
|
|
903
1013
|
/*
|
904
1014
|
* MemoryContextCheck
|
905
|
-
* Check all chunks in the named context.
|
1015
|
+
* Check all chunks in the named context and its children.
|
906
1016
|
*
|
907
1017
|
* This is just a debugging utility, so it's not fancy.
|
908
1018
|
*/
|
@@ -984,120 +1094,93 @@ MemoryContextCreate(MemoryContext node,
|
|
984
1094
|
}
|
985
1095
|
|
986
1096
|
/*
|
987
|
-
*
|
988
|
-
*
|
989
|
-
*
|
990
|
-
*
|
991
|
-
* nodes/memnodes.h into postgres.h which seems a bad idea.
|
1097
|
+
* MemoryContextAllocationFailure
|
1098
|
+
* For use by MemoryContextMethods implementations to handle when malloc
|
1099
|
+
* returns NULL. The behavior is specific to whether MCXT_ALLOC_NO_OOM
|
1100
|
+
* is in 'flags'.
|
992
1101
|
*/
|
993
1102
|
void *
|
994
|
-
|
1103
|
+
MemoryContextAllocationFailure(MemoryContext context, Size size, int flags)
|
995
1104
|
{
|
996
|
-
|
997
|
-
|
998
|
-
Assert(MemoryContextIsValid(context));
|
999
|
-
AssertNotInCriticalSection(context);
|
1000
|
-
|
1001
|
-
if (!AllocSizeIsValid(size))
|
1002
|
-
elog(ERROR, "invalid memory alloc request size %zu", size);
|
1003
|
-
|
1004
|
-
context->isReset = false;
|
1005
|
-
|
1006
|
-
ret = context->methods->alloc(context, size);
|
1007
|
-
if (unlikely(ret == NULL))
|
1105
|
+
if ((flags & MCXT_ALLOC_NO_OOM) == 0)
|
1008
1106
|
{
|
1009
1107
|
MemoryContextStats(TopMemoryContext);
|
1010
|
-
|
1011
|
-
/*
|
1012
|
-
* Here, and elsewhere in this module, we show the target context's
|
1013
|
-
* "name" but not its "ident" (if any) in user-visible error messages.
|
1014
|
-
* The "ident" string might contain security-sensitive data, such as
|
1015
|
-
* values in SQL commands.
|
1016
|
-
*/
|
1017
1108
|
ereport(ERROR,
|
1018
1109
|
(errcode(ERRCODE_OUT_OF_MEMORY),
|
1019
1110
|
errmsg("out of memory"),
|
1020
1111
|
errdetail("Failed on request of size %zu in memory context \"%s\".",
|
1021
1112
|
size, context->name)));
|
1022
1113
|
}
|
1114
|
+
return NULL;
|
1115
|
+
}
|
1023
1116
|
|
1024
|
-
|
1025
|
-
|
1026
|
-
|
1117
|
+
/*
|
1118
|
+
* MemoryContextSizeFailure
|
1119
|
+
* For use by MemoryContextMethods implementations to handle invalid
|
1120
|
+
* memory allocation request sizes.
|
1121
|
+
*/
|
1122
|
+
void
|
1123
|
+
MemoryContextSizeFailure(MemoryContext context, Size size, int flags)
|
1124
|
+
{
|
1125
|
+
elog(ERROR, "invalid memory alloc request size %zu", size);
|
1027
1126
|
}
|
1028
1127
|
|
1029
1128
|
/*
|
1030
|
-
*
|
1031
|
-
*
|
1129
|
+
* MemoryContextAlloc
|
1130
|
+
* Allocate space within the specified context.
|
1032
1131
|
*
|
1033
|
-
*
|
1034
|
-
*
|
1132
|
+
* This could be turned into a macro, but we'd have to import
|
1133
|
+
* nodes/memnodes.h into postgres.h which seems a bad idea.
|
1035
1134
|
*/
|
1036
1135
|
void *
|
1037
|
-
|
1136
|
+
MemoryContextAlloc(MemoryContext context, Size size)
|
1038
1137
|
{
|
1039
1138
|
void *ret;
|
1040
1139
|
|
1041
1140
|
Assert(MemoryContextIsValid(context));
|
1042
1141
|
AssertNotInCriticalSection(context);
|
1043
1142
|
|
1044
|
-
if (!AllocSizeIsValid(size))
|
1045
|
-
elog(ERROR, "invalid memory alloc request size %zu", size);
|
1046
|
-
|
1047
1143
|
context->isReset = false;
|
1048
1144
|
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
1055
|
-
|
1056
|
-
|
1057
|
-
|
1058
|
-
|
1145
|
+
/*
|
1146
|
+
* For efficiency reasons, we purposefully offload the handling of
|
1147
|
+
* allocation failures to the MemoryContextMethods implementation as this
|
1148
|
+
* allows these checks to be performed only when an actual malloc needs to
|
1149
|
+
* be done to request more memory from the OS. Additionally, not having
|
1150
|
+
* to execute any instructions after this call allows the compiler to use
|
1151
|
+
* the sibling call optimization. If you're considering adding code after
|
1152
|
+
* this call, consider making it the responsibility of the 'alloc'
|
1153
|
+
* function instead.
|
1154
|
+
*/
|
1155
|
+
ret = context->methods->alloc(context, size, 0);
|
1059
1156
|
|
1060
1157
|
VALGRIND_MEMPOOL_ALLOC(context, ret, size);
|
1061
1158
|
|
1062
|
-
MemSetAligned(ret, 0, size);
|
1063
|
-
|
1064
1159
|
return ret;
|
1065
1160
|
}
|
1066
1161
|
|
1067
1162
|
/*
|
1068
|
-
*
|
1069
|
-
*
|
1163
|
+
* MemoryContextAllocZero
|
1164
|
+
* Like MemoryContextAlloc, but clears allocated memory
|
1070
1165
|
*
|
1071
|
-
*
|
1072
|
-
* is so
|
1166
|
+
* We could just call MemoryContextAlloc then clear the memory, but this
|
1167
|
+
* is a very common combination, so we provide the combined operation.
|
1073
1168
|
*/
|
1074
1169
|
void *
|
1075
|
-
|
1170
|
+
MemoryContextAllocZero(MemoryContext context, Size size)
|
1076
1171
|
{
|
1077
1172
|
void *ret;
|
1078
1173
|
|
1079
1174
|
Assert(MemoryContextIsValid(context));
|
1080
1175
|
AssertNotInCriticalSection(context);
|
1081
1176
|
|
1082
|
-
if (!AllocSizeIsValid(size))
|
1083
|
-
elog(ERROR, "invalid memory alloc request size %zu", size);
|
1084
|
-
|
1085
1177
|
context->isReset = false;
|
1086
1178
|
|
1087
|
-
ret = context->methods->alloc(context, size);
|
1088
|
-
if (unlikely(ret == NULL))
|
1089
|
-
{
|
1090
|
-
MemoryContextStats(TopMemoryContext);
|
1091
|
-
ereport(ERROR,
|
1092
|
-
(errcode(ERRCODE_OUT_OF_MEMORY),
|
1093
|
-
errmsg("out of memory"),
|
1094
|
-
errdetail("Failed on request of size %zu in memory context \"%s\".",
|
1095
|
-
size, context->name)));
|
1096
|
-
}
|
1179
|
+
ret = context->methods->alloc(context, size, 0);
|
1097
1180
|
|
1098
1181
|
VALGRIND_MEMPOOL_ALLOC(context, ret, size);
|
1099
1182
|
|
1100
|
-
|
1183
|
+
MemSetAligned(ret, 0, size);
|
1101
1184
|
|
1102
1185
|
return ret;
|
1103
1186
|
}
|
@@ -1120,20 +1203,9 @@ MemoryContextAllocExtended(MemoryContext context, Size size, int flags)
|
|
1120
1203
|
|
1121
1204
|
context->isReset = false;
|
1122
1205
|
|
1123
|
-
ret = context->methods->alloc(context, size);
|
1206
|
+
ret = context->methods->alloc(context, size, flags);
|
1124
1207
|
if (unlikely(ret == NULL))
|
1125
|
-
{
|
1126
|
-
if ((flags & MCXT_ALLOC_NO_OOM) == 0)
|
1127
|
-
{
|
1128
|
-
MemoryContextStats(TopMemoryContext);
|
1129
|
-
ereport(ERROR,
|
1130
|
-
(errcode(ERRCODE_OUT_OF_MEMORY),
|
1131
|
-
errmsg("out of memory"),
|
1132
|
-
errdetail("Failed on request of size %zu in memory context \"%s\".",
|
1133
|
-
size, context->name)));
|
1134
|
-
}
|
1135
1208
|
return NULL;
|
1136
|
-
}
|
1137
1209
|
|
1138
1210
|
VALGRIND_MEMPOOL_ALLOC(context, ret, size);
|
1139
1211
|
|
@@ -1174,22 +1246,21 @@ palloc(Size size)
|
|
1174
1246
|
Assert(MemoryContextIsValid(context));
|
1175
1247
|
AssertNotInCriticalSection(context);
|
1176
1248
|
|
1177
|
-
if (!AllocSizeIsValid(size))
|
1178
|
-
elog(ERROR, "invalid memory alloc request size %zu", size);
|
1179
|
-
|
1180
1249
|
context->isReset = false;
|
1181
1250
|
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
|
1186
|
-
|
1187
|
-
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1251
|
+
/*
|
1252
|
+
* For efficiency reasons, we purposefully offload the handling of
|
1253
|
+
* allocation failures to the MemoryContextMethods implementation as this
|
1254
|
+
* allows these checks to be performed only when an actual malloc needs to
|
1255
|
+
* be done to request more memory from the OS. Additionally, not having
|
1256
|
+
* to execute any instructions after this call allows the compiler to use
|
1257
|
+
* the sibling call optimization. If you're considering adding code after
|
1258
|
+
* this call, consider making it the responsibility of the 'alloc'
|
1259
|
+
* function instead.
|
1260
|
+
*/
|
1261
|
+
ret = context->methods->alloc(context, size, 0);
|
1262
|
+
/* We expect OOM to be handled by the alloc function */
|
1263
|
+
Assert(ret != NULL);
|
1193
1264
|
VALGRIND_MEMPOOL_ALLOC(context, ret, size);
|
1194
1265
|
|
1195
1266
|
return ret;
|
@@ -1205,21 +1276,9 @@ palloc0(Size size)
|
|
1205
1276
|
Assert(MemoryContextIsValid(context));
|
1206
1277
|
AssertNotInCriticalSection(context);
|
1207
1278
|
|
1208
|
-
if (!AllocSizeIsValid(size))
|
1209
|
-
elog(ERROR, "invalid memory alloc request size %zu", size);
|
1210
|
-
|
1211
1279
|
context->isReset = false;
|
1212
1280
|
|
1213
|
-
ret = context->methods->alloc(context, size);
|
1214
|
-
if (unlikely(ret == NULL))
|
1215
|
-
{
|
1216
|
-
MemoryContextStats(TopMemoryContext);
|
1217
|
-
ereport(ERROR,
|
1218
|
-
(errcode(ERRCODE_OUT_OF_MEMORY),
|
1219
|
-
errmsg("out of memory"),
|
1220
|
-
errdetail("Failed on request of size %zu in memory context \"%s\".",
|
1221
|
-
size, context->name)));
|
1222
|
-
}
|
1281
|
+
ret = context->methods->alloc(context, size, 0);
|
1223
1282
|
|
1224
1283
|
VALGRIND_MEMPOOL_ALLOC(context, ret, size);
|
1225
1284
|
|
@@ -1384,26 +1443,22 @@ repalloc(void *pointer, Size size)
|
|
1384
1443
|
#endif
|
1385
1444
|
void *ret;
|
1386
1445
|
|
1387
|
-
if (!AllocSizeIsValid(size))
|
1388
|
-
elog(ERROR, "invalid memory alloc request size %zu", size);
|
1389
|
-
|
1390
1446
|
AssertNotInCriticalSection(context);
|
1391
1447
|
|
1392
1448
|
/* isReset must be false already */
|
1393
1449
|
Assert(!context->isReset);
|
1394
1450
|
|
1395
|
-
|
1396
|
-
|
1397
|
-
|
1398
|
-
|
1399
|
-
|
1400
|
-
|
1401
|
-
|
1402
|
-
|
1403
|
-
|
1404
|
-
|
1405
|
-
|
1406
|
-
}
|
1451
|
+
/*
|
1452
|
+
* For efficiency reasons, we purposefully offload the handling of
|
1453
|
+
* allocation failures to the MemoryContextMethods implementation as this
|
1454
|
+
* allows these checks to be performed only when an actual malloc needs to
|
1455
|
+
* be done to request more memory from the OS. Additionally, not having
|
1456
|
+
* to execute any instructions after this call allows the compiler to use
|
1457
|
+
* the sibling call optimization. If you're considering adding code after
|
1458
|
+
* this call, consider making it the responsibility of the 'realloc'
|
1459
|
+
* function instead.
|
1460
|
+
*/
|
1461
|
+
ret = MCXT_METHOD(pointer, realloc) (pointer, size, 0);
|
1407
1462
|
|
1408
1463
|
#ifdef USE_VALGRIND
|
1409
1464
|
if (method != MCTX_ALIGNED_REDIRECT_ID)
|