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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/*--------------------------------------------------------------------
|
|
2
2
|
* Symbols referenced in this file:
|
|
3
|
+
* - errstart_cold
|
|
3
4
|
* - errstart
|
|
4
5
|
* - PG_exception_stack
|
|
5
6
|
* - write_stderr
|
|
@@ -8,12 +9,16 @@
|
|
|
8
9
|
* - error_context_stack
|
|
9
10
|
* - errordata_stack_depth
|
|
10
11
|
* - errordata
|
|
12
|
+
* - should_output_to_server
|
|
11
13
|
* - is_log_level_output
|
|
14
|
+
* - should_output_to_client
|
|
12
15
|
* - recursion_depth
|
|
13
16
|
* - errmsg_internal
|
|
14
17
|
* - errcode
|
|
15
18
|
* - errmsg
|
|
16
19
|
* - errdetail
|
|
20
|
+
* - errhidestmt
|
|
21
|
+
* - errhidecontext
|
|
17
22
|
* - errfinish
|
|
18
23
|
* - pg_re_throw
|
|
19
24
|
* - EmitErrorReport
|
|
@@ -81,7 +86,7 @@
|
|
|
81
86
|
* overflow.)
|
|
82
87
|
*
|
|
83
88
|
*
|
|
84
|
-
* Portions Copyright (c) 1996-
|
|
89
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
85
90
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
86
91
|
*
|
|
87
92
|
*
|
|
@@ -110,6 +115,7 @@
|
|
|
110
115
|
#include "libpq/pqformat.h"
|
|
111
116
|
#include "mb/pg_wchar.h"
|
|
112
117
|
#include "miscadmin.h"
|
|
118
|
+
#include "pgstat.h"
|
|
113
119
|
#include "postmaster/bgworker.h"
|
|
114
120
|
#include "postmaster/postmaster.h"
|
|
115
121
|
#include "postmaster/syslogger.h"
|
|
@@ -218,17 +224,93 @@ static const char *err_gettext(const char *str) pg_attribute_format_arg(1);
|
|
|
218
224
|
static pg_noinline void set_backtrace(ErrorData *edata, int num_skip);
|
|
219
225
|
static void set_errdata_field(MemoryContextData *cxt, char **ptr, const char *str);
|
|
220
226
|
static void write_console(const char *line, int len);
|
|
221
|
-
static void setup_formatted_log_time(void);
|
|
222
|
-
static void setup_formatted_start_time(void);
|
|
223
227
|
static const char *process_log_prefix_padding(const char *p, int *padding);
|
|
224
228
|
static void log_line_prefix(StringInfo buf, ErrorData *edata);
|
|
225
|
-
static void write_csvlog(ErrorData *edata);
|
|
226
229
|
static void send_message_to_server_log(ErrorData *edata);
|
|
227
|
-
static void write_pipe_chunks(char *data, int len, int dest);
|
|
228
230
|
static void send_message_to_frontend(ErrorData *edata);
|
|
229
|
-
static const char *error_severity(int elevel);
|
|
230
231
|
static void append_with_tabs(StringInfo buf, const char *str);
|
|
231
|
-
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
/*
|
|
235
|
+
* is_log_level_output -- is elevel logically >= log_min_level?
|
|
236
|
+
*
|
|
237
|
+
* We use this for tests that should consider LOG to sort out-of-order,
|
|
238
|
+
* between ERROR and FATAL. Generally this is the right thing for testing
|
|
239
|
+
* whether a message should go to the postmaster log, whereas a simple >=
|
|
240
|
+
* test is correct for testing whether the message should go to the client.
|
|
241
|
+
*/
|
|
242
|
+
static inline bool
|
|
243
|
+
is_log_level_output(int elevel, int log_min_level)
|
|
244
|
+
{
|
|
245
|
+
if (elevel == LOG || elevel == LOG_SERVER_ONLY)
|
|
246
|
+
{
|
|
247
|
+
if (log_min_level == LOG || log_min_level <= ERROR)
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
else if (elevel == WARNING_CLIENT_ONLY)
|
|
251
|
+
{
|
|
252
|
+
/* never sent to log, regardless of log_min_level */
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
else if (log_min_level == LOG)
|
|
256
|
+
{
|
|
257
|
+
/* elevel != LOG */
|
|
258
|
+
if (elevel >= FATAL)
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
/* Neither is LOG */
|
|
262
|
+
else if (elevel >= log_min_level)
|
|
263
|
+
return true;
|
|
264
|
+
|
|
265
|
+
return false;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/*
|
|
269
|
+
* Policy-setting subroutines. These are fairly simple, but it seems wise
|
|
270
|
+
* to have the code in just one place.
|
|
271
|
+
*/
|
|
272
|
+
|
|
273
|
+
/*
|
|
274
|
+
* should_output_to_server --- should message of given elevel go to the log?
|
|
275
|
+
*/
|
|
276
|
+
static inline bool
|
|
277
|
+
should_output_to_server(int elevel)
|
|
278
|
+
{
|
|
279
|
+
return is_log_level_output(elevel, log_min_messages);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/*
|
|
283
|
+
* should_output_to_client --- should message of given elevel go to the client?
|
|
284
|
+
*/
|
|
285
|
+
static inline bool
|
|
286
|
+
should_output_to_client(int elevel)
|
|
287
|
+
{
|
|
288
|
+
if (whereToSendOutput == DestRemote && elevel != LOG_SERVER_ONLY)
|
|
289
|
+
{
|
|
290
|
+
/*
|
|
291
|
+
* client_min_messages is honored only after we complete the
|
|
292
|
+
* authentication handshake. This is required both for security
|
|
293
|
+
* reasons and because many clients can't handle NOTICE messages
|
|
294
|
+
* during authentication.
|
|
295
|
+
*/
|
|
296
|
+
if (ClientAuthInProgress)
|
|
297
|
+
return (elevel >= ERROR);
|
|
298
|
+
else
|
|
299
|
+
return (elevel >= client_min_messages || elevel == INFO);
|
|
300
|
+
}
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
/*
|
|
306
|
+
* message_level_is_interesting --- would ereport/elog do anything?
|
|
307
|
+
*
|
|
308
|
+
* Returns true if ereport/elog with this elevel will not be a no-op.
|
|
309
|
+
* This is useful to short-circuit any expensive preparatory work that
|
|
310
|
+
* might be needed for a logging message. There is no point in
|
|
311
|
+
* prepending this to a bare ereport/elog call, however.
|
|
312
|
+
*/
|
|
313
|
+
|
|
232
314
|
|
|
233
315
|
|
|
234
316
|
/*
|
|
@@ -263,6 +345,19 @@ err_gettext(const char *str)
|
|
|
263
345
|
#endif
|
|
264
346
|
}
|
|
265
347
|
|
|
348
|
+
/*
|
|
349
|
+
* errstart_cold
|
|
350
|
+
* A simple wrapper around errstart, but hinted to be "cold". Supporting
|
|
351
|
+
* compilers are more likely to move code for branches containing this
|
|
352
|
+
* function into an area away from the calling function's code. This can
|
|
353
|
+
* result in more commonly executed code being more compact and fitting
|
|
354
|
+
* on fewer cache lines.
|
|
355
|
+
*/
|
|
356
|
+
pg_attribute_cold bool
|
|
357
|
+
errstart_cold(int elevel, const char *domain)
|
|
358
|
+
{
|
|
359
|
+
return errstart(elevel, domain);
|
|
360
|
+
}
|
|
266
361
|
|
|
267
362
|
/*
|
|
268
363
|
* errstart --- begin an error-reporting cycle
|
|
@@ -332,27 +427,8 @@ errstart(int elevel, const char *domain)
|
|
|
332
427
|
* warning or less and not enabled for logging, just return false without
|
|
333
428
|
* starting up any error logging machinery.
|
|
334
429
|
*/
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
output_to_server = is_log_level_output(elevel, log_min_messages);
|
|
338
|
-
|
|
339
|
-
/* Determine whether message is enabled for client output */
|
|
340
|
-
if (whereToSendOutput == DestRemote && elevel != LOG_SERVER_ONLY)
|
|
341
|
-
{
|
|
342
|
-
/*
|
|
343
|
-
* client_min_messages is honored only after we complete the
|
|
344
|
-
* authentication handshake. This is required both for security
|
|
345
|
-
* reasons and because many clients can't handle NOTICE messages
|
|
346
|
-
* during authentication.
|
|
347
|
-
*/
|
|
348
|
-
if (ClientAuthInProgress)
|
|
349
|
-
output_to_client = (elevel >= ERROR);
|
|
350
|
-
else
|
|
351
|
-
output_to_client = (elevel >= client_min_messages ||
|
|
352
|
-
elevel == INFO);
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
/* Skip processing effort if non-error message will not be output */
|
|
430
|
+
output_to_server = should_output_to_server(elevel);
|
|
431
|
+
output_to_client = should_output_to_client(elevel);
|
|
356
432
|
if (elevel < ERROR && !output_to_server && !output_to_client)
|
|
357
433
|
return false;
|
|
358
434
|
|
|
@@ -416,7 +492,7 @@ errstart(int elevel, const char *domain)
|
|
|
416
492
|
/* Select default errcode based on elevel */
|
|
417
493
|
if (elevel >= ERROR)
|
|
418
494
|
edata->sqlerrcode = ERRCODE_INTERNAL_ERROR;
|
|
419
|
-
else if (elevel
|
|
495
|
+
else if (elevel >= WARNING)
|
|
420
496
|
edata->sqlerrcode = ERRCODE_WARNING;
|
|
421
497
|
else
|
|
422
498
|
edata->sqlerrcode = ERRCODE_SUCCESSFUL_COMPLETION;
|
|
@@ -486,6 +562,10 @@ errfinish(const char *filename, int lineno, const char *funcname)
|
|
|
486
562
|
slash = strrchr(filename, '/');
|
|
487
563
|
if (slash)
|
|
488
564
|
filename = slash + 1;
|
|
565
|
+
/* Some Windows compilers use backslashes in __FILE__ strings */
|
|
566
|
+
slash = strrchr(filename, '\\');
|
|
567
|
+
if (slash)
|
|
568
|
+
filename = slash + 1;
|
|
489
569
|
}
|
|
490
570
|
|
|
491
571
|
edata->filename = filename;
|
|
@@ -546,16 +626,6 @@ errfinish(const char *filename, int lineno, const char *funcname)
|
|
|
546
626
|
PG_RE_THROW();
|
|
547
627
|
}
|
|
548
628
|
|
|
549
|
-
/*
|
|
550
|
-
* If we are doing FATAL or PANIC, abort any old-style COPY OUT in
|
|
551
|
-
* progress, so that we can report the message before dying. (Without
|
|
552
|
-
* this, pq_putmessage will refuse to send the message at all, which is
|
|
553
|
-
* what we want for NOTICE messages, but not for fatal exits.) This hack
|
|
554
|
-
* is necessary because of poor design of old-style copy protocol.
|
|
555
|
-
*/
|
|
556
|
-
if (elevel >= FATAL && whereToSendOutput == DestRemote)
|
|
557
|
-
pq_endcopyout(true);
|
|
558
|
-
|
|
559
629
|
/* Emit the message to the right places */
|
|
560
630
|
EmitErrorReport();
|
|
561
631
|
|
|
@@ -614,6 +684,13 @@ errfinish(const char *filename, int lineno, const char *funcname)
|
|
|
614
684
|
fflush(stdout);
|
|
615
685
|
fflush(stderr);
|
|
616
686
|
|
|
687
|
+
/*
|
|
688
|
+
* Let the cumulative stats system know. Only mark the session as
|
|
689
|
+
* terminated by fatal error if there is no other known cause.
|
|
690
|
+
*/
|
|
691
|
+
if (pgStatSessionEndCause == DISCONNECT_NORMAL)
|
|
692
|
+
pgStatSessionEndCause = DISCONNECT_FATAL;
|
|
693
|
+
|
|
617
694
|
/*
|
|
618
695
|
* Do normal process-exit cleanup, then return exit code 1 to indicate
|
|
619
696
|
* FATAL termination. The postmaster may or may not consider this
|
|
@@ -687,8 +764,7 @@ errcode(int sqlerrcode)
|
|
|
687
764
|
* NOTE: the primary error message string should generally include %m
|
|
688
765
|
* when this is used.
|
|
689
766
|
*/
|
|
690
|
-
|
|
691
|
-
#endif
|
|
767
|
+
|
|
692
768
|
|
|
693
769
|
|
|
694
770
|
/*
|
|
@@ -953,6 +1029,13 @@ errhint(const char *fmt,...)
|
|
|
953
1029
|
}
|
|
954
1030
|
|
|
955
1031
|
|
|
1032
|
+
/*
|
|
1033
|
+
* errhint_plural --- add a hint error message text to the current error,
|
|
1034
|
+
* with support for pluralization of the message text
|
|
1035
|
+
*/
|
|
1036
|
+
|
|
1037
|
+
|
|
1038
|
+
|
|
956
1039
|
/*
|
|
957
1040
|
* errcontext_msg --- add a context error message text to the current error
|
|
958
1041
|
*
|
|
@@ -1006,7 +1089,18 @@ set_errcontext_domain(const char *domain)
|
|
|
1006
1089
|
*
|
|
1007
1090
|
* This should be called if the message text already includes the statement.
|
|
1008
1091
|
*/
|
|
1092
|
+
int
|
|
1093
|
+
errhidestmt(bool hide_stmt)
|
|
1094
|
+
{
|
|
1095
|
+
ErrorData *edata = &errordata[errordata_stack_depth];
|
|
1096
|
+
|
|
1097
|
+
/* we don't bother incrementing recursion_depth */
|
|
1098
|
+
CHECK_STACK_DEPTH();
|
|
1009
1099
|
|
|
1100
|
+
edata->hide_stmt = hide_stmt;
|
|
1101
|
+
|
|
1102
|
+
return 0; /* return value does not matter */
|
|
1103
|
+
}
|
|
1010
1104
|
|
|
1011
1105
|
/*
|
|
1012
1106
|
* errhidecontext --- optionally suppress CONTEXT: field of log entry
|
|
@@ -1014,17 +1108,18 @@ set_errcontext_domain(const char *domain)
|
|
|
1014
1108
|
* This should only be used for verbose debugging messages where the repeated
|
|
1015
1109
|
* inclusion of context would bloat the log volume too much.
|
|
1016
1110
|
*/
|
|
1111
|
+
int
|
|
1112
|
+
errhidecontext(bool hide_ctx)
|
|
1113
|
+
{
|
|
1114
|
+
ErrorData *edata = &errordata[errordata_stack_depth];
|
|
1017
1115
|
|
|
1116
|
+
/* we don't bother incrementing recursion_depth */
|
|
1117
|
+
CHECK_STACK_DEPTH();
|
|
1018
1118
|
|
|
1119
|
+
edata->hide_ctx = hide_ctx;
|
|
1019
1120
|
|
|
1020
|
-
/*
|
|
1021
|
-
|
|
1022
|
-
*
|
|
1023
|
-
* This is used when backwards compatibility demands that the function
|
|
1024
|
-
* name appear in messages sent to old-protocol clients. Note that the
|
|
1025
|
-
* passed string is expected to be a non-freeable constant string.
|
|
1026
|
-
*/
|
|
1027
|
-
|
|
1121
|
+
return 0; /* return value does not matter */
|
|
1122
|
+
}
|
|
1028
1123
|
|
|
1029
1124
|
/*
|
|
1030
1125
|
* errposition --- add cursor position to the current error
|
|
@@ -1368,16 +1463,10 @@ pg_re_throw(void)
|
|
|
1368
1463
|
|
|
1369
1464
|
/*
|
|
1370
1465
|
* At least in principle, the increase in severity could have changed
|
|
1371
|
-
* where-to-output decisions, so recalculate.
|
|
1372
|
-
* sync with errstart(), which see for comments.
|
|
1466
|
+
* where-to-output decisions, so recalculate.
|
|
1373
1467
|
*/
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
log_min_messages);
|
|
1377
|
-
else
|
|
1378
|
-
edata->output_to_server = (FATAL >= log_min_messages);
|
|
1379
|
-
if (whereToSendOutput == DestRemote)
|
|
1380
|
-
edata->output_to_client = true;
|
|
1468
|
+
edata->output_to_server = should_output_to_server(FATAL);
|
|
1469
|
+
edata->output_to_client = should_output_to_client(FATAL);
|
|
1381
1470
|
|
|
1382
1471
|
/*
|
|
1383
1472
|
* We can use errfinish() for the rest, but we don't want it to call
|
|
@@ -1481,6 +1570,7 @@ write_eventlog(int level, const char *line, int len)
|
|
|
1481
1570
|
eventlevel = EVENTLOG_INFORMATION_TYPE;
|
|
1482
1571
|
break;
|
|
1483
1572
|
case WARNING:
|
|
1573
|
+
case WARNING_CLIENT_ONLY:
|
|
1484
1574
|
eventlevel = EVENTLOG_WARNING_TYPE;
|
|
1485
1575
|
break;
|
|
1486
1576
|
case ERROR:
|
|
@@ -1543,39 +1633,51 @@ write_eventlog(int level, const char *line, int len)
|
|
|
1543
1633
|
#endif
|
|
1544
1634
|
|
|
1545
1635
|
/*
|
|
1546
|
-
*
|
|
1636
|
+
* get_formatted_log_time -- compute and get the log timestamp.
|
|
1637
|
+
*
|
|
1638
|
+
* The timestamp is computed if not set yet, so as it is kept consistent
|
|
1639
|
+
* among all the log destinations that require it to be consistent. Note
|
|
1640
|
+
* that the computed timestamp is returned in a static buffer, not
|
|
1641
|
+
* palloc()'d.
|
|
1547
1642
|
*/
|
|
1548
1643
|
|
|
1549
1644
|
|
|
1550
1645
|
/*
|
|
1551
|
-
*
|
|
1646
|
+
* reset_formatted_start_time -- reset the start timestamp
|
|
1552
1647
|
*/
|
|
1553
1648
|
|
|
1554
1649
|
|
|
1555
1650
|
/*
|
|
1556
|
-
*
|
|
1557
|
-
* string in log_line_prefix
|
|
1651
|
+
* get_formatted_start_time -- compute and get the start timestamp.
|
|
1558
1652
|
*
|
|
1559
|
-
*
|
|
1560
|
-
*
|
|
1653
|
+
* The timestamp is computed if not set yet. Note that the computed
|
|
1654
|
+
* timestamp is returned in a static buffer, not palloc()'d.
|
|
1561
1655
|
*/
|
|
1562
1656
|
|
|
1563
1657
|
|
|
1564
1658
|
/*
|
|
1565
|
-
*
|
|
1659
|
+
* check_log_of_query -- check if a query can be logged
|
|
1566
1660
|
*/
|
|
1567
1661
|
|
|
1568
1662
|
|
|
1569
1663
|
/*
|
|
1570
|
-
*
|
|
1571
|
-
*
|
|
1572
|
-
*
|
|
1664
|
+
* get_backend_type_for_log -- backend type for log entries
|
|
1665
|
+
*
|
|
1666
|
+
* Returns a pointer to a static buffer, not palloc()'d.
|
|
1573
1667
|
*/
|
|
1574
1668
|
|
|
1575
1669
|
|
|
1576
1670
|
/*
|
|
1577
|
-
*
|
|
1578
|
-
*
|
|
1671
|
+
* process_log_prefix_padding --- helper function for processing the format
|
|
1672
|
+
* string in log_line_prefix
|
|
1673
|
+
*
|
|
1674
|
+
* Note: This function returns NULL if it finds something which
|
|
1675
|
+
* it deems invalid in the format string.
|
|
1676
|
+
*/
|
|
1677
|
+
|
|
1678
|
+
|
|
1679
|
+
/*
|
|
1680
|
+
* Format tag info for log lines; append to the provided buffer.
|
|
1579
1681
|
*/
|
|
1580
1682
|
|
|
1581
1683
|
|
|
@@ -1701,35 +1803,6 @@ write_stderr(const char *fmt,...)
|
|
|
1701
1803
|
}
|
|
1702
1804
|
|
|
1703
1805
|
|
|
1704
|
-
/*
|
|
1705
|
-
* is_log_level_output -- is elevel logically >= log_min_level?
|
|
1706
|
-
*
|
|
1707
|
-
* We use this for tests that should consider LOG to sort out-of-order,
|
|
1708
|
-
* between ERROR and FATAL. Generally this is the right thing for testing
|
|
1709
|
-
* whether a message should go to the postmaster log, whereas a simple >=
|
|
1710
|
-
* test is correct for testing whether the message should go to the client.
|
|
1711
|
-
*/
|
|
1712
|
-
static bool
|
|
1713
|
-
is_log_level_output(int elevel, int log_min_level)
|
|
1714
|
-
{
|
|
1715
|
-
if (elevel == LOG || elevel == LOG_SERVER_ONLY)
|
|
1716
|
-
{
|
|
1717
|
-
if (log_min_level == LOG || log_min_level <= ERROR)
|
|
1718
|
-
return true;
|
|
1719
|
-
}
|
|
1720
|
-
else if (log_min_level == LOG)
|
|
1721
|
-
{
|
|
1722
|
-
/* elevel != LOG */
|
|
1723
|
-
if (elevel >= FATAL)
|
|
1724
|
-
return true;
|
|
1725
|
-
}
|
|
1726
|
-
/* Neither is LOG */
|
|
1727
|
-
else if (elevel >= log_min_level)
|
|
1728
|
-
return true;
|
|
1729
|
-
|
|
1730
|
-
return false;
|
|
1731
|
-
}
|
|
1732
|
-
|
|
1733
1806
|
/*
|
|
1734
1807
|
* Adjust the level of a recovery-related message per trace_recovery_messages.
|
|
1735
1808
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*--------------------------------------------------------------------
|
|
2
2
|
* Symbols referenced in this file:
|
|
3
|
-
* -
|
|
3
|
+
* - FunctionCall6Coll
|
|
4
4
|
*--------------------------------------------------------------------
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* fmgr.c
|
|
10
10
|
* The Postgres function manager.
|
|
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
|
*
|
|
@@ -124,7 +124,7 @@ extern Datum fmgr_security_definer(PG_FUNCTION_ARGS);
|
|
|
124
124
|
* If *mod == NULL and *fn != NULL, the function is implemented by a symbol in
|
|
125
125
|
* the main binary.
|
|
126
126
|
*
|
|
127
|
-
* If *mod != NULL and *fn !=NULL the function is implemented in an extension
|
|
127
|
+
* If *mod != NULL and *fn != NULL the function is implemented in an extension
|
|
128
128
|
* shared object.
|
|
129
129
|
*
|
|
130
130
|
* The returned module and function names are pstrdup'ed into the current
|
|
@@ -180,14 +180,6 @@ extern Datum fmgr_security_definer(PG_FUNCTION_ARGS);
|
|
|
180
180
|
*/
|
|
181
181
|
|
|
182
182
|
|
|
183
|
-
/*
|
|
184
|
-
* clear_external_function_hash: remove entries for a library being closed
|
|
185
|
-
*
|
|
186
|
-
* Presently we just zap the entire hash table, but later it might be worth
|
|
187
|
-
* the effort to remove only the entries associated with the given handle.
|
|
188
|
-
*/
|
|
189
|
-
|
|
190
|
-
|
|
191
183
|
|
|
192
184
|
/*
|
|
193
185
|
* Copy an FmgrInfo struct
|
|
@@ -291,14 +283,17 @@ struct fmgr_security_definer_cache
|
|
|
291
283
|
|
|
292
284
|
|
|
293
285
|
|
|
286
|
+
|
|
287
|
+
|
|
294
288
|
Datum
|
|
295
|
-
|
|
296
|
-
Datum arg3, Datum arg4, Datum arg5
|
|
289
|
+
FunctionCall6Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2,
|
|
290
|
+
Datum arg3, Datum arg4, Datum arg5,
|
|
291
|
+
Datum arg6)
|
|
297
292
|
{
|
|
298
|
-
LOCAL_FCINFO(fcinfo,
|
|
293
|
+
LOCAL_FCINFO(fcinfo, 6);
|
|
299
294
|
Datum result;
|
|
300
295
|
|
|
301
|
-
InitFunctionCallInfoData(*fcinfo, flinfo,
|
|
296
|
+
InitFunctionCallInfoData(*fcinfo, flinfo, 6, collation, NULL, NULL);
|
|
302
297
|
|
|
303
298
|
fcinfo->args[0].value = arg1;
|
|
304
299
|
fcinfo->args[0].isnull = false;
|
|
@@ -310,6 +305,8 @@ FunctionCall5Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2,
|
|
|
310
305
|
fcinfo->args[3].isnull = false;
|
|
311
306
|
fcinfo->args[4].value = arg5;
|
|
312
307
|
fcinfo->args[4].isnull = false;
|
|
308
|
+
fcinfo->args[5].value = arg6;
|
|
309
|
+
fcinfo->args[5].isnull = false;
|
|
313
310
|
|
|
314
311
|
result = FunctionCallInvoke(fcinfo);
|
|
315
312
|
|
|
@@ -327,8 +324,6 @@ FunctionCall5Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2,
|
|
|
327
324
|
|
|
328
325
|
|
|
329
326
|
|
|
330
|
-
|
|
331
|
-
|
|
332
327
|
/*
|
|
333
328
|
* These are for invocation of a function identified by OID with a
|
|
334
329
|
* directly-computed parameter list. Note that neither arguments nor result
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
/*-------------------------------------------------------------------------
|
|
21
21
|
*
|
|
22
22
|
* dynahash.c
|
|
23
|
-
* dynamic hash tables
|
|
23
|
+
* dynamic chained hash tables
|
|
24
24
|
*
|
|
25
25
|
* dynahash.c supports both local-to-a-backend hash tables and hash tables in
|
|
26
26
|
* shared memory. For shared hash tables, it is the caller's responsibility
|
|
@@ -49,18 +49,29 @@
|
|
|
49
49
|
* dynahash.c provides support for these types of lookup keys:
|
|
50
50
|
*
|
|
51
51
|
* 1. Null-terminated C strings (truncated if necessary to fit in keysize),
|
|
52
|
-
* compared as though by strcmp(). This is
|
|
52
|
+
* compared as though by strcmp(). This is selected by specifying the
|
|
53
|
+
* HASH_STRINGS flag to hash_create.
|
|
53
54
|
*
|
|
54
55
|
* 2. Arbitrary binary data of size keysize, compared as though by memcmp().
|
|
55
56
|
* (Caller must ensure there are no undefined padding bits in the keys!)
|
|
56
|
-
* This is selected by specifying HASH_BLOBS flag to hash_create.
|
|
57
|
+
* This is selected by specifying the HASH_BLOBS flag to hash_create.
|
|
57
58
|
*
|
|
58
59
|
* 3. More complex key behavior can be selected by specifying user-supplied
|
|
59
60
|
* hashing, comparison, and/or key-copying functions. At least a hashing
|
|
60
61
|
* function must be supplied; comparison defaults to memcmp() and key copying
|
|
61
62
|
* to memcpy() when a user-defined hashing function is selected.
|
|
62
63
|
*
|
|
63
|
-
*
|
|
64
|
+
* Compared to simplehash, dynahash has the following benefits:
|
|
65
|
+
*
|
|
66
|
+
* - It supports partitioning, which is useful for shared memory access using
|
|
67
|
+
* locks.
|
|
68
|
+
* - Shared memory hashes are allocated in a fixed size area at startup and
|
|
69
|
+
* are discoverable by name from other processes.
|
|
70
|
+
* - Because entries don't need to be moved in the case of hash conflicts,
|
|
71
|
+
* dynahash has better performance for large entries.
|
|
72
|
+
* - Guarantees stable pointers to entries.
|
|
73
|
+
*
|
|
74
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
64
75
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
65
76
|
*
|
|
66
77
|
*
|
|
@@ -131,7 +142,6 @@
|
|
|
131
142
|
#define DEF_SEGSIZE 256
|
|
132
143
|
#define DEF_SEGSIZE_SHIFT 8 /* must be log2(DEF_SEGSIZE) */
|
|
133
144
|
#define DEF_DIRSIZE 256
|
|
134
|
-
#define DEF_FFACTOR 1 /* default fill factor */
|
|
135
145
|
|
|
136
146
|
/* Number of freelists to be used for a partitioned hash table. */
|
|
137
147
|
#define NUM_FREELISTS 32
|
|
@@ -200,7 +210,6 @@ struct HASHHDR
|
|
|
200
210
|
Size keysize; /* hash key length in bytes */
|
|
201
211
|
Size entrysize; /* total user element size in bytes */
|
|
202
212
|
long num_partitions; /* # partitions (must be power of 2), or 0 */
|
|
203
|
-
long ffactor; /* target fill factor */
|
|
204
213
|
long max_dsize; /* 'dsize' limit if directory is fixed size */
|
|
205
214
|
long ssize; /* segment size --- must be power of 2 */
|
|
206
215
|
int sshift; /* segment shift = log2(ssize) */
|
|
@@ -324,6 +333,28 @@ DynaHashAlloc(Size size)
|
|
|
324
333
|
* *info: additional table parameters, as indicated by flags
|
|
325
334
|
* flags: bitmask indicating which parameters to take from *info
|
|
326
335
|
*
|
|
336
|
+
* The flags value *must* include HASH_ELEM. (Formerly, this was nominally
|
|
337
|
+
* optional, but the default keysize and entrysize values were useless.)
|
|
338
|
+
* The flags value must also include exactly one of HASH_STRINGS, HASH_BLOBS,
|
|
339
|
+
* or HASH_FUNCTION, to define the key hashing semantics (C strings,
|
|
340
|
+
* binary blobs, or custom, respectively). Callers specifying a custom
|
|
341
|
+
* hash function will likely also want to use HASH_COMPARE, and perhaps
|
|
342
|
+
* also HASH_KEYCOPY, to control key comparison and copying.
|
|
343
|
+
* Another often-used flag is HASH_CONTEXT, to allocate the hash table
|
|
344
|
+
* under info->hcxt rather than under TopMemoryContext; the default
|
|
345
|
+
* behavior is only suitable for session-lifespan hash tables.
|
|
346
|
+
* Other flags bits are special-purpose and seldom used, except for those
|
|
347
|
+
* associated with shared-memory hash tables, for which see ShmemInitHash().
|
|
348
|
+
*
|
|
349
|
+
* Fields in *info are read only when the associated flags bit is set.
|
|
350
|
+
* It is not necessary to initialize other fields of *info.
|
|
351
|
+
* Neither tabname nor *info need persist after the hash_create() call.
|
|
352
|
+
*
|
|
353
|
+
* Note: It is deprecated for callers of hash_create() to explicitly specify
|
|
354
|
+
* string_hash, tag_hash, uint32_hash, or oid_hash. Just set HASH_STRINGS or
|
|
355
|
+
* HASH_BLOBS. Use HASH_FUNCTION only when you want something other than
|
|
356
|
+
* one of these.
|
|
357
|
+
*
|
|
327
358
|
* Note: for a shared-memory hashtable, nelem needs to be a pretty good
|
|
328
359
|
* estimate, since we can't expand the table on the fly. But an unshared
|
|
329
360
|
* hashtable can be expanded on-the-fly, so it's better for nelem to be
|
|
@@ -486,11 +517,10 @@ hash_search_with_hash_value(HTAB *hashp,
|
|
|
486
517
|
{
|
|
487
518
|
/*
|
|
488
519
|
* Can't split if running in partitioned mode, nor if frozen, nor if
|
|
489
|
-
* table is the subject of any active hash_seq_search scans.
|
|
490
|
-
* order of these tests is to try to check cheaper conditions first.
|
|
520
|
+
* table is the subject of any active hash_seq_search scans.
|
|
491
521
|
*/
|
|
492
|
-
if (
|
|
493
|
-
|
|
522
|
+
if (hctl->freeList[0].nentries > (long) hctl->max_bucket &&
|
|
523
|
+
!IS_PARTITIONED(hctl) && !hashp->frozen &&
|
|
494
524
|
!has_seq_scans(hashp))
|
|
495
525
|
(void) expand_table(hashp);
|
|
496
526
|
}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* - ExitOnAnyError
|
|
5
5
|
* - InterruptHoldoffCount
|
|
6
6
|
* - QueryCancelHoldoffCount
|
|
7
|
-
* - IsPostmasterEnvironment
|
|
8
7
|
* - InterruptPending
|
|
9
8
|
*--------------------------------------------------------------------
|
|
10
9
|
*/
|
|
@@ -14,7 +13,7 @@
|
|
|
14
13
|
* globals.c
|
|
15
14
|
* global variable declarations
|
|
16
15
|
*
|
|
17
|
-
* Portions Copyright (c) 1996-
|
|
16
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
18
17
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
19
18
|
*
|
|
20
19
|
*
|
|
@@ -45,6 +44,10 @@ __thread volatile sig_atomic_t InterruptPending = false;
|
|
|
45
44
|
|
|
46
45
|
|
|
47
46
|
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
48
51
|
__thread volatile uint32 InterruptHoldoffCount = 0;
|
|
49
52
|
|
|
50
53
|
__thread volatile uint32 QueryCancelHoldoffCount = 0;
|
|
@@ -120,7 +123,6 @@ char postgres_exec_path[MAXPGPATH]; /* full path to backend */
|
|
|
120
123
|
*
|
|
121
124
|
* These are initialized for the bootstrap/standalone case.
|
|
122
125
|
*/
|
|
123
|
-
__thread bool IsPostmasterEnvironment = false;
|
|
124
126
|
|
|
125
127
|
|
|
126
128
|
|
|
@@ -164,5 +166,3 @@ __thread bool ExitOnAnyError = false;
|
|
|
164
166
|
|
|
165
167
|
/* working state for vacuum */
|
|
166
168
|
|
|
167
|
-
|
|
168
|
-
|