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
|
* postgres transaction access method support code
|
|
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/access/transam.h
|
|
@@ -54,6 +54,8 @@
|
|
|
54
54
|
#define FullTransactionIdFollowsOrEquals(a, b) ((a).value >= (b).value)
|
|
55
55
|
#define FullTransactionIdIsValid(x) TransactionIdIsValid(XidFromFullTransactionId(x))
|
|
56
56
|
#define InvalidFullTransactionId FullTransactionIdFromEpochAndXid(0, InvalidTransactionId)
|
|
57
|
+
#define FirstNormalFullTransactionId FullTransactionIdFromEpochAndXid(0, FirstNormalTransactionId)
|
|
58
|
+
#define FullTransactionIdIsNormal(x) FullTransactionIdFollowsOrEquals(x, FirstNormalFullTransactionId)
|
|
57
59
|
|
|
58
60
|
/*
|
|
59
61
|
* A 64 bit value that contains an epoch and a TransactionId. This is
|
|
@@ -93,11 +95,44 @@ FullTransactionIdFromU64(uint64 value)
|
|
|
93
95
|
(dest) = FirstNormalTransactionId; \
|
|
94
96
|
} while(0)
|
|
95
97
|
|
|
96
|
-
/*
|
|
98
|
+
/*
|
|
99
|
+
* Retreat a FullTransactionId variable, stepping over xids that would appear
|
|
100
|
+
* to be special only when viewed as 32bit XIDs.
|
|
101
|
+
*/
|
|
102
|
+
static inline void
|
|
103
|
+
FullTransactionIdRetreat(FullTransactionId *dest)
|
|
104
|
+
{
|
|
105
|
+
dest->value--;
|
|
106
|
+
|
|
107
|
+
/*
|
|
108
|
+
* In contrast to 32bit XIDs don't step over the "actual" special xids.
|
|
109
|
+
* For 64bit xids these can't be reached as part of a wraparound as they
|
|
110
|
+
* can in the 32bit case.
|
|
111
|
+
*/
|
|
112
|
+
if (FullTransactionIdPrecedes(*dest, FirstNormalFullTransactionId))
|
|
113
|
+
return;
|
|
114
|
+
|
|
115
|
+
/*
|
|
116
|
+
* But we do need to step over XIDs that'd appear special only for 32bit
|
|
117
|
+
* XIDs.
|
|
118
|
+
*/
|
|
119
|
+
while (XidFromFullTransactionId(*dest) < FirstNormalTransactionId)
|
|
120
|
+
dest->value--;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/*
|
|
124
|
+
* Advance a FullTransactionId variable, stepping over xids that would appear
|
|
125
|
+
* to be special only when viewed as 32bit XIDs.
|
|
126
|
+
*/
|
|
97
127
|
static inline void
|
|
98
128
|
FullTransactionIdAdvance(FullTransactionId *dest)
|
|
99
129
|
{
|
|
100
130
|
dest->value++;
|
|
131
|
+
|
|
132
|
+
/* see FullTransactionIdAdvance() */
|
|
133
|
+
if (FullTransactionIdPrecedes(*dest, FirstNormalFullTransactionId))
|
|
134
|
+
return;
|
|
135
|
+
|
|
101
136
|
while (XidFromFullTransactionId(*dest) < FirstNormalTransactionId)
|
|
102
137
|
dest->value++;
|
|
103
138
|
}
|
|
@@ -128,10 +163,16 @@ FullTransactionIdAdvance(FullTransactionId *dest)
|
|
|
128
163
|
*
|
|
129
164
|
* OIDs 10000-11999 are reserved for assignment by genbki.pl, for use
|
|
130
165
|
* when the .dat files in src/include/catalog/ do not specify an OID
|
|
131
|
-
* for a catalog entry that requires one.
|
|
166
|
+
* for a catalog entry that requires one. Note that genbki.pl assigns
|
|
167
|
+
* these OIDs independently in each catalog, so they're not guaranteed
|
|
168
|
+
* to be globally unique. Furthermore, the bootstrap backend and
|
|
169
|
+
* initdb's post-bootstrap processing can also assign OIDs in this range.
|
|
170
|
+
* The normal OID-generation logic takes care of any OID conflicts that
|
|
171
|
+
* might arise from that.
|
|
132
172
|
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
173
|
+
* OIDs 12000-16383 are reserved for unpinned objects created by initdb's
|
|
174
|
+
* post-bootstrap processing. initdb forces the OID generator up to
|
|
175
|
+
* 12000 as soon as it's made the pinned objects it's responsible for.
|
|
135
176
|
*
|
|
136
177
|
* OIDs beginning at 16384 are assigned from the OID generator
|
|
137
178
|
* during normal multiuser operation. (We force the generator up to
|
|
@@ -147,11 +188,12 @@ FullTransactionIdAdvance(FullTransactionId *dest)
|
|
|
147
188
|
*
|
|
148
189
|
* NOTE: if the OID generator wraps around, we skip over OIDs 0-16383
|
|
149
190
|
* and resume with 16384. This minimizes the odds of OID conflict, by not
|
|
150
|
-
* reassigning OIDs that might have been assigned during initdb.
|
|
191
|
+
* reassigning OIDs that might have been assigned during initdb. Critically,
|
|
192
|
+
* it also ensures that no user-created object will be considered pinned.
|
|
151
193
|
* ----------
|
|
152
194
|
*/
|
|
153
195
|
#define FirstGenbkiObjectId 10000
|
|
154
|
-
#define
|
|
196
|
+
#define FirstUnpinnedObjectId 12000
|
|
155
197
|
#define FirstNormalObjectId 16384
|
|
156
198
|
|
|
157
199
|
/*
|
|
@@ -175,12 +217,12 @@ typedef struct VariableCacheData
|
|
|
175
217
|
/*
|
|
176
218
|
* These fields are protected by XidGenLock.
|
|
177
219
|
*/
|
|
178
|
-
FullTransactionId
|
|
220
|
+
FullTransactionId nextXid; /* next XID to assign */
|
|
179
221
|
|
|
180
222
|
TransactionId oldestXid; /* cluster-wide minimum datfrozenxid */
|
|
181
223
|
TransactionId xidVacLimit; /* start forcing autovacuums here */
|
|
182
224
|
TransactionId xidWarnLimit; /* start complaining here */
|
|
183
|
-
TransactionId xidStopLimit; /* refuse to advance
|
|
225
|
+
TransactionId xidStopLimit; /* refuse to advance nextXid beyond here */
|
|
184
226
|
TransactionId xidWrapLimit; /* where the world ends */
|
|
185
227
|
Oid oldestXidDB; /* database with minimum datfrozenxid */
|
|
186
228
|
|
|
@@ -193,8 +235,17 @@ typedef struct VariableCacheData
|
|
|
193
235
|
/*
|
|
194
236
|
* These fields are protected by ProcArrayLock.
|
|
195
237
|
*/
|
|
196
|
-
|
|
197
|
-
|
|
238
|
+
FullTransactionId latestCompletedXid; /* newest full XID that has
|
|
239
|
+
* committed or aborted */
|
|
240
|
+
|
|
241
|
+
/*
|
|
242
|
+
* Number of top-level transactions with xids (i.e. which may have
|
|
243
|
+
* modified the database) that completed in some form since the start of
|
|
244
|
+
* the server. This currently is solely used to check whether
|
|
245
|
+
* GetSnapshotData() needs to recompute the contents of the snapshot, or
|
|
246
|
+
* not. There are likely other users of this. Always above 1.
|
|
247
|
+
*/
|
|
248
|
+
uint64 xactCompletionCount;
|
|
198
249
|
|
|
199
250
|
/*
|
|
200
251
|
* These fields are protected by XactTruncationLock
|
|
@@ -222,7 +273,6 @@ extern PGDLLIMPORT VariableCache ShmemVariableCache;
|
|
|
222
273
|
*/
|
|
223
274
|
extern bool TransactionIdDidCommit(TransactionId transactionId);
|
|
224
275
|
extern bool TransactionIdDidAbort(TransactionId transactionId);
|
|
225
|
-
extern bool TransactionIdIsKnownCompleted(TransactionId transactionId);
|
|
226
276
|
extern void TransactionIdCommitTree(TransactionId xid, int nxids, TransactionId *xids);
|
|
227
277
|
extern void TransactionIdAsyncCommitTree(TransactionId xid, int nxids, TransactionId *xids, XLogRecPtr lsn);
|
|
228
278
|
extern void TransactionIdAbortTree(TransactionId xid, int nxids, TransactionId *xids);
|
|
@@ -243,6 +293,13 @@ extern void SetTransactionIdLimit(TransactionId oldest_datfrozenxid,
|
|
|
243
293
|
extern void AdvanceOldestClogXid(TransactionId oldest_datfrozenxid);
|
|
244
294
|
extern bool ForceTransactionIdLimitUpdate(void);
|
|
245
295
|
extern Oid GetNewObjectId(void);
|
|
296
|
+
extern void StopGeneratingPinnedObjectIds(void);
|
|
297
|
+
|
|
298
|
+
#ifdef USE_ASSERT_CHECKING
|
|
299
|
+
extern void AssertTransactionIdInAllowableRange(TransactionId xid);
|
|
300
|
+
#else
|
|
301
|
+
#define AssertTransactionIdInAllowableRange(xid) ((void)true)
|
|
302
|
+
#endif
|
|
246
303
|
|
|
247
304
|
/*
|
|
248
305
|
* Some frontend programs include this header. For compilers that emit static
|
|
@@ -255,11 +312,64 @@ extern Oid GetNewObjectId(void);
|
|
|
255
312
|
* For callers that just need the XID part of the next transaction ID.
|
|
256
313
|
*/
|
|
257
314
|
static inline TransactionId
|
|
258
|
-
|
|
315
|
+
ReadNextTransactionId(void)
|
|
259
316
|
{
|
|
260
317
|
return XidFromFullTransactionId(ReadNextFullTransactionId());
|
|
261
318
|
}
|
|
262
319
|
|
|
320
|
+
/* return transaction ID backed up by amount, handling wraparound correctly */
|
|
321
|
+
static inline TransactionId
|
|
322
|
+
TransactionIdRetreatedBy(TransactionId xid, uint32 amount)
|
|
323
|
+
{
|
|
324
|
+
xid -= amount;
|
|
325
|
+
|
|
326
|
+
while (xid < FirstNormalTransactionId)
|
|
327
|
+
xid--;
|
|
328
|
+
|
|
329
|
+
return xid;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/* return the older of the two IDs */
|
|
333
|
+
static inline TransactionId
|
|
334
|
+
TransactionIdOlder(TransactionId a, TransactionId b)
|
|
335
|
+
{
|
|
336
|
+
if (!TransactionIdIsValid(a))
|
|
337
|
+
return b;
|
|
338
|
+
|
|
339
|
+
if (!TransactionIdIsValid(b))
|
|
340
|
+
return a;
|
|
341
|
+
|
|
342
|
+
if (TransactionIdPrecedes(a, b))
|
|
343
|
+
return a;
|
|
344
|
+
return b;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/* return the older of the two IDs, assuming they're both normal */
|
|
348
|
+
static inline TransactionId
|
|
349
|
+
NormalTransactionIdOlder(TransactionId a, TransactionId b)
|
|
350
|
+
{
|
|
351
|
+
Assert(TransactionIdIsNormal(a));
|
|
352
|
+
Assert(TransactionIdIsNormal(b));
|
|
353
|
+
if (NormalTransactionIdPrecedes(a, b))
|
|
354
|
+
return a;
|
|
355
|
+
return b;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/* return the newer of the two IDs */
|
|
359
|
+
static inline FullTransactionId
|
|
360
|
+
FullTransactionIdNewer(FullTransactionId a, FullTransactionId b)
|
|
361
|
+
{
|
|
362
|
+
if (!FullTransactionIdIsValid(a))
|
|
363
|
+
return b;
|
|
364
|
+
|
|
365
|
+
if (!FullTransactionIdIsValid(b))
|
|
366
|
+
return a;
|
|
367
|
+
|
|
368
|
+
if (FullTransactionIdFollows(a, b))
|
|
369
|
+
return a;
|
|
370
|
+
return b;
|
|
371
|
+
}
|
|
372
|
+
|
|
263
373
|
#endif /* FRONTEND */
|
|
264
374
|
|
|
265
375
|
#endif /* TRANSAM_H */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Tuple conversion support.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/access/tupconvert.h
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES tuple descriptor definitions.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/access/tupdesc.h
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Tuple macros used by both index tuples and heap tuples.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/access/tupmacs.h
|
|
@@ -139,8 +139,8 @@
|
|
|
139
139
|
* * we need to estimate alignment padding cost abstractly, ie without
|
|
140
140
|
* reference to a real tuple. We must assume the worst case that
|
|
141
141
|
* all varlenas are aligned.
|
|
142
|
-
* * within arrays, we unconditionally align varlenas (XXX this
|
|
143
|
-
* revisited, probably).
|
|
142
|
+
* * within arrays and multiranges, we unconditionally align varlenas (XXX this
|
|
143
|
+
* should be revisited, probably).
|
|
144
144
|
*
|
|
145
145
|
* The attalign cases are tested in what is hopefully something like their
|
|
146
146
|
* frequency of occurrence.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Two-phase-commit related declarations.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/access/twophase.h
|
|
@@ -34,6 +34,8 @@ extern void TwoPhaseShmemInit(void);
|
|
|
34
34
|
extern void AtAbort_Twophase(void);
|
|
35
35
|
extern void PostPrepare_Twophase(void);
|
|
36
36
|
|
|
37
|
+
extern TransactionId TwoPhaseGetXidByVirtualXID(VirtualTransactionId vxid,
|
|
38
|
+
bool *have_more);
|
|
37
39
|
extern PGPROC *TwoPhaseGetDummyProc(TransactionId xid, bool lock_held);
|
|
38
40
|
extern BackendId TwoPhaseGetDummyBackendId(TransactionId xid, bool lock_held);
|
|
39
41
|
|
|
@@ -58,4 +60,6 @@ extern void PrepareRedoAdd(char *buf, XLogRecPtr start_lsn,
|
|
|
58
60
|
XLogRecPtr end_lsn, RepOriginId origin_id);
|
|
59
61
|
extern void PrepareRedoRemove(TransactionId xid, bool giveWarning);
|
|
60
62
|
extern void restoreTwoPhaseData(void);
|
|
63
|
+
extern bool LookupGXact(const char *gid, XLogRecPtr prepare_at_lsn,
|
|
64
|
+
TimestampTz origin_prepare_timestamp);
|
|
61
65
|
#endif /* TWOPHASE_H */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* postgres transaction system 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/access/xact.h
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
|
|
17
17
|
#include "access/transam.h"
|
|
18
18
|
#include "access/xlogreader.h"
|
|
19
|
+
#include "datatype/timestamp.h"
|
|
19
20
|
#include "lib/stringinfo.h"
|
|
20
21
|
#include "nodes/pg_list.h"
|
|
21
22
|
#include "storage/relfilenode.h"
|
|
22
23
|
#include "storage/sinval.h"
|
|
23
|
-
#include "utils/datetime.h"
|
|
24
24
|
|
|
25
25
|
/*
|
|
26
26
|
* Maximum size of Global Transaction ID (including '\0').
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
#define XACT_REPEATABLE_READ 2
|
|
39
39
|
#define XACT_SERIALIZABLE 3
|
|
40
40
|
|
|
41
|
-
extern int
|
|
41
|
+
extern PGDLLIMPORT int DefaultXactIsoLevel;
|
|
42
42
|
extern PGDLLIMPORT int XactIsoLevel;
|
|
43
43
|
|
|
44
44
|
/*
|
|
@@ -52,18 +52,18 @@ extern PGDLLIMPORT int XactIsoLevel;
|
|
|
52
52
|
#define IsolationIsSerializable() (XactIsoLevel == XACT_SERIALIZABLE)
|
|
53
53
|
|
|
54
54
|
/* Xact read-only state */
|
|
55
|
-
extern bool DefaultXactReadOnly;
|
|
56
|
-
extern bool XactReadOnly;
|
|
55
|
+
extern PGDLLIMPORT bool DefaultXactReadOnly;
|
|
56
|
+
extern PGDLLIMPORT bool XactReadOnly;
|
|
57
57
|
|
|
58
58
|
/* flag for logging statements in this transaction */
|
|
59
|
-
extern bool xact_is_sampled;
|
|
59
|
+
extern PGDLLIMPORT bool xact_is_sampled;
|
|
60
60
|
|
|
61
61
|
/*
|
|
62
62
|
* Xact is deferrable -- only meaningful (currently) for read only
|
|
63
63
|
* SERIALIZABLE transactions
|
|
64
64
|
*/
|
|
65
|
-
extern bool DefaultXactDeferrable;
|
|
66
|
-
extern bool XactDeferrable;
|
|
65
|
+
extern PGDLLIMPORT bool DefaultXactDeferrable;
|
|
66
|
+
extern PGDLLIMPORT bool XactDeferrable;
|
|
67
67
|
|
|
68
68
|
typedef enum
|
|
69
69
|
{
|
|
@@ -72,15 +72,19 @@ typedef enum
|
|
|
72
72
|
SYNCHRONOUS_COMMIT_REMOTE_WRITE, /* wait for local flush and remote
|
|
73
73
|
* write */
|
|
74
74
|
SYNCHRONOUS_COMMIT_REMOTE_FLUSH, /* wait for local and remote flush */
|
|
75
|
-
SYNCHRONOUS_COMMIT_REMOTE_APPLY /* wait for local and remote flush
|
|
76
|
-
|
|
75
|
+
SYNCHRONOUS_COMMIT_REMOTE_APPLY /* wait for local and remote flush and
|
|
76
|
+
* remote apply */
|
|
77
77
|
} SyncCommitLevel;
|
|
78
78
|
|
|
79
79
|
/* Define the default setting for synchronous_commit */
|
|
80
80
|
#define SYNCHRONOUS_COMMIT_ON SYNCHRONOUS_COMMIT_REMOTE_FLUSH
|
|
81
81
|
|
|
82
82
|
/* Synchronous commit level */
|
|
83
|
-
extern int
|
|
83
|
+
extern PGDLLIMPORT int synchronous_commit;
|
|
84
|
+
|
|
85
|
+
/* used during logical streaming of a transaction */
|
|
86
|
+
extern PGDLLIMPORT TransactionId CheckXidAlive;
|
|
87
|
+
extern PGDLLIMPORT bool bsysscan;
|
|
84
88
|
|
|
85
89
|
/*
|
|
86
90
|
* Miscellaneous flag bits to record events which occur on the top level
|
|
@@ -89,7 +93,7 @@ extern int synchronous_commit;
|
|
|
89
93
|
* globally accessible, so can be set from anywhere in the code which requires
|
|
90
94
|
* recording flags.
|
|
91
95
|
*/
|
|
92
|
-
extern int
|
|
96
|
+
extern PGDLLIMPORT int MyXactFlags;
|
|
93
97
|
|
|
94
98
|
/*
|
|
95
99
|
* XACT_FLAGS_ACCESSEDTEMPNAMESPACE - set when a temporary object is accessed.
|
|
@@ -103,6 +107,12 @@ extern int MyXactFlags;
|
|
|
103
107
|
*/
|
|
104
108
|
#define XACT_FLAGS_ACQUIREDACCESSEXCLUSIVELOCK (1U << 1)
|
|
105
109
|
|
|
110
|
+
/*
|
|
111
|
+
* XACT_FLAGS_NEEDIMMEDIATECOMMIT - records whether the top level statement
|
|
112
|
+
* is one that requires immediate commit, such as CREATE DATABASE.
|
|
113
|
+
*/
|
|
114
|
+
#define XACT_FLAGS_NEEDIMMEDIATECOMMIT (1U << 2)
|
|
115
|
+
|
|
106
116
|
/*
|
|
107
117
|
* start- and end-of-transaction callbacks for dynamically loaded modules
|
|
108
118
|
*/
|
|
@@ -131,6 +141,14 @@ typedef enum
|
|
|
131
141
|
typedef void (*SubXactCallback) (SubXactEvent event, SubTransactionId mySubid,
|
|
132
142
|
SubTransactionId parentSubid, void *arg);
|
|
133
143
|
|
|
144
|
+
/* Data structure for Save/RestoreTransactionCharacteristics */
|
|
145
|
+
typedef struct SavedTransactionCharacteristics
|
|
146
|
+
{
|
|
147
|
+
int save_XactIsoLevel;
|
|
148
|
+
bool save_XactReadOnly;
|
|
149
|
+
bool save_XactDeferrable;
|
|
150
|
+
} SavedTransactionCharacteristics;
|
|
151
|
+
|
|
134
152
|
|
|
135
153
|
/* ----------------
|
|
136
154
|
* transaction-related XLOG entries
|
|
@@ -147,7 +165,7 @@ typedef void (*SubXactCallback) (SubXactEvent event, SubTransactionId mySubid,
|
|
|
147
165
|
#define XLOG_XACT_COMMIT_PREPARED 0x30
|
|
148
166
|
#define XLOG_XACT_ABORT_PREPARED 0x40
|
|
149
167
|
#define XLOG_XACT_ASSIGNMENT 0x50
|
|
150
|
-
|
|
168
|
+
#define XLOG_XACT_INVALIDATIONS 0x60
|
|
151
169
|
/* free opcode 0x70 */
|
|
152
170
|
|
|
153
171
|
/* mask for filtering opcodes out of xl_info */
|
|
@@ -168,6 +186,7 @@ typedef void (*SubXactCallback) (SubXactEvent event, SubTransactionId mySubid,
|
|
|
168
186
|
#define XACT_XINFO_HAS_ORIGIN (1U << 5)
|
|
169
187
|
#define XACT_XINFO_HAS_AE_LOCKS (1U << 6)
|
|
170
188
|
#define XACT_XINFO_HAS_GID (1U << 7)
|
|
189
|
+
#define XACT_XINFO_HAS_DROPPED_STATS (1U << 8)
|
|
171
190
|
|
|
172
191
|
/*
|
|
173
192
|
* Also stored in xinfo, these indicating a variety of additional actions that
|
|
@@ -218,9 +237,10 @@ typedef struct xl_xact_assignment
|
|
|
218
237
|
typedef struct xl_xact_xinfo
|
|
219
238
|
{
|
|
220
239
|
/*
|
|
221
|
-
* Even though we right now only require
|
|
222
|
-
* four so following records don't have to care about alignment.
|
|
223
|
-
* records can be large, so copying large portions isn't
|
|
240
|
+
* Even though we right now only require two bytes of space in xinfo we
|
|
241
|
+
* use four so following records don't have to care about alignment.
|
|
242
|
+
* Commit records can be large, so copying large portions isn't
|
|
243
|
+
* attractive.
|
|
224
244
|
*/
|
|
225
245
|
uint32 xinfo;
|
|
226
246
|
} xl_xact_xinfo;
|
|
@@ -245,6 +265,27 @@ typedef struct xl_xact_relfilenodes
|
|
|
245
265
|
} xl_xact_relfilenodes;
|
|
246
266
|
#define MinSizeOfXactRelfilenodes offsetof(xl_xact_relfilenodes, xnodes)
|
|
247
267
|
|
|
268
|
+
/*
|
|
269
|
+
* A transactionally dropped statistics entry.
|
|
270
|
+
*
|
|
271
|
+
* Declared here rather than pgstat.h because pgstat.h can't be included from
|
|
272
|
+
* frontend code, but the WAL format needs to be readable by frontend
|
|
273
|
+
* programs.
|
|
274
|
+
*/
|
|
275
|
+
typedef struct xl_xact_stats_item
|
|
276
|
+
{
|
|
277
|
+
int kind;
|
|
278
|
+
Oid dboid;
|
|
279
|
+
Oid objoid;
|
|
280
|
+
} xl_xact_stats_item;
|
|
281
|
+
|
|
282
|
+
typedef struct xl_xact_stats_items
|
|
283
|
+
{
|
|
284
|
+
int nitems;
|
|
285
|
+
xl_xact_stats_item items[FLEXIBLE_ARRAY_MEMBER];
|
|
286
|
+
} xl_xact_stats_items;
|
|
287
|
+
#define MinSizeOfXactStatsItems offsetof(xl_xact_stats_items, items)
|
|
288
|
+
|
|
248
289
|
typedef struct xl_xact_invals
|
|
249
290
|
{
|
|
250
291
|
int nmsgs; /* number of shared inval msgs */
|
|
@@ -271,6 +312,7 @@ typedef struct xl_xact_commit
|
|
|
271
312
|
/* xl_xact_dbinfo follows if XINFO_HAS_DBINFO */
|
|
272
313
|
/* xl_xact_subxacts follows if XINFO_HAS_SUBXACT */
|
|
273
314
|
/* xl_xact_relfilenodes follows if XINFO_HAS_RELFILENODES */
|
|
315
|
+
/* xl_xact_stats_items follows if XINFO_HAS_DROPPED_STATS */
|
|
274
316
|
/* xl_xact_invals follows if XINFO_HAS_INVALS */
|
|
275
317
|
/* xl_xact_twophase follows if XINFO_HAS_TWOPHASE */
|
|
276
318
|
/* twophase_gid follows if XINFO_HAS_GID. As a null-terminated string. */
|
|
@@ -286,6 +328,7 @@ typedef struct xl_xact_abort
|
|
|
286
328
|
/* xl_xact_dbinfo follows if XINFO_HAS_DBINFO */
|
|
287
329
|
/* xl_xact_subxacts follows if XINFO_HAS_SUBXACT */
|
|
288
330
|
/* xl_xact_relfilenodes follows if XINFO_HAS_RELFILENODES */
|
|
331
|
+
/* xl_xact_stats_items follows if XINFO_HAS_DROPPED_STATS */
|
|
289
332
|
/* No invalidation messages needed. */
|
|
290
333
|
/* xl_xact_twophase follows if XINFO_HAS_TWOPHASE */
|
|
291
334
|
/* twophase_gid follows if XINFO_HAS_GID. As a null-terminated string. */
|
|
@@ -304,6 +347,8 @@ typedef struct xl_xact_prepare
|
|
|
304
347
|
int32 nsubxacts; /* number of following subxact XIDs */
|
|
305
348
|
int32 ncommitrels; /* number of delete-on-commit rels */
|
|
306
349
|
int32 nabortrels; /* number of delete-on-abort rels */
|
|
350
|
+
int32 ncommitstats; /* number of stats to drop on commit */
|
|
351
|
+
int32 nabortstats; /* number of stats to drop on abort */
|
|
307
352
|
int32 ninvalmsgs; /* number of cache invalidation messages */
|
|
308
353
|
bool initfileinval; /* does relcache init file need invalidation? */
|
|
309
354
|
uint16 gidlen; /* length of the GID - GID follows the header */
|
|
@@ -330,6 +375,9 @@ typedef struct xl_xact_parsed_commit
|
|
|
330
375
|
int nrels;
|
|
331
376
|
RelFileNode *xnodes;
|
|
332
377
|
|
|
378
|
+
int nstats;
|
|
379
|
+
xl_xact_stats_item *stats;
|
|
380
|
+
|
|
333
381
|
int nmsgs;
|
|
334
382
|
SharedInvalidationMessage *msgs;
|
|
335
383
|
|
|
@@ -337,6 +385,8 @@ typedef struct xl_xact_parsed_commit
|
|
|
337
385
|
char twophase_gid[GIDSIZE]; /* only for 2PC */
|
|
338
386
|
int nabortrels; /* only for 2PC */
|
|
339
387
|
RelFileNode *abortnodes; /* only for 2PC */
|
|
388
|
+
int nabortstats; /* only for 2PC */
|
|
389
|
+
xl_xact_stats_item *abortstats; /* only for 2PC */
|
|
340
390
|
|
|
341
391
|
XLogRecPtr origin_lsn;
|
|
342
392
|
TimestampTz origin_timestamp;
|
|
@@ -358,6 +408,9 @@ typedef struct xl_xact_parsed_abort
|
|
|
358
408
|
int nrels;
|
|
359
409
|
RelFileNode *xnodes;
|
|
360
410
|
|
|
411
|
+
int nstats;
|
|
412
|
+
xl_xact_stats_item *stats;
|
|
413
|
+
|
|
361
414
|
TransactionId twophase_xid; /* only for 2PC */
|
|
362
415
|
char twophase_gid[GIDSIZE]; /* only for 2PC */
|
|
363
416
|
|
|
@@ -395,8 +448,8 @@ extern bool TransactionIdIsCurrentTransactionId(TransactionId xid);
|
|
|
395
448
|
extern void CommandCounterIncrement(void);
|
|
396
449
|
extern void ForceSyncCommit(void);
|
|
397
450
|
extern void StartTransactionCommand(void);
|
|
398
|
-
extern void SaveTransactionCharacteristics(
|
|
399
|
-
extern void RestoreTransactionCharacteristics(
|
|
451
|
+
extern void SaveTransactionCharacteristics(SavedTransactionCharacteristics *s);
|
|
452
|
+
extern void RestoreTransactionCharacteristics(const SavedTransactionCharacteristics *s);
|
|
400
453
|
extern void CommitTransactionCommand(void);
|
|
401
454
|
extern void AbortCurrentTransaction(void);
|
|
402
455
|
extern void BeginTransactionBlock(void);
|
|
@@ -429,13 +482,18 @@ extern void UnregisterXactCallback(XactCallback callback, void *arg);
|
|
|
429
482
|
extern void RegisterSubXactCallback(SubXactCallback callback, void *arg);
|
|
430
483
|
extern void UnregisterSubXactCallback(SubXactCallback callback, void *arg);
|
|
431
484
|
|
|
485
|
+
extern bool IsSubxactTopXidLogPending(void);
|
|
486
|
+
extern void MarkSubxactTopXidLogged(void);
|
|
487
|
+
|
|
432
488
|
extern int xactGetCommittedChildren(TransactionId **ptr);
|
|
433
489
|
|
|
434
490
|
extern XLogRecPtr XactLogCommitRecord(TimestampTz commit_time,
|
|
435
491
|
int nsubxacts, TransactionId *subxacts,
|
|
436
492
|
int nrels, RelFileNode *rels,
|
|
493
|
+
int nstats,
|
|
494
|
+
xl_xact_stats_item *stats,
|
|
437
495
|
int nmsgs, SharedInvalidationMessage *msgs,
|
|
438
|
-
bool relcacheInval,
|
|
496
|
+
bool relcacheInval,
|
|
439
497
|
int xactflags,
|
|
440
498
|
TransactionId twophase_xid,
|
|
441
499
|
const char *twophase_gid);
|
|
@@ -443,6 +501,8 @@ extern XLogRecPtr XactLogCommitRecord(TimestampTz commit_time,
|
|
|
443
501
|
extern XLogRecPtr XactLogAbortRecord(TimestampTz abort_time,
|
|
444
502
|
int nsubxacts, TransactionId *subxacts,
|
|
445
503
|
int nrels, RelFileNode *rels,
|
|
504
|
+
int nstats,
|
|
505
|
+
xl_xact_stats_item *stats,
|
|
446
506
|
int xactflags, TransactionId twophase_xid,
|
|
447
507
|
const char *twophase_gid);
|
|
448
508
|
extern void xact_redo(XLogReaderState *record);
|