pg_query 4.2.3 → 5.0.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 +6 -0
- data/README.md +6 -8
- data/Rakefile +3 -3
- data/ext/pg_query/extconf.rb +1 -3
- data/ext/pg_query/include/access/amapi.h +3 -1
- data/ext/pg_query/include/access/attmap.h +5 -3
- data/ext/pg_query/include/access/attnum.h +1 -1
- data/ext/pg_query/include/access/clog.h +1 -1
- data/ext/pg_query/include/access/commit_ts.h +1 -1
- data/ext/pg_query/include/access/detoast.h +1 -1
- data/ext/pg_query/include/access/genam.h +7 -5
- data/ext/pg_query/include/access/gin.h +16 -3
- data/ext/pg_query/include/access/htup.h +1 -1
- data/ext/pg_query/include/access/htup_details.h +6 -2
- data/ext/pg_query/include/access/itup.h +61 -58
- data/ext/pg_query/include/access/parallel.h +2 -2
- data/ext/pg_query/include/access/printtup.h +1 -1
- data/ext/pg_query/include/access/relation.h +1 -1
- data/ext/pg_query/include/access/relscan.h +1 -1
- data/ext/pg_query/include/access/rmgrlist.h +2 -2
- data/ext/pg_query/include/access/sdir.h +12 -3
- data/ext/pg_query/include/access/skey.h +1 -1
- data/ext/pg_query/include/access/stratnum.h +1 -1
- data/ext/pg_query/include/access/sysattr.h +1 -1
- data/ext/pg_query/include/access/table.h +1 -1
- data/ext/pg_query/include/access/tableam.h +68 -45
- data/ext/pg_query/include/access/toast_compression.h +1 -1
- data/ext/pg_query/include/access/transam.h +1 -1
- data/ext/pg_query/include/access/tsmapi.h +82 -0
- data/ext/pg_query/include/access/tupconvert.h +5 -2
- data/ext/pg_query/include/access/tupdesc.h +2 -2
- data/ext/pg_query/include/access/tupmacs.h +58 -98
- data/ext/pg_query/include/access/twophase.h +2 -2
- data/ext/pg_query/include/access/xact.h +25 -18
- data/ext/pg_query/include/access/xlog.h +15 -16
- data/ext/pg_query/include/access/xlog_internal.h +100 -62
- data/ext/pg_query/include/access/xlogbackup.h +41 -0
- data/ext/pg_query/include/access/xlogdefs.h +6 -25
- data/ext/pg_query/include/access/xlogprefetcher.h +1 -1
- data/ext/pg_query/include/access/xlogreader.h +7 -6
- data/ext/pg_query/include/access/xlogrecord.h +17 -5
- data/ext/pg_query/include/access/xlogrecovery.h +4 -3
- data/ext/pg_query/include/archive/archive_module.h +59 -0
- data/ext/pg_query/include/c.h +144 -156
- data/ext/pg_query/include/catalog/catalog.h +4 -3
- data/ext/pg_query/include/catalog/catversion.h +6 -2
- data/ext/pg_query/include/catalog/dependency.h +5 -4
- data/ext/pg_query/include/catalog/genbki.h +7 -6
- data/ext/pg_query/include/catalog/index.h +4 -4
- data/ext/pg_query/include/catalog/indexing.h +1 -1
- data/ext/pg_query/include/catalog/namespace.h +2 -2
- data/ext/pg_query/include/catalog/objectaccess.h +10 -8
- data/ext/pg_query/include/catalog/objectaddress.h +3 -3
- data/ext/pg_query/include/catalog/pg_aggregate.h +1 -1
- data/ext/pg_query/include/catalog/pg_aggregate_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_am.h +1 -1
- data/ext/pg_query/include/catalog/pg_am_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_attribute.h +19 -17
- data/ext/pg_query/include/catalog/pg_attribute_d.h +19 -19
- data/ext/pg_query/include/catalog/pg_authid.h +1 -1
- data/ext/pg_query/include/catalog/pg_authid_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_class.h +1 -1
- data/ext/pg_query/include/catalog/pg_class_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_collation.h +3 -1
- data/ext/pg_query/include/catalog/pg_collation_d.h +4 -3
- data/ext/pg_query/include/catalog/pg_constraint.h +2 -2
- data/ext/pg_query/include/catalog/pg_constraint_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_control.h +9 -1
- data/ext/pg_query/include/catalog/pg_conversion.h +2 -2
- data/ext/pg_query/include/catalog/pg_conversion_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_database.h +124 -0
- data/ext/pg_query/include/catalog/pg_database_d.h +52 -0
- data/ext/pg_query/include/catalog/pg_depend.h +1 -1
- data/ext/pg_query/include/catalog/pg_depend_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_event_trigger.h +1 -1
- data/ext/pg_query/include/catalog/pg_event_trigger_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_index.h +1 -1
- data/ext/pg_query/include/catalog/pg_index_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_language.h +1 -1
- data/ext/pg_query/include/catalog/pg_language_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_namespace.h +1 -1
- data/ext/pg_query/include/catalog/pg_namespace_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_opclass.h +1 -1
- data/ext/pg_query/include/catalog/pg_opclass_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_operator.h +1 -1
- data/ext/pg_query/include/catalog/pg_operator_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_opfamily.h +3 -2
- data/ext/pg_query/include/catalog/pg_opfamily_d.h +4 -2
- data/ext/pg_query/include/catalog/pg_partitioned_table.h +1 -1
- data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_proc.h +1 -1
- data/ext/pg_query/include/catalog/pg_proc_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_publication.h +2 -5
- data/ext/pg_query/include/catalog/pg_publication_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_replication_origin.h +1 -1
- data/ext/pg_query/include/catalog/pg_replication_origin_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_statistic.h +1 -1
- data/ext/pg_query/include/catalog/pg_statistic_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_statistic_ext.h +1 -1
- data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_transform.h +1 -1
- data/ext/pg_query/include/catalog/pg_transform_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_trigger.h +1 -1
- data/ext/pg_query/include/catalog/pg_trigger_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_config.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_config_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_dict.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_dict_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_parser.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_parser_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_template.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_template_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_type.h +1 -1
- data/ext/pg_query/include/catalog/pg_type_d.h +1 -1
- data/ext/pg_query/include/catalog/storage.h +6 -6
- data/ext/pg_query/include/commands/async.h +1 -1
- data/ext/pg_query/include/commands/dbcommands.h +2 -1
- data/ext/pg_query/include/commands/defrem.h +2 -1
- data/ext/pg_query/include/commands/event_trigger.h +1 -1
- data/ext/pg_query/include/commands/explain.h +3 -1
- data/ext/pg_query/include/commands/prepare.h +1 -1
- data/ext/pg_query/include/commands/tablespace.h +4 -4
- data/ext/pg_query/include/commands/trigger.h +15 -14
- data/ext/pg_query/include/commands/user.h +9 -3
- data/ext/pg_query/include/commands/vacuum.h +60 -14
- data/ext/pg_query/include/common/cryptohash.h +39 -0
- data/ext/pg_query/include/common/file_perm.h +1 -1
- data/ext/pg_query/include/common/hashfn.h +1 -1
- data/ext/pg_query/include/common/int.h +437 -0
- data/ext/pg_query/include/common/ip.h +4 -2
- data/ext/pg_query/include/common/keywords.h +1 -1
- data/ext/pg_query/include/common/kwlookup.h +2 -2
- data/ext/pg_query/include/common/pg_prng.h +3 -2
- data/ext/pg_query/include/common/relpath.h +20 -13
- data/ext/pg_query/include/common/scram-common.h +70 -0
- data/ext/pg_query/include/common/sha2.h +32 -0
- data/ext/pg_query/include/common/string.h +5 -3
- data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +10 -10
- data/ext/pg_query/include/common/{unicode_combining_table.h → unicode_nonspacing_table.h} +31 -13
- data/ext/pg_query/include/copyfuncs.funcs.c +5013 -0
- data/ext/pg_query/include/copyfuncs.switch.c +938 -0
- data/ext/pg_query/include/datatype/timestamp.h +11 -4
- data/ext/pg_query/include/equalfuncs.funcs.c +3097 -0
- data/ext/pg_query/include/equalfuncs.switch.c +785 -0
- data/ext/pg_query/include/executor/execdesc.h +1 -1
- data/ext/pg_query/include/executor/executor.h +34 -17
- data/ext/pg_query/include/executor/functions.h +1 -1
- data/ext/pg_query/include/executor/instrument.h +1 -1
- data/ext/pg_query/include/executor/spi.h +2 -2
- data/ext/pg_query/include/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/executor/tuptable.h +18 -11
- data/ext/pg_query/include/fmgr.h +21 -2
- data/ext/pg_query/include/foreign/fdwapi.h +294 -0
- data/ext/pg_query/include/funcapi.h +12 -12
- data/ext/pg_query/include/gram.h +1127 -0
- data/ext/pg_query/include/{parser/gramparse.h → gramparse.h} +4 -4
- data/ext/pg_query/include/jit/jit.h +2 -2
- data/ext/pg_query/include/kwlist_d.h +534 -510
- data/ext/pg_query/include/lib/dshash.h +4 -1
- data/ext/pg_query/include/lib/ilist.h +435 -22
- data/ext/pg_query/include/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/lib/simplehash.h +9 -9
- data/ext/pg_query/include/lib/sort_template.h +1 -1
- data/ext/pg_query/include/lib/stringinfo.h +3 -3
- data/ext/pg_query/include/libpq/auth.h +8 -2
- data/ext/pg_query/include/libpq/crypt.h +1 -1
- data/ext/pg_query/include/libpq/hba.h +24 -17
- data/ext/pg_query/include/libpq/libpq-be.h +36 -25
- data/ext/pg_query/include/libpq/libpq.h +1 -1
- data/ext/pg_query/include/libpq/pqcomm.h +10 -41
- data/ext/pg_query/include/libpq/pqformat.h +2 -2
- data/ext/pg_query/include/libpq/pqsignal.h +22 -10
- data/ext/pg_query/include/libpq/sasl.h +136 -0
- data/ext/pg_query/include/libpq/scram.h +37 -0
- data/ext/pg_query/include/mb/pg_wchar.h +35 -18
- data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/miscadmin.h +26 -14
- data/ext/pg_query/include/nodes/bitmapset.h +11 -7
- data/ext/pg_query/include/nodes/execnodes.h +83 -30
- data/ext/pg_query/include/nodes/extensible.h +5 -3
- data/ext/pg_query/include/nodes/lockoptions.h +1 -1
- data/ext/pg_query/include/nodes/makefuncs.h +14 -2
- data/ext/pg_query/include/nodes/memnodes.h +7 -4
- data/ext/pg_query/include/nodes/miscnodes.h +56 -0
- data/ext/pg_query/include/nodes/nodeFuncs.h +89 -29
- data/ext/pg_query/include/nodes/nodes.h +95 -510
- data/ext/pg_query/include/nodes/nodetags.h +471 -0
- data/ext/pg_query/include/nodes/params.h +3 -3
- data/ext/pg_query/include/nodes/parsenodes.h +377 -139
- data/ext/pg_query/include/nodes/pathnodes.h +1090 -440
- data/ext/pg_query/include/nodes/pg_list.h +30 -7
- data/ext/pg_query/include/nodes/plannodes.h +367 -124
- data/ext/pg_query/include/nodes/primnodes.h +670 -222
- data/ext/pg_query/include/nodes/print.h +1 -1
- data/ext/pg_query/include/{utils → nodes}/queryjumble.h +5 -7
- data/ext/pg_query/include/nodes/replnodes.h +111 -0
- data/ext/pg_query/include/nodes/supportnodes.h +346 -0
- data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/nodes/value.h +12 -2
- data/ext/pg_query/include/optimizer/cost.h +6 -4
- data/ext/pg_query/include/optimizer/geqo.h +1 -1
- data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/optimizer/optimizer.h +8 -8
- data/ext/pg_query/include/optimizer/paths.h +16 -7
- data/ext/pg_query/include/optimizer/planmain.h +3 -6
- data/ext/pg_query/include/parser/analyze.h +4 -3
- data/ext/pg_query/include/parser/kwlist.h +12 -1
- data/ext/pg_query/include/parser/parse_agg.h +4 -2
- data/ext/pg_query/include/parser/parse_coerce.h +3 -1
- data/ext/pg_query/include/parser/parse_expr.h +1 -1
- data/ext/pg_query/include/parser/parse_func.h +1 -1
- data/ext/pg_query/include/parser/parse_node.h +22 -4
- data/ext/pg_query/include/parser/parse_oper.h +3 -3
- data/ext/pg_query/include/parser/parse_relation.h +8 -3
- data/ext/pg_query/include/parser/parse_type.h +4 -3
- data/ext/pg_query/include/parser/parser.h +1 -1
- data/ext/pg_query/include/parser/parsetree.h +1 -1
- data/ext/pg_query/include/parser/scanner.h +2 -2
- data/ext/pg_query/include/parser/scansup.h +1 -1
- data/ext/pg_query/include/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/pg_config.h +21 -216
- data/ext/pg_query/include/pg_config_manual.h +8 -46
- data/ext/pg_query/include/pg_getopt.h +1 -1
- data/ext/pg_query/include/pg_query.h +27 -3
- data/ext/pg_query/include/pg_query_enum_defs.c +311 -149
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +545 -489
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +5092 -4432
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +385 -343
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +1294 -1161
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +137 -123
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +1657 -1496
- data/ext/pg_query/include/pg_trace.h +1 -1
- data/ext/pg_query/include/pgstat.h +172 -93
- data/ext/pg_query/include/pgtime.h +3 -3
- data/ext/pg_query/include/pl_gram.h +64 -62
- data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/pl_reserved_kwlist_d.h +1 -1
- data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -1
- data/ext/pg_query/include/pl_unreserved_kwlist_d.h +48 -46
- data/ext/pg_query/include/plpgsql.h +17 -22
- data/ext/pg_query/include/port/atomics/arch-arm.h +3 -3
- data/ext/pg_query/include/port/atomics/arch-ppc.h +21 -21
- data/ext/pg_query/include/port/atomics/arch-x86.h +2 -2
- data/ext/pg_query/include/port/atomics/fallback.h +3 -3
- data/ext/pg_query/include/port/atomics/generic-gcc.h +1 -1
- data/ext/pg_query/include/port/atomics/generic.h +1 -1
- data/ext/pg_query/include/port/atomics.h +2 -7
- data/ext/pg_query/include/port/pg_bitutils.h +62 -25
- data/ext/pg_query/include/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/port/pg_crc32c.h +1 -1
- data/ext/pg_query/include/port/simd.h +375 -0
- data/ext/pg_query/include/port.h +42 -75
- data/ext/pg_query/include/portability/instr_time.h +81 -140
- data/ext/pg_query/include/postgres.h +205 -434
- data/ext/pg_query/include/postgres_ext.h +0 -1
- data/ext/pg_query/include/postmaster/autovacuum.h +1 -4
- data/ext/pg_query/include/postmaster/auxprocess.h +1 -1
- data/ext/pg_query/include/postmaster/bgworker.h +2 -2
- data/ext/pg_query/include/postmaster/bgworker_internals.h +1 -1
- data/ext/pg_query/include/postmaster/bgwriter.h +2 -2
- data/ext/pg_query/include/postmaster/fork_process.h +1 -1
- data/ext/pg_query/include/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postmaster/pgarch.h +1 -38
- data/ext/pg_query/include/postmaster/postmaster.h +5 -2
- data/ext/pg_query/include/postmaster/startup.h +3 -1
- data/ext/pg_query/include/postmaster/syslogger.h +2 -2
- data/ext/pg_query/include/postmaster/walwriter.h +3 -1
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +6186 -5585
- data/ext/pg_query/include/protobuf/pg_query.pb.h +112443 -91222
- data/ext/pg_query/include/regex/regex.h +9 -6
- data/ext/pg_query/include/replication/logicallauncher.h +6 -1
- data/ext/pg_query/include/replication/logicalproto.h +30 -10
- data/ext/pg_query/include/replication/logicalworker.h +14 -1
- data/ext/pg_query/include/replication/origin.h +4 -4
- data/ext/pg_query/include/replication/reorderbuffer.h +113 -45
- data/ext/pg_query/include/replication/slot.h +25 -6
- data/ext/pg_query/include/replication/syncrep.h +2 -8
- data/ext/pg_query/include/replication/walreceiver.h +15 -9
- data/ext/pg_query/include/replication/walsender.h +13 -13
- data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -4
- data/ext/pg_query/include/rewrite/rewriteManip.h +11 -2
- data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/src_backend_nodes_copyfuncs.funcs.c +5321 -0
- data/ext/pg_query/include/src_backend_nodes_equalfuncs.funcs.c +3354 -0
- data/ext/pg_query/include/storage/backendid.h +1 -1
- data/ext/pg_query/include/storage/block.h +24 -31
- data/ext/pg_query/include/storage/buf.h +1 -1
- data/ext/pg_query/include/storage/bufmgr.h +183 -87
- data/ext/pg_query/include/storage/bufpage.h +146 -93
- data/ext/pg_query/include/storage/condition_variable.h +2 -2
- data/ext/pg_query/include/storage/dsm.h +3 -6
- data/ext/pg_query/include/storage/dsm_impl.h +4 -1
- data/ext/pg_query/include/storage/fd.h +24 -20
- data/ext/pg_query/include/storage/fileset.h +1 -1
- data/ext/pg_query/include/storage/ipc.h +1 -1
- data/ext/pg_query/include/storage/item.h +1 -1
- data/ext/pg_query/include/storage/itemid.h +1 -1
- data/ext/pg_query/include/storage/itemptr.h +94 -57
- data/ext/pg_query/include/storage/large_object.h +1 -1
- data/ext/pg_query/include/storage/latch.h +9 -1
- data/ext/pg_query/include/storage/lmgr.h +6 -1
- data/ext/pg_query/include/storage/lock.h +21 -13
- data/ext/pg_query/include/storage/lockdefs.h +3 -3
- data/ext/pg_query/include/storage/lwlock.h +16 -2
- data/ext/pg_query/include/storage/off.h +1 -1
- data/ext/pg_query/include/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/storage/pg_shmem.h +1 -1
- data/ext/pg_query/include/storage/pmsignal.h +1 -1
- data/ext/pg_query/include/storage/predicate.h +2 -2
- data/ext/pg_query/include/storage/proc.h +22 -17
- data/ext/pg_query/include/storage/procarray.h +3 -2
- data/ext/pg_query/include/storage/proclist_types.h +1 -1
- data/ext/pg_query/include/storage/procsignal.h +3 -1
- data/ext/pg_query/include/storage/relfilelocator.h +99 -0
- data/ext/pg_query/include/storage/s_lock.h +66 -309
- data/ext/pg_query/include/storage/sharedfileset.h +1 -1
- data/ext/pg_query/include/storage/shm_mq.h +1 -1
- data/ext/pg_query/include/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/storage/shmem.h +1 -23
- data/ext/pg_query/include/storage/sinval.h +3 -3
- data/ext/pg_query/include/storage/sinvaladt.h +4 -2
- data/ext/pg_query/include/storage/smgr.h +12 -10
- data/ext/pg_query/include/storage/spin.h +1 -1
- data/ext/pg_query/include/storage/standby.h +9 -8
- data/ext/pg_query/include/storage/standbydefs.h +1 -1
- data/ext/pg_query/include/storage/sync.h +3 -3
- data/ext/pg_query/include/tcop/cmdtag.h +7 -2
- data/ext/pg_query/include/tcop/cmdtaglist.h +1 -1
- data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
- data/ext/pg_query/include/tcop/dest.h +1 -3
- data/ext/pg_query/include/tcop/fastpath.h +1 -1
- data/ext/pg_query/include/tcop/pquery.h +1 -1
- data/ext/pg_query/include/tcop/tcopprot.h +1 -4
- data/ext/pg_query/include/tcop/utility.h +1 -1
- data/ext/pg_query/include/tsearch/ts_cache.h +2 -4
- data/ext/pg_query/include/utils/acl.h +26 -81
- data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/utils/array.h +19 -1
- data/ext/pg_query/include/utils/backend_progress.h +2 -1
- data/ext/pg_query/include/utils/backend_status.h +24 -3
- data/ext/pg_query/include/utils/builtins.h +14 -5
- data/ext/pg_query/include/utils/bytea.h +1 -1
- data/ext/pg_query/include/utils/catcache.h +1 -1
- data/ext/pg_query/include/utils/date.h +37 -9
- data/ext/pg_query/include/utils/datetime.h +41 -21
- data/ext/pg_query/include/utils/datum.h +1 -1
- data/ext/pg_query/include/utils/dsa.h +5 -1
- data/ext/pg_query/include/utils/elog.h +101 -26
- data/ext/pg_query/include/utils/expandeddatum.h +14 -3
- data/ext/pg_query/include/utils/expandedrecord.h +14 -4
- data/ext/pg_query/include/utils/float.h +7 -6
- data/ext/pg_query/include/utils/fmgroids.h +54 -1
- data/ext/pg_query/include/utils/fmgrprotos.h +45 -3
- data/ext/pg_query/include/utils/fmgrtab.h +1 -1
- data/ext/pg_query/include/utils/guc.h +55 -82
- data/ext/pg_query/include/utils/guc_hooks.h +163 -0
- data/ext/pg_query/include/utils/guc_tables.h +49 -3
- data/ext/pg_query/include/utils/hsearch.h +1 -1
- data/ext/pg_query/include/utils/inval.h +3 -3
- data/ext/pg_query/include/utils/logtape.h +77 -0
- data/ext/pg_query/include/utils/lsyscache.h +5 -1
- data/ext/pg_query/include/utils/memdebug.h +1 -1
- data/ext/pg_query/include/utils/memutils.h +5 -49
- data/ext/pg_query/include/utils/memutils_internal.h +136 -0
- data/ext/pg_query/include/utils/memutils_memorychunk.h +237 -0
- data/ext/pg_query/include/utils/numeric.h +20 -5
- data/ext/pg_query/include/utils/palloc.h +8 -1
- data/ext/pg_query/include/utils/partcache.h +3 -2
- data/ext/pg_query/include/utils/pg_locale.h +22 -14
- data/ext/pg_query/include/utils/pgstat_internal.h +37 -7
- data/ext/pg_query/include/utils/pidfile.h +1 -1
- data/ext/pg_query/include/utils/plancache.h +1 -1
- data/ext/pg_query/include/utils/portal.h +1 -1
- data/ext/pg_query/include/utils/probes.h +6 -6
- data/ext/pg_query/include/utils/ps_status.h +23 -1
- data/ext/pg_query/include/utils/queryenvironment.h +1 -1
- data/ext/pg_query/include/utils/regproc.h +3 -3
- data/ext/pg_query/include/utils/rel.h +60 -43
- data/ext/pg_query/include/utils/relcache.h +13 -8
- data/ext/pg_query/include/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/utils/resowner.h +1 -1
- data/ext/pg_query/include/utils/ruleutils.h +6 -1
- data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/utils/snapmgr.h +4 -2
- data/ext/pg_query/include/utils/snapshot.h +1 -1
- data/ext/pg_query/include/utils/sortsupport.h +2 -2
- data/ext/pg_query/include/utils/syscache.h +4 -1
- data/ext/pg_query/include/utils/timeout.h +1 -1
- data/ext/pg_query/include/utils/timestamp.h +41 -11
- data/ext/pg_query/include/utils/tuplesort.h +189 -35
- data/ext/pg_query/include/utils/tuplestore.h +1 -1
- data/ext/pg_query/include/utils/typcache.h +1 -1
- data/ext/pg_query/include/utils/varlena.h +13 -1
- data/ext/pg_query/include/utils/wait_event.h +9 -4
- data/ext/pg_query/include/utils/xml.h +15 -5
- data/ext/pg_query/include/varatt.h +358 -0
- data/ext/pg_query/pg_query.c +1 -1
- data/ext/pg_query/pg_query.pb-c.c +19755 -17757
- data/ext/pg_query/pg_query_fingerprint.c +8 -3
- data/ext/pg_query/pg_query_fingerprint.h +1 -1
- data/ext/pg_query/pg_query_internal.h +1 -1
- data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
- data/ext/pg_query/pg_query_normalize.c +1 -1
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +2 -2
- data/ext/pg_query/pg_query_parse.c +46 -4
- data/ext/pg_query/pg_query_parse_plpgsql.c +1 -1
- data/ext/pg_query/pg_query_scan.c +1 -1
- data/ext/pg_query/pg_query_split.c +2 -2
- data/ext/pg_query/postgres_deparse.c +503 -105
- data/ext/pg_query/src_backend_catalog_namespace.c +7 -2
- data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -1
- data/ext/pg_query/src_backend_commands_define.c +1 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +11 -70
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
- data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
- data/ext/pg_query/src_backend_nodes_list.c +14 -2
- data/ext/pg_query/src_backend_nodes_makefuncs.c +95 -1
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +283 -132
- data/ext/pg_query/src_backend_nodes_value.c +1 -1
- data/ext/pg_query/src_backend_parser_gram.c +33208 -31806
- data/ext/pg_query/src_backend_parser_parser.c +28 -2
- data/ext/pg_query/src_backend_parser_scan.c +4318 -3329
- data/ext/pg_query/src_backend_parser_scansup.c +1 -1
- data/ext/pg_query/src_backend_postmaster_postmaster.c +129 -110
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
- data/ext/pg_query/src_backend_tcop_postgres.c +66 -87
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_datum.c +5 -7
- 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 +489 -0
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +79 -5
- data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
- data/ext/pg_query/src_backend_utils_error_elog.c +354 -97
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +33 -1
- data/ext/pg_query/src_backend_utils_init_globals.c +5 -2
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +13 -4
- data/ext/pg_query/src_backend_utils_misc_guc_tables.c +494 -0
- data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +449 -312
- data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +398 -49
- data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
- data/ext/pg_query/src_common_encnames.c +4 -1
- 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 +534 -510
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_psprintf.c +1 -1
- data/ext/pg_query/src_common_stringinfo.c +4 -4
- data/ext/pg_query/src_common_wchar.c +9 -8
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +661 -694
- 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 +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
- data/ext/pg_query/src_port_pg_bitutils.c +1 -1
- data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
- data/ext/pg_query/src_port_snprintf.c +3 -7
- data/ext/pg_query/src_port_strerror.c +1 -1
- data/ext/pg_query/src_port_strnlen.c +1 -1
- data/lib/pg_query/pg_query_pb.rb +166 -3191
- data/lib/pg_query/treewalker.rb +7 -2
- data/lib/pg_query/version.rb +1 -1
- metadata +43 -24
- data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
- data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
- data/ext/pg_query/include/commands/variable.h +0 -38
- data/ext/pg_query/include/getaddrinfo.h +0 -162
- data/ext/pg_query/include/parser/gram.h +0 -1101
- data/ext/pg_query/include/storage/relfilenode.h +0 -99
- data/ext/pg_query/include/utils/dynahash.h +0 -20
- data/ext/pg_query/include/utils/pg_lsn.h +0 -29
- data/ext/pg_query/include/utils/rls.h +0 -50
- data/ext/pg_query/include/utils/tzparser.h +0 -39
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -371
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
- data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
- data/ext/pg_query/src_common_pg_prng.c +0 -152
- data/ext/pg_query/src_common_string.c +0 -92
- data/ext/pg_query/src_port_pgsleep.c +0 -69
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* scansup.c
|
|
13
13
|
* scanner support routines used by the core lexer
|
|
14
14
|
*
|
|
15
|
-
* Portions Copyright (c) 1996-
|
|
15
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
16
16
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
17
17
|
*
|
|
18
18
|
*
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
* clients.
|
|
39
39
|
*
|
|
40
40
|
*
|
|
41
|
-
* Portions Copyright (c) 1996-
|
|
41
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
42
42
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
43
43
|
*
|
|
44
44
|
*
|
|
@@ -83,10 +83,6 @@
|
|
|
83
83
|
#include <netdb.h>
|
|
84
84
|
#include <limits.h>
|
|
85
85
|
|
|
86
|
-
#ifdef HAVE_SYS_SELECT_H
|
|
87
|
-
#include <sys/select.h>
|
|
88
|
-
#endif
|
|
89
|
-
|
|
90
86
|
#ifdef USE_BONJOUR
|
|
91
87
|
#include <dns_sd.h>
|
|
92
88
|
#endif
|
|
@@ -112,6 +108,7 @@
|
|
|
112
108
|
#include "libpq/libpq.h"
|
|
113
109
|
#include "libpq/pqformat.h"
|
|
114
110
|
#include "libpq/pqsignal.h"
|
|
111
|
+
#include "nodes/queryjumble.h"
|
|
115
112
|
#include "pg_getopt.h"
|
|
116
113
|
#include "pgstat.h"
|
|
117
114
|
#include "port/pg_bswap.h"
|
|
@@ -136,7 +133,6 @@
|
|
|
136
133
|
#include "utils/memutils.h"
|
|
137
134
|
#include "utils/pidfile.h"
|
|
138
135
|
#include "utils/ps_status.h"
|
|
139
|
-
#include "utils/queryjumble.h"
|
|
140
136
|
#include "utils/timeout.h"
|
|
141
137
|
#include "utils/timestamp.h"
|
|
142
138
|
#include "utils/varlena.h"
|
|
@@ -214,30 +210,30 @@ static Backend *ShmemBackendArray;
|
|
|
214
210
|
|
|
215
211
|
|
|
216
212
|
/*
|
|
217
|
-
*
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
*
|
|
222
|
-
*
|
|
223
|
-
*
|
|
213
|
+
* SuperuserReservedConnections is the number of backends reserved for
|
|
214
|
+
* superuser use, and ReservedConnections is the number of backends reserved
|
|
215
|
+
* for use by roles with privileges of the pg_use_reserved_connections
|
|
216
|
+
* predefined role. These are taken out of the pool of MaxConnections backend
|
|
217
|
+
* slots, so the number of backend slots available for roles that are neither
|
|
218
|
+
* superuser nor have privileges of pg_use_reserved_connections is
|
|
219
|
+
* (MaxConnections - SuperuserReservedConnections - ReservedConnections).
|
|
220
|
+
*
|
|
221
|
+
* If the number of remaining slots is less than or equal to
|
|
222
|
+
* SuperuserReservedConnections, only superusers can make new connections. If
|
|
223
|
+
* the number of remaining slots is greater than SuperuserReservedConnections
|
|
224
|
+
* but less than or equal to
|
|
225
|
+
* (SuperuserReservedConnections + ReservedConnections), only superusers and
|
|
226
|
+
* roles with privileges of pg_use_reserved_connections can make new
|
|
227
|
+
* connections. Note that pre-existing superuser and
|
|
228
|
+
* pg_use_reserved_connections connections don't count against the limits.
|
|
224
229
|
*/
|
|
225
230
|
|
|
226
231
|
|
|
232
|
+
|
|
227
233
|
/* The socket(s) we're listening to. */
|
|
228
234
|
#define MAXLISTEN 64
|
|
229
235
|
|
|
230
236
|
|
|
231
|
-
/*
|
|
232
|
-
* These globals control the behavior of the postmaster in case some
|
|
233
|
-
* backend dumps core. Normally, it kills all peers of the dead backend
|
|
234
|
-
* and reinitializes shared memory. By specifying -s or -n, we can have
|
|
235
|
-
* the postmaster stop (rather than kill) peers and not reinitialize
|
|
236
|
-
* shared data structures. (Reinit is currently dead code, though.)
|
|
237
|
-
*/
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
237
|
/* still more option variables */
|
|
242
238
|
|
|
243
239
|
|
|
@@ -253,6 +249,8 @@ static Backend *ShmemBackendArray;
|
|
|
253
249
|
|
|
254
250
|
|
|
255
251
|
|
|
252
|
+
|
|
253
|
+
|
|
256
254
|
/* PIDs of special child processes; 0 when not running */
|
|
257
255
|
|
|
258
256
|
|
|
@@ -380,6 +378,17 @@ __thread bool ClientAuthInProgress = false;
|
|
|
380
378
|
|
|
381
379
|
|
|
382
380
|
|
|
381
|
+
/* set when signals arrive */
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
/* event multiplexing object */
|
|
390
|
+
|
|
391
|
+
|
|
383
392
|
#ifdef USE_SSL
|
|
384
393
|
/* Set when and if SSL has been initialized properly */
|
|
385
394
|
static bool LoadedSSL = false;
|
|
@@ -398,11 +407,14 @@ static void getInstallationPaths(const char *argv0);
|
|
|
398
407
|
static void checkControlFile(void);
|
|
399
408
|
static Port *ConnCreate(int serverFd);
|
|
400
409
|
static void ConnFree(Port *port);
|
|
401
|
-
static void
|
|
402
|
-
static void
|
|
403
|
-
static void
|
|
404
|
-
static void
|
|
405
|
-
static void
|
|
410
|
+
static void handle_pm_pmsignal_signal(SIGNAL_ARGS);
|
|
411
|
+
static void handle_pm_child_exit_signal(SIGNAL_ARGS);
|
|
412
|
+
static void handle_pm_reload_request_signal(SIGNAL_ARGS);
|
|
413
|
+
static void handle_pm_shutdown_request_signal(SIGNAL_ARGS);
|
|
414
|
+
static void process_pm_pmsignal(void);
|
|
415
|
+
static void process_pm_child_exit(void);
|
|
416
|
+
static void process_pm_reload_request(void);
|
|
417
|
+
static void process_pm_shutdown_request(void);
|
|
406
418
|
static void process_startup_packet_die(SIGNAL_ARGS);
|
|
407
419
|
static void dummy_handler(SIGNAL_ARGS);
|
|
408
420
|
static void StartupPacketTimeoutHandler(void);
|
|
@@ -420,12 +432,12 @@ static int BackendStartup(Port *port);
|
|
|
420
432
|
static int ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done);
|
|
421
433
|
static void SendNegotiateProtocolVersion(List *unrecognized_protocol_options);
|
|
422
434
|
static void processCancelRequest(Port *port, void *pkt);
|
|
423
|
-
static int initMasks(fd_set *rmask);
|
|
424
435
|
static void report_fork_failure_to_client(Port *port, int errnum);
|
|
425
436
|
static CAC_state canAcceptConnections(int backend_type);
|
|
426
437
|
static bool RandomCancelKey(int32 *cancel_key);
|
|
427
438
|
static void signal_child(pid_t pid, int signal);
|
|
428
|
-
static
|
|
439
|
+
static void sigquit_child(pid_t pid);
|
|
440
|
+
static bool SignalSomeChildren(int signal, int target);
|
|
429
441
|
static void TerminateChildren(int signal);
|
|
430
442
|
|
|
431
443
|
#define SignalChildren(sig) SignalSomeChildren(sig, BACKEND_TYPE_ALL)
|
|
@@ -579,8 +591,6 @@ HANDLE PostmasterHandle;
|
|
|
579
591
|
*/
|
|
580
592
|
#ifdef WIN32
|
|
581
593
|
#endif
|
|
582
|
-
#ifdef SIGURG
|
|
583
|
-
#endif
|
|
584
594
|
#ifdef SIGTTIN
|
|
585
595
|
#endif
|
|
586
596
|
#ifdef SIGTTOU
|
|
@@ -597,8 +607,6 @@ HANDLE PostmasterHandle;
|
|
|
597
607
|
#endif
|
|
598
608
|
#ifdef USE_BONJOUR
|
|
599
609
|
#endif
|
|
600
|
-
#ifdef HAVE_UNIX_SOCKETS
|
|
601
|
-
#endif
|
|
602
610
|
#ifdef HAVE_PTHREAD_IS_THREADED_NP
|
|
603
611
|
#endif
|
|
604
612
|
|
|
@@ -630,7 +638,7 @@ HANDLE PostmasterHandle;
|
|
|
630
638
|
|
|
631
639
|
|
|
632
640
|
/*
|
|
633
|
-
* Determine how long should we let ServerLoop sleep.
|
|
641
|
+
* Determine how long should we let ServerLoop sleep, in milliseconds.
|
|
634
642
|
*
|
|
635
643
|
* In normal conditions we wait at most one minute, to ensure that the other
|
|
636
644
|
* background tasks handled by ServerLoop get done even when no requests are
|
|
@@ -641,19 +649,21 @@ HANDLE PostmasterHandle;
|
|
|
641
649
|
|
|
642
650
|
|
|
643
651
|
/*
|
|
644
|
-
*
|
|
645
|
-
*
|
|
646
|
-
*
|
|
652
|
+
* Activate or deactivate notifications of server socket events. Since we
|
|
653
|
+
* don't currently have a way to remove events from an existing WaitEventSet,
|
|
654
|
+
* we'll just destroy and recreate the whole thing. This is called during
|
|
655
|
+
* shutdown so we can wait for backends to exit without accepting new
|
|
656
|
+
* connections, and during crash reinitialization when we need to start
|
|
657
|
+
* listening for new connections again. The WaitEventSet will be freed in fork
|
|
658
|
+
* children by ClosePostmasterPorts().
|
|
647
659
|
*/
|
|
648
|
-
|
|
649
|
-
#endif
|
|
660
|
+
|
|
650
661
|
|
|
651
662
|
/*
|
|
652
|
-
*
|
|
653
|
-
* Return the number of sockets to listen on.
|
|
663
|
+
* Main idle loop of postmaster
|
|
654
664
|
*/
|
|
655
|
-
|
|
656
|
-
|
|
665
|
+
#ifdef HAVE_PTHREAD_IS_THREADED_NP
|
|
666
|
+
#endif
|
|
657
667
|
|
|
658
668
|
/*
|
|
659
669
|
* Read a client's startup packet and do something according to it.
|
|
@@ -766,49 +776,48 @@ HANDLE PostmasterHandle;
|
|
|
766
776
|
#ifndef WIN32
|
|
767
777
|
#endif
|
|
768
778
|
|
|
769
|
-
|
|
770
779
|
/*
|
|
771
|
-
*
|
|
780
|
+
* Child processes use SIGUSR1 to notify us of 'pmsignals'. pg_ctl uses
|
|
781
|
+
* SIGUSR1 to ask postmaster to check for logrotate and promote files.
|
|
772
782
|
*/
|
|
773
783
|
|
|
774
784
|
|
|
785
|
+
/*
|
|
786
|
+
* pg_ctl uses SIGHUP to request a reload of the configuration files.
|
|
787
|
+
*/
|
|
788
|
+
|
|
775
789
|
|
|
776
790
|
/*
|
|
777
|
-
*
|
|
791
|
+
* Re-read config files, and tell children to do same.
|
|
778
792
|
*/
|
|
779
|
-
#ifdef WIN32
|
|
780
|
-
#endif
|
|
781
793
|
#ifdef USE_SSL
|
|
782
794
|
#endif
|
|
783
795
|
#ifdef EXEC_BACKEND
|
|
784
796
|
#endif
|
|
785
|
-
|
|
786
|
-
|
|
797
|
+
|
|
798
|
+
/*
|
|
799
|
+
* pg_ctl uses SIGTERM, SIGINT and SIGQUIT to request different types of
|
|
800
|
+
* shutdown.
|
|
801
|
+
*/
|
|
787
802
|
|
|
788
803
|
|
|
789
804
|
/*
|
|
790
|
-
*
|
|
805
|
+
* Process shutdown request.
|
|
791
806
|
*/
|
|
792
|
-
#ifdef WIN32
|
|
793
|
-
#endif
|
|
794
807
|
#ifdef USE_SYSTEMD
|
|
795
808
|
#endif
|
|
796
809
|
#ifdef USE_SYSTEMD
|
|
797
810
|
#endif
|
|
798
811
|
#ifdef USE_SYSTEMD
|
|
799
812
|
#endif
|
|
800
|
-
|
|
801
|
-
|
|
813
|
+
|
|
814
|
+
|
|
802
815
|
|
|
803
816
|
/*
|
|
804
|
-
*
|
|
817
|
+
* Cleanup after a child process dies.
|
|
805
818
|
*/
|
|
806
|
-
#ifdef WIN32
|
|
807
|
-
#endif
|
|
808
819
|
#ifdef USE_SYSTEMD
|
|
809
820
|
#endif
|
|
810
|
-
#ifdef WIN32
|
|
811
|
-
#endif
|
|
812
821
|
|
|
813
822
|
/*
|
|
814
823
|
* Scan the bgworkers list and see if the given PID (which has just stopped
|
|
@@ -858,8 +867,9 @@ HANDLE PostmasterHandle;
|
|
|
858
867
|
/*
|
|
859
868
|
* Advance the postmaster's state machine and take actions as appropriate
|
|
860
869
|
*
|
|
861
|
-
* This is common code for
|
|
862
|
-
*
|
|
870
|
+
* This is common code for process_pm_shutdown_request(),
|
|
871
|
+
* process_pm_child_exit() and process_pm_pmsignal(), which process the signals
|
|
872
|
+
* that might mean we need to change state.
|
|
863
873
|
*/
|
|
864
874
|
|
|
865
875
|
|
|
@@ -883,6 +893,16 @@ HANDLE PostmasterHandle;
|
|
|
883
893
|
#ifdef HAVE_SETSID
|
|
884
894
|
#endif
|
|
885
895
|
|
|
896
|
+
/*
|
|
897
|
+
* Convenience function for killing a child process after a crash of some
|
|
898
|
+
* other child process. We log the action at a higher level than we would
|
|
899
|
+
* otherwise do, and we apply send_abort_for_crash to decide which signal
|
|
900
|
+
* to send. Normally it's SIGQUIT -- and most other comments in this file
|
|
901
|
+
* are written on the assumption that it is -- but developers might prefer
|
|
902
|
+
* to use SIGABRT to collect per-child core dumps.
|
|
903
|
+
*/
|
|
904
|
+
|
|
905
|
+
|
|
886
906
|
/*
|
|
887
907
|
* Send a signal to the targeted children (but NOT special children;
|
|
888
908
|
* dead_end children are never signaled, either).
|
|
@@ -1267,18 +1287,10 @@ retry:
|
|
|
1267
1287
|
|
|
1268
1288
|
/*
|
|
1269
1289
|
* Queue a waiter to signal when this child dies. The wait will be handled
|
|
1270
|
-
* automatically by an operating system thread pool.
|
|
1271
|
-
*
|
|
1272
|
-
* Note: use malloc instead of palloc, since it needs to be thread-safe.
|
|
1273
|
-
* Struct will be free():d from the callback function that runs on a
|
|
1274
|
-
* different thread.
|
|
1290
|
+
* automatically by an operating system thread pool. The memory will be
|
|
1291
|
+
* freed by a later call to waitpid().
|
|
1275
1292
|
*/
|
|
1276
|
-
childinfo =
|
|
1277
|
-
if (!childinfo)
|
|
1278
|
-
ereport(FATAL,
|
|
1279
|
-
(errcode(ERRCODE_OUT_OF_MEMORY),
|
|
1280
|
-
errmsg("out of memory")));
|
|
1281
|
-
|
|
1293
|
+
childinfo = palloc(sizeof(win32_deadchild_waitinfo));
|
|
1282
1294
|
childinfo->procHandle = pi.hProcess;
|
|
1283
1295
|
childinfo->procId = pi.dwProcessId;
|
|
1284
1296
|
|
|
@@ -1292,7 +1304,7 @@ retry:
|
|
|
1292
1304
|
(errmsg_internal("could not register process for wait: error code %lu",
|
|
1293
1305
|
GetLastError())));
|
|
1294
1306
|
|
|
1295
|
-
/* Don't close pi.hProcess here -
|
|
1307
|
+
/* Don't close pi.hProcess here - waitpid() needs access to it */
|
|
1296
1308
|
|
|
1297
1309
|
CloseHandle(pi.hThread);
|
|
1298
1310
|
|
|
@@ -1532,16 +1544,13 @@ SubPostmasterMain(int argc, char *argv[])
|
|
|
1532
1544
|
#endif
|
|
1533
1545
|
|
|
1534
1546
|
/*
|
|
1535
|
-
*
|
|
1547
|
+
* Handle pmsignal conditions representing requests from backends,
|
|
1548
|
+
* and check for promote and logrotate requests from pg_ctl.
|
|
1536
1549
|
*/
|
|
1537
|
-
#ifdef WIN32
|
|
1538
|
-
#endif
|
|
1539
1550
|
#ifdef USE_SYSTEMD
|
|
1540
1551
|
#endif
|
|
1541
1552
|
#ifdef USE_SYSTEMD
|
|
1542
1553
|
#endif
|
|
1543
|
-
#ifdef WIN32
|
|
1544
|
-
#endif
|
|
1545
1554
|
|
|
1546
1555
|
/*
|
|
1547
1556
|
* SIGTERM while processing startup packet.
|
|
@@ -2124,36 +2133,21 @@ ShmemBackendArrayRemove(Backend *bn)
|
|
|
2124
2133
|
static pid_t
|
|
2125
2134
|
waitpid(pid_t pid, int *exitstatus, int options)
|
|
2126
2135
|
{
|
|
2136
|
+
win32_deadchild_waitinfo *childinfo;
|
|
2137
|
+
DWORD exitcode;
|
|
2127
2138
|
DWORD dwd;
|
|
2128
2139
|
ULONG_PTR key;
|
|
2129
2140
|
OVERLAPPED *ovl;
|
|
2130
2141
|
|
|
2131
|
-
/*
|
|
2132
|
-
|
|
2133
|
-
* the first one that died.
|
|
2134
|
-
*/
|
|
2135
|
-
if (GetQueuedCompletionStatus(win32ChildQueue, &dwd, &key, &ovl, 0))
|
|
2142
|
+
/* Try to consume one win32_deadchild_waitinfo from the queue. */
|
|
2143
|
+
if (!GetQueuedCompletionStatus(win32ChildQueue, &dwd, &key, &ovl, 0))
|
|
2136
2144
|
{
|
|
2137
|
-
|
|
2138
|
-
return
|
|
2145
|
+
errno = EAGAIN;
|
|
2146
|
+
return -1;
|
|
2139
2147
|
}
|
|
2140
2148
|
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
/*
|
|
2145
|
-
* Note! Code below executes on a thread pool! All operations must
|
|
2146
|
-
* be thread safe! Note that elog() and friends must *not* be used.
|
|
2147
|
-
*/
|
|
2148
|
-
static void WINAPI
|
|
2149
|
-
pgwin32_deadchild_callback(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
|
|
2150
|
-
{
|
|
2151
|
-
win32_deadchild_waitinfo *childinfo = (win32_deadchild_waitinfo *) lpParameter;
|
|
2152
|
-
DWORD exitcode;
|
|
2153
|
-
|
|
2154
|
-
if (TimerOrWaitFired)
|
|
2155
|
-
return; /* timeout. Should never happen, since we use
|
|
2156
|
-
* INFINITE as timeout value. */
|
|
2149
|
+
childinfo = (win32_deadchild_waitinfo *) key;
|
|
2150
|
+
pid = childinfo->procId;
|
|
2157
2151
|
|
|
2158
2152
|
/*
|
|
2159
2153
|
* Remove handle from wait - required even though it's set to wait only
|
|
@@ -2169,13 +2163,11 @@ pgwin32_deadchild_callback(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
|
|
|
2169
2163
|
write_stderr("could not read exit code for process\n");
|
|
2170
2164
|
exitcode = 255;
|
|
2171
2165
|
}
|
|
2172
|
-
|
|
2173
|
-
if (!PostQueuedCompletionStatus(win32ChildQueue, childinfo->procId, (ULONG_PTR) exitcode, NULL))
|
|
2174
|
-
write_stderr("could not post child completion status\n");
|
|
2166
|
+
*exitstatus = exitcode;
|
|
2175
2167
|
|
|
2176
2168
|
/*
|
|
2177
|
-
*
|
|
2178
|
-
*
|
|
2169
|
+
* Close the process handle. Only after this point can the PID can be
|
|
2170
|
+
* recycled by the kernel.
|
|
2179
2171
|
*/
|
|
2180
2172
|
CloseHandle(childinfo->procHandle);
|
|
2181
2173
|
|
|
@@ -2183,9 +2175,36 @@ pgwin32_deadchild_callback(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
|
|
|
2183
2175
|
* Free struct that was allocated before the call to
|
|
2184
2176
|
* RegisterWaitForSingleObject()
|
|
2185
2177
|
*/
|
|
2186
|
-
|
|
2178
|
+
pfree(childinfo);
|
|
2179
|
+
|
|
2180
|
+
return pid;
|
|
2181
|
+
}
|
|
2182
|
+
|
|
2183
|
+
/*
|
|
2184
|
+
* Note! Code below executes on a thread pool! All operations must
|
|
2185
|
+
* be thread safe! Note that elog() and friends must *not* be used.
|
|
2186
|
+
*/
|
|
2187
|
+
static void WINAPI
|
|
2188
|
+
pgwin32_deadchild_callback(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
|
|
2189
|
+
{
|
|
2190
|
+
/* Should never happen, since we use INFINITE as timeout value. */
|
|
2191
|
+
if (TimerOrWaitFired)
|
|
2192
|
+
return;
|
|
2193
|
+
|
|
2194
|
+
/*
|
|
2195
|
+
* Post the win32_deadchild_waitinfo object for waitpid() to deal with. If
|
|
2196
|
+
* that fails, we leak the object, but we also leak a whole process and
|
|
2197
|
+
* get into an unrecoverable state, so there's not much point in worrying
|
|
2198
|
+
* about that. We'd like to panic, but we can't use that infrastructure
|
|
2199
|
+
* from this thread.
|
|
2200
|
+
*/
|
|
2201
|
+
if (!PostQueuedCompletionStatus(win32ChildQueue,
|
|
2202
|
+
0,
|
|
2203
|
+
(ULONG_PTR) lpParameter,
|
|
2204
|
+
NULL))
|
|
2205
|
+
write_stderr("could not post child completion status\n");
|
|
2187
2206
|
|
|
2188
|
-
/* Queue SIGCHLD signal */
|
|
2207
|
+
/* Queue SIGCHLD signal. */
|
|
2189
2208
|
pg_queue_signal(SIGCHLD);
|
|
2190
2209
|
}
|
|
2191
2210
|
#endif /* WIN32 */
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* exit-time cleanup for either a postmaster or a backend.
|
|
16
16
|
*
|
|
17
17
|
*
|
|
18
|
-
* Portions Copyright (c) 1996-
|
|
18
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
19
19
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
20
20
|
*
|
|
21
21
|
*
|