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
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/* ----------
|
|
2
|
+
* backend_status.h
|
|
3
|
+
* Definitions related to backend status reporting
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2001-2022, PostgreSQL Global Development Group
|
|
6
|
+
*
|
|
7
|
+
* src/include/utils/backend_status.h
|
|
8
|
+
* ----------
|
|
9
|
+
*/
|
|
10
|
+
#ifndef BACKEND_STATUS_H
|
|
11
|
+
#define BACKEND_STATUS_H
|
|
12
|
+
|
|
13
|
+
#include "datatype/timestamp.h"
|
|
14
|
+
#include "libpq/pqcomm.h"
|
|
15
|
+
#include "miscadmin.h" /* for BackendType */
|
|
16
|
+
#include "utils/backend_progress.h"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
/* ----------
|
|
20
|
+
* Backend states
|
|
21
|
+
* ----------
|
|
22
|
+
*/
|
|
23
|
+
typedef enum BackendState
|
|
24
|
+
{
|
|
25
|
+
STATE_UNDEFINED,
|
|
26
|
+
STATE_IDLE,
|
|
27
|
+
STATE_RUNNING,
|
|
28
|
+
STATE_IDLEINTRANSACTION,
|
|
29
|
+
STATE_FASTPATH,
|
|
30
|
+
STATE_IDLEINTRANSACTION_ABORTED,
|
|
31
|
+
STATE_DISABLED
|
|
32
|
+
} BackendState;
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
/* ----------
|
|
36
|
+
* Shared-memory data structures
|
|
37
|
+
* ----------
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
* PgBackendSSLStatus
|
|
42
|
+
*
|
|
43
|
+
* For each backend, we keep the SSL status in a separate struct, that
|
|
44
|
+
* is only filled in if SSL is enabled.
|
|
45
|
+
*
|
|
46
|
+
* All char arrays must be null-terminated.
|
|
47
|
+
*/
|
|
48
|
+
typedef struct PgBackendSSLStatus
|
|
49
|
+
{
|
|
50
|
+
/* Information about SSL connection */
|
|
51
|
+
int ssl_bits;
|
|
52
|
+
char ssl_version[NAMEDATALEN];
|
|
53
|
+
char ssl_cipher[NAMEDATALEN];
|
|
54
|
+
char ssl_client_dn[NAMEDATALEN];
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
* serial number is max "20 octets" per RFC 5280, so this size should be
|
|
58
|
+
* fine
|
|
59
|
+
*/
|
|
60
|
+
char ssl_client_serial[NAMEDATALEN];
|
|
61
|
+
|
|
62
|
+
char ssl_issuer_dn[NAMEDATALEN];
|
|
63
|
+
} PgBackendSSLStatus;
|
|
64
|
+
|
|
65
|
+
/*
|
|
66
|
+
* PgBackendGSSStatus
|
|
67
|
+
*
|
|
68
|
+
* For each backend, we keep the GSS status in a separate struct, that
|
|
69
|
+
* is only filled in if GSS is enabled.
|
|
70
|
+
*
|
|
71
|
+
* All char arrays must be null-terminated.
|
|
72
|
+
*/
|
|
73
|
+
typedef struct PgBackendGSSStatus
|
|
74
|
+
{
|
|
75
|
+
/* Information about GSSAPI connection */
|
|
76
|
+
char gss_princ[NAMEDATALEN]; /* GSSAPI Principal used to auth */
|
|
77
|
+
bool gss_auth; /* If GSSAPI authentication was used */
|
|
78
|
+
bool gss_enc; /* If encryption is being used */
|
|
79
|
+
|
|
80
|
+
} PgBackendGSSStatus;
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
/* ----------
|
|
84
|
+
* PgBackendStatus
|
|
85
|
+
*
|
|
86
|
+
* Each live backend maintains a PgBackendStatus struct in shared memory
|
|
87
|
+
* showing its current activity. (The structs are allocated according to
|
|
88
|
+
* BackendId, but that is not critical.) Note that this is unrelated to the
|
|
89
|
+
* cumulative stats system (i.e. pgstat.c et al).
|
|
90
|
+
*
|
|
91
|
+
* Each auxiliary process also maintains a PgBackendStatus struct in shared
|
|
92
|
+
* memory.
|
|
93
|
+
* ----------
|
|
94
|
+
*/
|
|
95
|
+
typedef struct PgBackendStatus
|
|
96
|
+
{
|
|
97
|
+
/*
|
|
98
|
+
* To avoid locking overhead, we use the following protocol: a backend
|
|
99
|
+
* increments st_changecount before modifying its entry, and again after
|
|
100
|
+
* finishing a modification. A would-be reader should note the value of
|
|
101
|
+
* st_changecount, copy the entry into private memory, then check
|
|
102
|
+
* st_changecount again. If the value hasn't changed, and if it's even,
|
|
103
|
+
* the copy is valid; otherwise start over. This makes updates cheap
|
|
104
|
+
* while reads are potentially expensive, but that's the tradeoff we want.
|
|
105
|
+
*
|
|
106
|
+
* The above protocol needs memory barriers to ensure that the apparent
|
|
107
|
+
* order of execution is as it desires. Otherwise, for example, the CPU
|
|
108
|
+
* might rearrange the code so that st_changecount is incremented twice
|
|
109
|
+
* before the modification on a machine with weak memory ordering. Hence,
|
|
110
|
+
* use the macros defined below for manipulating st_changecount, rather
|
|
111
|
+
* than touching it directly.
|
|
112
|
+
*/
|
|
113
|
+
int st_changecount;
|
|
114
|
+
|
|
115
|
+
/* The entry is valid iff st_procpid > 0, unused if st_procpid == 0 */
|
|
116
|
+
int st_procpid;
|
|
117
|
+
|
|
118
|
+
/* Type of backends */
|
|
119
|
+
BackendType st_backendType;
|
|
120
|
+
|
|
121
|
+
/* Times when current backend, transaction, and activity started */
|
|
122
|
+
TimestampTz st_proc_start_timestamp;
|
|
123
|
+
TimestampTz st_xact_start_timestamp;
|
|
124
|
+
TimestampTz st_activity_start_timestamp;
|
|
125
|
+
TimestampTz st_state_start_timestamp;
|
|
126
|
+
|
|
127
|
+
/* Database OID, owning user's OID, connection client address */
|
|
128
|
+
Oid st_databaseid;
|
|
129
|
+
Oid st_userid;
|
|
130
|
+
SockAddr st_clientaddr;
|
|
131
|
+
char *st_clienthostname; /* MUST be null-terminated */
|
|
132
|
+
|
|
133
|
+
/* Information about SSL connection */
|
|
134
|
+
bool st_ssl;
|
|
135
|
+
PgBackendSSLStatus *st_sslstatus;
|
|
136
|
+
|
|
137
|
+
/* Information about GSSAPI connection */
|
|
138
|
+
bool st_gss;
|
|
139
|
+
PgBackendGSSStatus *st_gssstatus;
|
|
140
|
+
|
|
141
|
+
/* current state */
|
|
142
|
+
BackendState st_state;
|
|
143
|
+
|
|
144
|
+
/* application name; MUST be null-terminated */
|
|
145
|
+
char *st_appname;
|
|
146
|
+
|
|
147
|
+
/*
|
|
148
|
+
* Current command string; MUST be null-terminated. Note that this string
|
|
149
|
+
* possibly is truncated in the middle of a multi-byte character. As
|
|
150
|
+
* activity strings are stored more frequently than read, that allows to
|
|
151
|
+
* move the cost of correct truncation to the display side. Use
|
|
152
|
+
* pgstat_clip_activity() to truncate correctly.
|
|
153
|
+
*/
|
|
154
|
+
char *st_activity_raw;
|
|
155
|
+
|
|
156
|
+
/*
|
|
157
|
+
* Command progress reporting. Any command which wishes can advertise
|
|
158
|
+
* that it is running by setting st_progress_command,
|
|
159
|
+
* st_progress_command_target, and st_progress_param[].
|
|
160
|
+
* st_progress_command_target should be the OID of the relation which the
|
|
161
|
+
* command targets (we assume there's just one, as this is meant for
|
|
162
|
+
* utility commands), but the meaning of each element in the
|
|
163
|
+
* st_progress_param array is command-specific.
|
|
164
|
+
*/
|
|
165
|
+
ProgressCommandType st_progress_command;
|
|
166
|
+
Oid st_progress_command_target;
|
|
167
|
+
int64 st_progress_param[PGSTAT_NUM_PROGRESS_PARAM];
|
|
168
|
+
|
|
169
|
+
/* query identifier, optionally computed using post_parse_analyze_hook */
|
|
170
|
+
uint64 st_query_id;
|
|
171
|
+
} PgBackendStatus;
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
/*
|
|
175
|
+
* Macros to load and store st_changecount with appropriate memory barriers.
|
|
176
|
+
*
|
|
177
|
+
* Use PGSTAT_BEGIN_WRITE_ACTIVITY() before, and PGSTAT_END_WRITE_ACTIVITY()
|
|
178
|
+
* after, modifying the current process's PgBackendStatus data. Note that,
|
|
179
|
+
* since there is no mechanism for cleaning up st_changecount after an error,
|
|
180
|
+
* THESE MACROS FORM A CRITICAL SECTION. Any error between them will be
|
|
181
|
+
* promoted to PANIC, causing a database restart to clean up shared memory!
|
|
182
|
+
* Hence, keep the critical section as short and straight-line as possible.
|
|
183
|
+
* Aside from being safer, that minimizes the window in which readers will
|
|
184
|
+
* have to loop.
|
|
185
|
+
*
|
|
186
|
+
* Reader logic should follow this sketch:
|
|
187
|
+
*
|
|
188
|
+
* for (;;)
|
|
189
|
+
* {
|
|
190
|
+
* int before_ct, after_ct;
|
|
191
|
+
*
|
|
192
|
+
* pgstat_begin_read_activity(beentry, before_ct);
|
|
193
|
+
* ... copy beentry data to local memory ...
|
|
194
|
+
* pgstat_end_read_activity(beentry, after_ct);
|
|
195
|
+
* if (pgstat_read_activity_complete(before_ct, after_ct))
|
|
196
|
+
* break;
|
|
197
|
+
* CHECK_FOR_INTERRUPTS();
|
|
198
|
+
* }
|
|
199
|
+
*
|
|
200
|
+
* For extra safety, we generally use volatile beentry pointers, although
|
|
201
|
+
* the memory barriers should theoretically be sufficient.
|
|
202
|
+
*/
|
|
203
|
+
#define PGSTAT_BEGIN_WRITE_ACTIVITY(beentry) \
|
|
204
|
+
do { \
|
|
205
|
+
START_CRIT_SECTION(); \
|
|
206
|
+
(beentry)->st_changecount++; \
|
|
207
|
+
pg_write_barrier(); \
|
|
208
|
+
} while (0)
|
|
209
|
+
|
|
210
|
+
#define PGSTAT_END_WRITE_ACTIVITY(beentry) \
|
|
211
|
+
do { \
|
|
212
|
+
pg_write_barrier(); \
|
|
213
|
+
(beentry)->st_changecount++; \
|
|
214
|
+
Assert(((beentry)->st_changecount & 1) == 0); \
|
|
215
|
+
END_CRIT_SECTION(); \
|
|
216
|
+
} while (0)
|
|
217
|
+
|
|
218
|
+
#define pgstat_begin_read_activity(beentry, before_changecount) \
|
|
219
|
+
do { \
|
|
220
|
+
(before_changecount) = (beentry)->st_changecount; \
|
|
221
|
+
pg_read_barrier(); \
|
|
222
|
+
} while (0)
|
|
223
|
+
|
|
224
|
+
#define pgstat_end_read_activity(beentry, after_changecount) \
|
|
225
|
+
do { \
|
|
226
|
+
pg_read_barrier(); \
|
|
227
|
+
(after_changecount) = (beentry)->st_changecount; \
|
|
228
|
+
} while (0)
|
|
229
|
+
|
|
230
|
+
#define pgstat_read_activity_complete(before_changecount, after_changecount) \
|
|
231
|
+
((before_changecount) == (after_changecount) && \
|
|
232
|
+
((before_changecount) & 1) == 0)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
/* ----------
|
|
236
|
+
* LocalPgBackendStatus
|
|
237
|
+
*
|
|
238
|
+
* When we build the backend status array, we use LocalPgBackendStatus to be
|
|
239
|
+
* able to add new values to the struct when needed without adding new fields
|
|
240
|
+
* to the shared memory. It contains the backend status as a first member.
|
|
241
|
+
* ----------
|
|
242
|
+
*/
|
|
243
|
+
typedef struct LocalPgBackendStatus
|
|
244
|
+
{
|
|
245
|
+
/*
|
|
246
|
+
* Local version of the backend status entry.
|
|
247
|
+
*/
|
|
248
|
+
PgBackendStatus backendStatus;
|
|
249
|
+
|
|
250
|
+
/*
|
|
251
|
+
* The xid of the current transaction if available, InvalidTransactionId
|
|
252
|
+
* if not.
|
|
253
|
+
*/
|
|
254
|
+
TransactionId backend_xid;
|
|
255
|
+
|
|
256
|
+
/*
|
|
257
|
+
* The xmin of the current session if available, InvalidTransactionId if
|
|
258
|
+
* not.
|
|
259
|
+
*/
|
|
260
|
+
TransactionId backend_xmin;
|
|
261
|
+
} LocalPgBackendStatus;
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
/* ----------
|
|
265
|
+
* GUC parameters
|
|
266
|
+
* ----------
|
|
267
|
+
*/
|
|
268
|
+
extern PGDLLIMPORT bool pgstat_track_activities;
|
|
269
|
+
extern PGDLLIMPORT int pgstat_track_activity_query_size;
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
/* ----------
|
|
273
|
+
* Other global variables
|
|
274
|
+
* ----------
|
|
275
|
+
*/
|
|
276
|
+
extern PGDLLIMPORT PgBackendStatus *MyBEEntry;
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
/* ----------
|
|
280
|
+
* Functions called from postmaster
|
|
281
|
+
* ----------
|
|
282
|
+
*/
|
|
283
|
+
extern Size BackendStatusShmemSize(void);
|
|
284
|
+
extern void CreateSharedBackendStatus(void);
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
/* ----------
|
|
288
|
+
* Functions called from backends
|
|
289
|
+
* ----------
|
|
290
|
+
*/
|
|
291
|
+
|
|
292
|
+
/* Initialization functions */
|
|
293
|
+
extern void pgstat_beinit(void);
|
|
294
|
+
extern void pgstat_bestart(void);
|
|
295
|
+
|
|
296
|
+
extern void pgstat_clear_backend_activity_snapshot(void);
|
|
297
|
+
|
|
298
|
+
/* Activity reporting functions */
|
|
299
|
+
extern void pgstat_report_activity(BackendState state, const char *cmd_str);
|
|
300
|
+
extern void pgstat_report_query_id(uint64 query_id, bool force);
|
|
301
|
+
extern void pgstat_report_tempfile(size_t filesize);
|
|
302
|
+
extern void pgstat_report_appname(const char *appname);
|
|
303
|
+
extern void pgstat_report_xact_timestamp(TimestampTz tstamp);
|
|
304
|
+
extern const char *pgstat_get_backend_current_activity(int pid, bool checkUser);
|
|
305
|
+
extern const char *pgstat_get_crashed_backend_activity(int pid, char *buffer,
|
|
306
|
+
int buflen);
|
|
307
|
+
extern uint64 pgstat_get_my_query_id(void);
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
/* ----------
|
|
311
|
+
* Support functions for the SQL-callable functions to
|
|
312
|
+
* generate the pgstat* views.
|
|
313
|
+
* ----------
|
|
314
|
+
*/
|
|
315
|
+
extern int pgstat_fetch_stat_numbackends(void);
|
|
316
|
+
extern PgBackendStatus *pgstat_fetch_stat_beentry(int beid);
|
|
317
|
+
extern LocalPgBackendStatus *pgstat_fetch_stat_local_beentry(int beid);
|
|
318
|
+
extern char *pgstat_clip_activity(const char *raw_activity);
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
#endif /* BACKEND_STATUS_H */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Declarations for operations on built-in types.
|
|
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/builtins.h
|
|
@@ -39,22 +39,20 @@ extern uint64 hex_decode(const char *src, size_t len, char *dst);
|
|
|
39
39
|
extern int2vector *buildint2vector(const int16 *int2s, int n);
|
|
40
40
|
|
|
41
41
|
/* name.c */
|
|
42
|
-
extern
|
|
43
|
-
extern int namestrcpy(Name name, const char *str);
|
|
42
|
+
extern void namestrcpy(Name name, const char *str);
|
|
44
43
|
extern int namestrcmp(Name name, const char *str);
|
|
45
44
|
|
|
46
45
|
/* numutils.c */
|
|
47
|
-
extern int32 pg_atoi(const char *s, int size, int c);
|
|
48
46
|
extern int16 pg_strtoint16(const char *s);
|
|
49
47
|
extern int32 pg_strtoint32(const char *s);
|
|
50
|
-
extern
|
|
51
|
-
extern int
|
|
52
|
-
extern int
|
|
53
|
-
extern
|
|
54
|
-
extern
|
|
48
|
+
extern int64 pg_strtoint64(const char *s);
|
|
49
|
+
extern int pg_itoa(int16 i, char *a);
|
|
50
|
+
extern int pg_ultoa_n(uint32 l, char *a);
|
|
51
|
+
extern int pg_ulltoa_n(uint64 l, char *a);
|
|
52
|
+
extern int pg_ltoa(int32 l, char *a);
|
|
53
|
+
extern int pg_lltoa(int64 ll, char *a);
|
|
55
54
|
extern char *pg_ultostr_zeropad(char *str, uint32 value, int32 minwidth);
|
|
56
55
|
extern char *pg_ultostr(char *str, uint32 value);
|
|
57
|
-
extern uint64 pg_strtouint64(const char *str, char **endptr, int base);
|
|
58
56
|
|
|
59
57
|
/* oid.c */
|
|
60
58
|
extern oidvector *buildoidvector(const Oid *oids, int n);
|
|
@@ -66,7 +64,7 @@ extern char *regexp_fixed_prefix(text *text_re, bool case_insensitive,
|
|
|
66
64
|
Oid collation, bool *exact);
|
|
67
65
|
|
|
68
66
|
/* ruleutils.c */
|
|
69
|
-
extern __thread bool quote_all_identifiers;
|
|
67
|
+
extern PGDLLIMPORT __thread bool quote_all_identifiers;
|
|
70
68
|
extern const char *quote_identifier(const char *ident);
|
|
71
69
|
extern char *quote_qualified_identifier(const char *qualifier,
|
|
72
70
|
const char *ident);
|
|
@@ -89,6 +87,7 @@ extern void text_to_cstring_buffer(const text *src, char *dst, size_t dst_len);
|
|
|
89
87
|
|
|
90
88
|
/* xid.c */
|
|
91
89
|
extern int xidComparator(const void *arg1, const void *arg2);
|
|
90
|
+
extern int xidLogicalComparator(const void *arg1, const void *arg2);
|
|
92
91
|
|
|
93
92
|
/* inet_cidr_ntop.c */
|
|
94
93
|
extern char *pg_inet_cidr_ntop(int af, const void *src, int bits,
|
|
@@ -113,6 +112,7 @@ extern Datum numeric_float8_no_overflow(PG_FUNCTION_ARGS);
|
|
|
113
112
|
#define FORMAT_TYPE_TYPEMOD_GIVEN 0x01 /* typemod defined by caller */
|
|
114
113
|
#define FORMAT_TYPE_ALLOW_INVALID 0x02 /* allow invalid types */
|
|
115
114
|
#define FORMAT_TYPE_FORCE_QUALIFY 0x04 /* force qualification of type */
|
|
115
|
+
#define FORMAT_TYPE_INVALID_AS_NULL 0x08 /* NULL if undefined */
|
|
116
116
|
extern char *format_type_extended(Oid type_oid, int32 typemod, bits16 flags);
|
|
117
117
|
|
|
118
118
|
extern char *format_type_be(Oid type_oid);
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Declarations for BYTEA data type support.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/utils/bytea.h
|
|
@@ -22,6 +22,7 @@ typedef enum
|
|
|
22
22
|
BYTEA_OUTPUT_HEX
|
|
23
23
|
} ByteaOutputType;
|
|
24
24
|
|
|
25
|
-
extern int
|
|
25
|
+
extern PGDLLIMPORT int bytea_output; /* ByteaOutputType, but int for GUC
|
|
26
|
+
* enum */
|
|
26
27
|
|
|
27
28
|
#endif /* BYTEA_H */
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* guarantee that there can only be one matching row for a key combination.
|
|
11
11
|
*
|
|
12
12
|
*
|
|
13
|
-
* Portions Copyright (c) 1996-
|
|
13
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
14
14
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
15
15
|
*
|
|
16
16
|
* src/include/utils/catcache.h
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Definitions for the SQL "date" and "time" types.
|
|
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/date.h
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* including date, and time.
|
|
7
7
|
*
|
|
8
8
|
*
|
|
9
|
-
* Portions Copyright (c) 1996-
|
|
9
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
10
10
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
11
11
|
*
|
|
12
12
|
* src/include/utils/datetime.h
|
|
@@ -257,9 +257,10 @@ do { \
|
|
|
257
257
|
* Include check for leap year.
|
|
258
258
|
*/
|
|
259
259
|
|
|
260
|
-
extern const char *const months[]; /* months (3-char
|
|
261
|
-
|
|
262
|
-
extern const
|
|
260
|
+
extern PGDLLIMPORT const char *const months[]; /* months (3-char
|
|
261
|
+
* abbreviations) */
|
|
262
|
+
extern PGDLLIMPORT const char *const days[]; /* days (full names) */
|
|
263
|
+
extern PGDLLIMPORT const int day_tab[2][13];
|
|
263
264
|
|
|
264
265
|
/*
|
|
265
266
|
* These are the rules for the Gregorian calendar, which was adopted in 1582.
|
|
@@ -300,9 +301,9 @@ extern int DecodeTimeOnly(char **field, int *ftype,
|
|
|
300
301
|
int nf, int *dtype,
|
|
301
302
|
struct pg_tm *tm, fsec_t *fsec, int *tzp);
|
|
302
303
|
extern int DecodeInterval(char **field, int *ftype, int nf, int range,
|
|
303
|
-
int *dtype, struct
|
|
304
|
+
int *dtype, struct pg_itm_in *itm_in);
|
|
304
305
|
extern int DecodeISO8601Interval(char *str,
|
|
305
|
-
int *dtype, struct
|
|
306
|
+
int *dtype, struct pg_itm_in *itm_in);
|
|
306
307
|
|
|
307
308
|
extern void DateTimeParseError(int dterr, const char *str,
|
|
308
309
|
const char *datatype) pg_attribute_noreturn();
|
|
@@ -315,7 +316,7 @@ extern int DetermineTimeZoneAbbrevOffsetTS(TimestampTz ts, const char *abbr,
|
|
|
315
316
|
extern void EncodeDateOnly(struct pg_tm *tm, int style, char *str);
|
|
316
317
|
extern void EncodeTimeOnly(struct pg_tm *tm, fsec_t fsec, bool print_tz, int tz, int style, char *str);
|
|
317
318
|
extern void EncodeDateTime(struct pg_tm *tm, fsec_t fsec, bool print_tz, int tz, const char *tzn, int style, char *str);
|
|
318
|
-
extern void EncodeInterval(struct
|
|
319
|
+
extern void EncodeInterval(struct pg_itm *itm, int style, char *str);
|
|
319
320
|
extern void EncodeSpecialTimestamp(Timestamp dt, char *str);
|
|
320
321
|
|
|
321
322
|
extern int ValidateDate(int fmask, bool isjulian, bool is2digits, bool bc,
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* of the Datum. (We do it this way because in most situations the caller
|
|
9
9
|
* can look up the info just once and use it for many per-datum operations.)
|
|
10
10
|
*
|
|
11
|
-
* Portions Copyright (c) 1996-
|
|
11
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
12
12
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
13
13
|
*
|
|
14
14
|
* src/include/utils/datum.h
|
|
@@ -55,6 +55,14 @@ extern bool datumIsEqual(Datum value1, Datum value2,
|
|
|
55
55
|
extern bool datum_image_eq(Datum value1, Datum value2,
|
|
56
56
|
bool typByVal, int typLen);
|
|
57
57
|
|
|
58
|
+
/*
|
|
59
|
+
* datum_image_hash
|
|
60
|
+
*
|
|
61
|
+
* Generates hash value for 'value' based on its bits rather than logical
|
|
62
|
+
* value.
|
|
63
|
+
*/
|
|
64
|
+
extern uint32 datum_image_hash(Datum value, bool typByVal, int typLen);
|
|
65
|
+
|
|
58
66
|
/*
|
|
59
67
|
* Serialize and restore datums so that we can transfer them to parallel
|
|
60
68
|
* workers.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* dsa.h
|
|
4
4
|
* Dynamic shared memory areas.
|
|
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
|
* IDENTIFICATION
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/*-------------------------------------------------------------------------
|
|
2
2
|
*
|
|
3
|
-
* dynahash
|
|
3
|
+
* dynahash.h
|
|
4
4
|
* POSTGRES dynahash.h file 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
|
+
* IDENTIFICATION
|
|
11
|
+
* src/include/utils/dynahash.h
|
|
11
12
|
*
|
|
12
13
|
*-------------------------------------------------------------------------
|
|
13
14
|
*/
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES error reporting/logging 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/elog.h
|
|
@@ -40,19 +40,21 @@
|
|
|
40
40
|
#define WARNING 19 /* Warnings. NOTICE is for expected messages
|
|
41
41
|
* like implicit sequence creation by SERIAL.
|
|
42
42
|
* WARNING is for unexpected messages. */
|
|
43
|
-
#define
|
|
43
|
+
#define PGWARNING 19 /* Must equal WARNING; see NOTE below. */
|
|
44
|
+
#define WARNING_CLIENT_ONLY 20 /* Warnings to be sent to client as usual, but
|
|
45
|
+
* never to the server log. */
|
|
46
|
+
#define ERROR 21 /* user error - abort transaction; return to
|
|
44
47
|
* known state */
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
*/
|
|
49
|
-
#ifdef WIN32
|
|
50
|
-
#define PGERROR 20
|
|
51
|
-
#endif
|
|
52
|
-
#define FATAL 21 /* fatal error - abort process */
|
|
53
|
-
#define PANIC 22 /* take down the other backends with me */
|
|
48
|
+
#define PGERROR 21 /* Must equal ERROR; see NOTE below. */
|
|
49
|
+
#define FATAL 22 /* fatal error - abort process */
|
|
50
|
+
#define PANIC 23 /* take down the other backends with me */
|
|
54
51
|
|
|
55
|
-
|
|
52
|
+
/*
|
|
53
|
+
* NOTE: the alternate names PGWARNING and PGERROR are useful for dealing
|
|
54
|
+
* with third-party headers that make other definitions of WARNING and/or
|
|
55
|
+
* ERROR. One can, for example, re-define ERROR as PGERROR after including
|
|
56
|
+
* such a header.
|
|
57
|
+
*/
|
|
56
58
|
|
|
57
59
|
|
|
58
60
|
/* macros for representing SQLSTATE strings compactly */
|
|
@@ -111,6 +113,15 @@
|
|
|
111
113
|
* ereport_domain() directly, or preferably they can override the TEXTDOMAIN
|
|
112
114
|
* macro.
|
|
113
115
|
*
|
|
116
|
+
* When __builtin_constant_p is available and elevel >= ERROR we make a call
|
|
117
|
+
* to errstart_cold() instead of errstart(). This version of the function is
|
|
118
|
+
* marked with pg_attribute_cold which will coax supporting compilers into
|
|
119
|
+
* generating code which is more optimized towards non-ERROR cases. Because
|
|
120
|
+
* we use __builtin_constant_p() in the condition, when elevel is not a
|
|
121
|
+
* compile-time constant, or if it is, but it's < ERROR, the compiler has no
|
|
122
|
+
* need to generate any code for this branch. It can simply call errstart()
|
|
123
|
+
* unconditionally.
|
|
124
|
+
*
|
|
114
125
|
* If elevel >= ERROR, the call will not return; we try to inform the compiler
|
|
115
126
|
* of that via pg_unreachable(). However, no useful optimization effect is
|
|
116
127
|
* obtained unless the compiler sees elevel as a compile-time constant, else
|
|
@@ -124,7 +135,9 @@
|
|
|
124
135
|
#define ereport_domain(elevel, domain, ...) \
|
|
125
136
|
do { \
|
|
126
137
|
pg_prevent_errno_in_scope(); \
|
|
127
|
-
if (
|
|
138
|
+
if (__builtin_constant_p(elevel) && (elevel) >= ERROR ? \
|
|
139
|
+
errstart_cold(elevel, domain) : \
|
|
140
|
+
errstart(elevel, domain)) \
|
|
128
141
|
__VA_ARGS__, errfinish(__FILE__, __LINE__, PG_FUNCNAME_MACRO); \
|
|
129
142
|
if (__builtin_constant_p(elevel) && (elevel) >= ERROR) \
|
|
130
143
|
pg_unreachable(); \
|
|
@@ -146,7 +159,10 @@
|
|
|
146
159
|
|
|
147
160
|
#define TEXTDOMAIN NULL
|
|
148
161
|
|
|
162
|
+
extern bool message_level_is_interesting(int elevel);
|
|
163
|
+
|
|
149
164
|
extern bool errstart(int elevel, const char *domain);
|
|
165
|
+
extern pg_attribute_cold bool errstart_cold(int elevel, const char *domain);
|
|
150
166
|
extern void errfinish(const char *filename, int lineno, const char *funcname);
|
|
151
167
|
|
|
152
168
|
extern int errcode(int sqlerrcode);
|
|
@@ -174,6 +190,9 @@ extern int errdetail_plural(const char *fmt_singular, const char *fmt_plural,
|
|
|
174
190
|
|
|
175
191
|
extern int errhint(const char *fmt,...) pg_attribute_printf(1, 2);
|
|
176
192
|
|
|
193
|
+
extern int errhint_plural(const char *fmt_singular, const char *fmt_plural,
|
|
194
|
+
unsigned long n,...) pg_attribute_printf(1, 4) pg_attribute_printf(2, 4);
|
|
195
|
+
|
|
177
196
|
/*
|
|
178
197
|
* errcontext() is typically called in error context callback functions, not
|
|
179
198
|
* within an ereport() invocation. The callback function can be in a different
|
|
@@ -193,7 +212,6 @@ extern int errhidecontext(bool hide_ctx);
|
|
|
193
212
|
|
|
194
213
|
extern int errbacktrace(void);
|
|
195
214
|
|
|
196
|
-
extern int errfunction(const char *funcname);
|
|
197
215
|
extern int errposition(int cursorpos);
|
|
198
216
|
|
|
199
217
|
extern int internalerrposition(int cursorpos);
|
|
@@ -353,7 +371,6 @@ typedef struct ErrorData
|
|
|
353
371
|
int elevel; /* error level */
|
|
354
372
|
bool output_to_server; /* will report to server log? */
|
|
355
373
|
bool output_to_client; /* will report to client? */
|
|
356
|
-
bool show_funcname; /* true to force funcname inclusion */
|
|
357
374
|
bool hide_stmt; /* true to prevent STATEMENT: inclusion */
|
|
358
375
|
bool hide_ctx; /* true to prevent CONTEXT: inclusion */
|
|
359
376
|
const char *filename; /* __FILE__ of ereport() call */
|
|
@@ -407,24 +424,38 @@ typedef enum
|
|
|
407
424
|
PGERROR_VERBOSE /* all the facts, ma'am */
|
|
408
425
|
} PGErrorVerbosity;
|
|
409
426
|
|
|
410
|
-
extern int
|
|
411
|
-
extern char *Log_line_prefix;
|
|
412
|
-
extern int
|
|
413
|
-
extern char *Log_destination_string;
|
|
414
|
-
extern bool syslog_sequence_numbers;
|
|
415
|
-
extern bool syslog_split_messages;
|
|
427
|
+
extern PGDLLIMPORT int Log_error_verbosity;
|
|
428
|
+
extern PGDLLIMPORT char *Log_line_prefix;
|
|
429
|
+
extern PGDLLIMPORT int Log_destination;
|
|
430
|
+
extern PGDLLIMPORT char *Log_destination_string;
|
|
431
|
+
extern PGDLLIMPORT bool syslog_sequence_numbers;
|
|
432
|
+
extern PGDLLIMPORT bool syslog_split_messages;
|
|
416
433
|
|
|
417
434
|
/* Log destination bitmap */
|
|
418
435
|
#define LOG_DESTINATION_STDERR 1
|
|
419
436
|
#define LOG_DESTINATION_SYSLOG 2
|
|
420
437
|
#define LOG_DESTINATION_EVENTLOG 4
|
|
421
438
|
#define LOG_DESTINATION_CSVLOG 8
|
|
439
|
+
#define LOG_DESTINATION_JSONLOG 16
|
|
422
440
|
|
|
423
441
|
/* Other exported functions */
|
|
424
442
|
extern void DebugFileOpen(void);
|
|
425
443
|
extern char *unpack_sql_state(int sql_state);
|
|
426
444
|
extern bool in_error_recursion_trouble(void);
|
|
427
445
|
|
|
446
|
+
/* Common functions shared across destinations */
|
|
447
|
+
extern void reset_formatted_start_time(void);
|
|
448
|
+
extern char *get_formatted_start_time(void);
|
|
449
|
+
extern char *get_formatted_log_time(void);
|
|
450
|
+
extern const char *get_backend_type_for_log(void);
|
|
451
|
+
extern bool check_log_of_query(ErrorData *edata);
|
|
452
|
+
extern const char *error_severity(int elevel);
|
|
453
|
+
extern void write_pipe_chunks(char *data, int len, int dest);
|
|
454
|
+
|
|
455
|
+
/* Destination-specific functions */
|
|
456
|
+
extern void write_csvlog(ErrorData *edata);
|
|
457
|
+
extern void write_jsonlog(ErrorData *edata);
|
|
458
|
+
|
|
428
459
|
#ifdef HAVE_SYSLOG
|
|
429
460
|
extern void set_syslog_parameters(const char *ident, int facility);
|
|
430
461
|
#endif
|
|
@@ -130,6 +130,7 @@
|
|
|
130
130
|
#define ERRCODE_TOO_MANY_JSON_ARRAY_ELEMENTS MAKE_SQLSTATE('2','2','0','3','D')
|
|
131
131
|
#define ERRCODE_TOO_MANY_JSON_OBJECT_MEMBERS MAKE_SQLSTATE('2','2','0','3','E')
|
|
132
132
|
#define ERRCODE_SQL_JSON_SCALAR_REQUIRED MAKE_SQLSTATE('2','2','0','3','F')
|
|
133
|
+
#define ERRCODE_SQL_JSON_ITEM_CANNOT_BE_CAST_TO_TARGET_TYPE MAKE_SQLSTATE('2','2','0','3','G')
|
|
133
134
|
|
|
134
135
|
/* Class 23 - Integrity Constraint Violation */
|
|
135
136
|
#define ERRCODE_INTEGRITY_CONSTRAINT_VIOLATION MAKE_SQLSTATE('2','3','0','0','0')
|
|
@@ -296,6 +297,7 @@
|
|
|
296
297
|
#define ERRCODE_CRASH_SHUTDOWN MAKE_SQLSTATE('5','7','P','0','2')
|
|
297
298
|
#define ERRCODE_CANNOT_CONNECT_NOW MAKE_SQLSTATE('5','7','P','0','3')
|
|
298
299
|
#define ERRCODE_DATABASE_DROPPED MAKE_SQLSTATE('5','7','P','0','4')
|
|
300
|
+
#define ERRCODE_IDLE_SESSION_TIMEOUT MAKE_SQLSTATE('5','7','P','0','5')
|
|
299
301
|
|
|
300
302
|
/* Class 58 - System Error (errors external to PostgreSQL itself) */
|
|
301
303
|
#define ERRCODE_SYSTEM_ERROR MAKE_SQLSTATE('5','8','0','0','0')
|