pg_query 2.2.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 +25 -0
- data/README.md +59 -31
- data/Rakefile +2 -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 +3 -1
- data/ext/pg_query/include/access/xact.h +73 -19
- data/ext/pg_query/include/access/xlog.h +60 -155
- data/ext/pg_query/include/access/xlog_internal.h +40 -13
- 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 +145 -39
- 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 +8 -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 +44 -14
- data/ext/pg_query/include/catalog/pg_class_d.h +30 -1
- 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 +3 -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 +18 -15
- 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 -7
- 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 +55 -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 +3 -4
- 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 +2 -2
- data/ext/pg_query/include/commands/trigger.h +18 -16
- 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 +140 -15
- 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 +30 -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 +105 -23
- data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/miscadmin.h +47 -41
- data/ext/pg_query/include/nodes/bitmapset.h +1 -1
- data/ext/pg_query/include/nodes/execnodes.h +270 -78
- 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 +322 -90
- data/ext/pg_query/include/nodes/pathnodes.h +243 -66
- data/ext/pg_query/include/nodes/pg_list.h +75 -69
- data/ext/pg_query/include/nodes/plannodes.h +111 -28
- 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 -17
- 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 +3 -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 +83 -41
- 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 +939 -113
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +151 -26
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +173 -30
- data/ext/pg_query/include/pg_trace.h +1 -1
- data/ext/pg_query/include/pgstat.h +449 -1238
- 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 +40 -10
- 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 +71 -46
- 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 +1419 -914
- 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 +259 -42
- data/ext/pg_query/include/replication/slot.h +22 -11
- 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 +11 -8
- data/ext/pg_query/include/storage/lockdefs.h +2 -2
- data/ext/pg_query/include/storage/lwlock.h +5 -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 +173 -59
- 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 +60 -21
- 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 +1 -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 +10 -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 +4 -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 +10 -12
- 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 -19
- data/ext/pg_query/include/utils/relcache.h +8 -5
- 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 +34 -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 +4302 -2304
- data/ext/pg_query/pg_query_deparse.c +1106 -373
- data/ext/pg_query/pg_query_fingerprint.c +30 -10
- data/ext/pg_query/pg_query_json_plpgsql.c +0 -25
- data/ext/pg_query/pg_query_normalize.c +1 -1
- data/ext/pg_query/pg_query_outfuncs_json.c +54 -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_readfuncs_protobuf.c +42 -8
- 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 +20 -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 +401 -76
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +290 -46
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +74 -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 +33874 -31261
- data/ext/pg_query/src_backend_parser_parser.c +26 -7
- data/ext/pg_query/src_backend_parser_scan.c +172 -209
- 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 +62 -23
- 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 +71 -5
- 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 +206 -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 +701 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +45 -20
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1233 -1259
- 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 -31
- 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 +37 -13
- data/ext/pg_query/src_port_strerror.c +9 -19
- data/ext/pg_query/src_port_strnlen.c +1 -1
- data/lib/pg_query/filter_columns.rb +1 -1
- data/lib/pg_query/fingerprint.rb +5 -1
- data/lib/pg_query/node.rb +2 -2
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/parse.rb +20 -8
- data/lib/pg_query/pg_query_pb.rb +1108 -942
- data/lib/pg_query/treewalker.rb +6 -0
- data/lib/pg_query/truncate.rb +1 -1
- data/lib/pg_query/version.rb +1 -1
- metadata +27 -17
- 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/pg_query_ruby_freebsd.sym +0 -2
- data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
- 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
@@ -3,7 +3,7 @@
|
|
3
3
|
* pidfile.h
|
4
4
|
* Declarations describing the data directory lock file (postmaster.pid)
|
5
5
|
*
|
6
|
-
* Portions Copyright (c) 1996-
|
6
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
8
8
|
*
|
9
9
|
* src/include/utils/pidfile.h
|
@@ -5,7 +5,7 @@
|
|
5
5
|
*
|
6
6
|
* See plancache.c for comments.
|
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/utils/plancache.h
|
@@ -35,7 +35,7 @@ typedef enum
|
|
35
35
|
} PlanCacheMode;
|
36
36
|
|
37
37
|
/* GUC parameter */
|
38
|
-
extern int
|
38
|
+
extern PGDLLIMPORT int plan_cache_mode;
|
39
39
|
|
40
40
|
#define CACHEDPLANSOURCE_MAGIC 195726186
|
41
41
|
#define CACHEDPLAN_MAGIC 953717834
|
@@ -130,7 +130,8 @@ typedef struct CachedPlanSource
|
|
130
130
|
/* State kept to help decide whether to use custom or generic plans: */
|
131
131
|
double generic_cost; /* cost of generic plan, or -1 if not known */
|
132
132
|
double total_custom_cost; /* total cost of custom plans so far */
|
133
|
-
|
133
|
+
int64 num_custom_plans; /* # of custom plans included in total */
|
134
|
+
int64 num_generic_plans; /* # of generic plans */
|
134
135
|
} CachedPlanSource;
|
135
136
|
|
136
137
|
/*
|
@@ -218,9 +219,9 @@ extern List *CachedPlanGetTargetList(CachedPlanSource *plansource,
|
|
218
219
|
|
219
220
|
extern CachedPlan *GetCachedPlan(CachedPlanSource *plansource,
|
220
221
|
ParamListInfo boundParams,
|
221
|
-
|
222
|
+
ResourceOwner owner,
|
222
223
|
QueryEnvironment *queryEnv);
|
223
|
-
extern void ReleaseCachedPlan(CachedPlan *plan,
|
224
|
+
extern void ReleaseCachedPlan(CachedPlan *plan, ResourceOwner owner);
|
224
225
|
|
225
226
|
extern bool CachedPlanAllowsSimpleValidityCheck(CachedPlanSource *plansource,
|
226
227
|
CachedPlan *plan,
|
@@ -36,7 +36,7 @@
|
|
36
36
|
* to look like NO SCROLL cursors.
|
37
37
|
*
|
38
38
|
*
|
39
|
-
* Portions Copyright (c) 1996-
|
39
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
40
40
|
* Portions Copyright (c) 1994, Regents of the University of California
|
41
41
|
*
|
42
42
|
* src/include/utils/portal.h
|
@@ -130,6 +130,7 @@ typedef struct PortalData
|
|
130
130
|
*/
|
131
131
|
SubTransactionId createSubid; /* the creating subxact */
|
132
132
|
SubTransactionId activeSubid; /* the last subxact with activity */
|
133
|
+
int createLevel; /* creating subxact's nesting level */
|
133
134
|
|
134
135
|
/* The query or queries the portal will execute */
|
135
136
|
const char *sourceText; /* text of query (as of 8.4, never NULL) */
|
@@ -160,6 +161,14 @@ typedef struct PortalData
|
|
160
161
|
/* and these are the format codes to use for the columns: */
|
161
162
|
int16 *formats; /* a format code for each column */
|
162
163
|
|
164
|
+
/*
|
165
|
+
* Outermost ActiveSnapshot for execution of the portal's queries. For
|
166
|
+
* all but a few utility commands, we require such a snapshot to exist.
|
167
|
+
* This ensures that TOAST references in query results can be detoasted,
|
168
|
+
* and helps to reduce thrashing of the process's exposed xmin.
|
169
|
+
*/
|
170
|
+
Snapshot portalSnapshot; /* active snapshot, or NULL if none */
|
171
|
+
|
163
172
|
/*
|
164
173
|
* Where we store tuples for a held cursor or a PORTAL_ONE_RETURNING or
|
165
174
|
* PORTAL_UTIL_SELECT query. (A cursor held past the end of its
|
@@ -194,17 +203,6 @@ typedef struct PortalData
|
|
194
203
|
/* Presentation data, primarily used by the pg_cursors system view */
|
195
204
|
TimestampTz creation_time; /* time at which this portal was defined */
|
196
205
|
bool visible; /* include this portal in pg_cursors? */
|
197
|
-
|
198
|
-
/* Stuff added at the end to avoid ABI break in stable branches: */
|
199
|
-
|
200
|
-
/*
|
201
|
-
* Outermost ActiveSnapshot for execution of the portal's queries. For
|
202
|
-
* all but a few utility commands, we require such a snapshot to exist.
|
203
|
-
* This ensures that TOAST references in query results can be detoasted,
|
204
|
-
* and helps to reduce thrashing of the process's exposed xmin.
|
205
|
-
*/
|
206
|
-
Snapshot portalSnapshot; /* active snapshot, or NULL if none */
|
207
|
-
int createLevel; /* creating subxact's nesting level */
|
208
206
|
} PortalData;
|
209
207
|
|
210
208
|
/*
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* Access to functions to mutate the query environment and retrieve the
|
5
5
|
* actual data related to entries (if any).
|
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/utils/queryenvironment.h
|
@@ -0,0 +1,88 @@
|
|
1
|
+
/*-------------------------------------------------------------------------
|
2
|
+
*
|
3
|
+
* queryjumble.h
|
4
|
+
* Query normalization and fingerprinting.
|
5
|
+
*
|
6
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
7
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
8
|
+
*
|
9
|
+
* IDENTIFICATION
|
10
|
+
* src/include/utils/queryjumble.h
|
11
|
+
*
|
12
|
+
*-------------------------------------------------------------------------
|
13
|
+
*/
|
14
|
+
#ifndef QUERYJUBLE_H
|
15
|
+
#define QUERYJUBLE_H
|
16
|
+
|
17
|
+
#include "nodes/parsenodes.h"
|
18
|
+
|
19
|
+
#define JUMBLE_SIZE 1024 /* query serialization buffer size */
|
20
|
+
|
21
|
+
/*
|
22
|
+
* Struct for tracking locations/lengths of constants during normalization
|
23
|
+
*/
|
24
|
+
typedef struct LocationLen
|
25
|
+
{
|
26
|
+
int location; /* start offset in query text */
|
27
|
+
int length; /* length in bytes, or -1 to ignore */
|
28
|
+
} LocationLen;
|
29
|
+
|
30
|
+
/*
|
31
|
+
* Working state for computing a query jumble and producing a normalized
|
32
|
+
* query string
|
33
|
+
*/
|
34
|
+
typedef struct JumbleState
|
35
|
+
{
|
36
|
+
/* Jumble of current query tree */
|
37
|
+
unsigned char *jumble;
|
38
|
+
|
39
|
+
/* Number of bytes used in jumble[] */
|
40
|
+
Size jumble_len;
|
41
|
+
|
42
|
+
/* Array of locations of constants that should be removed */
|
43
|
+
LocationLen *clocations;
|
44
|
+
|
45
|
+
/* Allocated length of clocations array */
|
46
|
+
int clocations_buf_size;
|
47
|
+
|
48
|
+
/* Current number of valid entries in clocations array */
|
49
|
+
int clocations_count;
|
50
|
+
|
51
|
+
/* highest Param id we've seen, in order to start normalization correctly */
|
52
|
+
int highest_extern_param_id;
|
53
|
+
} JumbleState;
|
54
|
+
|
55
|
+
/* Values for the compute_query_id GUC */
|
56
|
+
enum ComputeQueryIdType
|
57
|
+
{
|
58
|
+
COMPUTE_QUERY_ID_OFF,
|
59
|
+
COMPUTE_QUERY_ID_ON,
|
60
|
+
COMPUTE_QUERY_ID_AUTO,
|
61
|
+
COMPUTE_QUERY_ID_REGRESS
|
62
|
+
};
|
63
|
+
|
64
|
+
/* GUC parameters */
|
65
|
+
extern PGDLLIMPORT int compute_query_id;
|
66
|
+
|
67
|
+
|
68
|
+
extern const char *CleanQuerytext(const char *query, int *location, int *len);
|
69
|
+
extern JumbleState *JumbleQuery(Query *query, const char *querytext);
|
70
|
+
extern void EnableQueryId(void);
|
71
|
+
|
72
|
+
extern PGDLLIMPORT bool query_id_enabled;
|
73
|
+
|
74
|
+
/*
|
75
|
+
* Returns whether query identifier computation has been enabled, either
|
76
|
+
* directly in the GUC or by a module when the setting is 'auto'.
|
77
|
+
*/
|
78
|
+
static inline bool
|
79
|
+
IsQueryIdEnabled(void)
|
80
|
+
{
|
81
|
+
if (compute_query_id == COMPUTE_QUERY_ID_OFF)
|
82
|
+
return false;
|
83
|
+
if (compute_query_id == COMPUTE_QUERY_ID_ON)
|
84
|
+
return true;
|
85
|
+
return query_id_enabled;
|
86
|
+
}
|
87
|
+
|
88
|
+
#endif /* QUERYJUMBLE_H */
|
@@ -3,7 +3,7 @@
|
|
3
3
|
* regproc.h
|
4
4
|
* Functions for the built-in types regproc, regclass, regtype, etc.
|
5
5
|
*
|
6
|
-
* Portions Copyright (c) 1996-
|
6
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
8
8
|
*
|
9
9
|
* src/include/utils/regproc.h
|
@@ -15,14 +15,25 @@
|
|
15
15
|
|
16
16
|
#include "nodes/pg_list.h"
|
17
17
|
|
18
|
+
/* Control flags for format_procedure_extended */
|
19
|
+
#define FORMAT_PROC_INVALID_AS_NULL 0x01 /* NULL if undefined */
|
20
|
+
#define FORMAT_PROC_FORCE_QUALIFY 0x02 /* force qualification */
|
21
|
+
extern char *format_procedure_extended(Oid procedure_oid, bits16 flags);
|
22
|
+
|
23
|
+
/* Control flags for format_operator_extended */
|
24
|
+
#define FORMAT_OPERATOR_INVALID_AS_NULL 0x01 /* NULL if undefined */
|
25
|
+
#define FORMAT_OPERATOR_FORCE_QUALIFY 0x02 /* force qualification */
|
26
|
+
extern char *format_operator_extended(Oid operator_oid, bits16 flags);
|
27
|
+
|
18
28
|
extern List *stringToQualifiedNameList(const char *string);
|
19
29
|
extern char *format_procedure(Oid procedure_oid);
|
20
30
|
extern char *format_procedure_qualified(Oid procedure_oid);
|
21
31
|
extern void format_procedure_parts(Oid operator_oid, List **objnames,
|
22
|
-
List **objargs);
|
32
|
+
List **objargs, bool missing_ok);
|
33
|
+
|
23
34
|
extern char *format_operator(Oid operator_oid);
|
24
35
|
extern char *format_operator_qualified(Oid operator_oid);
|
25
36
|
extern void format_operator_parts(Oid operator_oid, List **objnames,
|
26
|
-
List **objargs);
|
37
|
+
List **objargs, bool missing_ok);
|
27
38
|
|
28
39
|
#endif
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* POSTGRES relation descriptor (a/k/a relcache entry) 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/utils/rel.h
|
@@ -24,6 +24,7 @@
|
|
24
24
|
#include "rewrite/prs2lock.h"
|
25
25
|
#include "storage/block.h"
|
26
26
|
#include "storage/relfilenode.h"
|
27
|
+
#include "storage/smgr.h"
|
27
28
|
#include "utils/relcache.h"
|
28
29
|
#include "utils/reltrigger.h"
|
29
30
|
|
@@ -53,8 +54,7 @@ typedef LockInfoData *LockInfo;
|
|
53
54
|
typedef struct RelationData
|
54
55
|
{
|
55
56
|
RelFileNode rd_node; /* relation physical identifier */
|
56
|
-
/*
|
57
|
-
struct SMgrRelationData *rd_smgr; /* cached file handle, or NULL */
|
57
|
+
SMgrRelation rd_smgr; /* cached file handle, or NULL */
|
58
58
|
int rd_refcnt; /* reference count */
|
59
59
|
BackendId rd_backend; /* owning backend id, if temporary relation */
|
60
60
|
bool rd_islocaltemp; /* rel is a temp rel of this session */
|
@@ -128,6 +128,19 @@ typedef struct RelationData
|
|
128
128
|
PartitionDesc rd_partdesc; /* partition descriptor, or NULL */
|
129
129
|
MemoryContext rd_pdcxt; /* private context for rd_partdesc, if any */
|
130
130
|
|
131
|
+
/* Same as above, for partdescs that omit detached partitions */
|
132
|
+
PartitionDesc rd_partdesc_nodetached; /* partdesc w/o detached parts */
|
133
|
+
MemoryContext rd_pddcxt; /* for rd_partdesc_nodetached, if any */
|
134
|
+
|
135
|
+
/*
|
136
|
+
* pg_inherits.xmin of the partition that was excluded in
|
137
|
+
* rd_partdesc_nodetached. This informs a future user of that partdesc:
|
138
|
+
* if this value is not in progress for the active snapshot, then the
|
139
|
+
* partdesc can be used, otherwise they have to build a new one. (This
|
140
|
+
* matches what find_inheritance_children_extended would do).
|
141
|
+
*/
|
142
|
+
TransactionId rd_partdesc_nodetached_xmin;
|
143
|
+
|
131
144
|
/* data managed by RelationGetPartitionQual: */
|
132
145
|
List *rd_partcheck; /* partition CHECK quals */
|
133
146
|
bool rd_partcheckvalid; /* true if list has been computed */
|
@@ -147,7 +160,7 @@ typedef struct RelationData
|
|
147
160
|
Bitmapset *rd_pkattr; /* cols included in primary key */
|
148
161
|
Bitmapset *rd_idattr; /* included in replica identity index */
|
149
162
|
|
150
|
-
|
163
|
+
PublicationDesc *rd_pubdesc; /* publication descriptor, or NULL */
|
151
164
|
|
152
165
|
/*
|
153
166
|
* rd_options is set whenever rd_rel is loaded into the relcache entry.
|
@@ -232,6 +245,7 @@ typedef struct RelationData
|
|
232
245
|
*/
|
233
246
|
Oid rd_toastoid; /* Real TOAST table's OID, or InvalidOid */
|
234
247
|
|
248
|
+
bool pgstat_enabled; /* should relation stats be counted */
|
235
249
|
/* use "struct" here to avoid needing to include pgstat.h: */
|
236
250
|
struct PgStat_TableStatus *pgstat_info; /* statistics collection area */
|
237
251
|
} RelationData;
|
@@ -294,6 +308,14 @@ typedef struct AutoVacOpts
|
|
294
308
|
float8 analyze_scale_factor;
|
295
309
|
} AutoVacOpts;
|
296
310
|
|
311
|
+
/* StdRdOptions->vacuum_index_cleanup values */
|
312
|
+
typedef enum StdRdOptIndexCleanup
|
313
|
+
{
|
314
|
+
STDRD_OPTION_VACUUM_INDEX_CLEANUP_AUTO = 0,
|
315
|
+
STDRD_OPTION_VACUUM_INDEX_CLEANUP_OFF,
|
316
|
+
STDRD_OPTION_VACUUM_INDEX_CLEANUP_ON
|
317
|
+
} StdRdOptIndexCleanup;
|
318
|
+
|
297
319
|
typedef struct StdRdOptions
|
298
320
|
{
|
299
321
|
int32 vl_len_; /* varlena header (do not touch directly!) */
|
@@ -302,7 +324,7 @@ typedef struct StdRdOptions
|
|
302
324
|
AutoVacOpts autovacuum; /* autovacuum-related options */
|
303
325
|
bool user_catalog_table; /* use as an additional catalog relation */
|
304
326
|
int parallel_workers; /* max number of parallel workers */
|
305
|
-
|
327
|
+
StdRdOptIndexCleanup vacuum_index_cleanup; /* controls index vacuuming */
|
306
328
|
bool vacuum_truncate; /* enables vacuum to truncate a relation */
|
307
329
|
} StdRdOptions;
|
308
330
|
|
@@ -375,6 +397,7 @@ typedef struct ViewOptions
|
|
375
397
|
{
|
376
398
|
int32 vl_len_; /* varlena header (do not touch directly!) */
|
377
399
|
bool security_barrier;
|
400
|
+
bool security_invoker;
|
378
401
|
ViewOptCheckOption check_option;
|
379
402
|
} ViewOptions;
|
380
403
|
|
@@ -388,6 +411,16 @@ typedef struct ViewOptions
|
|
388
411
|
(relation)->rd_options ? \
|
389
412
|
((ViewOptions *) (relation)->rd_options)->security_barrier : false)
|
390
413
|
|
414
|
+
/*
|
415
|
+
* RelationHasSecurityInvoker
|
416
|
+
* Returns true if the relation has the security_invoker property set.
|
417
|
+
* Note multiple eval of argument!
|
418
|
+
*/
|
419
|
+
#define RelationHasSecurityInvoker(relation) \
|
420
|
+
(AssertMacro(relation->rd_rel->relkind == RELKIND_VIEW), \
|
421
|
+
(relation)->rd_options ? \
|
422
|
+
((ViewOptions *) (relation)->rd_options)->security_invoker : false)
|
423
|
+
|
391
424
|
/*
|
392
425
|
* RelationHasCheckOption
|
393
426
|
* Returns true if the relation is a view defined with either the local
|
@@ -506,14 +539,25 @@ typedef struct ViewOptions
|
|
506
539
|
((relation)->rd_rel->relfilenode == InvalidOid))
|
507
540
|
|
508
541
|
/*
|
509
|
-
*
|
510
|
-
*
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
542
|
+
* RelationGetSmgr
|
543
|
+
* Returns smgr file handle for a relation, opening it if needed.
|
544
|
+
*
|
545
|
+
* Very little code is authorized to touch rel->rd_smgr directly. Instead
|
546
|
+
* use this function to fetch its value.
|
547
|
+
*
|
548
|
+
* Note: since a relcache flush can cause the file handle to be closed again,
|
549
|
+
* it's unwise to hold onto the pointer returned by this function for any
|
550
|
+
* long period. Recommended practice is to just re-execute RelationGetSmgr
|
551
|
+
* each time you need to access the SMgrRelation. It's quite cheap in
|
552
|
+
* comparison to whatever an smgr function is going to do.
|
553
|
+
*/
|
554
|
+
static inline SMgrRelation
|
555
|
+
RelationGetSmgr(Relation rel)
|
556
|
+
{
|
557
|
+
if (unlikely(rel->rd_smgr == NULL))
|
558
|
+
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_node, rel->rd_backend));
|
559
|
+
return rel->rd_smgr;
|
560
|
+
}
|
517
561
|
|
518
562
|
/*
|
519
563
|
* RelationCloseSmgr
|
@@ -535,7 +579,8 @@ typedef struct ViewOptions
|
|
535
579
|
* Fetch relation's current insertion target block.
|
536
580
|
*
|
537
581
|
* Returns InvalidBlockNumber if there is no current target block. Note
|
538
|
-
* that the target block status is discarded on any smgr-level invalidation
|
582
|
+
* that the target block status is discarded on any smgr-level invalidation,
|
583
|
+
* so there's no need to re-open the smgr handle if it's not currently open.
|
539
584
|
*/
|
540
585
|
#define RelationGetTargetBlock(relation) \
|
541
586
|
( (relation)->rd_smgr != NULL ? (relation)->rd_smgr->smgr_targblock : InvalidBlockNumber )
|
@@ -546,10 +591,16 @@ typedef struct ViewOptions
|
|
546
591
|
*/
|
547
592
|
#define RelationSetTargetBlock(relation, targblock) \
|
548
593
|
do { \
|
549
|
-
|
550
|
-
(relation)->rd_smgr->smgr_targblock = (targblock); \
|
594
|
+
RelationGetSmgr(relation)->smgr_targblock = (targblock); \
|
551
595
|
} while (0)
|
552
596
|
|
597
|
+
/*
|
598
|
+
* RelationIsPermanent
|
599
|
+
* True if relation is permanent.
|
600
|
+
*/
|
601
|
+
#define RelationIsPermanent(relation) \
|
602
|
+
((relation)->rd_rel->relpersistence == RELPERSISTENCE_PERMANENT)
|
603
|
+
|
553
604
|
/*
|
554
605
|
* RelationNeedsWAL
|
555
606
|
* True if relation needs WAL.
|
@@ -559,8 +610,7 @@ typedef struct ViewOptions
|
|
559
610
|
* RelFileNode" in src/backend/access/transam/README.
|
560
611
|
*/
|
561
612
|
#define RelationNeedsWAL(relation) \
|
562
|
-
((relation)
|
563
|
-
(XLogIsNeeded() || \
|
613
|
+
(RelationIsPermanent(relation) && (XLogIsNeeded() || \
|
564
614
|
(relation->rd_createSubid == InvalidSubTransactionId && \
|
565
615
|
relation->rd_firstRelfilenodeSubid == InvalidSubTransactionId)))
|
566
616
|
|
@@ -626,7 +676,8 @@ typedef struct ViewOptions
|
|
626
676
|
* WAL stream.
|
627
677
|
*
|
628
678
|
* We don't log information for unlogged tables (since they don't WAL log
|
629
|
-
* anyway)
|
679
|
+
* anyway), for foreign tables (since they don't WAL log, either),
|
680
|
+
* and for system tables (their content is hard to make sense of, and
|
630
681
|
* it would complicate decoding slightly for little gain). Note that we *do*
|
631
682
|
* log information for user defined catalog tables since they presumably are
|
632
683
|
* interesting to the user...
|
@@ -634,6 +685,7 @@ typedef struct ViewOptions
|
|
634
685
|
#define RelationIsLogicallyLogged(relation) \
|
635
686
|
(XLogLogicalInfoActive() && \
|
636
687
|
RelationNeedsWAL(relation) && \
|
688
|
+
(relation)->rd_rel->relkind != RELKIND_FOREIGN_TABLE && \
|
637
689
|
!IsCatalogRelation(relation))
|
638
690
|
|
639
691
|
/* routines in utils/cache/relcache.c */
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* Relation descriptor cache 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/utils/relcache.h
|
@@ -64,6 +64,8 @@ typedef enum IndexAttrBitmapKind
|
|
64
64
|
extern Bitmapset *RelationGetIndexAttrBitmap(Relation relation,
|
65
65
|
IndexAttrBitmapKind attrKind);
|
66
66
|
|
67
|
+
extern Bitmapset *RelationGetIdentityKeyBitmap(Relation relation);
|
68
|
+
|
67
69
|
extern void RelationGetExclusionInfo(Relation indexRelation,
|
68
70
|
Oid **operators,
|
69
71
|
Oid **procs,
|
@@ -72,8 +74,9 @@ extern void RelationGetExclusionInfo(Relation indexRelation,
|
|
72
74
|
extern void RelationInitIndexAccessInfo(Relation relation);
|
73
75
|
|
74
76
|
/* caller must include pg_publication.h */
|
75
|
-
struct
|
76
|
-
extern
|
77
|
+
struct PublicationDesc;
|
78
|
+
extern void RelationBuildPublicationDesc(Relation relation,
|
79
|
+
struct PublicationDesc *pubdesc);
|
77
80
|
|
78
81
|
extern void RelationInitTableAccessMethod(Relation relation);
|
79
82
|
|
@@ -142,9 +145,9 @@ extern void RelationCacheInitFilePostInvalidate(void);
|
|
142
145
|
extern void RelationCacheInitFileRemove(void);
|
143
146
|
|
144
147
|
/* should be used only by relcache.c and catcache.c */
|
145
|
-
extern bool criticalRelcachesBuilt;
|
148
|
+
extern PGDLLIMPORT bool criticalRelcachesBuilt;
|
146
149
|
|
147
150
|
/* should be used only by relcache.c and postinit.c */
|
148
|
-
extern bool criticalSharedRelcachesBuilt;
|
151
|
+
extern PGDLLIMPORT bool criticalSharedRelcachesBuilt;
|
149
152
|
|
150
153
|
#endif /* RELCACHE_H */
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* POSTGRES relation trigger 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/utils/reltrigger.h
|
@@ -9,7 +9,7 @@
|
|
9
9
|
* See utils/resowner/README for more info.
|
10
10
|
*
|
11
11
|
*
|
12
|
-
* Portions Copyright (c) 1996-
|
12
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
13
13
|
* Portions Copyright (c) 1994, Regents of the University of California
|
14
14
|
*
|
15
15
|
* src/include/utils/resowner.h
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* Header file for Row Level Security (RLS) utility commands to be used
|
5
5
|
* with the rowsecurity feature.
|
6
6
|
*
|
7
|
-
* Copyright (c) 2007-
|
7
|
+
* Copyright (c) 2007-2022, PostgreSQL Global Development Group
|
8
8
|
*
|
9
9
|
* src/include/utils/rls.h
|
10
10
|
*
|
@@ -14,7 +14,7 @@
|
|
14
14
|
#define RLS_H
|
15
15
|
|
16
16
|
/* GUC variable */
|
17
|
-
extern bool row_security;
|
17
|
+
extern PGDLLIMPORT bool row_security;
|
18
18
|
|
19
19
|
/*
|
20
20
|
* Used by callers of check_enable_rls.
|
@@ -3,7 +3,7 @@
|
|
3
3
|
* ruleutils.h
|
4
4
|
* Declarations for ruleutils.c
|
5
5
|
*
|
6
|
-
* Portions Copyright (c) 1996-
|
6
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
8
8
|
*
|
9
9
|
* src/include/utils/ruleutils.h
|
@@ -23,6 +23,7 @@ struct PlannedStmt;
|
|
23
23
|
|
24
24
|
extern char *pg_get_indexdef_string(Oid indexrelid);
|
25
25
|
extern char *pg_get_indexdef_columns(Oid indexrelid, bool pretty);
|
26
|
+
extern char *pg_get_querydef(Query *query, bool pretty);
|
26
27
|
|
27
28
|
extern char *pg_get_partkeydef_columns(Oid relid, bool pretty);
|
28
29
|
extern char *pg_get_partconstrdef_string(Oid partitionId, char *aliasname);
|
@@ -41,4 +42,6 @@ extern char *generate_collation_name(Oid collid);
|
|
41
42
|
extern char *generate_opclass_name(Oid opclass);
|
42
43
|
extern char *get_range_partbound_string(List *bound_datums);
|
43
44
|
|
45
|
+
extern char *pg_get_statisticsobjdef_string(Oid statextid);
|
46
|
+
|
44
47
|
#endif /* RULEUTILS_H */
|
@@ -3,7 +3,7 @@
|
|
3
3
|
* sharedtuplestore.h
|
4
4
|
* Simple mechanism for sharing tuples between backends.
|
5
5
|
*
|
6
|
-
* Portions Copyright (c) 1996-
|
6
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
8
8
|
*
|
9
9
|
* src/include/utils/sharedtuplestore.h
|
@@ -3,7 +3,7 @@
|
|
3
3
|
* snapmgr.h
|
4
4
|
* POSTGRES snapshot manager
|
5
5
|
*
|
6
|
-
* Portions Copyright (c) 1996-
|
6
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
8
8
|
*
|
9
9
|
* src/include/utils/snapmgr.h
|
@@ -37,8 +37,7 @@
|
|
37
37
|
*/
|
38
38
|
#define RelationAllowsEarlyPruning(rel) \
|
39
39
|
( \
|
40
|
-
(rel)
|
41
|
-
&& !IsCatalogRelation(rel) \
|
40
|
+
RelationIsPermanent(rel) && !IsCatalogRelation(rel) \
|
42
41
|
&& !RelationIsAccessibleInLogicalDecoding(rel) \
|
43
42
|
)
|
44
43
|
|
@@ -52,13 +51,12 @@ extern Size SnapMgrShmemSize(void);
|
|
52
51
|
extern void SnapMgrInit(void);
|
53
52
|
extern TimestampTz GetSnapshotCurrentTimestamp(void);
|
54
53
|
extern TimestampTz GetOldSnapshotThresholdTimestamp(void);
|
54
|
+
extern void SnapshotTooOldMagicForTest(void);
|
55
55
|
|
56
|
-
extern bool FirstSnapshotSet;
|
56
|
+
extern PGDLLIMPORT bool FirstSnapshotSet;
|
57
57
|
|
58
58
|
extern PGDLLIMPORT TransactionId TransactionXmin;
|
59
59
|
extern PGDLLIMPORT TransactionId RecentXmin;
|
60
|
-
extern PGDLLIMPORT TransactionId RecentGlobalXmin;
|
61
|
-
extern PGDLLIMPORT TransactionId RecentGlobalDataXmin;
|
62
60
|
|
63
61
|
/* Variables representing various special snapshot semantics */
|
64
62
|
extern PGDLLIMPORT SnapshotData SnapshotSelfData;
|
@@ -78,11 +76,12 @@ extern PGDLLIMPORT SnapshotData CatalogSnapshotData;
|
|
78
76
|
|
79
77
|
/*
|
80
78
|
* Similarly, some initialization is required for a NonVacuumable snapshot.
|
81
|
-
* The caller must supply the
|
79
|
+
* The caller must supply the visibility cutoff state to use (c.f.
|
80
|
+
* GlobalVisTestFor()).
|
82
81
|
*/
|
83
|
-
#define InitNonVacuumableSnapshot(snapshotdata,
|
82
|
+
#define InitNonVacuumableSnapshot(snapshotdata, vistestp) \
|
84
83
|
((snapshotdata).snapshot_type = SNAPSHOT_NON_VACUUMABLE, \
|
85
|
-
(snapshotdata).
|
84
|
+
(snapshotdata).vistest = (vistestp))
|
86
85
|
|
87
86
|
/*
|
88
87
|
* Similarly, some initialization is required for SnapshotToast. We need
|
@@ -98,6 +97,11 @@ extern PGDLLIMPORT SnapshotData CatalogSnapshotData;
|
|
98
97
|
((snapshot)->snapshot_type == SNAPSHOT_MVCC || \
|
99
98
|
(snapshot)->snapshot_type == SNAPSHOT_HISTORIC_MVCC)
|
100
99
|
|
100
|
+
static inline bool
|
101
|
+
OldSnapshotThresholdActive(void)
|
102
|
+
{
|
103
|
+
return old_snapshot_threshold >= 0;
|
104
|
+
}
|
101
105
|
|
102
106
|
extern Snapshot GetTransactionSnapshot(void);
|
103
107
|
extern Snapshot GetLatestSnapshot(void);
|
@@ -122,8 +126,6 @@ extern void UnregisterSnapshot(Snapshot snapshot);
|
|
122
126
|
extern Snapshot RegisterSnapshotOnOwner(Snapshot snapshot, ResourceOwner owner);
|
123
127
|
extern void UnregisterSnapshotFromOwner(Snapshot snapshot, ResourceOwner owner);
|
124
128
|
|
125
|
-
extern FullTransactionId GetFullRecentGlobalXmin(void);
|
126
|
-
|
127
129
|
extern void AtSubCommit_Snapshot(int level);
|
128
130
|
extern void AtSubAbort_Snapshot(int level);
|
129
131
|
extern void AtEOXact_Snapshot(bool isCommit, bool resetXmin);
|
@@ -131,14 +133,32 @@ extern void AtEOXact_Snapshot(bool isCommit, bool resetXmin);
|
|
131
133
|
extern void ImportSnapshot(const char *idstr);
|
132
134
|
extern bool XactHasExportedSnapshots(void);
|
133
135
|
extern void DeleteAllExportedSnapshotFiles(void);
|
136
|
+
extern void WaitForOlderSnapshots(TransactionId limitXmin, bool progress);
|
134
137
|
extern bool ThereAreNoPriorRegisteredSnapshots(void);
|
135
|
-
extern
|
136
|
-
|
138
|
+
extern bool HaveRegisteredOrActiveSnapshot(void);
|
139
|
+
extern bool TransactionIdLimitedForOldSnapshots(TransactionId recentXmin,
|
140
|
+
Relation relation,
|
141
|
+
TransactionId *limit_xid,
|
142
|
+
TimestampTz *limit_ts);
|
143
|
+
extern void SetOldSnapshotThresholdTimestamp(TimestampTz ts, TransactionId xlimit);
|
137
144
|
extern void MaintainOldSnapshotTimeMapping(TimestampTz whenTaken,
|
138
145
|
TransactionId xmin);
|
139
146
|
|
140
147
|
extern char *ExportSnapshot(Snapshot snapshot);
|
141
148
|
|
149
|
+
/*
|
150
|
+
* These live in procarray.c because they're intimately linked to the
|
151
|
+
* procarray contents, but thematically they better fit into snapmgr.h.
|
152
|
+
*/
|
153
|
+
typedef struct GlobalVisState GlobalVisState;
|
154
|
+
extern GlobalVisState *GlobalVisTestFor(Relation rel);
|
155
|
+
extern bool GlobalVisTestIsRemovableXid(GlobalVisState *state, TransactionId xid);
|
156
|
+
extern bool GlobalVisTestIsRemovableFullXid(GlobalVisState *state, FullTransactionId fxid);
|
157
|
+
extern FullTransactionId GlobalVisTestNonRemovableFullHorizon(GlobalVisState *state);
|
158
|
+
extern TransactionId GlobalVisTestNonRemovableHorizon(GlobalVisState *state);
|
159
|
+
extern bool GlobalVisCheckRemovableXid(Relation rel, TransactionId xid);
|
160
|
+
extern bool GlobalVisCheckRemovableFullXid(Relation rel, FullTransactionId fxid);
|
161
|
+
|
142
162
|
/*
|
143
163
|
* Utility functions for implementing visibility routines in table AMs.
|
144
164
|
*/
|
@@ -154,6 +174,6 @@ extern bool HistoricSnapshotActive(void);
|
|
154
174
|
extern Size EstimateSnapshotSpace(Snapshot snapshot);
|
155
175
|
extern void SerializeSnapshot(Snapshot snapshot, char *start_address);
|
156
176
|
extern Snapshot RestoreSnapshot(char *start_address);
|
157
|
-
extern void RestoreTransactionSnapshot(Snapshot snapshot, void *
|
177
|
+
extern void RestoreTransactionSnapshot(Snapshot snapshot, void *source_pgproc);
|
158
178
|
|
159
179
|
#endif /* SNAPMGR_H */
|