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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*--------------------------------------------------------------------
|
|
2
2
|
* Symbols referenced in this file:
|
|
3
|
-
* - whereToSendOutput
|
|
4
3
|
* - debug_query_string
|
|
4
|
+
* - whereToSendOutput
|
|
5
5
|
* - ProcessInterrupts
|
|
6
6
|
* - check_stack_depth
|
|
7
7
|
* - stack_is_too_deep
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* postgres.c
|
|
17
17
|
* POSTGRES C Backend Interface
|
|
18
18
|
*
|
|
19
|
-
* Portions Copyright (c) 1996-
|
|
19
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
20
20
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
21
21
|
*
|
|
22
22
|
*
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
#include "catalog/pg_type.h"
|
|
56
56
|
#include "commands/async.h"
|
|
57
57
|
#include "commands/prepare.h"
|
|
58
|
+
#include "common/pg_prng.h"
|
|
58
59
|
#include "jit/jit.h"
|
|
59
60
|
#include "libpq/libpq.h"
|
|
60
61
|
#include "libpq/pqformat.h"
|
|
@@ -79,6 +80,7 @@
|
|
|
79
80
|
#include "rewrite/rewriteHandler.h"
|
|
80
81
|
#include "storage/bufmgr.h"
|
|
81
82
|
#include "storage/ipc.h"
|
|
83
|
+
#include "storage/pmsignal.h"
|
|
82
84
|
#include "storage/proc.h"
|
|
83
85
|
#include "storage/procsignal.h"
|
|
84
86
|
#include "storage/sinval.h"
|
|
@@ -116,7 +118,21 @@ __thread int max_stack_depth = 100;
|
|
|
116
118
|
/* wait N seconds to allow attach from a debugger */
|
|
117
119
|
|
|
118
120
|
|
|
121
|
+
/* Time between checks that the client is still connected. */
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
/* ----------------
|
|
125
|
+
* private typedefs etc
|
|
126
|
+
* ----------------
|
|
127
|
+
*/
|
|
119
128
|
|
|
129
|
+
/* type of argument for bind_param_error_callback */
|
|
130
|
+
typedef struct BindParamCbData
|
|
131
|
+
{
|
|
132
|
+
const char *portalName;
|
|
133
|
+
int paramno; /* zero-based param number, or -1 initially */
|
|
134
|
+
const char *paramval; /* textual input string, if available */
|
|
135
|
+
} BindParamCbData;
|
|
120
136
|
|
|
121
137
|
/* ----------------
|
|
122
138
|
* private variables
|
|
@@ -129,18 +145,16 @@ static __thread long max_stack_depth_bytes = 100 * 1024L;
|
|
|
129
145
|
|
|
130
146
|
/*
|
|
131
147
|
* Stack base pointer -- initialized by PostmasterMain and inherited by
|
|
132
|
-
* subprocesses
|
|
133
|
-
* it directly. Newer versions use set_stack_base(), but we want to stay
|
|
134
|
-
* binary-compatible for the time being.
|
|
148
|
+
* subprocesses (but see also InitPostmasterChild).
|
|
135
149
|
*/
|
|
136
|
-
__thread char
|
|
150
|
+
static __thread char *stack_base_ptr = NULL;
|
|
137
151
|
|
|
138
152
|
|
|
139
153
|
/*
|
|
140
154
|
* On IA64 we also have to remember the register stack base.
|
|
141
155
|
*/
|
|
142
156
|
#if defined(__ia64__) || defined(__ia64)
|
|
143
|
-
char
|
|
157
|
+
static char *register_stack_base_ptr = NULL;
|
|
144
158
|
#endif
|
|
145
159
|
|
|
146
160
|
/*
|
|
@@ -193,12 +207,12 @@ static int interactive_getc(void);
|
|
|
193
207
|
static int SocketBackend(StringInfo inBuf);
|
|
194
208
|
static int ReadCommand(StringInfo inBuf);
|
|
195
209
|
static void forbidden_in_wal_sender(char firstchar);
|
|
196
|
-
static List *pg_rewrite_query(Query *query);
|
|
197
210
|
static bool check_log_statement(List *stmt_list);
|
|
198
211
|
static int errdetail_execute(List *raw_parsetree_list);
|
|
199
212
|
static int errdetail_params(ParamListInfo params);
|
|
200
213
|
static int errdetail_abort(void);
|
|
201
214
|
static int errdetail_recovery_conflict(void);
|
|
215
|
+
static void bind_param_error_callback(void *arg);
|
|
202
216
|
static void start_xact_command(void);
|
|
203
217
|
static void finish_xact_command(void);
|
|
204
218
|
static bool IsTransactionExitStmt(Node *parsetree);
|
|
@@ -304,9 +318,17 @@ static void disable_statement_timeout(void);
|
|
|
304
318
|
|
|
305
319
|
|
|
306
320
|
/*
|
|
307
|
-
* Do parse analysis and rewriting. This is the same as
|
|
308
|
-
* except that
|
|
309
|
-
*
|
|
321
|
+
* Do parse analysis and rewriting. This is the same as
|
|
322
|
+
* pg_analyze_and_rewrite_fixedparams except that it's okay to deduce
|
|
323
|
+
* information about $n symbol datatypes from context.
|
|
324
|
+
*/
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
/*
|
|
328
|
+
* Do parse analysis and rewriting. This is the same as
|
|
329
|
+
* pg_analyze_and_rewrite_fixedparams except that, instead of a fixed list of
|
|
330
|
+
* parameter datatypes, a parser callback is supplied that can do
|
|
331
|
+
* external-parameter resolution and possibly other things.
|
|
310
332
|
*/
|
|
311
333
|
|
|
312
334
|
|
|
@@ -433,6 +455,13 @@ static void disable_statement_timeout(void);
|
|
|
433
455
|
*/
|
|
434
456
|
|
|
435
457
|
|
|
458
|
+
/*
|
|
459
|
+
* bind_param_error_callback
|
|
460
|
+
*
|
|
461
|
+
* Error context callback used while parsing parameters in a Bind message
|
|
462
|
+
*/
|
|
463
|
+
|
|
464
|
+
|
|
436
465
|
/*
|
|
437
466
|
* exec_describe_statement_message
|
|
438
467
|
*
|
|
@@ -485,8 +514,8 @@ static void disable_statement_timeout(void);
|
|
|
485
514
|
/*
|
|
486
515
|
* quickdie() occurs when signaled SIGQUIT by the postmaster.
|
|
487
516
|
*
|
|
488
|
-
*
|
|
489
|
-
* so we need to stop what we're doing and exit.
|
|
517
|
+
* Either some backend has bought the farm, or we've been told to shut down
|
|
518
|
+
* "immediately"; so we need to stop what we're doing and exit.
|
|
490
519
|
*/
|
|
491
520
|
|
|
492
521
|
|
|
@@ -694,7 +723,7 @@ stack_is_too_deep(void)
|
|
|
694
723
|
|
|
695
724
|
/* ----------------------------------------------------------------
|
|
696
725
|
* process_postgres_switches
|
|
697
|
-
* Parse command line arguments for
|
|
726
|
+
* Parse command line arguments for backends
|
|
698
727
|
*
|
|
699
728
|
* This is called twice, once for the "secure" options coming from the
|
|
700
729
|
* postmaster or command line, and once for the "insecure" options coming
|
|
@@ -717,20 +746,30 @@ stack_is_too_deep(void)
|
|
|
717
746
|
#endif
|
|
718
747
|
|
|
719
748
|
|
|
749
|
+
/*
|
|
750
|
+
* PostgresSingleUserMain
|
|
751
|
+
* Entry point for single user mode. argc/argv are the command line
|
|
752
|
+
* arguments to be used.
|
|
753
|
+
*
|
|
754
|
+
* Performs single user specific setup then calls PostgresMain() to actually
|
|
755
|
+
* process queries. Single user mode specific setup should go here, rather
|
|
756
|
+
* than PostgresMain() or InitPostgres() when reasonably possible.
|
|
757
|
+
*/
|
|
758
|
+
|
|
759
|
+
|
|
760
|
+
|
|
720
761
|
/* ----------------------------------------------------------------
|
|
721
762
|
* PostgresMain
|
|
722
|
-
* postgres main loop -- all backends, interactive or otherwise
|
|
763
|
+
* postgres main loop -- all backends, interactive or otherwise loop here
|
|
764
|
+
*
|
|
765
|
+
* dbname is the name of the database to connect to, username is the
|
|
766
|
+
* PostgreSQL user name to be used for the session.
|
|
723
767
|
*
|
|
724
|
-
*
|
|
725
|
-
*
|
|
726
|
-
* dbname is the name of the database to connect to, or NULL if the database
|
|
727
|
-
* name should be extracted from the command line arguments or defaulted.
|
|
728
|
-
* username is the PostgreSQL user name to be used for the session.
|
|
768
|
+
* NB: Single user mode specific setup should go to PostgresSingleUserMain()
|
|
769
|
+
* if reasonably possible.
|
|
729
770
|
* ----------------------------------------------------------------
|
|
730
771
|
*/
|
|
731
|
-
|
|
732
|
-
#else
|
|
733
|
-
#endif
|
|
772
|
+
|
|
734
773
|
|
|
735
774
|
/*
|
|
736
775
|
* Throw an error if we're a WAL sender process.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/*--------------------------------------------------------------------
|
|
2
|
+
* Symbols referenced in this file:
|
|
3
|
+
* - pgStatSessionEndCause
|
|
4
|
+
*--------------------------------------------------------------------
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/* -------------------------------------------------------------------------
|
|
8
|
+
*
|
|
9
|
+
* pgstat_database.c
|
|
10
|
+
* Implementation of database statistics.
|
|
11
|
+
*
|
|
12
|
+
* This file contains the implementation of database statistics. It is kept
|
|
13
|
+
* separate from pgstat.c to enforce the line between the statistics access /
|
|
14
|
+
* storage implementation and the details about individual types of
|
|
15
|
+
* statistics.
|
|
16
|
+
*
|
|
17
|
+
* Copyright (c) 2001-2022, PostgreSQL Global Development Group
|
|
18
|
+
*
|
|
19
|
+
* IDENTIFICATION
|
|
20
|
+
* src/backend/utils/activity/pgstat_database.c
|
|
21
|
+
* -------------------------------------------------------------------------
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
#include "postgres.h"
|
|
25
|
+
|
|
26
|
+
#include "utils/pgstat_internal.h"
|
|
27
|
+
#include "utils/timestamp.h"
|
|
28
|
+
#include "storage/procsignal.h"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
static bool pgstat_should_report_connstat(void);
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
__thread SessionEndType pgStatSessionEndCause = DISCONNECT_NORMAL;
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
/*
|
|
48
|
+
* Remove entry for the database being dropped.
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
/*
|
|
53
|
+
* Called from autovacuum.c to report startup of an autovacuum process.
|
|
54
|
+
* We are called before InitPostgres is done, so can't rely on MyDatabaseId;
|
|
55
|
+
* the db OID must be passed in, instead.
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
/*
|
|
60
|
+
* Report a Hot Standby recovery conflict.
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
/*
|
|
65
|
+
* Report a detected deadlock.
|
|
66
|
+
*/
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
/*
|
|
70
|
+
* Report one or more checksum failures.
|
|
71
|
+
*/
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
* Report one checksum failure in the current database.
|
|
76
|
+
*/
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
/*
|
|
80
|
+
* Report creation of temporary file.
|
|
81
|
+
*/
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
/*
|
|
85
|
+
* Notify stats system of a new connection.
|
|
86
|
+
*/
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
/*
|
|
90
|
+
* Notify the stats system of a disconnect.
|
|
91
|
+
*/
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
/*
|
|
95
|
+
* Support function for the SQL-callable pgstat* functions. Returns
|
|
96
|
+
* the collected statistics for one database or NULL. NULL doesn't mean
|
|
97
|
+
* that the database doesn't exist, just that there are no statistics, so the
|
|
98
|
+
* caller is better off to report ZERO instead.
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
/*
|
|
105
|
+
* Subroutine for pgstat_report_stat(): Handle xact commit/rollback and I/O
|
|
106
|
+
* timings.
|
|
107
|
+
*/
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
/*
|
|
111
|
+
* We report session statistics only for normal backend processes. Parallel
|
|
112
|
+
* workers run in parallel, so they don't contribute to session times, even
|
|
113
|
+
* though they use CPU time. Walsender processes could be considered here,
|
|
114
|
+
* but they have different session characteristics from normal backends (for
|
|
115
|
+
* example, they are always "active"), so they would skew session statistics.
|
|
116
|
+
*/
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
/*
|
|
120
|
+
* Find or create a local PgStat_StatDBEntry entry for dboid.
|
|
121
|
+
*/
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
/*
|
|
125
|
+
* Reset the database's reset timestamp, without resetting the contents of the
|
|
126
|
+
* database stats.
|
|
127
|
+
*/
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
/*
|
|
131
|
+
* Flush out pending stats for the entry
|
|
132
|
+
*
|
|
133
|
+
* If nowait is true, this function returns false if lock could not
|
|
134
|
+
* immediately acquired, otherwise true is returned.
|
|
135
|
+
*/
|
|
136
|
+
#define PGSTAT_ACCUM_DBCOUNT(item) \
|
|
137
|
+
(sharedent)->stats.item += (pendingent)->item
|
|
138
|
+
#undef PGSTAT_ACCUM_DBCOUNT
|
|
139
|
+
|
|
140
|
+
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* datum.c
|
|
12
12
|
* POSTGRES Datum (abstract data type) manipulation routines.
|
|
13
13
|
*
|
|
14
|
-
* Portions Copyright (c) 1996-
|
|
14
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
15
15
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
16
16
|
*
|
|
17
17
|
*
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
#include "postgres.h"
|
|
52
52
|
|
|
53
53
|
#include "access/detoast.h"
|
|
54
|
+
#include "common/hashfn.h"
|
|
54
55
|
#include "fmgr.h"
|
|
55
56
|
#include "utils/builtins.h"
|
|
56
57
|
#include "utils/datum.h"
|
|
@@ -262,6 +263,17 @@ datumIsEqual(Datum value1, Datum value2, bool typByVal, int typLen)
|
|
|
262
263
|
*/
|
|
263
264
|
|
|
264
265
|
|
|
266
|
+
/*-------------------------------------------------------------------------
|
|
267
|
+
* datum_image_hash
|
|
268
|
+
*
|
|
269
|
+
* Generate a hash value based on the binary representation of 'value'. Most
|
|
270
|
+
* use cases will want to use the hash function specific to the Datum's type,
|
|
271
|
+
* however, some corner cases require generating a hash value based on the
|
|
272
|
+
* actual bits rather than the logical value.
|
|
273
|
+
*-------------------------------------------------------------------------
|
|
274
|
+
*/
|
|
275
|
+
|
|
276
|
+
|
|
265
277
|
/*-------------------------------------------------------------------------
|
|
266
278
|
* btequalimage
|
|
267
279
|
*
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* expandeddatum.c
|
|
12
12
|
* Support functions for "expanded" value representations.
|
|
13
13
|
*
|
|
14
|
-
* Portions Copyright (c) 1996-
|
|
14
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
15
15
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
16
16
|
*
|
|
17
17
|
*
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* Display type names "nicely".
|
|
11
11
|
*
|
|
12
12
|
*
|
|
13
|
-
* Portions Copyright (c) 1996-
|
|
13
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
14
14
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
15
15
|
*
|
|
16
16
|
* IDENTIFICATION
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
#include "catalog/pg_type.h"
|
|
29
29
|
#include "mb/pg_wchar.h"
|
|
30
30
|
#include "utils/builtins.h"
|
|
31
|
+
#include "utils/fmgroids.h"
|
|
31
32
|
#include "utils/lsyscache.h"
|
|
32
33
|
#include "utils/numeric.h"
|
|
33
34
|
#include "utils/syscache.h"
|
|
@@ -77,13 +78,16 @@ static char *printTypmod(const char *typname, int32 typmod, Oid typmodout);
|
|
|
77
78
|
* - FORMAT_TYPE_ALLOW_INVALID
|
|
78
79
|
* if the type OID is invalid or unknown, return ??? or such instead
|
|
79
80
|
* of failing
|
|
81
|
+
* - FORMAT_TYPE_INVALID_AS_NULL
|
|
82
|
+
* if the type OID is invalid or unknown, return NULL instead of ???
|
|
83
|
+
* or such
|
|
80
84
|
* - FORMAT_TYPE_FORCE_QUALIFY
|
|
81
85
|
* always schema-qualify type names, regardless of search_path
|
|
82
86
|
*
|
|
83
87
|
* Note that TYPEMOD_GIVEN is not interchangeable with "typemod == -1";
|
|
84
88
|
* see the comments above for format_type().
|
|
85
89
|
*
|
|
86
|
-
* Returns a palloc'd string.
|
|
90
|
+
* Returns a palloc'd string, or NULL.
|
|
87
91
|
*/
|
|
88
92
|
|
|
89
93
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* Functions to convert stored expressions/querytrees back to
|
|
12
12
|
* source text
|
|
13
13
|
*
|
|
14
|
-
* Portions Copyright (c) 1996-
|
|
14
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
15
15
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
16
16
|
*
|
|
17
17
|
*
|
|
@@ -31,8 +31,6 @@
|
|
|
31
31
|
#include "access/relation.h"
|
|
32
32
|
#include "access/sysattr.h"
|
|
33
33
|
#include "access/table.h"
|
|
34
|
-
#include "catalog/dependency.h"
|
|
35
|
-
#include "catalog/indexing.h"
|
|
36
34
|
#include "catalog/pg_aggregate.h"
|
|
37
35
|
#include "catalog/pg_am.h"
|
|
38
36
|
#include "catalog/pg_authid.h"
|
|
@@ -100,6 +98,11 @@
|
|
|
100
98
|
#define PRETTYFLAG_INDENT 0x0002
|
|
101
99
|
#define PRETTYFLAG_SCHEMA 0x0004
|
|
102
100
|
|
|
101
|
+
/* Standard conversion of a "bool pretty" option to detailed flags */
|
|
102
|
+
#define GET_PRETTY_FLAGS(pretty) \
|
|
103
|
+
((pretty) ? (PRETTYFLAG_PAREN | PRETTYFLAG_INDENT | PRETTYFLAG_SCHEMA) \
|
|
104
|
+
: PRETTYFLAG_INDENT)
|
|
105
|
+
|
|
103
106
|
/* Default line length for pretty-print wrapping: 0 means wrap always */
|
|
104
107
|
#define WRAP_COLUMN_DEFAULT 0
|
|
105
108
|
|
|
@@ -182,6 +185,10 @@ typedef struct
|
|
|
182
185
|
List *outer_tlist; /* referent for OUTER_VAR Vars */
|
|
183
186
|
List *inner_tlist; /* referent for INNER_VAR Vars */
|
|
184
187
|
List *index_tlist; /* referent for INDEX_VAR Vars */
|
|
188
|
+
/* Special namespace representing a function signature: */
|
|
189
|
+
char *funcname;
|
|
190
|
+
int numargs;
|
|
191
|
+
char **argnames;
|
|
185
192
|
} deparse_namespace;
|
|
186
193
|
|
|
187
194
|
/*
|
|
@@ -347,7 +354,8 @@ static char *pg_get_indexdef_worker(Oid indexrelid, int colno,
|
|
|
347
354
|
bool attrsOnly, bool keysOnly,
|
|
348
355
|
bool showTblSpc, bool inherits,
|
|
349
356
|
int prettyFlags, bool missing_ok);
|
|
350
|
-
static char *pg_get_statisticsobj_worker(Oid statextid, bool
|
|
357
|
+
static char *pg_get_statisticsobj_worker(Oid statextid, bool columns_only,
|
|
358
|
+
bool missing_ok);
|
|
351
359
|
static char *pg_get_partkeydef_worker(Oid relid, int prettyFlags,
|
|
352
360
|
bool attrsOnly, bool missing_ok);
|
|
353
361
|
static char *pg_get_constraintdef_worker(Oid constraintId, bool fullCommand,
|
|
@@ -358,6 +366,7 @@ static int print_function_arguments(StringInfo buf, HeapTuple proctup,
|
|
|
358
366
|
bool print_table_args, bool print_defaults);
|
|
359
367
|
static void print_function_rettype(StringInfo buf, HeapTuple proctup);
|
|
360
368
|
static void print_function_trftypes(StringInfo buf, HeapTuple proctup);
|
|
369
|
+
static void print_function_sqlbody(StringInfo buf, HeapTuple proctup);
|
|
361
370
|
static void set_rtable_names(deparse_namespace *dpns, List *parent_namespaces,
|
|
362
371
|
Bitmapset *rels_used);
|
|
363
372
|
static void set_deparse_for_query(deparse_namespace *dpns, Query *query,
|
|
@@ -380,6 +389,8 @@ static void identify_join_columns(JoinExpr *j, RangeTblEntry *jrte,
|
|
|
380
389
|
deparse_columns *colinfo);
|
|
381
390
|
static char *get_rtable_name(int rtindex, deparse_context *context);
|
|
382
391
|
static void set_deparse_plan(deparse_namespace *dpns, Plan *plan);
|
|
392
|
+
static Plan *find_recursive_union(deparse_namespace *dpns,
|
|
393
|
+
WorkTableScan *wtscan);
|
|
383
394
|
static void push_child_plan(deparse_namespace *dpns, Plan *plan,
|
|
384
395
|
deparse_namespace *save_dpns);
|
|
385
396
|
static void pop_child_plan(deparse_namespace *dpns,
|
|
@@ -457,6 +468,7 @@ static void get_agg_expr(Aggref *aggref, deparse_context *context,
|
|
|
457
468
|
static void get_agg_combine_expr(Node *node, deparse_context *context,
|
|
458
469
|
void *callback_arg);
|
|
459
470
|
static void get_windowfunc_expr(WindowFunc *wfunc, deparse_context *context);
|
|
471
|
+
static bool get_func_sql_syntax(FuncExpr *expr, deparse_context *context);
|
|
460
472
|
static void get_coercion_expr(Node *arg, deparse_context *context,
|
|
461
473
|
Oid resulttype, int32 resulttypmod,
|
|
462
474
|
Node *parentNode);
|
|
@@ -580,17 +592,46 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
|
|
|
580
592
|
*/
|
|
581
593
|
|
|
582
594
|
|
|
595
|
+
/* ----------
|
|
596
|
+
* pg_get_querydef
|
|
597
|
+
*
|
|
598
|
+
* Public entry point to deparse one query parsetree.
|
|
599
|
+
* The pretty flags are determined by GET_PRETTY_FLAGS(pretty).
|
|
600
|
+
*
|
|
601
|
+
* The result is a palloc'd C string.
|
|
602
|
+
* ----------
|
|
603
|
+
*/
|
|
604
|
+
|
|
605
|
+
|
|
583
606
|
/*
|
|
584
607
|
* pg_get_statisticsobjdef
|
|
585
608
|
* Get the definition of an extended statistics object
|
|
586
609
|
*/
|
|
587
610
|
|
|
588
611
|
|
|
612
|
+
/*
|
|
613
|
+
* Internal version for use by ALTER TABLE.
|
|
614
|
+
* Includes a tablespace clause in the result.
|
|
615
|
+
* Returns a palloc'd C string; no pretty-printing.
|
|
616
|
+
*/
|
|
617
|
+
|
|
618
|
+
|
|
619
|
+
/*
|
|
620
|
+
* pg_get_statisticsobjdef_columns
|
|
621
|
+
* Get columns and expressions for an extended statistics object
|
|
622
|
+
*/
|
|
623
|
+
|
|
624
|
+
|
|
589
625
|
/*
|
|
590
626
|
* Internal workhorse to decompile an extended statistics object.
|
|
591
627
|
*/
|
|
592
628
|
|
|
593
629
|
|
|
630
|
+
/*
|
|
631
|
+
* Generate text array of expressions for statistics object.
|
|
632
|
+
*/
|
|
633
|
+
|
|
634
|
+
|
|
594
635
|
/*
|
|
595
636
|
* pg_get_partkeydef
|
|
596
637
|
*
|
|
@@ -663,6 +704,12 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
|
|
|
663
704
|
* the one specified by the second parameter. This is sufficient for
|
|
664
705
|
* partial indexes, column default expressions, etc. We also support
|
|
665
706
|
* Var-free expressions, for which the OID can be InvalidOid.
|
|
707
|
+
*
|
|
708
|
+
* We expect this function to work, or throw a reasonably clean error,
|
|
709
|
+
* for any node tree that can appear in a catalog pg_node_tree column.
|
|
710
|
+
* Query trees, such as those appearing in pg_rewrite.ev_action, are
|
|
711
|
+
* not supported. Nor are expressions in more than one relation, which
|
|
712
|
+
* can appear in places like pg_rewrite.ev_qual.
|
|
666
713
|
* ----------
|
|
667
714
|
*/
|
|
668
715
|
|
|
@@ -756,6 +803,10 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
|
|
|
756
803
|
|
|
757
804
|
|
|
758
805
|
|
|
806
|
+
|
|
807
|
+
|
|
808
|
+
|
|
809
|
+
|
|
759
810
|
/*
|
|
760
811
|
* deparse_expression - General utility for deparsing expressions
|
|
761
812
|
*
|
|
@@ -975,13 +1026,20 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
|
|
|
975
1026
|
* of a given Plan node
|
|
976
1027
|
*
|
|
977
1028
|
* This sets the plan, outer_plan, inner_plan, outer_tlist, inner_tlist,
|
|
978
|
-
* and index_tlist fields. Caller
|
|
1029
|
+
* and index_tlist fields. Caller must already have adjusted the ancestors
|
|
979
1030
|
* list if necessary. Note that the rtable, subplans, and ctes fields do
|
|
980
1031
|
* not need to change when shifting attention to different plan nodes in a
|
|
981
1032
|
* single plan tree.
|
|
982
1033
|
*/
|
|
983
1034
|
|
|
984
1035
|
|
|
1036
|
+
/*
|
|
1037
|
+
* Locate the ancestor plan node that is the RecursiveUnion generating
|
|
1038
|
+
* the WorkTableScan's work table. We can match on wtParam, since that
|
|
1039
|
+
* should be unique within the plan tree.
|
|
1040
|
+
*/
|
|
1041
|
+
|
|
1042
|
+
|
|
985
1043
|
/*
|
|
986
1044
|
* push_child_plan: temporarily transfer deparsing attention to a child plan
|
|
987
1045
|
*
|
|
@@ -1367,6 +1425,14 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
|
|
|
1367
1425
|
*/
|
|
1368
1426
|
|
|
1369
1427
|
|
|
1428
|
+
/*
|
|
1429
|
+
* get_func_sql_syntax - Parse back a SQL-syntax function call
|
|
1430
|
+
*
|
|
1431
|
+
* Returns true if we successfully deparsed, false if we did not
|
|
1432
|
+
* recognize the function.
|
|
1433
|
+
*/
|
|
1434
|
+
|
|
1435
|
+
|
|
1370
1436
|
/* ----------
|
|
1371
1437
|
* get_coercion_expr
|
|
1372
1438
|
*
|
|
@@ -7,18 +7,15 @@
|
|
|
7
7
|
/*-------------------------------------------------------------------------
|
|
8
8
|
*
|
|
9
9
|
* assert.c
|
|
10
|
-
* Assert code.
|
|
10
|
+
* Assert support code.
|
|
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
|
*
|
|
16
16
|
* IDENTIFICATION
|
|
17
17
|
* src/backend/utils/error/assert.c
|
|
18
18
|
*
|
|
19
|
-
* NOTE
|
|
20
|
-
* This should eventually work with elog()
|
|
21
|
-
*
|
|
22
19
|
*-------------------------------------------------------------------------
|
|
23
20
|
*/
|
|
24
21
|
#include "postgres.h"
|
|
@@ -30,6 +27,10 @@
|
|
|
30
27
|
|
|
31
28
|
/*
|
|
32
29
|
* ExceptionalCondition - Handles the failure of an Assert()
|
|
30
|
+
*
|
|
31
|
+
* We intentionally do not go through elog() here, on the grounds of
|
|
32
|
+
* wanting to minimize the amount of infrastructure that has to be
|
|
33
|
+
* working to report an assertion failure.
|
|
33
34
|
*/
|
|
34
35
|
void
|
|
35
36
|
ExceptionalCondition(const char *conditionName,
|
|
@@ -37,20 +38,21 @@ ExceptionalCondition(const char *conditionName,
|
|
|
37
38
|
const char *fileName,
|
|
38
39
|
int lineNumber)
|
|
39
40
|
{
|
|
41
|
+
/* Report the failure on stderr (or local equivalent) */
|
|
40
42
|
if (!PointerIsValid(conditionName)
|
|
41
43
|
|| !PointerIsValid(fileName)
|
|
42
44
|
|| !PointerIsValid(errorType))
|
|
43
|
-
write_stderr("TRAP: ExceptionalCondition: bad arguments\n"
|
|
45
|
+
write_stderr("TRAP: ExceptionalCondition: bad arguments in PID %d\n",
|
|
46
|
+
(int) getpid());
|
|
44
47
|
else
|
|
45
|
-
|
|
46
|
-
write_stderr("TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n",
|
|
48
|
+
write_stderr("TRAP: %s(\"%s\", File: \"%s\", Line: %d, PID: %d)\n",
|
|
47
49
|
errorType, conditionName,
|
|
48
|
-
fileName, lineNumber);
|
|
49
|
-
}
|
|
50
|
+
fileName, lineNumber, (int) getpid());
|
|
50
51
|
|
|
51
52
|
/* Usually this shouldn't be needed, but make sure the msg went out */
|
|
52
53
|
fflush(stderr);
|
|
53
54
|
|
|
55
|
+
/* If we have support for it, dump a simple backtrace */
|
|
54
56
|
#ifdef HAVE_BACKTRACE_SYMBOLS
|
|
55
57
|
{
|
|
56
58
|
void *buf[100];
|
|
@@ -61,12 +63,12 @@ ExceptionalCondition(const char *conditionName,
|
|
|
61
63
|
}
|
|
62
64
|
#endif
|
|
63
65
|
|
|
64
|
-
#ifdef SLEEP_ON_ASSERT
|
|
65
|
-
|
|
66
66
|
/*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
67
|
+
* If configured to do so, sleep indefinitely to allow user to attach a
|
|
68
|
+
* debugger. It would be nice to use pg_usleep() here, but that can sleep
|
|
69
|
+
* at most 2G usec or ~33 minutes, which seems too short.
|
|
69
70
|
*/
|
|
71
|
+
#ifdef SLEEP_ON_ASSERT
|
|
70
72
|
sleep(1000000);
|
|
71
73
|
#endif
|
|
72
74
|
|