pg_query 2.2.0 → 4.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +25 -0
- data/README.md +59 -31
- data/Rakefile +2 -2
- data/ext/pg_query/include/access/amapi.h +45 -1
- data/ext/pg_query/include/access/attmap.h +1 -1
- data/ext/pg_query/include/access/attnum.h +2 -2
- data/ext/pg_query/include/access/clog.h +4 -2
- data/ext/pg_query/include/access/commit_ts.h +6 -9
- data/ext/pg_query/include/access/detoast.h +1 -11
- data/ext/pg_query/include/access/genam.h +15 -12
- data/ext/pg_query/include/access/gin.h +2 -2
- data/ext/pg_query/include/access/htup.h +1 -1
- data/ext/pg_query/include/access/htup_details.h +75 -87
- data/ext/pg_query/include/access/itup.h +7 -1
- data/ext/pg_query/include/access/parallel.h +2 -2
- data/ext/pg_query/include/access/printtup.h +1 -1
- data/ext/pg_query/include/access/relation.h +1 -1
- data/ext/pg_query/include/access/relscan.h +17 -2
- data/ext/pg_query/include/access/rmgr.h +30 -3
- data/ext/pg_query/include/access/rmgrlist.h +23 -23
- data/ext/pg_query/include/access/sdir.h +1 -1
- data/ext/pg_query/include/access/skey.h +1 -1
- data/ext/pg_query/include/access/stratnum.h +4 -2
- data/ext/pg_query/include/access/sysattr.h +1 -1
- data/ext/pg_query/include/access/table.h +2 -1
- data/ext/pg_query/include/access/tableam.h +272 -20
- data/ext/pg_query/include/access/toast_compression.h +73 -0
- data/ext/pg_query/include/access/transam.h +123 -13
- data/ext/pg_query/include/access/tupconvert.h +1 -1
- data/ext/pg_query/include/access/tupdesc.h +1 -1
- data/ext/pg_query/include/access/tupmacs.h +3 -3
- data/ext/pg_query/include/access/twophase.h +3 -1
- data/ext/pg_query/include/access/xact.h +73 -19
- data/ext/pg_query/include/access/xlog.h +60 -155
- data/ext/pg_query/include/access/xlog_internal.h +40 -13
- data/ext/pg_query/include/access/xlogdefs.h +8 -16
- data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
- data/ext/pg_query/include/access/xlogreader.h +145 -39
- data/ext/pg_query/include/access/xlogrecord.h +18 -9
- data/ext/pg_query/include/access/xlogrecovery.h +157 -0
- data/ext/pg_query/include/c.h +101 -44
- data/ext/pg_query/include/catalog/catalog.h +3 -1
- data/ext/pg_query/include/catalog/catversion.h +2 -2
- data/ext/pg_query/include/catalog/dependency.h +8 -16
- data/ext/pg_query/include/catalog/genbki.h +83 -5
- data/ext/pg_query/include/catalog/index.h +18 -3
- data/ext/pg_query/include/catalog/indexing.h +12 -324
- data/ext/pg_query/include/catalog/namespace.h +4 -2
- data/ext/pg_query/include/catalog/objectaccess.h +70 -2
- data/ext/pg_query/include/catalog/objectaddress.h +11 -6
- data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
- data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_am.h +4 -1
- data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
- data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
- data/ext/pg_query/include/catalog/pg_authid.h +7 -2
- data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
- data/ext/pg_query/include/catalog/pg_class.h +44 -14
- data/ext/pg_query/include/catalog/pg_class_d.h +30 -1
- data/ext/pg_query/include/catalog/pg_collation.h +33 -8
- data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
- data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
- data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
- data/ext/pg_query/include/catalog/pg_control.h +3 -5
- data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
- data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_depend.h +11 -7
- data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
- data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_index.h +17 -7
- data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
- data/ext/pg_query/include/catalog/pg_language.h +10 -5
- data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
- data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
- data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_operator.h +18 -15
- data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
- data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
- data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
- data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
- data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
- data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_proc.h +20 -11
- data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
- data/ext/pg_query/include/catalog/pg_publication.h +50 -7
- data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
- data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
- data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
- data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
- data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
- data/ext/pg_query/include/catalog/pg_transform.h +8 -5
- data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
- data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
- data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_type.h +55 -24
- data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
- data/ext/pg_query/include/catalog/storage.h +5 -3
- data/ext/pg_query/include/commands/async.h +3 -4
- data/ext/pg_query/include/commands/dbcommands.h +2 -1
- data/ext/pg_query/include/commands/defrem.h +11 -24
- data/ext/pg_query/include/commands/event_trigger.h +2 -2
- data/ext/pg_query/include/commands/explain.h +1 -1
- data/ext/pg_query/include/commands/prepare.h +1 -1
- data/ext/pg_query/include/commands/tablespace.h +2 -2
- data/ext/pg_query/include/commands/trigger.h +18 -16
- data/ext/pg_query/include/commands/user.h +2 -2
- data/ext/pg_query/include/commands/vacuum.h +88 -41
- data/ext/pg_query/include/commands/variable.h +1 -1
- data/ext/pg_query/include/common/file_perm.h +4 -4
- data/ext/pg_query/include/common/hashfn.h +1 -1
- data/ext/pg_query/include/common/ip.h +1 -7
- data/ext/pg_query/include/common/keywords.h +2 -6
- data/ext/pg_query/include/common/kwlookup.h +1 -1
- data/ext/pg_query/include/common/pg_prng.h +60 -0
- data/ext/pg_query/include/common/relpath.h +2 -2
- data/ext/pg_query/include/common/string.h +24 -1
- data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
- data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
- data/ext/pg_query/include/datatype/timestamp.h +40 -1
- data/ext/pg_query/include/executor/execdesc.h +1 -1
- data/ext/pg_query/include/executor/executor.h +65 -22
- data/ext/pg_query/include/executor/functions.h +17 -3
- data/ext/pg_query/include/executor/instrument.h +33 -16
- data/ext/pg_query/include/executor/spi.h +41 -3
- data/ext/pg_query/include/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/executor/tuptable.h +1 -1
- data/ext/pg_query/include/fmgr.h +13 -7
- data/ext/pg_query/include/funcapi.h +16 -4
- data/ext/pg_query/include/getaddrinfo.h +1 -1
- data/ext/pg_query/include/jit/jit.h +11 -11
- data/ext/pg_query/include/kwlist_d.h +517 -494
- data/ext/pg_query/include/lib/dshash.h +112 -0
- data/ext/pg_query/include/lib/ilist.h +20 -1
- data/ext/pg_query/include/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/lib/simplehash.h +140 -15
- data/ext/pg_query/include/lib/sort_template.h +432 -0
- data/ext/pg_query/include/lib/stringinfo.h +1 -1
- data/ext/pg_query/include/libpq/auth.h +6 -4
- data/ext/pg_query/include/libpq/crypt.h +5 -4
- data/ext/pg_query/include/libpq/hba.h +43 -4
- data/ext/pg_query/include/libpq/libpq-be.h +23 -6
- data/ext/pg_query/include/libpq/libpq.h +30 -20
- data/ext/pg_query/include/libpq/pqcomm.h +17 -31
- data/ext/pg_query/include/libpq/pqformat.h +1 -1
- data/ext/pg_query/include/libpq/pqsignal.h +4 -4
- data/ext/pg_query/include/mb/pg_wchar.h +105 -23
- data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/miscadmin.h +47 -41
- data/ext/pg_query/include/nodes/bitmapset.h +1 -1
- data/ext/pg_query/include/nodes/execnodes.h +270 -78
- data/ext/pg_query/include/nodes/extensible.h +4 -2
- data/ext/pg_query/include/nodes/lockoptions.h +1 -1
- data/ext/pg_query/include/nodes/makefuncs.h +7 -6
- data/ext/pg_query/include/nodes/memnodes.h +5 -3
- data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
- data/ext/pg_query/include/nodes/nodes.h +30 -11
- data/ext/pg_query/include/nodes/params.h +1 -1
- data/ext/pg_query/include/nodes/parsenodes.h +322 -90
- data/ext/pg_query/include/nodes/pathnodes.h +243 -66
- data/ext/pg_query/include/nodes/pg_list.h +75 -69
- data/ext/pg_query/include/nodes/plannodes.h +111 -28
- data/ext/pg_query/include/nodes/primnodes.h +99 -47
- data/ext/pg_query/include/nodes/print.h +1 -1
- data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/nodes/value.h +58 -39
- data/ext/pg_query/include/optimizer/cost.h +9 -2
- data/ext/pg_query/include/optimizer/geqo.h +9 -7
- data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/optimizer/optimizer.h +25 -17
- data/ext/pg_query/include/optimizer/paths.h +6 -6
- data/ext/pg_query/include/optimizer/planmain.h +15 -14
- data/ext/pg_query/include/parser/analyze.h +19 -5
- data/ext/pg_query/include/parser/gram.h +947 -913
- data/ext/pg_query/include/parser/gramparse.h +1 -1
- data/ext/pg_query/include/parser/kwlist.h +463 -453
- data/ext/pg_query/include/parser/parse_agg.h +2 -7
- data/ext/pg_query/include/parser/parse_coerce.h +3 -1
- data/ext/pg_query/include/parser/parse_expr.h +2 -3
- data/ext/pg_query/include/parser/parse_func.h +2 -1
- data/ext/pg_query/include/parser/parse_node.h +21 -9
- data/ext/pg_query/include/parser/parse_oper.h +1 -3
- data/ext/pg_query/include/parser/parse_relation.h +5 -4
- data/ext/pg_query/include/parser/parse_type.h +1 -1
- data/ext/pg_query/include/parser/parser.h +31 -4
- data/ext/pg_query/include/parser/parsetree.h +1 -1
- data/ext/pg_query/include/parser/scanner.h +1 -1
- data/ext/pg_query/include/parser/scansup.h +2 -5
- data/ext/pg_query/include/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/pg_config.h +83 -41
- data/ext/pg_query/include/pg_config_manual.h +74 -21
- data/ext/pg_query/include/pg_getopt.h +6 -6
- data/ext/pg_query/include/pg_query.h +5 -4
- data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +939 -113
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +151 -26
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +173 -30
- data/ext/pg_query/include/pg_trace.h +1 -1
- data/ext/pg_query/include/pgstat.h +449 -1238
- data/ext/pg_query/include/pgtime.h +14 -4
- data/ext/pg_query/include/pl_gram.h +126 -128
- data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
- data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/include/plerrcodes.h +9 -1
- data/ext/pg_query/include/plpgsql.h +52 -54
- data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
- data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
- data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
- data/ext/pg_query/include/port/atomics/fallback.h +1 -1
- data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
- data/ext/pg_query/include/port/atomics/generic.h +1 -1
- data/ext/pg_query/include/port/atomics.h +1 -1
- data/ext/pg_query/include/port/pg_bitutils.h +40 -10
- data/ext/pg_query/include/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/port/pg_crc32c.h +1 -1
- data/ext/pg_query/include/port.h +71 -46
- data/ext/pg_query/include/portability/instr_time.h +1 -1
- data/ext/pg_query/include/postgres.h +60 -16
- data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
- data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
- data/ext/pg_query/include/postmaster/bgworker.h +2 -1
- data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
- data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
- data/ext/pg_query/include/postmaster/fork_process.h +1 -1
- data/ext/pg_query/include/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postmaster/pgarch.h +42 -8
- data/ext/pg_query/include/postmaster/postmaster.h +18 -17
- data/ext/pg_query/include/postmaster/startup.h +39 -0
- data/ext/pg_query/include/postmaster/syslogger.h +15 -10
- data/ext/pg_query/include/postmaster/walwriter.h +3 -3
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1419 -914
- data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
- data/ext/pg_query/include/regex/regex.h +18 -16
- data/ext/pg_query/include/replication/logicallauncher.h +3 -5
- data/ext/pg_query/include/replication/logicalproto.h +161 -17
- data/ext/pg_query/include/replication/logicalworker.h +1 -1
- data/ext/pg_query/include/replication/origin.h +7 -7
- data/ext/pg_query/include/replication/reorderbuffer.h +259 -42
- data/ext/pg_query/include/replication/slot.h +22 -11
- data/ext/pg_query/include/replication/syncrep.h +5 -5
- data/ext/pg_query/include/replication/walreceiver.h +145 -13
- data/ext/pg_query/include/replication/walsender.h +8 -8
- data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
- data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/storage/backendid.h +3 -3
- data/ext/pg_query/include/storage/block.h +4 -10
- data/ext/pg_query/include/storage/buf.h +1 -1
- data/ext/pg_query/include/storage/bufmgr.h +19 -14
- data/ext/pg_query/include/storage/bufpage.h +6 -8
- data/ext/pg_query/include/storage/condition_variable.h +13 -2
- data/ext/pg_query/include/storage/dsm.h +4 -1
- data/ext/pg_query/include/storage/dsm_impl.h +3 -2
- data/ext/pg_query/include/storage/fd.h +33 -3
- data/ext/pg_query/include/storage/fileset.h +40 -0
- data/ext/pg_query/include/storage/ipc.h +4 -1
- data/ext/pg_query/include/storage/item.h +1 -1
- data/ext/pg_query/include/storage/itemid.h +1 -1
- data/ext/pg_query/include/storage/itemptr.h +3 -1
- data/ext/pg_query/include/storage/large_object.h +2 -2
- data/ext/pg_query/include/storage/latch.h +9 -13
- data/ext/pg_query/include/storage/lmgr.h +2 -1
- data/ext/pg_query/include/storage/lock.h +11 -8
- data/ext/pg_query/include/storage/lockdefs.h +2 -2
- data/ext/pg_query/include/storage/lwlock.h +5 -32
- data/ext/pg_query/include/storage/lwlocknames.h +0 -1
- data/ext/pg_query/include/storage/off.h +1 -1
- data/ext/pg_query/include/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/storage/pg_shmem.h +9 -7
- data/ext/pg_query/include/storage/pmsignal.h +15 -4
- data/ext/pg_query/include/storage/predicate.h +4 -4
- data/ext/pg_query/include/storage/proc.h +173 -59
- data/ext/pg_query/include/storage/procarray.h +98 -0
- data/ext/pg_query/include/storage/proclist_types.h +1 -1
- data/ext/pg_query/include/storage/procsignal.h +3 -7
- data/ext/pg_query/include/storage/relfilenode.h +1 -1
- data/ext/pg_query/include/storage/s_lock.h +60 -21
- data/ext/pg_query/include/storage/sharedfileset.h +3 -11
- data/ext/pg_query/include/storage/shm_mq.h +5 -4
- data/ext/pg_query/include/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/storage/shmem.h +1 -1
- data/ext/pg_query/include/storage/sinval.h +3 -3
- data/ext/pg_query/include/storage/sinvaladt.h +1 -1
- data/ext/pg_query/include/storage/smgr.h +10 -8
- data/ext/pg_query/include/storage/spin.h +2 -2
- data/ext/pg_query/include/storage/standby.h +13 -6
- data/ext/pg_query/include/storage/standbydefs.h +2 -2
- data/ext/pg_query/include/storage/sync.h +7 -3
- data/ext/pg_query/include/tcop/cmdtag.h +1 -1
- data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
- data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
- data/ext/pg_query/include/tcop/dest.h +1 -1
- data/ext/pg_query/include/tcop/fastpath.h +1 -2
- data/ext/pg_query/include/tcop/pquery.h +1 -1
- data/ext/pg_query/include/tcop/tcopprot.h +19 -11
- data/ext/pg_query/include/tcop/utility.h +7 -3
- data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
- data/ext/pg_query/include/utils/acl.h +24 -3
- data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/utils/array.h +7 -2
- data/ext/pg_query/include/utils/backend_progress.h +44 -0
- data/ext/pg_query/include/utils/backend_status.h +321 -0
- data/ext/pg_query/include/utils/builtins.h +10 -11
- data/ext/pg_query/include/utils/bytea.h +3 -2
- data/ext/pg_query/include/utils/catcache.h +1 -1
- data/ext/pg_query/include/utils/date.h +1 -1
- data/ext/pg_query/include/utils/datetime.h +8 -7
- data/ext/pg_query/include/utils/datum.h +9 -1
- data/ext/pg_query/include/utils/dsa.h +1 -1
- data/ext/pg_query/include/utils/dynahash.h +4 -3
- data/ext/pg_query/include/utils/elog.h +52 -21
- data/ext/pg_query/include/utils/errcodes.h +2 -0
- data/ext/pg_query/include/utils/expandeddatum.h +1 -1
- data/ext/pg_query/include/utils/expandedrecord.h +1 -1
- data/ext/pg_query/include/utils/float.h +7 -7
- data/ext/pg_query/include/utils/fmgroids.h +1300 -696
- data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
- data/ext/pg_query/include/utils/fmgrtab.h +6 -5
- data/ext/pg_query/include/utils/guc.h +69 -43
- data/ext/pg_query/include/utils/guc_tables.h +23 -19
- data/ext/pg_query/include/utils/hsearch.h +15 -11
- data/ext/pg_query/include/utils/inval.h +4 -1
- data/ext/pg_query/include/utils/lsyscache.h +11 -1
- data/ext/pg_query/include/utils/memdebug.h +1 -1
- data/ext/pg_query/include/utils/memutils.h +8 -3
- data/ext/pg_query/include/utils/numeric.h +19 -5
- data/ext/pg_query/include/utils/palloc.h +25 -3
- data/ext/pg_query/include/utils/partcache.h +1 -1
- data/ext/pg_query/include/utils/pg_locale.h +17 -9
- data/ext/pg_query/include/utils/pg_lsn.h +1 -1
- data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
- data/ext/pg_query/include/utils/pidfile.h +1 -1
- data/ext/pg_query/include/utils/plancache.h +6 -5
- data/ext/pg_query/include/utils/portal.h +10 -12
- data/ext/pg_query/include/utils/ps_status.h +1 -1
- data/ext/pg_query/include/utils/queryenvironment.h +1 -1
- data/ext/pg_query/include/utils/queryjumble.h +88 -0
- data/ext/pg_query/include/utils/regproc.h +14 -3
- data/ext/pg_query/include/utils/rel.h +71 -19
- data/ext/pg_query/include/utils/relcache.h +8 -5
- data/ext/pg_query/include/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/utils/resowner.h +1 -1
- data/ext/pg_query/include/utils/rls.h +2 -2
- data/ext/pg_query/include/utils/ruleutils.h +4 -1
- data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/utils/snapmgr.h +34 -14
- data/ext/pg_query/include/utils/snapshot.h +14 -1
- data/ext/pg_query/include/utils/sortsupport.h +117 -2
- data/ext/pg_query/include/utils/syscache.h +6 -1
- data/ext/pg_query/include/utils/timeout.h +11 -4
- data/ext/pg_query/include/utils/timestamp.h +6 -5
- data/ext/pg_query/include/utils/tuplesort.h +25 -11
- data/ext/pg_query/include/utils/tuplestore.h +2 -2
- data/ext/pg_query/include/utils/typcache.h +24 -17
- data/ext/pg_query/include/utils/tzparser.h +1 -1
- data/ext/pg_query/include/utils/varlena.h +5 -3
- data/ext/pg_query/include/utils/wait_event.h +289 -0
- data/ext/pg_query/include/utils/xml.h +4 -4
- data/ext/pg_query/pg_query.pb-c.c +4302 -2304
- data/ext/pg_query/pg_query_deparse.c +1106 -373
- data/ext/pg_query/pg_query_fingerprint.c +30 -10
- data/ext/pg_query/pg_query_json_plpgsql.c +0 -25
- data/ext/pg_query/pg_query_normalize.c +1 -1
- data/ext/pg_query/pg_query_outfuncs_json.c +54 -16
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
- data/ext/pg_query/pg_query_parse.c +1 -1
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
- data/ext/pg_query/pg_query_scan.c +2 -1
- data/ext/pg_query/pg_query_split.c +3 -2
- data/ext/pg_query/src_backend_catalog_namespace.c +20 -9
- data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
- data/ext/pg_query/src_backend_commands_define.c +11 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +401 -76
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +290 -46
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +74 -11
- data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
- data/ext/pg_query/src_backend_nodes_value.c +28 -19
- data/ext/pg_query/src_backend_parser_gram.c +33874 -31261
- data/ext/pg_query/src_backend_parser_parser.c +26 -7
- data/ext/pg_query/src_backend_parser_scan.c +172 -209
- data/ext/pg_query/src_backend_parser_scansup.c +4 -28
- data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
- data/ext/pg_query/src_backend_tcop_postgres.c +62 -23
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
- data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +71 -5
- data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
- data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
- data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
- data/ext/pg_query/src_backend_utils_misc_guc.c +206 -45
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
- data/ext/pg_query/src_common_encnames.c +1 -1
- data/ext/pg_query/src_common_hashfn.c +3 -3
- data/ext/pg_query/src_common_keywords.c +15 -2
- data/ext/pg_query/src_common_kwlist_d.h +517 -494
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_pg_prng.c +152 -0
- data/ext/pg_query/src_common_psprintf.c +1 -1
- data/ext/pg_query/src_common_string.c +7 -1
- data/ext/pg_query/src_common_stringinfo.c +1 -1
- data/ext/pg_query/src_common_wchar.c +701 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +45 -20
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1233 -1259
- data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/src_port_pg_bitutils.c +41 -31
- data/ext/pg_query/src_port_pgsleep.c +1 -1
- data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
- data/ext/pg_query/src_port_qsort.c +12 -224
- data/ext/pg_query/src_port_snprintf.c +37 -13
- data/ext/pg_query/src_port_strerror.c +9 -19
- data/ext/pg_query/src_port_strnlen.c +1 -1
- data/lib/pg_query/filter_columns.rb +1 -1
- data/lib/pg_query/fingerprint.rb +5 -1
- data/lib/pg_query/node.rb +2 -2
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/parse.rb +20 -8
- data/lib/pg_query/pg_query_pb.rb +1108 -942
- data/lib/pg_query/treewalker.rb +6 -0
- data/lib/pg_query/truncate.rb +1 -1
- data/lib/pg_query/version.rb +1 -1
- metadata +27 -17
- data/ext/pg_query/include/access/xloginsert.h +0 -64
- data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
- data/ext/pg_query/include/parser/parse_clause.h +0 -54
- data/ext/pg_query/include/parser/parse_collate.h +0 -27
- data/ext/pg_query/include/parser/parse_target.h +0 -46
- data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
- data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
- data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
- data/ext/pg_query/src_port_erand48.c +0 -127
- data/ext/pg_query/src_port_random.c +0 -31
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - cliplen
|
|
6
6
|
* - DatabaseEncoding
|
|
7
7
|
* - pg_verifymbstr
|
|
8
|
-
* -
|
|
8
|
+
* - pg_verify_mbstr
|
|
9
9
|
* - report_invalid_encoding
|
|
10
10
|
* - GetDatabaseEncoding
|
|
11
11
|
* - pg_get_client_encoding
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
* the result is validly encoded according to the destination encoding.
|
|
46
46
|
*
|
|
47
47
|
*
|
|
48
|
-
* Portions Copyright (c) 1996-
|
|
48
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
49
49
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
50
50
|
*
|
|
51
51
|
*
|
|
@@ -168,6 +168,37 @@ pg_get_client_encoding(void)
|
|
|
168
168
|
*/
|
|
169
169
|
|
|
170
170
|
|
|
171
|
+
/*
|
|
172
|
+
* Convert src string to another encoding.
|
|
173
|
+
*
|
|
174
|
+
* This function has a different API than the other conversion functions.
|
|
175
|
+
* The caller should've looked up the conversion function using
|
|
176
|
+
* FindDefaultConversionProc(). Unlike the other functions, the converted
|
|
177
|
+
* result is not palloc'd. It is written to the caller-supplied buffer
|
|
178
|
+
* instead.
|
|
179
|
+
*
|
|
180
|
+
* src_encoding - encoding to convert from
|
|
181
|
+
* dest_encoding - encoding to convert to
|
|
182
|
+
* src, srclen - input buffer and its length in bytes
|
|
183
|
+
* dest, destlen - destination buffer and its size in bytes
|
|
184
|
+
*
|
|
185
|
+
* The output is null-terminated.
|
|
186
|
+
*
|
|
187
|
+
* If destlen < srclen * MAX_CONVERSION_LENGTH + 1, the converted output
|
|
188
|
+
* wouldn't necessarily fit in the output buffer, and the function will not
|
|
189
|
+
* convert the whole input.
|
|
190
|
+
*
|
|
191
|
+
* TODO: The conversion function interface is not great. Firstly, it
|
|
192
|
+
* would be nice to pass through the destination buffer size to the
|
|
193
|
+
* conversion function, so that if you pass a shorter destination buffer, it
|
|
194
|
+
* could still continue to fill up the whole buffer. Currently, we have to
|
|
195
|
+
* assume worst case expansion and stop the conversion short, even if there
|
|
196
|
+
* is in fact space left in the destination buffer. Secondly, it would be
|
|
197
|
+
* nice to return the number of bytes written to the caller, to avoid a call
|
|
198
|
+
* to strlen().
|
|
199
|
+
*/
|
|
200
|
+
|
|
201
|
+
|
|
171
202
|
/*
|
|
172
203
|
* Convert string to encoding encoding_name. The source
|
|
173
204
|
* encoding is the DB encoding.
|
|
@@ -305,12 +336,13 @@ pg_unicode_to_server(pg_wchar c, unsigned char *s)
|
|
|
305
336
|
c_as_utf8[c_as_utf8_len] = '\0';
|
|
306
337
|
|
|
307
338
|
/* Convert, or throw error if we can't */
|
|
308
|
-
|
|
339
|
+
FunctionCall6(Utf8ToServerConvProc,
|
|
309
340
|
Int32GetDatum(PG_UTF8),
|
|
310
341
|
Int32GetDatum(server_encoding),
|
|
311
342
|
CStringGetDatum(c_as_utf8),
|
|
312
343
|
CStringGetDatum(s),
|
|
313
|
-
Int32GetDatum(c_as_utf8_len)
|
|
344
|
+
Int32GetDatum(c_as_utf8_len),
|
|
345
|
+
BoolGetDatum(false));
|
|
314
346
|
}
|
|
315
347
|
|
|
316
348
|
|
|
@@ -629,15 +661,29 @@ pg_database_encoding_max_length(void)
|
|
|
629
661
|
bool
|
|
630
662
|
pg_verifymbstr(const char *mbstr, int len, bool noError)
|
|
631
663
|
{
|
|
632
|
-
return
|
|
633
|
-
pg_verify_mbstr_len(GetDatabaseEncoding(), mbstr, len, noError) >= 0;
|
|
664
|
+
return pg_verify_mbstr(GetDatabaseEncoding(), mbstr, len, noError);
|
|
634
665
|
}
|
|
635
666
|
|
|
636
667
|
/*
|
|
637
668
|
* Verify mbstr to make sure that it is validly encoded in the specified
|
|
638
669
|
* encoding.
|
|
639
670
|
*/
|
|
671
|
+
bool
|
|
672
|
+
pg_verify_mbstr(int encoding, const char *mbstr, int len, bool noError)
|
|
673
|
+
{
|
|
674
|
+
int oklen;
|
|
640
675
|
|
|
676
|
+
Assert(PG_VALID_ENCODING(encoding));
|
|
677
|
+
|
|
678
|
+
oklen = pg_wchar_table[encoding].mbverifystr((const unsigned char *) mbstr, len);
|
|
679
|
+
if (oklen != len)
|
|
680
|
+
{
|
|
681
|
+
if (noError)
|
|
682
|
+
return false;
|
|
683
|
+
report_invalid_encoding(encoding, mbstr + oklen, len - oklen);
|
|
684
|
+
}
|
|
685
|
+
return true;
|
|
686
|
+
}
|
|
641
687
|
|
|
642
688
|
/*
|
|
643
689
|
* Verify mbstr to make sure that it is validly encoded in the specified
|
|
@@ -649,68 +695,11 @@ pg_verifymbstr(const char *mbstr, int len, bool noError)
|
|
|
649
695
|
* If OK, return length of string in the encoding.
|
|
650
696
|
* If a problem is found, return -1 when noError is
|
|
651
697
|
* true; when noError is false, ereport() a descriptive message.
|
|
698
|
+
*
|
|
699
|
+
* Note: We cannot use the faster encoding-specific mbverifystr() function
|
|
700
|
+
* here, because we need to count the number of characters in the string.
|
|
652
701
|
*/
|
|
653
|
-
int
|
|
654
|
-
pg_verify_mbstr_len(int encoding, const char *mbstr, int len, bool noError)
|
|
655
|
-
{
|
|
656
|
-
mbverifier mbverify;
|
|
657
|
-
int mb_len;
|
|
658
|
-
|
|
659
|
-
Assert(PG_VALID_ENCODING(encoding));
|
|
660
702
|
|
|
661
|
-
/*
|
|
662
|
-
* In single-byte encodings, we need only reject nulls (\0).
|
|
663
|
-
*/
|
|
664
|
-
if (pg_encoding_max_length(encoding) <= 1)
|
|
665
|
-
{
|
|
666
|
-
const char *nullpos = memchr(mbstr, 0, len);
|
|
667
|
-
|
|
668
|
-
if (nullpos == NULL)
|
|
669
|
-
return len;
|
|
670
|
-
if (noError)
|
|
671
|
-
return -1;
|
|
672
|
-
report_invalid_encoding(encoding, nullpos, 1);
|
|
673
|
-
}
|
|
674
|
-
|
|
675
|
-
/* fetch function pointer just once */
|
|
676
|
-
mbverify = pg_wchar_table[encoding].mbverify;
|
|
677
|
-
|
|
678
|
-
mb_len = 0;
|
|
679
|
-
|
|
680
|
-
while (len > 0)
|
|
681
|
-
{
|
|
682
|
-
int l;
|
|
683
|
-
|
|
684
|
-
/* fast path for ASCII-subset characters */
|
|
685
|
-
if (!IS_HIGHBIT_SET(*mbstr))
|
|
686
|
-
{
|
|
687
|
-
if (*mbstr != '\0')
|
|
688
|
-
{
|
|
689
|
-
mb_len++;
|
|
690
|
-
mbstr++;
|
|
691
|
-
len--;
|
|
692
|
-
continue;
|
|
693
|
-
}
|
|
694
|
-
if (noError)
|
|
695
|
-
return -1;
|
|
696
|
-
report_invalid_encoding(encoding, mbstr, len);
|
|
697
|
-
}
|
|
698
|
-
|
|
699
|
-
l = (*mbverify) ((const unsigned char *) mbstr, len);
|
|
700
|
-
|
|
701
|
-
if (l < 0)
|
|
702
|
-
{
|
|
703
|
-
if (noError)
|
|
704
|
-
return -1;
|
|
705
|
-
report_invalid_encoding(encoding, mbstr, len);
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
mbstr += l;
|
|
709
|
-
len -= l;
|
|
710
|
-
mb_len++;
|
|
711
|
-
}
|
|
712
|
-
return mb_len;
|
|
713
|
-
}
|
|
714
703
|
|
|
715
704
|
/*
|
|
716
705
|
* check_encoding_conversion_args: check arguments of a conversion function
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* See src/backend/utils/misc/README for more information.
|
|
17
17
|
*
|
|
18
18
|
*
|
|
19
|
-
* Copyright (c) 2000-
|
|
19
|
+
* Copyright (c) 2000-2022, PostgreSQL Global Development Group
|
|
20
20
|
* Written by Peter Eisentraut <peter_e@gmx.net>.
|
|
21
21
|
*
|
|
22
22
|
* IDENTIFICATION
|
|
@@ -30,22 +30,33 @@
|
|
|
30
30
|
#include <float.h>
|
|
31
31
|
#include <math.h>
|
|
32
32
|
#include <limits.h>
|
|
33
|
-
#
|
|
33
|
+
#ifdef HAVE_POLL_H
|
|
34
|
+
#include <poll.h>
|
|
35
|
+
#endif
|
|
36
|
+
#ifndef WIN32
|
|
37
|
+
#include <sys/mman.h>
|
|
38
|
+
#endif
|
|
34
39
|
#include <sys/stat.h>
|
|
35
40
|
#ifdef HAVE_SYSLOG
|
|
36
41
|
#include <syslog.h>
|
|
37
42
|
#endif
|
|
43
|
+
#include <unistd.h>
|
|
38
44
|
|
|
39
45
|
#include "access/commit_ts.h"
|
|
40
46
|
#include "access/gin.h"
|
|
41
47
|
#include "access/rmgr.h"
|
|
42
48
|
#include "access/tableam.h"
|
|
49
|
+
#include "access/toast_compression.h"
|
|
43
50
|
#include "access/transam.h"
|
|
44
51
|
#include "access/twophase.h"
|
|
45
52
|
#include "access/xact.h"
|
|
46
53
|
#include "access/xlog_internal.h"
|
|
54
|
+
#include "access/xlogprefetcher.h"
|
|
55
|
+
#include "access/xlogrecovery.h"
|
|
47
56
|
#include "catalog/namespace.h"
|
|
57
|
+
#include "catalog/objectaccess.h"
|
|
48
58
|
#include "catalog/pg_authid.h"
|
|
59
|
+
#include "catalog/pg_parameter_acl.h"
|
|
49
60
|
#include "catalog/storage.h"
|
|
50
61
|
#include "commands/async.h"
|
|
51
62
|
#include "commands/prepare.h"
|
|
@@ -75,6 +86,7 @@
|
|
|
75
86
|
#include "postmaster/bgworker_internals.h"
|
|
76
87
|
#include "postmaster/bgwriter.h"
|
|
77
88
|
#include "postmaster/postmaster.h"
|
|
89
|
+
#include "postmaster/startup.h"
|
|
78
90
|
#include "postmaster/syslogger.h"
|
|
79
91
|
#include "postmaster/walwriter.h"
|
|
80
92
|
#include "replication/logicallauncher.h"
|
|
@@ -94,6 +106,7 @@
|
|
|
94
106
|
#include "tcop/tcopprot.h"
|
|
95
107
|
#include "tsearch/ts_cache.h"
|
|
96
108
|
#include "utils/acl.h"
|
|
109
|
+
#include "utils/backend_status.h"
|
|
97
110
|
#include "utils/builtins.h"
|
|
98
111
|
#include "utils/bytea.h"
|
|
99
112
|
#include "utils/float.h"
|
|
@@ -104,9 +117,11 @@
|
|
|
104
117
|
#include "utils/plancache.h"
|
|
105
118
|
#include "utils/portal.h"
|
|
106
119
|
#include "utils/ps_status.h"
|
|
120
|
+
#include "utils/queryjumble.h"
|
|
107
121
|
#include "utils/rls.h"
|
|
108
122
|
#include "utils/snapmgr.h"
|
|
109
123
|
#include "utils/tzparser.h"
|
|
124
|
+
#include "utils/inval.h"
|
|
110
125
|
#include "utils/varlena.h"
|
|
111
126
|
#include "utils/xml.h"
|
|
112
127
|
|
|
@@ -148,6 +163,8 @@ extern bool optimize_bounded_sort;
|
|
|
148
163
|
|
|
149
164
|
|
|
150
165
|
|
|
166
|
+
|
|
167
|
+
|
|
151
168
|
/* global variables for check hook support */
|
|
152
169
|
|
|
153
170
|
|
|
@@ -209,13 +226,16 @@ static bool check_max_wal_senders(int *newval, void **extra, GucSource source);
|
|
|
209
226
|
static bool check_autovacuum_work_mem(int *newval, void **extra, GucSource source);
|
|
210
227
|
static bool check_effective_io_concurrency(int *newval, void **extra, GucSource source);
|
|
211
228
|
static bool check_maintenance_io_concurrency(int *newval, void **extra, GucSource source);
|
|
212
|
-
static
|
|
229
|
+
static bool check_huge_page_size(int *newval, void **extra, GucSource source);
|
|
230
|
+
static bool check_client_connection_check_interval(int *newval, void **extra, GucSource source);
|
|
231
|
+
static void assign_maintenance_io_concurrency(int newval, void *extra);
|
|
213
232
|
static bool check_application_name(char **newval, void **extra, GucSource source);
|
|
214
233
|
static void assign_application_name(const char *newval, void *extra);
|
|
215
234
|
static bool check_cluster_name(char **newval, void **extra, GucSource source);
|
|
216
235
|
static const char *show_unix_socket_permissions(void);
|
|
217
236
|
static const char *show_log_file_mode(void);
|
|
218
237
|
static const char *show_data_directory_mode(void);
|
|
238
|
+
static const char *show_in_hot_standby(void);
|
|
219
239
|
static bool check_backtrace_functions(char **newval, void **extra, GucSource source);
|
|
220
240
|
static void assign_backtrace_functions(const char *newval, void *extra);
|
|
221
241
|
static bool check_recovery_target_timeline(char **newval, void **extra, GucSource source);
|
|
@@ -237,6 +257,11 @@ static bool check_default_with_oids(bool *newval, void **extra, GucSource source
|
|
|
237
257
|
static ConfigVariable *ProcessConfigFileInternal(GucContext context,
|
|
238
258
|
bool applySettings, int elevel);
|
|
239
259
|
|
|
260
|
+
/*
|
|
261
|
+
* Track whether there were any deferred checks for custom resource managers
|
|
262
|
+
* specified in wal_consistency_checking.
|
|
263
|
+
*/
|
|
264
|
+
|
|
240
265
|
|
|
241
266
|
/*
|
|
242
267
|
* Options for enum values defined in this module.
|
|
@@ -291,6 +316,11 @@ StaticAssertDecl(lengthof(track_function_options) == (TRACK_FUNC_ALL + 2),
|
|
|
291
316
|
|
|
292
317
|
|
|
293
318
|
|
|
319
|
+
StaticAssertDecl(lengthof(stats_fetch_consistency) == (PGSTAT_FETCH_CONSISTENCY_SNAPSHOT + 2),
|
|
320
|
+
"array length mismatch");
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
|
|
294
324
|
StaticAssertDecl(lengthof(xmlbinary_options) == (XMLBINARY_HEX + 2),
|
|
295
325
|
"array length mismatch");
|
|
296
326
|
|
|
@@ -305,6 +335,12 @@ StaticAssertDecl(lengthof(xmloption_options) == (XMLOPTION_CONTENT + 2),
|
|
|
305
335
|
*/
|
|
306
336
|
|
|
307
337
|
|
|
338
|
+
/*
|
|
339
|
+
* Although only "on", "off", and "auto" are documented, we accept
|
|
340
|
+
* all the likely variants of "on" and "off".
|
|
341
|
+
*/
|
|
342
|
+
|
|
343
|
+
|
|
308
344
|
/*
|
|
309
345
|
* Although only "on", "off", and "partition" are documented, we
|
|
310
346
|
* accept all the likely variants of "on" and "off".
|
|
@@ -327,11 +363,8 @@ StaticAssertDecl(lengthof(xmloption_options) == (XMLOPTION_CONTENT + 2),
|
|
|
327
363
|
|
|
328
364
|
|
|
329
365
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
* variants of "on", too. "off" used to store passwords in plaintext,
|
|
333
|
-
* but we don't support that anymore.
|
|
334
|
-
*/
|
|
366
|
+
|
|
367
|
+
|
|
335
368
|
|
|
336
369
|
|
|
337
370
|
|
|
@@ -339,6 +372,9 @@ StaticAssertDecl(lengthof(xmloption_options) == (XMLOPTION_CONTENT + 2),
|
|
|
339
372
|
StaticAssertDecl(lengthof(ssl_protocol_versions_info) == (PG_TLS1_3_VERSION + 2),
|
|
340
373
|
"array length mismatch");
|
|
341
374
|
|
|
375
|
+
#ifdef HAVE_SYNCFS
|
|
376
|
+
#endif
|
|
377
|
+
|
|
342
378
|
#ifndef WIN32
|
|
343
379
|
#endif
|
|
344
380
|
#ifndef EXEC_BACKEND
|
|
@@ -346,6 +382,14 @@ StaticAssertDecl(lengthof(ssl_protocol_versions_info) == (PG_TLS1_3_VERSION + 2)
|
|
|
346
382
|
#ifdef WIN32
|
|
347
383
|
#endif
|
|
348
384
|
|
|
385
|
+
#ifdef USE_LZ4
|
|
386
|
+
#endif
|
|
387
|
+
|
|
388
|
+
#ifdef USE_LZ4
|
|
389
|
+
#endif
|
|
390
|
+
#ifdef USE_ZSTD
|
|
391
|
+
#endif
|
|
392
|
+
|
|
349
393
|
/*
|
|
350
394
|
* Options for enum values stored in other modules
|
|
351
395
|
*/
|
|
@@ -434,6 +478,7 @@ __thread char *backtrace_symbol_list;
|
|
|
434
478
|
*/
|
|
435
479
|
|
|
436
480
|
|
|
481
|
+
|
|
437
482
|
/*
|
|
438
483
|
* These variables are all dummies that don't do anything, except in some
|
|
439
484
|
* cases provide the value for SHOW to display. The real state is elsewhere
|
|
@@ -465,6 +510,9 @@ __thread char *backtrace_symbol_list;
|
|
|
465
510
|
|
|
466
511
|
|
|
467
512
|
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
|
|
468
516
|
|
|
469
517
|
|
|
470
518
|
|
|
@@ -610,6 +658,12 @@ typedef struct
|
|
|
610
658
|
#ifdef USE_PREFETCH
|
|
611
659
|
#else
|
|
612
660
|
#endif
|
|
661
|
+
#ifdef DISCARD_CACHES_ENABLED
|
|
662
|
+
#if defined(CLOBBER_CACHE_RECURSIVELY)
|
|
663
|
+
#else
|
|
664
|
+
#endif
|
|
665
|
+
#else /* not DISCARD_CACHES_ENABLED */
|
|
666
|
+
#endif /* not DISCARD_CACHES_ENABLED */
|
|
613
667
|
|
|
614
668
|
|
|
615
669
|
|
|
@@ -661,6 +715,8 @@ typedef struct
|
|
|
661
715
|
|
|
662
716
|
/* true to enable GUC_REPORT */
|
|
663
717
|
|
|
718
|
+
/* true if any GUC_REPORT reports are needed */
|
|
719
|
+
|
|
664
720
|
/* 1 when in main transaction */
|
|
665
721
|
|
|
666
722
|
|
|
@@ -674,7 +730,8 @@ static void reapply_stacked_values(struct config_generic *variable,
|
|
|
674
730
|
struct config_string *pHolder,
|
|
675
731
|
GucStack *stack,
|
|
676
732
|
const char *curvalue,
|
|
677
|
-
GucContext curscontext, GucSource cursource
|
|
733
|
+
GucContext curscontext, GucSource cursource,
|
|
734
|
+
Oid cursrole);
|
|
678
735
|
static void ShowGUCConfigOption(const char *name, DestReceiver *dest);
|
|
679
736
|
static void ShowAllGUCConfig(DestReceiver *dest);
|
|
680
737
|
static char *_ShowOption(struct config_generic *record, bool use_units);
|
|
@@ -754,15 +811,34 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
|
|
|
754
811
|
*/
|
|
755
812
|
|
|
756
813
|
|
|
814
|
+
/*
|
|
815
|
+
* Decide whether a proposed custom variable name is allowed.
|
|
816
|
+
*
|
|
817
|
+
* It must be two or more identifiers separated by dots, where the rules
|
|
818
|
+
* for what is an identifier agree with scan.l. (If you change this rule,
|
|
819
|
+
* adjust the errdetail in find_option().)
|
|
820
|
+
*/
|
|
821
|
+
|
|
822
|
+
|
|
757
823
|
/*
|
|
758
824
|
* Create and add a placeholder variable for a custom variable name.
|
|
759
825
|
*/
|
|
760
826
|
|
|
761
827
|
|
|
762
828
|
/*
|
|
763
|
-
* Look up option
|
|
764
|
-
*
|
|
765
|
-
*
|
|
829
|
+
* Look up option "name". If it exists, return a pointer to its record.
|
|
830
|
+
* Otherwise, if create_placeholders is true and name is a valid-looking
|
|
831
|
+
* custom variable name, we'll create and return a placeholder record.
|
|
832
|
+
* Otherwise, if skip_errors is true, then we silently return NULL for
|
|
833
|
+
* an unrecognized or invalid name. Otherwise, the error is reported at
|
|
834
|
+
* error level elevel (and we return NULL if that's less than ERROR).
|
|
835
|
+
*
|
|
836
|
+
* Note: internal errors, primarily out-of-memory, draw an elevel-level
|
|
837
|
+
* report and NULL return regardless of skip_errors. Hence, callers must
|
|
838
|
+
* handle a NULL return whenever elevel < ERROR, but they should not need
|
|
839
|
+
* to emit any additional error message. (In practice, internal errors
|
|
840
|
+
* can only happen when create_placeholders is true, so callers passing
|
|
841
|
+
* false need not think terribly hard about this.)
|
|
766
842
|
*/
|
|
767
843
|
|
|
768
844
|
|
|
@@ -778,6 +854,26 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
|
|
|
778
854
|
|
|
779
855
|
|
|
780
856
|
|
|
857
|
+
/*
|
|
858
|
+
* Convert a GUC name to the form that should be used in pg_parameter_acl.
|
|
859
|
+
*
|
|
860
|
+
* We need to canonicalize entries since, for example, case should not be
|
|
861
|
+
* significant. In addition, we apply the map_old_guc_names[] mapping so that
|
|
862
|
+
* any obsolete names will be converted when stored in a new PG version.
|
|
863
|
+
* Note however that this function does not verify legality of the name.
|
|
864
|
+
*
|
|
865
|
+
* The result is a palloc'd string.
|
|
866
|
+
*/
|
|
867
|
+
|
|
868
|
+
|
|
869
|
+
/*
|
|
870
|
+
* Check whether we should allow creation of a pg_parameter_acl entry
|
|
871
|
+
* for the given name. (This can be applied either before or after
|
|
872
|
+
* canonicalizing it.)
|
|
873
|
+
*/
|
|
874
|
+
|
|
875
|
+
|
|
876
|
+
|
|
781
877
|
/*
|
|
782
878
|
* Initialize GUC options during program startup.
|
|
783
879
|
*
|
|
@@ -786,6 +882,14 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
|
|
|
786
882
|
*/
|
|
787
883
|
|
|
788
884
|
|
|
885
|
+
/*
|
|
886
|
+
* If any custom resource managers were specified in the
|
|
887
|
+
* wal_consistency_checking GUC, processing was deferred. Now that
|
|
888
|
+
* shared_preload_libraries have been loaded, process wal_consistency_checking
|
|
889
|
+
* again.
|
|
890
|
+
*/
|
|
891
|
+
|
|
892
|
+
|
|
789
893
|
/*
|
|
790
894
|
* Assign any GUC values that can come from the server's environment.
|
|
791
895
|
*
|
|
@@ -863,8 +967,26 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
|
|
|
863
967
|
*/
|
|
864
968
|
|
|
865
969
|
|
|
970
|
+
/*
|
|
971
|
+
* ReportChangedGUCOptions: report recently-changed GUC_REPORT variables
|
|
972
|
+
*
|
|
973
|
+
* This is called just before we wait for a new client query.
|
|
974
|
+
*
|
|
975
|
+
* By handling things this way, we ensure that a ParameterStatus message
|
|
976
|
+
* is sent at most once per variable per query, even if the variable
|
|
977
|
+
* changed multiple times within the query. That's quite possible when
|
|
978
|
+
* using features such as function SET clauses. Function SET clauses
|
|
979
|
+
* also tend to cause values to change intraquery but eventually revert
|
|
980
|
+
* to their prevailing values; ReportGUCOption is responsible for avoiding
|
|
981
|
+
* redundant reports in such cases.
|
|
982
|
+
*/
|
|
983
|
+
|
|
984
|
+
|
|
866
985
|
/*
|
|
867
986
|
* ReportGUCOption: if appropriate, transmit option value to frontend
|
|
987
|
+
*
|
|
988
|
+
* We need not transmit the value if it's the same as what we last
|
|
989
|
+
* transmitted. However, clear the NEEDS_REPORT flag in any case.
|
|
868
990
|
*/
|
|
869
991
|
|
|
870
992
|
|
|
@@ -981,7 +1103,7 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
|
|
|
981
1103
|
|
|
982
1104
|
|
|
983
1105
|
/*
|
|
984
|
-
*
|
|
1106
|
+
* set_config_option: sets option `name' to given value.
|
|
985
1107
|
*
|
|
986
1108
|
* The value should be a string, which will be parsed and converted to
|
|
987
1109
|
* the appropriate data type. The context and source parameters indicate
|
|
@@ -1001,6 +1123,10 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
|
|
|
1001
1123
|
* its standard choice of ereport level. However some callers need to be
|
|
1002
1124
|
* able to override that choice; they should pass the ereport level to use.
|
|
1003
1125
|
*
|
|
1126
|
+
* is_reload should be true only when called from read_nondefault_variables()
|
|
1127
|
+
* or RestoreGUCState(), where we are trying to load some other process's
|
|
1128
|
+
* GUC settings into a new process.
|
|
1129
|
+
*
|
|
1004
1130
|
* Return value:
|
|
1005
1131
|
* +1: the value is valid and was successfully applied.
|
|
1006
1132
|
* 0: the name or value is invalid (but see below).
|
|
@@ -1015,6 +1141,23 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
|
|
|
1015
1141
|
*
|
|
1016
1142
|
* See also SetConfigOption for an external interface.
|
|
1017
1143
|
*/
|
|
1144
|
+
|
|
1145
|
+
|
|
1146
|
+
/*
|
|
1147
|
+
* set_config_option_ext: sets option `name' to given value.
|
|
1148
|
+
*
|
|
1149
|
+
* This API adds the ability to explicitly specify which role OID
|
|
1150
|
+
* is considered to be setting the value. Most external callers can use
|
|
1151
|
+
* set_config_option() and let it determine that based on the GucSource,
|
|
1152
|
+
* but there are a few that are supplying a value that was determined
|
|
1153
|
+
* in some special way and need to override the decision. Also, when
|
|
1154
|
+
* restoring a previously-assigned value, it's important to supply the
|
|
1155
|
+
* same role OID that set the value originally; so all guc.c callers
|
|
1156
|
+
* that are doing that type of thing need to call this directly.
|
|
1157
|
+
*
|
|
1158
|
+
* Generally, srole should be GetUserId() when the source is a SQL operation,
|
|
1159
|
+
* or BOOTSTRAP_SUPERUSERID if the source is a config file or similar.
|
|
1160
|
+
*/
|
|
1018
1161
|
#define newval (newval_union.boolval)
|
|
1019
1162
|
#undef newval
|
|
1020
1163
|
#define newval (newval_union.intval)
|
|
@@ -1169,6 +1312,9 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
|
|
|
1169
1312
|
*/
|
|
1170
1313
|
|
|
1171
1314
|
|
|
1315
|
+
/*
|
|
1316
|
+
* Functions for extensions to call to define their custom GUC variables.
|
|
1317
|
+
*/
|
|
1172
1318
|
|
|
1173
1319
|
|
|
1174
1320
|
|
|
@@ -1179,6 +1325,14 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
|
|
|
1179
1325
|
|
|
1180
1326
|
|
|
1181
1327
|
|
|
1328
|
+
/*
|
|
1329
|
+
* Mark the given GUC prefix as "reserved".
|
|
1330
|
+
*
|
|
1331
|
+
* This deletes any existing placeholders matching the prefix,
|
|
1332
|
+
* and then prevents new ones from being created.
|
|
1333
|
+
* Extensions should call this after they've defined all of their custom
|
|
1334
|
+
* GUCs, to help catch misspelled config-file entries.
|
|
1335
|
+
*/
|
|
1182
1336
|
|
|
1183
1337
|
|
|
1184
1338
|
|
|
@@ -1215,6 +1369,13 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
|
|
|
1215
1369
|
*/
|
|
1216
1370
|
|
|
1217
1371
|
|
|
1372
|
+
/*
|
|
1373
|
+
* Return some of the flags associated to the specified GUC in the shape of
|
|
1374
|
+
* a text array, and NULL if it does not exist. An empty array is returned
|
|
1375
|
+
* if the GUC exists without any meaningful flags to show.
|
|
1376
|
+
*/
|
|
1377
|
+
#define MAX_GUC_FLAGS 5
|
|
1378
|
+
|
|
1218
1379
|
/*
|
|
1219
1380
|
* Return GUC variable value by variable number; optionally return canonical
|
|
1220
1381
|
* form of name. Return value is palloc'd.
|
|
@@ -1278,6 +1439,7 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
|
|
|
1278
1439
|
* variable sourceline, integer
|
|
1279
1440
|
* variable source, integer
|
|
1280
1441
|
* variable scontext, integer
|
|
1442
|
+
* variable srole, OID
|
|
1281
1443
|
*/
|
|
1282
1444
|
static void
|
|
1283
1445
|
write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
|
|
@@ -1344,6 +1506,7 @@ write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
|
|
|
1344
1506
|
fwrite(&gconf->sourceline, 1, sizeof(gconf->sourceline), fp);
|
|
1345
1507
|
fwrite(&gconf->source, 1, sizeof(gconf->source), fp);
|
|
1346
1508
|
fwrite(&gconf->scontext, 1, sizeof(gconf->scontext), fp);
|
|
1509
|
+
fwrite(&gconf->srole, 1, sizeof(gconf->srole), fp);
|
|
1347
1510
|
}
|
|
1348
1511
|
|
|
1349
1512
|
void
|
|
@@ -1439,12 +1602,7 @@ read_nondefault_variables(void)
|
|
|
1439
1602
|
int varsourceline;
|
|
1440
1603
|
GucSource varsource;
|
|
1441
1604
|
GucContext varscontext;
|
|
1442
|
-
|
|
1443
|
-
/*
|
|
1444
|
-
* Assert that PGC_BACKEND/PGC_SU_BACKEND case in set_config_option() will
|
|
1445
|
-
* do the right thing.
|
|
1446
|
-
*/
|
|
1447
|
-
Assert(IsInitProcessingMode());
|
|
1605
|
+
Oid varsrole;
|
|
1448
1606
|
|
|
1449
1607
|
/*
|
|
1450
1608
|
* Open file
|
|
@@ -1468,7 +1626,7 @@ read_nondefault_variables(void)
|
|
|
1468
1626
|
if ((varname = read_string_with_null(fp)) == NULL)
|
|
1469
1627
|
break;
|
|
1470
1628
|
|
|
1471
|
-
if ((record = find_option(varname, true, FATAL)) == NULL)
|
|
1629
|
+
if ((record = find_option(varname, true, false, FATAL)) == NULL)
|
|
1472
1630
|
elog(FATAL, "failed to locate variable \"%s\" in exec config params file", varname);
|
|
1473
1631
|
|
|
1474
1632
|
if ((varvalue = read_string_with_null(fp)) == NULL)
|
|
@@ -1481,10 +1639,12 @@ read_nondefault_variables(void)
|
|
|
1481
1639
|
elog(FATAL, "invalid format of exec config params file");
|
|
1482
1640
|
if (fread(&varscontext, 1, sizeof(varscontext), fp) != sizeof(varscontext))
|
|
1483
1641
|
elog(FATAL, "invalid format of exec config params file");
|
|
1642
|
+
if (fread(&varsrole, 1, sizeof(varsrole), fp) != sizeof(varsrole))
|
|
1643
|
+
elog(FATAL, "invalid format of exec config params file");
|
|
1484
1644
|
|
|
1485
|
-
(void)
|
|
1486
|
-
|
|
1487
|
-
|
|
1645
|
+
(void) set_config_option_ext(varname, varvalue,
|
|
1646
|
+
varscontext, varsource, varsrole,
|
|
1647
|
+
GUC_ACTION_SET, true, 0, true);
|
|
1488
1648
|
if (varsourcefile[0])
|
|
1489
1649
|
set_config_sourcefile(varname, varsourcefile, varsourceline);
|
|
1490
1650
|
|
|
@@ -1499,26 +1659,13 @@ read_nondefault_variables(void)
|
|
|
1499
1659
|
|
|
1500
1660
|
/*
|
|
1501
1661
|
* can_skip_gucvar:
|
|
1502
|
-
*
|
|
1503
|
-
*
|
|
1504
|
-
* value before processing serialized values.
|
|
1505
|
-
*
|
|
1506
|
-
* A PGC_S_DEFAULT setting on the serialize side will typically match new
|
|
1507
|
-
* postmaster children, but that can be false when got_SIGHUP == true and the
|
|
1508
|
-
* pending configuration change modifies this setting. Nonetheless, we omit
|
|
1509
|
-
* PGC_S_DEFAULT settings from serialization and make up for that by restoring
|
|
1510
|
-
* defaults before applying serialized values.
|
|
1511
|
-
*
|
|
1512
|
-
* PGC_POSTMASTER variables always have the same value in every child of a
|
|
1513
|
-
* particular postmaster. Most PGC_INTERNAL variables are compile-time
|
|
1514
|
-
* constants; a few, like server_encoding and lc_ctype, are handled specially
|
|
1515
|
-
* outside the serialize/restore procedure. Therefore, SerializeGUCState()
|
|
1516
|
-
* never sends these, and RestoreGUCState() never changes them.
|
|
1662
|
+
* Decide whether SerializeGUCState can skip sending this GUC variable,
|
|
1663
|
+
* or whether RestoreGUCState can skip resetting this GUC to default.
|
|
1517
1664
|
*
|
|
1518
|
-
*
|
|
1519
|
-
*
|
|
1520
|
-
*
|
|
1521
|
-
*
|
|
1665
|
+
* It is somewhat magical and fragile that the same test works for both cases.
|
|
1666
|
+
* Realize in particular that we are very likely selecting different sets of
|
|
1667
|
+
* GUCs on the leader and worker sides! Be sure you've understood the
|
|
1668
|
+
* comments here and in RestoreGUCState thoroughly before changing this.
|
|
1522
1669
|
*/
|
|
1523
1670
|
|
|
1524
1671
|
|
|
@@ -1578,8 +1725,14 @@ read_nondefault_variables(void)
|
|
|
1578
1725
|
|
|
1579
1726
|
/*
|
|
1580
1727
|
* RestoreGUCState:
|
|
1581
|
-
* Reads the GUC state at the specified address and
|
|
1582
|
-
*
|
|
1728
|
+
* Reads the GUC state at the specified address and sets this process's
|
|
1729
|
+
* GUCs to match.
|
|
1730
|
+
*
|
|
1731
|
+
* Note that this provides the worker with only a very shallow view of the
|
|
1732
|
+
* leader's GUC state: we'll know about the currently active values, but not
|
|
1733
|
+
* about stacked or reset values. That's fine since the worker is just
|
|
1734
|
+
* executing one part of a query, within which the active values won't change
|
|
1735
|
+
* and the stacked values are invisible.
|
|
1583
1736
|
*/
|
|
1584
1737
|
|
|
1585
1738
|
|
|
@@ -1620,7 +1773,7 @@ read_nondefault_variables(void)
|
|
|
1620
1773
|
/*
|
|
1621
1774
|
* Given a GUC array, delete all settings from it that our permission
|
|
1622
1775
|
* level allows: if superuser, delete them all; if regular user, only
|
|
1623
|
-
* those that are PGC_USERSET
|
|
1776
|
+
* those that are PGC_USERSET or we have permission to set
|
|
1624
1777
|
*/
|
|
1625
1778
|
|
|
1626
1779
|
|
|
@@ -1754,6 +1907,14 @@ read_nondefault_variables(void)
|
|
|
1754
1907
|
#ifndef USE_PREFETCH
|
|
1755
1908
|
#endif /* USE_PREFETCH */
|
|
1756
1909
|
|
|
1910
|
+
#if !(defined(MAP_HUGE_MASK) && defined(MAP_HUGE_SHIFT))
|
|
1911
|
+
#endif
|
|
1912
|
+
|
|
1913
|
+
|
|
1914
|
+
|
|
1915
|
+
#ifdef USE_PREFETCH
|
|
1916
|
+
#endif
|
|
1917
|
+
|
|
1757
1918
|
|
|
1758
1919
|
|
|
1759
1920
|
|