pg_query 2.2.1 → 4.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -1
- data/README.md +29 -33
- 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 +18 -8
- data/lib/pg_query/pg_query_pb.rb +1108 -942
- data/lib/pg_query/truncate.rb +1 -1
- data/lib/pg_query/version.rb +1 -1
- metadata +28 -18
- data/ext/pg_query/include/access/xloginsert.h +0 -64
- data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
- data/ext/pg_query/include/parser/parse_clause.h +0 -54
- data/ext/pg_query/include/parser/parse_collate.h +0 -27
- data/ext/pg_query/include/parser/parse_target.h +0 -46
- data/ext/pg_query/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
|
|