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
|
@@ -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
|
|
@@ -211,6 +220,7 @@ extern void AtCleanup_Portals(void);
|
|
|
211
220
|
extern void PortalErrorCleanup(void);
|
|
212
221
|
extern void AtSubCommit_Portals(SubTransactionId mySubid,
|
|
213
222
|
SubTransactionId parentSubid,
|
|
223
|
+
int parentLevel,
|
|
214
224
|
ResourceOwner parentXactOwner);
|
|
215
225
|
extern void AtSubAbort_Portals(SubTransactionId mySubid,
|
|
216
226
|
SubTransactionId parentSubid,
|
|
@@ -237,5 +247,6 @@ extern void PortalCreateHoldStore(Portal portal);
|
|
|
237
247
|
extern void PortalHashTableDeleteAll(void);
|
|
238
248
|
extern bool ThereAreNoReadyPortals(void);
|
|
239
249
|
extern void HoldPinnedPortals(void);
|
|
250
|
+
extern void ForgetPortalSnapshots(void);
|
|
240
251
|
|
|
241
252
|
#endif /* PORTAL_H */
|
|
@@ -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,16 +308,23 @@ 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!) */
|
|
300
322
|
int fillfactor; /* page fill factor in percent (0..100) */
|
|
301
|
-
/* fraction of newly inserted tuples prior to trigger index cleanup */
|
|
302
323
|
int toast_tuple_target; /* target for tuple toasting */
|
|
303
324
|
AutoVacOpts autovacuum; /* autovacuum-related options */
|
|
304
325
|
bool user_catalog_table; /* use as an additional catalog relation */
|
|
305
326
|
int parallel_workers; /* max number of parallel workers */
|
|
306
|
-
|
|
327
|
+
StdRdOptIndexCleanup vacuum_index_cleanup; /* controls index vacuuming */
|
|
307
328
|
bool vacuum_truncate; /* enables vacuum to truncate a relation */
|
|
308
329
|
} StdRdOptions;
|
|
309
330
|
|
|
@@ -376,6 +397,7 @@ typedef struct ViewOptions
|
|
|
376
397
|
{
|
|
377
398
|
int32 vl_len_; /* varlena header (do not touch directly!) */
|
|
378
399
|
bool security_barrier;
|
|
400
|
+
bool security_invoker;
|
|
379
401
|
ViewOptCheckOption check_option;
|
|
380
402
|
} ViewOptions;
|
|
381
403
|
|
|
@@ -389,6 +411,16 @@ typedef struct ViewOptions
|
|
|
389
411
|
(relation)->rd_options ? \
|
|
390
412
|
((ViewOptions *) (relation)->rd_options)->security_barrier : false)
|
|
391
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
|
+
|
|
392
424
|
/*
|
|
393
425
|
* RelationHasCheckOption
|
|
394
426
|
* Returns true if the relation is a view defined with either the local
|
|
@@ -507,14 +539,25 @@ typedef struct ViewOptions
|
|
|
507
539
|
((relation)->rd_rel->relfilenode == InvalidOid))
|
|
508
540
|
|
|
509
541
|
/*
|
|
510
|
-
*
|
|
511
|
-
*
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
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
|
+
}
|
|
518
561
|
|
|
519
562
|
/*
|
|
520
563
|
* RelationCloseSmgr
|
|
@@ -536,7 +579,8 @@ typedef struct ViewOptions
|
|
|
536
579
|
* Fetch relation's current insertion target block.
|
|
537
580
|
*
|
|
538
581
|
* Returns InvalidBlockNumber if there is no current target block. Note
|
|
539
|
-
* 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.
|
|
540
584
|
*/
|
|
541
585
|
#define RelationGetTargetBlock(relation) \
|
|
542
586
|
( (relation)->rd_smgr != NULL ? (relation)->rd_smgr->smgr_targblock : InvalidBlockNumber )
|
|
@@ -547,10 +591,16 @@ typedef struct ViewOptions
|
|
|
547
591
|
*/
|
|
548
592
|
#define RelationSetTargetBlock(relation, targblock) \
|
|
549
593
|
do { \
|
|
550
|
-
|
|
551
|
-
(relation)->rd_smgr->smgr_targblock = (targblock); \
|
|
594
|
+
RelationGetSmgr(relation)->smgr_targblock = (targblock); \
|
|
552
595
|
} while (0)
|
|
553
596
|
|
|
597
|
+
/*
|
|
598
|
+
* RelationIsPermanent
|
|
599
|
+
* True if relation is permanent.
|
|
600
|
+
*/
|
|
601
|
+
#define RelationIsPermanent(relation) \
|
|
602
|
+
((relation)->rd_rel->relpersistence == RELPERSISTENCE_PERMANENT)
|
|
603
|
+
|
|
554
604
|
/*
|
|
555
605
|
* RelationNeedsWAL
|
|
556
606
|
* True if relation needs WAL.
|
|
@@ -560,8 +610,7 @@ typedef struct ViewOptions
|
|
|
560
610
|
* RelFileNode" in src/backend/access/transam/README.
|
|
561
611
|
*/
|
|
562
612
|
#define RelationNeedsWAL(relation) \
|
|
563
|
-
((relation)
|
|
564
|
-
(XLogIsNeeded() || \
|
|
613
|
+
(RelationIsPermanent(relation) && (XLogIsNeeded() || \
|
|
565
614
|
(relation->rd_createSubid == InvalidSubTransactionId && \
|
|
566
615
|
relation->rd_firstRelfilenodeSubid == InvalidSubTransactionId)))
|
|
567
616
|
|
|
@@ -627,7 +676,8 @@ typedef struct ViewOptions
|
|
|
627
676
|
* WAL stream.
|
|
628
677
|
*
|
|
629
678
|
* We don't log information for unlogged tables (since they don't WAL log
|
|
630
|
-
* 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
|
|
631
681
|
* it would complicate decoding slightly for little gain). Note that we *do*
|
|
632
682
|
* log information for user defined catalog tables since they presumably are
|
|
633
683
|
* interesting to the user...
|
|
@@ -635,6 +685,7 @@ typedef struct ViewOptions
|
|
|
635
685
|
#define RelationIsLogicallyLogged(relation) \
|
|
636
686
|
(XLogLogicalInfoActive() && \
|
|
637
687
|
RelationNeedsWAL(relation) && \
|
|
688
|
+
(relation)->rd_rel->relkind != RELKIND_FOREIGN_TABLE && \
|
|
638
689
|
!IsCatalogRelation(relation))
|
|
639
690
|
|
|
640
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
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
#ifndef RELCACHE_H
|
|
15
15
|
#define RELCACHE_H
|
|
16
16
|
|
|
17
|
-
#include "postgres.h"
|
|
18
17
|
#include "access/tupdesc.h"
|
|
19
18
|
#include "nodes/bitmapset.h"
|
|
20
19
|
|
|
@@ -65,6 +64,8 @@ typedef enum IndexAttrBitmapKind
|
|
|
65
64
|
extern Bitmapset *RelationGetIndexAttrBitmap(Relation relation,
|
|
66
65
|
IndexAttrBitmapKind attrKind);
|
|
67
66
|
|
|
67
|
+
extern Bitmapset *RelationGetIdentityKeyBitmap(Relation relation);
|
|
68
|
+
|
|
68
69
|
extern void RelationGetExclusionInfo(Relation indexRelation,
|
|
69
70
|
Oid **operators,
|
|
70
71
|
Oid **procs,
|
|
@@ -73,8 +74,9 @@ extern void RelationGetExclusionInfo(Relation indexRelation,
|
|
|
73
74
|
extern void RelationInitIndexAccessInfo(Relation relation);
|
|
74
75
|
|
|
75
76
|
/* caller must include pg_publication.h */
|
|
76
|
-
struct
|
|
77
|
-
extern
|
|
77
|
+
struct PublicationDesc;
|
|
78
|
+
extern void RelationBuildPublicationDesc(Relation relation,
|
|
79
|
+
struct PublicationDesc *pubdesc);
|
|
78
80
|
|
|
79
81
|
extern void RelationInitTableAccessMethod(Relation relation);
|
|
80
82
|
|
|
@@ -121,7 +123,7 @@ extern void RelationForgetRelation(Oid rid);
|
|
|
121
123
|
|
|
122
124
|
extern void RelationCacheInvalidateEntry(Oid relationId);
|
|
123
125
|
|
|
124
|
-
extern void RelationCacheInvalidate(
|
|
126
|
+
extern void RelationCacheInvalidate(bool debug_discard);
|
|
125
127
|
|
|
126
128
|
extern void RelationCloseSmgrByOid(Oid relationId);
|
|
127
129
|
|
|
@@ -143,9 +145,9 @@ extern void RelationCacheInitFilePostInvalidate(void);
|
|
|
143
145
|
extern void RelationCacheInitFileRemove(void);
|
|
144
146
|
|
|
145
147
|
/* should be used only by relcache.c and catcache.c */
|
|
146
|
-
extern bool criticalRelcachesBuilt;
|
|
148
|
+
extern PGDLLIMPORT bool criticalRelcachesBuilt;
|
|
147
149
|
|
|
148
150
|
/* should be used only by relcache.c and postinit.c */
|
|
149
|
-
extern bool criticalSharedRelcachesBuilt;
|
|
151
|
+
extern PGDLLIMPORT bool criticalSharedRelcachesBuilt;
|
|
150
152
|
|
|
151
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
|