pg_query 2.1.0 → 4.2.1
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 +104 -0
- data/README.md +59 -31
- data/Rakefile +2 -2
- data/ext/pg_query/extconf.rb +8 -2
- data/ext/pg_query/include/access/amapi.h +45 -1
- data/ext/pg_query/include/access/attmap.h +1 -1
- data/ext/pg_query/include/access/attnum.h +2 -2
- data/ext/pg_query/include/access/clog.h +4 -2
- data/ext/pg_query/include/access/commit_ts.h +6 -9
- data/ext/pg_query/include/access/detoast.h +1 -11
- data/ext/pg_query/include/access/genam.h +15 -12
- data/ext/pg_query/include/access/gin.h +2 -2
- data/ext/pg_query/include/access/htup.h +1 -1
- data/ext/pg_query/include/access/htup_details.h +75 -87
- data/ext/pg_query/include/access/itup.h +7 -1
- 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 +17 -2
- data/ext/pg_query/include/access/rmgr.h +30 -3
- data/ext/pg_query/include/access/rmgrlist.h +23 -23
- data/ext/pg_query/include/access/sdir.h +1 -1
- data/ext/pg_query/include/access/skey.h +1 -1
- data/ext/pg_query/include/access/stratnum.h +4 -2
- data/ext/pg_query/include/access/sysattr.h +1 -1
- data/ext/pg_query/include/access/table.h +2 -1
- data/ext/pg_query/include/access/tableam.h +272 -20
- data/ext/pg_query/include/access/toast_compression.h +73 -0
- data/ext/pg_query/include/access/transam.h +123 -13
- data/ext/pg_query/include/access/tupconvert.h +1 -1
- data/ext/pg_query/include/access/tupdesc.h +1 -1
- data/ext/pg_query/include/access/tupmacs.h +3 -3
- data/ext/pg_query/include/access/twophase.h +5 -1
- data/ext/pg_query/include/access/xact.h +79 -19
- data/ext/pg_query/include/access/xlog.h +60 -155
- data/ext/pg_query/include/access/xlog_internal.h +50 -14
- data/ext/pg_query/include/access/xlogdefs.h +8 -16
- data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
- data/ext/pg_query/include/access/xlogreader.h +148 -32
- data/ext/pg_query/include/access/xlogrecord.h +18 -9
- data/ext/pg_query/include/access/xlogrecovery.h +157 -0
- data/ext/pg_query/include/c.h +101 -44
- data/ext/pg_query/include/catalog/catalog.h +3 -1
- data/ext/pg_query/include/catalog/catversion.h +2 -2
- data/ext/pg_query/include/catalog/dependency.h +10 -16
- data/ext/pg_query/include/catalog/genbki.h +83 -5
- data/ext/pg_query/include/catalog/index.h +18 -3
- data/ext/pg_query/include/catalog/indexing.h +12 -324
- data/ext/pg_query/include/catalog/namespace.h +4 -2
- data/ext/pg_query/include/catalog/objectaccess.h +70 -2
- data/ext/pg_query/include/catalog/objectaddress.h +11 -6
- data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
- data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_am.h +4 -1
- data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
- data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
- data/ext/pg_query/include/catalog/pg_authid.h +7 -2
- data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
- data/ext/pg_query/include/catalog/pg_class.h +45 -15
- data/ext/pg_query/include/catalog/pg_class_d.h +31 -2
- data/ext/pg_query/include/catalog/pg_collation.h +33 -8
- data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
- data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
- data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
- data/ext/pg_query/include/catalog/pg_control.h +5 -5
- data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
- data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_depend.h +11 -7
- data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
- data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_index.h +17 -7
- data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
- data/ext/pg_query/include/catalog/pg_language.h +10 -5
- data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
- data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
- data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_operator.h +21 -16
- data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
- data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
- data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
- data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
- data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
- data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_proc.h +20 -11
- data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
- data/ext/pg_query/include/catalog/pg_publication.h +50 -4
- data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
- data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
- data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
- data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
- data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
- data/ext/pg_query/include/catalog/pg_transform.h +8 -5
- data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
- data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
- data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_type.h +56 -24
- data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
- data/ext/pg_query/include/catalog/storage.h +5 -3
- data/ext/pg_query/include/commands/async.h +4 -5
- data/ext/pg_query/include/commands/dbcommands.h +2 -1
- data/ext/pg_query/include/commands/defrem.h +11 -24
- data/ext/pg_query/include/commands/event_trigger.h +2 -2
- data/ext/pg_query/include/commands/explain.h +1 -1
- data/ext/pg_query/include/commands/prepare.h +1 -1
- data/ext/pg_query/include/commands/tablespace.h +3 -1
- data/ext/pg_query/include/commands/trigger.h +27 -17
- data/ext/pg_query/include/commands/user.h +2 -2
- data/ext/pg_query/include/commands/vacuum.h +88 -41
- data/ext/pg_query/include/commands/variable.h +1 -1
- data/ext/pg_query/include/common/file_perm.h +4 -4
- data/ext/pg_query/include/common/hashfn.h +1 -1
- data/ext/pg_query/include/common/ip.h +1 -7
- data/ext/pg_query/include/common/keywords.h +2 -6
- data/ext/pg_query/include/common/kwlookup.h +1 -1
- data/ext/pg_query/include/common/pg_prng.h +60 -0
- data/ext/pg_query/include/common/relpath.h +2 -2
- data/ext/pg_query/include/common/string.h +24 -1
- data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
- data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
- data/ext/pg_query/include/datatype/timestamp.h +40 -1
- data/ext/pg_query/include/executor/execdesc.h +1 -1
- data/ext/pg_query/include/executor/executor.h +65 -22
- data/ext/pg_query/include/executor/functions.h +17 -3
- data/ext/pg_query/include/executor/instrument.h +33 -16
- data/ext/pg_query/include/executor/spi.h +41 -3
- data/ext/pg_query/include/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/executor/tuptable.h +1 -1
- data/ext/pg_query/include/fmgr.h +13 -7
- data/ext/pg_query/include/funcapi.h +16 -4
- data/ext/pg_query/include/getaddrinfo.h +1 -1
- data/ext/pg_query/include/jit/jit.h +11 -11
- data/ext/pg_query/include/kwlist_d.h +517 -494
- data/ext/pg_query/include/lib/dshash.h +112 -0
- data/ext/pg_query/include/lib/ilist.h +20 -1
- data/ext/pg_query/include/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/lib/simplehash.h +150 -25
- data/ext/pg_query/include/lib/sort_template.h +432 -0
- data/ext/pg_query/include/lib/stringinfo.h +1 -1
- data/ext/pg_query/include/libpq/auth.h +6 -4
- data/ext/pg_query/include/libpq/crypt.h +5 -4
- data/ext/pg_query/include/libpq/hba.h +43 -4
- data/ext/pg_query/include/libpq/libpq-be.h +23 -6
- data/ext/pg_query/include/libpq/libpq.h +31 -20
- data/ext/pg_query/include/libpq/pqcomm.h +17 -31
- data/ext/pg_query/include/libpq/pqformat.h +1 -1
- data/ext/pg_query/include/libpq/pqsignal.h +4 -4
- data/ext/pg_query/include/mb/pg_wchar.h +106 -23
- data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/miscadmin.h +71 -52
- data/ext/pg_query/include/nodes/bitmapset.h +1 -1
- data/ext/pg_query/include/nodes/execnodes.h +272 -80
- data/ext/pg_query/include/nodes/extensible.h +4 -2
- data/ext/pg_query/include/nodes/lockoptions.h +1 -1
- data/ext/pg_query/include/nodes/makefuncs.h +7 -6
- data/ext/pg_query/include/nodes/memnodes.h +5 -3
- data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
- data/ext/pg_query/include/nodes/nodes.h +30 -11
- data/ext/pg_query/include/nodes/params.h +1 -1
- data/ext/pg_query/include/nodes/parsenodes.h +327 -94
- data/ext/pg_query/include/nodes/pathnodes.h +245 -67
- data/ext/pg_query/include/nodes/pg_list.h +75 -68
- data/ext/pg_query/include/nodes/plannodes.h +128 -30
- data/ext/pg_query/include/nodes/primnodes.h +99 -47
- data/ext/pg_query/include/nodes/print.h +1 -1
- data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/nodes/value.h +58 -39
- data/ext/pg_query/include/optimizer/cost.h +9 -2
- data/ext/pg_query/include/optimizer/geqo.h +9 -7
- data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/optimizer/optimizer.h +25 -22
- data/ext/pg_query/include/optimizer/paths.h +6 -6
- data/ext/pg_query/include/optimizer/planmain.h +15 -14
- data/ext/pg_query/include/parser/analyze.h +19 -5
- data/ext/pg_query/include/parser/gram.h +947 -913
- data/ext/pg_query/include/parser/gramparse.h +1 -1
- data/ext/pg_query/include/parser/kwlist.h +463 -453
- data/ext/pg_query/include/parser/parse_agg.h +2 -7
- data/ext/pg_query/include/parser/parse_coerce.h +4 -1
- data/ext/pg_query/include/parser/parse_expr.h +2 -3
- data/ext/pg_query/include/parser/parse_func.h +2 -1
- data/ext/pg_query/include/parser/parse_node.h +21 -9
- data/ext/pg_query/include/parser/parse_oper.h +1 -3
- data/ext/pg_query/include/parser/parse_relation.h +5 -4
- data/ext/pg_query/include/parser/parse_type.h +1 -1
- data/ext/pg_query/include/parser/parser.h +31 -4
- data/ext/pg_query/include/parser/parsetree.h +1 -1
- data/ext/pg_query/include/parser/scanner.h +1 -1
- data/ext/pg_query/include/parser/scansup.h +2 -5
- data/ext/pg_query/include/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/pg_config.h +94 -46
- data/ext/pg_query/include/pg_config_manual.h +74 -21
- data/ext/pg_query/include/pg_getopt.h +6 -6
- data/ext/pg_query/include/pg_query.h +5 -4
- data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +1220 -422
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +152 -26
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +174 -30
- data/ext/pg_query/include/pg_trace.h +1 -1
- data/ext/pg_query/include/pgstat.h +449 -1237
- data/ext/pg_query/include/pgtime.h +14 -4
- data/ext/pg_query/include/pl_gram.h +126 -128
- data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
- data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/include/plerrcodes.h +9 -1
- data/ext/pg_query/include/plpgsql.h +52 -54
- data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
- data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
- data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
- data/ext/pg_query/include/port/atomics/fallback.h +1 -1
- data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
- data/ext/pg_query/include/port/atomics/generic.h +1 -1
- data/ext/pg_query/include/port/atomics.h +1 -1
- data/ext/pg_query/include/port/pg_bitutils.h +88 -12
- 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.h +72 -43
- data/ext/pg_query/include/portability/instr_time.h +1 -1
- data/ext/pg_query/include/postgres.h +60 -16
- data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
- data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
- data/ext/pg_query/include/postmaster/bgworker.h +2 -1
- data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
- data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
- 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 +42 -8
- data/ext/pg_query/include/postmaster/postmaster.h +18 -17
- data/ext/pg_query/include/postmaster/startup.h +39 -0
- data/ext/pg_query/include/postmaster/syslogger.h +15 -10
- data/ext/pg_query/include/postmaster/walwriter.h +3 -3
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1422 -916
- data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
- data/ext/pg_query/include/regex/regex.h +18 -16
- data/ext/pg_query/include/replication/logicallauncher.h +3 -5
- data/ext/pg_query/include/replication/logicalproto.h +161 -17
- data/ext/pg_query/include/replication/logicalworker.h +1 -1
- data/ext/pg_query/include/replication/origin.h +7 -7
- data/ext/pg_query/include/replication/reorderbuffer.h +262 -44
- data/ext/pg_query/include/replication/slot.h +23 -12
- data/ext/pg_query/include/replication/syncrep.h +5 -5
- data/ext/pg_query/include/replication/walreceiver.h +145 -13
- data/ext/pg_query/include/replication/walsender.h +8 -8
- data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
- data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/storage/backendid.h +3 -3
- data/ext/pg_query/include/storage/block.h +4 -10
- data/ext/pg_query/include/storage/buf.h +1 -1
- data/ext/pg_query/include/storage/bufmgr.h +19 -14
- data/ext/pg_query/include/storage/bufpage.h +6 -8
- data/ext/pg_query/include/storage/condition_variable.h +13 -2
- data/ext/pg_query/include/storage/dsm.h +4 -1
- data/ext/pg_query/include/storage/dsm_impl.h +3 -2
- data/ext/pg_query/include/storage/fd.h +33 -3
- data/ext/pg_query/include/storage/fileset.h +40 -0
- data/ext/pg_query/include/storage/ipc.h +4 -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 +3 -1
- data/ext/pg_query/include/storage/large_object.h +2 -2
- data/ext/pg_query/include/storage/latch.h +9 -13
- data/ext/pg_query/include/storage/lmgr.h +2 -1
- data/ext/pg_query/include/storage/lock.h +17 -13
- data/ext/pg_query/include/storage/lockdefs.h +2 -2
- data/ext/pg_query/include/storage/lwlock.h +6 -32
- data/ext/pg_query/include/storage/lwlocknames.h +0 -1
- 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 +9 -7
- data/ext/pg_query/include/storage/pmsignal.h +15 -4
- data/ext/pg_query/include/storage/predicate.h +4 -4
- data/ext/pg_query/include/storage/proc.h +183 -55
- data/ext/pg_query/include/storage/procarray.h +98 -0
- data/ext/pg_query/include/storage/proclist_types.h +1 -1
- data/ext/pg_query/include/storage/procsignal.h +3 -7
- data/ext/pg_query/include/storage/relfilenode.h +1 -1
- data/ext/pg_query/include/storage/s_lock.h +67 -4
- data/ext/pg_query/include/storage/sharedfileset.h +3 -11
- data/ext/pg_query/include/storage/shm_mq.h +5 -4
- data/ext/pg_query/include/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/storage/shmem.h +1 -1
- data/ext/pg_query/include/storage/sinval.h +3 -3
- data/ext/pg_query/include/storage/sinvaladt.h +1 -1
- data/ext/pg_query/include/storage/smgr.h +10 -8
- data/ext/pg_query/include/storage/spin.h +2 -2
- data/ext/pg_query/include/storage/standby.h +13 -6
- data/ext/pg_query/include/storage/standbydefs.h +2 -2
- data/ext/pg_query/include/storage/sync.h +7 -3
- data/ext/pg_query/include/tcop/cmdtag.h +1 -1
- data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
- data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
- data/ext/pg_query/include/tcop/dest.h +1 -1
- data/ext/pg_query/include/tcop/fastpath.h +1 -2
- data/ext/pg_query/include/tcop/pquery.h +7 -1
- data/ext/pg_query/include/tcop/tcopprot.h +19 -11
- data/ext/pg_query/include/tcop/utility.h +7 -3
- data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
- data/ext/pg_query/include/utils/acl.h +24 -3
- data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/utils/array.h +7 -2
- data/ext/pg_query/include/utils/backend_progress.h +44 -0
- data/ext/pg_query/include/utils/backend_status.h +321 -0
- data/ext/pg_query/include/utils/builtins.h +11 -11
- data/ext/pg_query/include/utils/bytea.h +3 -2
- data/ext/pg_query/include/utils/catcache.h +1 -1
- data/ext/pg_query/include/utils/date.h +1 -1
- data/ext/pg_query/include/utils/datetime.h +8 -7
- data/ext/pg_query/include/utils/datum.h +9 -1
- data/ext/pg_query/include/utils/dsa.h +1 -1
- data/ext/pg_query/include/utils/dynahash.h +4 -3
- data/ext/pg_query/include/utils/elog.h +52 -21
- data/ext/pg_query/include/utils/errcodes.h +2 -0
- data/ext/pg_query/include/utils/expandeddatum.h +1 -1
- data/ext/pg_query/include/utils/expandedrecord.h +1 -1
- data/ext/pg_query/include/utils/float.h +7 -7
- data/ext/pg_query/include/utils/fmgroids.h +1300 -696
- data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
- data/ext/pg_query/include/utils/fmgrtab.h +6 -5
- data/ext/pg_query/include/utils/guc.h +69 -43
- data/ext/pg_query/include/utils/guc_tables.h +23 -19
- data/ext/pg_query/include/utils/hsearch.h +15 -11
- data/ext/pg_query/include/utils/inval.h +5 -1
- data/ext/pg_query/include/utils/lsyscache.h +11 -1
- data/ext/pg_query/include/utils/memdebug.h +1 -1
- data/ext/pg_query/include/utils/memutils.h +8 -3
- data/ext/pg_query/include/utils/numeric.h +19 -5
- data/ext/pg_query/include/utils/palloc.h +25 -3
- data/ext/pg_query/include/utils/partcache.h +1 -1
- data/ext/pg_query/include/utils/pg_locale.h +17 -9
- data/ext/pg_query/include/utils/pg_lsn.h +1 -1
- data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
- data/ext/pg_query/include/utils/pidfile.h +1 -1
- data/ext/pg_query/include/utils/plancache.h +6 -5
- data/ext/pg_query/include/utils/portal.h +12 -1
- data/ext/pg_query/include/utils/ps_status.h +1 -1
- data/ext/pg_query/include/utils/queryenvironment.h +1 -1
- data/ext/pg_query/include/utils/queryjumble.h +88 -0
- data/ext/pg_query/include/utils/regproc.h +14 -3
- data/ext/pg_query/include/utils/rel.h +71 -20
- data/ext/pg_query/include/utils/relcache.h +9 -7
- 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/rls.h +2 -2
- data/ext/pg_query/include/utils/ruleutils.h +4 -1
- data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/utils/snapmgr.h +35 -14
- data/ext/pg_query/include/utils/snapshot.h +14 -1
- data/ext/pg_query/include/utils/sortsupport.h +117 -2
- data/ext/pg_query/include/utils/syscache.h +6 -1
- data/ext/pg_query/include/utils/timeout.h +11 -4
- data/ext/pg_query/include/utils/timestamp.h +6 -5
- data/ext/pg_query/include/utils/tuplesort.h +25 -11
- data/ext/pg_query/include/utils/tuplestore.h +2 -2
- data/ext/pg_query/include/utils/typcache.h +24 -17
- data/ext/pg_query/include/utils/tzparser.h +1 -1
- data/ext/pg_query/include/utils/varlena.h +5 -3
- data/ext/pg_query/include/utils/wait_event.h +289 -0
- data/ext/pg_query/include/utils/xml.h +4 -4
- data/ext/pg_query/pg_query.pb-c.c +4318 -2307
- data/ext/pg_query/pg_query_deparse.c +1114 -381
- data/ext/pg_query/pg_query_fingerprint.c +46 -10
- data/ext/pg_query/pg_query_fingerprint.h +3 -1
- data/ext/pg_query/pg_query_json_plpgsql.c +55 -12
- data/ext/pg_query/pg_query_normalize.c +163 -20
- data/ext/pg_query/pg_query_outfuncs.h +1 -0
- data/ext/pg_query/pg_query_outfuncs_json.c +65 -16
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
- data/ext/pg_query/pg_query_parse.c +1 -1
- data/ext/pg_query/pg_query_parse_plpgsql.c +79 -16
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
- data/ext/pg_query/pg_query_ruby.c +1 -1
- data/ext/pg_query/pg_query_scan.c +2 -1
- data/ext/pg_query/pg_query_split.c +3 -2
- data/ext/pg_query/src_backend_catalog_namespace.c +21 -9
- data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
- data/ext/pg_query/src_backend_commands_define.c +11 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +424 -109
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +291 -46
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +86 -11
- data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
- data/ext/pg_query/src_backend_nodes_value.c +28 -19
- data/ext/pg_query/src_backend_parser_gram.c +33890 -31262
- data/ext/pg_query/src_backend_parser_parser.c +26 -7
- data/ext/pg_query/src_backend_parser_scan.c +644 -441
- data/ext/pg_query/src_backend_parser_scansup.c +4 -28
- data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
- data/ext/pg_query/src_backend_tcop_postgres.c +73 -24
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
- data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +109 -15
- data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
- data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
- data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
- data/ext/pg_query/src_backend_utils_misc_guc.c +207 -45
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
- data/ext/pg_query/src_common_encnames.c +1 -1
- data/ext/pg_query/src_common_hashfn.c +3 -3
- data/ext/pg_query/src_common_keywords.c +15 -2
- data/ext/pg_query/src_common_kwlist_d.h +517 -494
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_pg_prng.c +152 -0
- data/ext/pg_query/src_common_psprintf.c +1 -1
- data/ext/pg_query/src_common_string.c +7 -1
- data/ext/pg_query/src_common_stringinfo.c +1 -1
- data/ext/pg_query/src_common_wchar.c +712 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1235 -1261
- 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 +10 -10
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/src_port_pg_bitutils.c +41 -52
- data/ext/pg_query/src_port_pgsleep.c +1 -1
- data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
- data/ext/pg_query/src_port_qsort.c +12 -224
- data/ext/pg_query/src_port_snprintf.c +46 -20
- data/ext/pg_query/src_port_strerror.c +9 -19
- data/ext/pg_query/src_port_strnlen.c +1 -1
- data/lib/pg_query/deparse.rb +7 -1
- data/lib/pg_query/filter_columns.rb +6 -4
- data/lib/pg_query/fingerprint.rb +18 -3
- data/lib/pg_query/node.rb +2 -2
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/parse.rb +87 -51
- data/lib/pg_query/pg_query_pb.rb +1109 -942
- data/lib/pg_query/treewalker.rb +6 -0
- data/lib/pg_query/truncate.rb +54 -8
- data/lib/pg_query/version.rb +1 -1
- metadata +29 -18
- data/ext/pg_query/include/access/xloginsert.h +0 -64
- data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
- data/ext/pg_query/include/parser/parse_clause.h +0 -54
- data/ext/pg_query/include/parser/parse_collate.h +0 -27
- data/ext/pg_query/include/parser/parse_target.h +0 -46
- data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
- data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
- data/ext/pg_query/src_port_erand48.c +0 -127
- data/ext/pg_query/src_port_random.c +0 -31
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Virtual file descriptor definitions.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/fd.h
|
|
@@ -45,6 +45,13 @@
|
|
|
45
45
|
|
|
46
46
|
#include <dirent.h>
|
|
47
47
|
|
|
48
|
+
typedef enum RecoveryInitSyncMethod
|
|
49
|
+
{
|
|
50
|
+
RECOVERY_INIT_SYNC_METHOD_FSYNC,
|
|
51
|
+
RECOVERY_INIT_SYNC_METHOD_SYNCFS
|
|
52
|
+
} RecoveryInitSyncMethod;
|
|
53
|
+
|
|
54
|
+
struct iovec; /* avoid including port/pg_iovec.h here */
|
|
48
55
|
|
|
49
56
|
typedef int File;
|
|
50
57
|
|
|
@@ -52,11 +59,12 @@ typedef int File;
|
|
|
52
59
|
/* GUC parameter */
|
|
53
60
|
extern PGDLLIMPORT int max_files_per_process;
|
|
54
61
|
extern PGDLLIMPORT bool data_sync_retry;
|
|
62
|
+
extern PGDLLIMPORT int recovery_init_sync_method;
|
|
55
63
|
|
|
56
64
|
/*
|
|
57
65
|
* This is private to fd.c, but exported for save/restore_backend_variables()
|
|
58
66
|
*/
|
|
59
|
-
extern int
|
|
67
|
+
extern PGDLLIMPORT int max_safe_fds;
|
|
60
68
|
|
|
61
69
|
/*
|
|
62
70
|
* On Windows, we have to interpret EACCES as possibly meaning the same as
|
|
@@ -71,6 +79,22 @@ extern int max_safe_fds;
|
|
|
71
79
|
#define FILE_POSSIBLY_DELETED(err) ((err) == ENOENT || (err) == EACCES)
|
|
72
80
|
#endif
|
|
73
81
|
|
|
82
|
+
/*
|
|
83
|
+
* O_DIRECT is not standard, but almost every Unix has it. We translate it
|
|
84
|
+
* to the appropriate Windows flag in src/port/open.c. We simulate it with
|
|
85
|
+
* fcntl(F_NOCACHE) on macOS inside fd.c's open() wrapper. We use the name
|
|
86
|
+
* PG_O_DIRECT rather than defining O_DIRECT in that case (probably not a good
|
|
87
|
+
* idea on a Unix).
|
|
88
|
+
*/
|
|
89
|
+
#if defined(O_DIRECT)
|
|
90
|
+
#define PG_O_DIRECT O_DIRECT
|
|
91
|
+
#elif defined(F_NOCACHE)
|
|
92
|
+
#define PG_O_DIRECT 0x80000000
|
|
93
|
+
#define PG_O_DIRECT_USE_F_NOCACHE
|
|
94
|
+
#else
|
|
95
|
+
#define PG_O_DIRECT 0
|
|
96
|
+
#endif
|
|
97
|
+
|
|
74
98
|
/*
|
|
75
99
|
* prototypes for functions in fd.c
|
|
76
100
|
*/
|
|
@@ -94,7 +118,7 @@ extern mode_t FileGetRawMode(File file);
|
|
|
94
118
|
|
|
95
119
|
/* Operations used for sharing named temporary files */
|
|
96
120
|
extern File PathNameCreateTemporaryFile(const char *name, bool error_on_failure);
|
|
97
|
-
extern File PathNameOpenTemporaryFile(const char *
|
|
121
|
+
extern File PathNameOpenTemporaryFile(const char *path, int mode);
|
|
98
122
|
extern bool PathNameDeleteTemporaryFile(const char *name, bool error_on_failure);
|
|
99
123
|
extern void PathNameCreateTemporaryDir(const char *base, const char *name);
|
|
100
124
|
extern void PathNameDeleteTemporaryDir(const char *name);
|
|
@@ -134,6 +158,7 @@ extern int MakePGDirectory(const char *directoryName);
|
|
|
134
158
|
|
|
135
159
|
/* Miscellaneous support routines */
|
|
136
160
|
extern void InitFileAccess(void);
|
|
161
|
+
extern void InitTemporaryFileAccess(void);
|
|
137
162
|
extern void set_max_safe_fds(void);
|
|
138
163
|
extern void closeAllVfds(void);
|
|
139
164
|
extern void SetTempTablespaces(Oid *tableSpaces, int numSpaces);
|
|
@@ -153,6 +178,11 @@ extern int pg_fsync_no_writethrough(int fd);
|
|
|
153
178
|
extern int pg_fsync_writethrough(int fd);
|
|
154
179
|
extern int pg_fdatasync(int fd);
|
|
155
180
|
extern void pg_flush_data(int fd, off_t offset, off_t amount);
|
|
181
|
+
extern ssize_t pg_pwritev_with_retry(int fd,
|
|
182
|
+
const struct iovec *iov,
|
|
183
|
+
int iovcnt,
|
|
184
|
+
off_t offset);
|
|
185
|
+
extern int pg_truncate(const char *path, off_t length);
|
|
156
186
|
extern void fsync_fname(const char *fname, bool isdir);
|
|
157
187
|
extern int fsync_fname_ext(const char *fname, bool isdir, bool ignore_perm, int elevel);
|
|
158
188
|
extern int durable_rename(const char *oldfile, const char *newfile, int loglevel);
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* fileset.h
|
|
4
|
+
* Management of named temporary files.
|
|
5
|
+
*
|
|
6
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
7
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
8
|
+
*
|
|
9
|
+
* src/include/storage/fileset.h
|
|
10
|
+
*
|
|
11
|
+
*-------------------------------------------------------------------------
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
#ifndef FILESET_H
|
|
15
|
+
#define FILESET_H
|
|
16
|
+
|
|
17
|
+
#include "storage/fd.h"
|
|
18
|
+
|
|
19
|
+
/*
|
|
20
|
+
* A set of temporary files.
|
|
21
|
+
*/
|
|
22
|
+
typedef struct FileSet
|
|
23
|
+
{
|
|
24
|
+
pid_t creator_pid; /* PID of the creating process */
|
|
25
|
+
uint32 number; /* per-PID identifier */
|
|
26
|
+
int ntablespaces; /* number of tablespaces to use */
|
|
27
|
+
Oid tablespaces[8]; /* OIDs of tablespaces to use. Assumes that
|
|
28
|
+
* it's rare that there more than temp
|
|
29
|
+
* tablespaces. */
|
|
30
|
+
} FileSet;
|
|
31
|
+
|
|
32
|
+
extern void FileSetInit(FileSet *fileset);
|
|
33
|
+
extern File FileSetCreate(FileSet *fileset, const char *name);
|
|
34
|
+
extern File FileSetOpen(FileSet *fileset, const char *name,
|
|
35
|
+
int mode);
|
|
36
|
+
extern bool FileSetDelete(FileSet *fileset, const char *name,
|
|
37
|
+
bool error_on_failure);
|
|
38
|
+
extern void FileSetDeleteAll(FileSet *fileset);
|
|
39
|
+
|
|
40
|
+
#endif
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* exit-time cleanup for either a postmaster or a backend.
|
|
9
9
|
*
|
|
10
10
|
*
|
|
11
|
-
* Portions Copyright (c) 1996-
|
|
11
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
12
12
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
13
13
|
*
|
|
14
14
|
* src/include/storage/ipc.h
|
|
@@ -72,10 +72,13 @@ extern void on_shmem_exit(pg_on_exit_callback function, Datum arg);
|
|
|
72
72
|
extern void before_shmem_exit(pg_on_exit_callback function, Datum arg);
|
|
73
73
|
extern void cancel_before_shmem_exit(pg_on_exit_callback function, Datum arg);
|
|
74
74
|
extern void on_exit_reset(void);
|
|
75
|
+
extern void check_on_shmem_exit_lists_are_empty(void);
|
|
75
76
|
|
|
76
77
|
/* ipci.c */
|
|
77
78
|
extern PGDLLIMPORT shmem_startup_hook_type shmem_startup_hook;
|
|
78
79
|
|
|
80
|
+
extern Size CalculateShmemSize(int *num_semaphores);
|
|
79
81
|
extern void CreateSharedMemoryAndSemaphores(void);
|
|
82
|
+
extern void InitializeShmemGUCs(void);
|
|
80
83
|
|
|
81
84
|
#endif /* IPC_H */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES disk item definitions.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/item.h
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Standard POSTGRES buffer page item identifier/line pointer definitions.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/itemid.h
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES disk item pointer definitions.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/itemptr.h
|
|
@@ -202,5 +202,7 @@ typedef ItemPointerData *ItemPointer;
|
|
|
202
202
|
|
|
203
203
|
extern bool ItemPointerEquals(ItemPointer pointer1, ItemPointer pointer2);
|
|
204
204
|
extern int32 ItemPointerCompare(ItemPointer arg1, ItemPointer arg2);
|
|
205
|
+
extern void ItemPointerInc(ItemPointer pointer);
|
|
206
|
+
extern void ItemPointerDec(ItemPointer pointer);
|
|
205
207
|
|
|
206
208
|
#endif /* ITEMPTR_H */
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* zillions of large objects (internal, external, jaquith, inversion).
|
|
6
6
|
* Now we only support inversion.
|
|
7
7
|
*
|
|
8
|
-
* Portions Copyright (c) 1996-
|
|
8
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
9
9
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
10
10
|
*
|
|
11
11
|
* src/include/storage/large_object.h
|
|
@@ -79,7 +79,7 @@ typedef struct LargeObjectDesc
|
|
|
79
79
|
/*
|
|
80
80
|
* GUC: backwards-compatibility flag to suppress LO permission checks
|
|
81
81
|
*/
|
|
82
|
-
extern bool lo_compat_privileges;
|
|
82
|
+
extern PGDLLIMPORT bool lo_compat_privileges;
|
|
83
83
|
|
|
84
84
|
/*
|
|
85
85
|
* Function definitions...
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
* efficient than using WaitLatch or WaitLatchOrSocket.
|
|
91
91
|
*
|
|
92
92
|
*
|
|
93
|
-
* Portions Copyright (c) 1996-
|
|
93
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
94
94
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
95
95
|
*
|
|
96
96
|
* src/include/storage/latch.h
|
|
@@ -110,6 +110,7 @@
|
|
|
110
110
|
typedef struct Latch
|
|
111
111
|
{
|
|
112
112
|
sig_atomic_t is_set;
|
|
113
|
+
sig_atomic_t maybe_sleeping;
|
|
113
114
|
bool is_shared;
|
|
114
115
|
int owner_pid;
|
|
115
116
|
#ifdef WIN32
|
|
@@ -133,10 +134,11 @@ typedef struct Latch
|
|
|
133
134
|
/* avoid having to deal with case on platforms not requiring it */
|
|
134
135
|
#define WL_SOCKET_CONNECTED WL_SOCKET_WRITEABLE
|
|
135
136
|
#endif
|
|
136
|
-
|
|
137
|
+
#define WL_SOCKET_CLOSED (1 << 7)
|
|
137
138
|
#define WL_SOCKET_MASK (WL_SOCKET_READABLE | \
|
|
138
139
|
WL_SOCKET_WRITEABLE | \
|
|
139
|
-
WL_SOCKET_CONNECTED
|
|
140
|
+
WL_SOCKET_CONNECTED | \
|
|
141
|
+
WL_SOCKET_CLOSED)
|
|
140
142
|
|
|
141
143
|
typedef struct WaitEvent
|
|
142
144
|
{
|
|
@@ -162,6 +164,7 @@ extern void OwnLatch(Latch *latch);
|
|
|
162
164
|
extern void DisownLatch(Latch *latch);
|
|
163
165
|
extern void SetLatch(Latch *latch);
|
|
164
166
|
extern void ResetLatch(Latch *latch);
|
|
167
|
+
extern void ShutdownLatchSupport(void);
|
|
165
168
|
|
|
166
169
|
extern WaitEventSet *CreateWaitEventSet(MemoryContext context, int nevents);
|
|
167
170
|
extern void FreeWaitEventSet(WaitEventSet *set);
|
|
@@ -176,15 +179,8 @@ extern int WaitLatch(Latch *latch, int wakeEvents, long timeout,
|
|
|
176
179
|
uint32 wait_event_info);
|
|
177
180
|
extern int WaitLatchOrSocket(Latch *latch, int wakeEvents,
|
|
178
181
|
pgsocket sock, long timeout, uint32 wait_event_info);
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
* Win32 doesn't need this.
|
|
183
|
-
*/
|
|
184
|
-
#ifndef WIN32
|
|
185
|
-
extern void latch_sigusr1_handler(void);
|
|
186
|
-
#else
|
|
187
|
-
#define latch_sigusr1_handler() ((void) 0)
|
|
188
|
-
#endif
|
|
182
|
+
extern void InitializeLatchWaitSet(void);
|
|
183
|
+
extern int GetNumRegisteredWaitEvents(WaitEventSet *set);
|
|
184
|
+
extern bool WaitEventSetCanReportClosed(void);
|
|
189
185
|
|
|
190
186
|
#endif /* LATCH_H */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES lock manager definitions.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/lmgr.h
|
|
@@ -38,6 +38,7 @@ extern void RelationInitLockInfo(Relation relation);
|
|
|
38
38
|
|
|
39
39
|
/* Lock a relation */
|
|
40
40
|
extern void LockRelationOid(Oid relid, LOCKMODE lockmode);
|
|
41
|
+
extern void LockRelationId(LockRelId *relid, LOCKMODE lockmode);
|
|
41
42
|
extern bool ConditionalLockRelationOid(Oid relid, LOCKMODE lockmode);
|
|
42
43
|
extern void UnlockRelationId(LockRelId *relid, LOCKMODE lockmode);
|
|
43
44
|
extern void UnlockRelationOid(Oid relid, LOCKMODE lockmode);
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES low-level lock mechanism
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/lock.h
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
#include "storage/lockdefs.h"
|
|
23
23
|
#include "storage/lwlock.h"
|
|
24
24
|
#include "storage/shmem.h"
|
|
25
|
+
#include "utils/timestamp.h"
|
|
25
26
|
|
|
26
27
|
/* struct PGPROC is declared in proc.h, but must forward-reference it */
|
|
27
28
|
typedef struct PGPROC PGPROC;
|
|
@@ -33,23 +34,24 @@ typedef struct PROC_QUEUE
|
|
|
33
34
|
} PROC_QUEUE;
|
|
34
35
|
|
|
35
36
|
/* GUC variables */
|
|
36
|
-
extern int
|
|
37
|
+
extern PGDLLIMPORT int max_locks_per_xact;
|
|
37
38
|
|
|
38
39
|
#ifdef LOCK_DEBUG
|
|
39
|
-
extern int
|
|
40
|
-
extern bool Trace_locks;
|
|
41
|
-
extern bool Trace_userlocks;
|
|
42
|
-
extern int
|
|
43
|
-
extern bool Debug_deadlocks;
|
|
40
|
+
extern PGDLLIMPORT int Trace_lock_oidmin;
|
|
41
|
+
extern PGDLLIMPORT bool Trace_locks;
|
|
42
|
+
extern PGDLLIMPORT bool Trace_userlocks;
|
|
43
|
+
extern PGDLLIMPORT int Trace_lock_table;
|
|
44
|
+
extern PGDLLIMPORT bool Debug_deadlocks;
|
|
44
45
|
#endif /* LOCK_DEBUG */
|
|
45
46
|
|
|
46
47
|
|
|
47
48
|
/*
|
|
48
49
|
* Top-level transactions are identified by VirtualTransactionIDs comprising
|
|
49
|
-
* PGPROC fields backendId and lxid. For prepared transactions, the
|
|
50
|
-
* LocalTransactionId is an ordinary XID
|
|
51
|
-
*
|
|
52
|
-
*
|
|
50
|
+
* PGPROC fields backendId and lxid. For recovered prepared transactions, the
|
|
51
|
+
* LocalTransactionId is an ordinary XID; LOCKTAG_VIRTUALTRANSACTION never
|
|
52
|
+
* refers to that kind. These are guaranteed unique over the short term, but
|
|
53
|
+
* will be reused after a database restart or XID wraparound; hence they
|
|
54
|
+
* should never be stored on disk.
|
|
53
55
|
*
|
|
54
56
|
* Note that struct VirtualTransactionId can not be assumed to be atomically
|
|
55
57
|
* assignable as a whole. However, type LocalTransactionId is assumed to
|
|
@@ -69,7 +71,7 @@ typedef struct
|
|
|
69
71
|
#define LocalTransactionIdIsValid(lxid) ((lxid) != InvalidLocalTransactionId)
|
|
70
72
|
#define VirtualTransactionIdIsValid(vxid) \
|
|
71
73
|
(LocalTransactionIdIsValid((vxid).localTransactionId))
|
|
72
|
-
#define
|
|
74
|
+
#define VirtualTransactionIdIsRecoveredPreparedXact(vxid) \
|
|
73
75
|
((vxid).backendId == InvalidBackendId)
|
|
74
76
|
#define VirtualTransactionIdEquals(vxid1, vxid2) \
|
|
75
77
|
((vxid1).backendId == (vxid2).backendId && \
|
|
@@ -152,7 +154,7 @@ typedef enum LockTagType
|
|
|
152
154
|
|
|
153
155
|
#define LOCKTAG_LAST_TYPE LOCKTAG_ADVISORY
|
|
154
156
|
|
|
155
|
-
extern const char *const LockTagTypeNames[];
|
|
157
|
+
extern PGDLLIMPORT const char *const LockTagTypeNames[];
|
|
156
158
|
|
|
157
159
|
/*
|
|
158
160
|
* The LOCKTAG struct is defined with malice aforethought to fit into 16
|
|
@@ -446,6 +448,8 @@ typedef struct LockInstanceData
|
|
|
446
448
|
LOCKMODE waitLockMode; /* lock awaited by this PGPROC, if any */
|
|
447
449
|
BackendId backend; /* backend ID of this PGPROC */
|
|
448
450
|
LocalTransactionId lxid; /* local transaction ID of this PGPROC */
|
|
451
|
+
TimestampTz waitStart; /* time at which this PGPROC started waiting
|
|
452
|
+
* for lock */
|
|
449
453
|
int pid; /* pid of this PGPROC */
|
|
450
454
|
int leaderPid; /* pid of group leader; = pid if no group */
|
|
451
455
|
bool fastpath; /* taken via fastpath? */
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* contains definition that have to (indirectly) be available when included by
|
|
8
8
|
* FRONTEND code.
|
|
9
9
|
*
|
|
10
|
-
* Portions Copyright (c) 1996-
|
|
10
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
11
11
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
12
12
|
*
|
|
13
13
|
* src/include/storage/lockdefs.h
|
|
@@ -45,7 +45,7 @@ typedef int LOCKMODE;
|
|
|
45
45
|
#define AccessExclusiveLock 8 /* ALTER TABLE, DROP TABLE, VACUUM FULL,
|
|
46
46
|
* and unqualified LOCK TABLE */
|
|
47
47
|
|
|
48
|
-
#define MaxLockMode 8
|
|
48
|
+
#define MaxLockMode 8 /* highest standard lock mode */
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
/* WAL representation of an AccessExclusiveLock on a table */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Lightweight lock manager
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/lwlock.h
|
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
|
|
21
21
|
#include "port/atomics.h"
|
|
22
22
|
#include "storage/proclist_types.h"
|
|
23
|
-
#include "storage/s_lock.h"
|
|
24
23
|
|
|
25
24
|
struct PGPROC;
|
|
26
25
|
|
|
@@ -49,29 +48,8 @@ typedef struct LWLock
|
|
|
49
48
|
* even more padding so that each LWLock takes up an entire cache line; this is
|
|
50
49
|
* useful, for example, in the main LWLock array, where the overall number of
|
|
51
50
|
* locks is small but some are heavily contended.
|
|
52
|
-
*
|
|
53
|
-
* When allocating a tranche that contains data other than LWLocks, it is
|
|
54
|
-
* probably best to include a bare LWLock and then pad the resulting structure
|
|
55
|
-
* as necessary for performance. For an array that contains only LWLocks,
|
|
56
|
-
* LWLockMinimallyPadded can be used for cases where we just want to ensure
|
|
57
|
-
* that we don't cross cache line boundaries within a single lock, while
|
|
58
|
-
* LWLockPadded can be used for cases where we want each lock to be an entire
|
|
59
|
-
* cache line.
|
|
60
|
-
*
|
|
61
|
-
* An LWLockMinimallyPadded might contain more than the absolute minimum amount
|
|
62
|
-
* of padding required to keep a lock from crossing a cache line boundary,
|
|
63
|
-
* because an unpadded LWLock will normally fit into 16 bytes. We ignore that
|
|
64
|
-
* possibility when determining the minimal amount of padding. Older releases
|
|
65
|
-
* had larger LWLocks, so 32 really was the minimum, and packing them in
|
|
66
|
-
* tighter might hurt performance.
|
|
67
|
-
*
|
|
68
|
-
* LWLOCK_MINIMAL_SIZE should be 32 on basically all common platforms, but
|
|
69
|
-
* because pg_atomic_uint32 is more than 4 bytes on some obscure platforms, we
|
|
70
|
-
* allow for the possibility that it might be 64. Even on those platforms,
|
|
71
|
-
* we probably won't exceed 32 bytes unless LOCK_DEBUG is defined.
|
|
72
51
|
*/
|
|
73
52
|
#define LWLOCK_PADDED_SIZE PG_CACHE_LINE_SIZE
|
|
74
|
-
#define LWLOCK_MINIMAL_SIZE (sizeof(LWLock) <= 32 ? 32 : 64)
|
|
75
53
|
|
|
76
54
|
/* LWLock, padded to a full cache line size */
|
|
77
55
|
typedef union LWLockPadded
|
|
@@ -80,13 +58,6 @@ typedef union LWLockPadded
|
|
|
80
58
|
char pad[LWLOCK_PADDED_SIZE];
|
|
81
59
|
} LWLockPadded;
|
|
82
60
|
|
|
83
|
-
/* LWLock, minimally padded */
|
|
84
|
-
typedef union LWLockMinimallyPadded
|
|
85
|
-
{
|
|
86
|
-
LWLock lock;
|
|
87
|
-
char pad[LWLOCK_MINIMAL_SIZE];
|
|
88
|
-
} LWLockMinimallyPadded;
|
|
89
|
-
|
|
90
61
|
extern PGDLLIMPORT LWLockPadded *MainLWLockArray;
|
|
91
62
|
|
|
92
63
|
/* struct for storing named tranche information */
|
|
@@ -139,7 +110,7 @@ typedef enum LWLockMode
|
|
|
139
110
|
|
|
140
111
|
|
|
141
112
|
#ifdef LOCK_DEBUG
|
|
142
|
-
extern bool Trace_lwlocks;
|
|
113
|
+
extern PGDLLIMPORT bool Trace_lwlocks;
|
|
143
114
|
#endif
|
|
144
115
|
|
|
145
116
|
extern bool LWLockAcquire(LWLock *lock, LWLockMode mode);
|
|
@@ -149,6 +120,7 @@ extern void LWLockRelease(LWLock *lock);
|
|
|
149
120
|
extern void LWLockReleaseClearVar(LWLock *lock, uint64 *valptr, uint64 val);
|
|
150
121
|
extern void LWLockReleaseAll(void);
|
|
151
122
|
extern bool LWLockHeldByMe(LWLock *lock);
|
|
123
|
+
extern bool LWLockAnyHeldByMe(LWLock *lock, int nlocks, size_t stride);
|
|
152
124
|
extern bool LWLockHeldByMeInMode(LWLock *lock, LWLockMode mode);
|
|
153
125
|
|
|
154
126
|
extern bool LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval);
|
|
@@ -203,7 +175,6 @@ typedef enum BuiltinTrancheIds
|
|
|
203
175
|
LWTRANCHE_SERIAL_BUFFER,
|
|
204
176
|
LWTRANCHE_WAL_INSERT,
|
|
205
177
|
LWTRANCHE_BUFFER_CONTENT,
|
|
206
|
-
LWTRANCHE_BUFFER_IO,
|
|
207
178
|
LWTRANCHE_REPLICATION_ORIGIN_STATE,
|
|
208
179
|
LWTRANCHE_REPLICATION_SLOT_IO,
|
|
209
180
|
LWTRANCHE_LOCK_FASTPATH,
|
|
@@ -219,6 +190,9 @@ typedef enum BuiltinTrancheIds
|
|
|
219
190
|
LWTRANCHE_SHARED_TIDBITMAP,
|
|
220
191
|
LWTRANCHE_PARALLEL_APPEND,
|
|
221
192
|
LWTRANCHE_PER_XACT_PREDICATE_LIST,
|
|
193
|
+
LWTRANCHE_PGSTATS_DSA,
|
|
194
|
+
LWTRANCHE_PGSTATS_HASH,
|
|
195
|
+
LWTRANCHE_PGSTATS_DATA,
|
|
222
196
|
LWTRANCHE_FIRST_USER_DEFINED
|
|
223
197
|
} BuiltinTrancheIds;
|
|
224
198
|
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
#define WALBufMappingLock (&MainLWLockArray[7].lock)
|
|
11
11
|
#define WALWriteLock (&MainLWLockArray[8].lock)
|
|
12
12
|
#define ControlFileLock (&MainLWLockArray[9].lock)
|
|
13
|
-
#define CheckpointLock (&MainLWLockArray[10].lock)
|
|
14
13
|
#define XactSLRULock (&MainLWLockArray[11].lock)
|
|
15
14
|
#define SubtransSLRULock (&MainLWLockArray[12].lock)
|
|
16
15
|
#define MultiXactGenLock (&MainLWLockArray[13].lock)
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES disk "offset" definitions.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/off.h
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* be provided by each port.
|
|
11
11
|
*
|
|
12
12
|
*
|
|
13
|
-
* Portions Copyright (c) 1996-
|
|
13
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
14
14
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
15
15
|
*
|
|
16
16
|
* src/include/storage/pg_sema.h
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* only one ID number.
|
|
15
15
|
*
|
|
16
16
|
*
|
|
17
|
-
* Portions Copyright (c) 1996-
|
|
17
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
18
18
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
19
19
|
*
|
|
20
20
|
* src/include/storage/pg_shmem.h
|
|
@@ -42,8 +42,9 @@ typedef struct PGShmemHeader /* standard header for all Postgres shmem */
|
|
|
42
42
|
} PGShmemHeader;
|
|
43
43
|
|
|
44
44
|
/* GUC variables */
|
|
45
|
-
extern int
|
|
46
|
-
extern int
|
|
45
|
+
extern PGDLLIMPORT int shared_memory_type;
|
|
46
|
+
extern PGDLLIMPORT int huge_pages;
|
|
47
|
+
extern PGDLLIMPORT int huge_page_size;
|
|
47
48
|
|
|
48
49
|
/* Possible values for huge_pages */
|
|
49
50
|
typedef enum
|
|
@@ -62,12 +63,12 @@ typedef enum
|
|
|
62
63
|
} PGShmemType;
|
|
63
64
|
|
|
64
65
|
#ifndef WIN32
|
|
65
|
-
extern unsigned long UsedShmemSegID;
|
|
66
|
+
extern PGDLLIMPORT unsigned long UsedShmemSegID;
|
|
66
67
|
#else
|
|
67
|
-
extern HANDLE UsedShmemSegID;
|
|
68
|
-
extern void *ShmemProtectiveRegion;
|
|
68
|
+
extern PGDLLIMPORT HANDLE UsedShmemSegID;
|
|
69
|
+
extern PGDLLIMPORT void *ShmemProtectiveRegion;
|
|
69
70
|
#endif
|
|
70
|
-
extern void *UsedShmemSegAddr;
|
|
71
|
+
extern PGDLLIMPORT void *UsedShmemSegAddr;
|
|
71
72
|
|
|
72
73
|
#if !defined(WIN32) && !defined(EXEC_BACKEND)
|
|
73
74
|
#define DEFAULT_SHARED_MEMORY_TYPE SHMEM_TYPE_MMAP
|
|
@@ -86,5 +87,6 @@ extern PGShmemHeader *PGSharedMemoryCreate(Size size,
|
|
|
86
87
|
PGShmemHeader **shim);
|
|
87
88
|
extern bool PGSharedMemoryIsInUse(unsigned long id1, unsigned long id2);
|
|
88
89
|
extern void PGSharedMemoryDetach(void);
|
|
90
|
+
extern void GetHugePageSize(Size *hugepagesize, int *mmap_flags);
|
|
89
91
|
|
|
90
92
|
#endif /* PG_SHMEM_H */
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/*-------------------------------------------------------------------------
|
|
2
2
|
*
|
|
3
3
|
* pmsignal.h
|
|
4
|
-
* routines for signaling the postmaster
|
|
4
|
+
* routines for signaling between the postmaster and its child processes
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/pmsignal.h
|
|
@@ -34,7 +34,6 @@ typedef enum
|
|
|
34
34
|
{
|
|
35
35
|
PMSIGNAL_RECOVERY_STARTED, /* recovery has started */
|
|
36
36
|
PMSIGNAL_BEGIN_HOT_STANDBY, /* begin Hot Standby */
|
|
37
|
-
PMSIGNAL_WAKEN_ARCHIVER, /* send a NOTIFY signal to xlog archiver */
|
|
38
37
|
PMSIGNAL_ROTATE_LOGFILE, /* send SIGUSR1 to syslogger to rotate logfile */
|
|
39
38
|
PMSIGNAL_START_AUTOVAC_LAUNCHER, /* start an autovacuum launcher */
|
|
40
39
|
PMSIGNAL_START_AUTOVAC_WORKER, /* start an autovacuum worker */
|
|
@@ -45,6 +44,16 @@ typedef enum
|
|
|
45
44
|
NUM_PMSIGNALS /* Must be last value of enum! */
|
|
46
45
|
} PMSignalReason;
|
|
47
46
|
|
|
47
|
+
/*
|
|
48
|
+
* Reasons why the postmaster would send SIGQUIT to its children.
|
|
49
|
+
*/
|
|
50
|
+
typedef enum
|
|
51
|
+
{
|
|
52
|
+
PMQUIT_NOT_SENT = 0, /* postmaster hasn't sent SIGQUIT */
|
|
53
|
+
PMQUIT_FOR_CRASH, /* some other backend bought the farm */
|
|
54
|
+
PMQUIT_FOR_STOP /* immediate stop was commanded */
|
|
55
|
+
} QuitSignalReason;
|
|
56
|
+
|
|
48
57
|
/* PMSignalData is an opaque struct, details known only within pmsignal.c */
|
|
49
58
|
typedef struct PMSignalData PMSignalData;
|
|
50
59
|
|
|
@@ -55,6 +64,8 @@ extern Size PMSignalShmemSize(void);
|
|
|
55
64
|
extern void PMSignalShmemInit(void);
|
|
56
65
|
extern void SendPostmasterSignal(PMSignalReason reason);
|
|
57
66
|
extern bool CheckPostmasterSignal(PMSignalReason reason);
|
|
67
|
+
extern void SetQuitSignalReason(QuitSignalReason reason);
|
|
68
|
+
extern QuitSignalReason GetQuitSignalReason(void);
|
|
58
69
|
extern int AssignPostmasterChildSlot(void);
|
|
59
70
|
extern bool ReleasePostmasterChildSlot(int slot);
|
|
60
71
|
extern bool IsPostmasterChildWalSender(int slot);
|
|
@@ -78,7 +89,7 @@ extern void PostmasterDeathSignalInit(void);
|
|
|
78
89
|
#endif
|
|
79
90
|
|
|
80
91
|
#ifdef USE_POSTMASTER_DEATH_SIGNAL
|
|
81
|
-
extern volatile sig_atomic_t postmaster_possibly_dead;
|
|
92
|
+
extern PGDLLIMPORT volatile sig_atomic_t postmaster_possibly_dead;
|
|
82
93
|
|
|
83
94
|
static inline bool
|
|
84
95
|
PostmasterIsAlive(void)
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES public predicate locking definitions.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/predicate.h
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
/*
|
|
23
23
|
* GUC variables
|
|
24
24
|
*/
|
|
25
|
-
extern int
|
|
26
|
-
extern int
|
|
27
|
-
extern int
|
|
25
|
+
extern PGDLLIMPORT int max_predicate_locks_per_xact;
|
|
26
|
+
extern PGDLLIMPORT int max_predicate_locks_per_relation;
|
|
27
|
+
extern PGDLLIMPORT int max_predicate_locks_per_page;
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
/* Number of SLRU buffers to use for Serial SLRU */
|