pg_query 2.1.0 → 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 +104 -0
- data/README.md +59 -31
- data/Rakefile +2 -2
- data/ext/pg_query/extconf.rb +8 -2
- data/ext/pg_query/include/access/amapi.h +45 -1
- data/ext/pg_query/include/access/attmap.h +1 -1
- data/ext/pg_query/include/access/attnum.h +2 -2
- data/ext/pg_query/include/access/clog.h +4 -2
- data/ext/pg_query/include/access/commit_ts.h +6 -9
- data/ext/pg_query/include/access/detoast.h +1 -11
- data/ext/pg_query/include/access/genam.h +15 -12
- data/ext/pg_query/include/access/gin.h +2 -2
- data/ext/pg_query/include/access/htup.h +1 -1
- data/ext/pg_query/include/access/htup_details.h +75 -87
- data/ext/pg_query/include/access/itup.h +7 -1
- data/ext/pg_query/include/access/parallel.h +2 -2
- data/ext/pg_query/include/access/printtup.h +1 -1
- data/ext/pg_query/include/access/relation.h +1 -1
- data/ext/pg_query/include/access/relscan.h +17 -2
- data/ext/pg_query/include/access/rmgr.h +30 -3
- data/ext/pg_query/include/access/rmgrlist.h +23 -23
- data/ext/pg_query/include/access/sdir.h +1 -1
- data/ext/pg_query/include/access/skey.h +1 -1
- data/ext/pg_query/include/access/stratnum.h +4 -2
- data/ext/pg_query/include/access/sysattr.h +1 -1
- data/ext/pg_query/include/access/table.h +2 -1
- data/ext/pg_query/include/access/tableam.h +272 -20
- data/ext/pg_query/include/access/toast_compression.h +73 -0
- data/ext/pg_query/include/access/transam.h +123 -13
- data/ext/pg_query/include/access/tupconvert.h +1 -1
- data/ext/pg_query/include/access/tupdesc.h +1 -1
- data/ext/pg_query/include/access/tupmacs.h +3 -3
- data/ext/pg_query/include/access/twophase.h +5 -1
- data/ext/pg_query/include/access/xact.h +79 -19
- data/ext/pg_query/include/access/xlog.h +60 -155
- data/ext/pg_query/include/access/xlog_internal.h +50 -14
- data/ext/pg_query/include/access/xlogdefs.h +8 -16
- data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
- data/ext/pg_query/include/access/xlogreader.h +148 -32
- data/ext/pg_query/include/access/xlogrecord.h +18 -9
- data/ext/pg_query/include/access/xlogrecovery.h +157 -0
- data/ext/pg_query/include/c.h +101 -44
- data/ext/pg_query/include/catalog/catalog.h +3 -1
- data/ext/pg_query/include/catalog/catversion.h +2 -2
- data/ext/pg_query/include/catalog/dependency.h +10 -16
- data/ext/pg_query/include/catalog/genbki.h +83 -5
- data/ext/pg_query/include/catalog/index.h +18 -3
- data/ext/pg_query/include/catalog/indexing.h +12 -324
- data/ext/pg_query/include/catalog/namespace.h +4 -2
- data/ext/pg_query/include/catalog/objectaccess.h +70 -2
- data/ext/pg_query/include/catalog/objectaddress.h +11 -6
- data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
- data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_am.h +4 -1
- data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
- data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
- data/ext/pg_query/include/catalog/pg_authid.h +7 -2
- data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
- data/ext/pg_query/include/catalog/pg_class.h +45 -15
- data/ext/pg_query/include/catalog/pg_class_d.h +31 -2
- data/ext/pg_query/include/catalog/pg_collation.h +33 -8
- data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
- data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
- data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
- data/ext/pg_query/include/catalog/pg_control.h +5 -5
- data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
- data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_depend.h +11 -7
- data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
- data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_index.h +17 -7
- data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
- data/ext/pg_query/include/catalog/pg_language.h +10 -5
- data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
- data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
- data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_operator.h +21 -16
- data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
- data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
- data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
- data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
- data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
- data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_proc.h +20 -11
- data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
- data/ext/pg_query/include/catalog/pg_publication.h +50 -4
- data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
- data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
- data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
- data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
- data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
- data/ext/pg_query/include/catalog/pg_transform.h +8 -5
- data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
- data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
- data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_type.h +56 -24
- data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
- data/ext/pg_query/include/catalog/storage.h +5 -3
- data/ext/pg_query/include/commands/async.h +4 -5
- data/ext/pg_query/include/commands/dbcommands.h +2 -1
- data/ext/pg_query/include/commands/defrem.h +11 -24
- data/ext/pg_query/include/commands/event_trigger.h +2 -2
- data/ext/pg_query/include/commands/explain.h +1 -1
- data/ext/pg_query/include/commands/prepare.h +1 -1
- data/ext/pg_query/include/commands/tablespace.h +3 -1
- data/ext/pg_query/include/commands/trigger.h +27 -17
- data/ext/pg_query/include/commands/user.h +2 -2
- data/ext/pg_query/include/commands/vacuum.h +88 -41
- data/ext/pg_query/include/commands/variable.h +1 -1
- data/ext/pg_query/include/common/file_perm.h +4 -4
- data/ext/pg_query/include/common/hashfn.h +1 -1
- data/ext/pg_query/include/common/ip.h +1 -7
- data/ext/pg_query/include/common/keywords.h +2 -6
- data/ext/pg_query/include/common/kwlookup.h +1 -1
- data/ext/pg_query/include/common/pg_prng.h +60 -0
- data/ext/pg_query/include/common/relpath.h +2 -2
- data/ext/pg_query/include/common/string.h +24 -1
- data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
- data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
- data/ext/pg_query/include/datatype/timestamp.h +40 -1
- data/ext/pg_query/include/executor/execdesc.h +1 -1
- data/ext/pg_query/include/executor/executor.h +65 -22
- data/ext/pg_query/include/executor/functions.h +17 -3
- data/ext/pg_query/include/executor/instrument.h +33 -16
- data/ext/pg_query/include/executor/spi.h +41 -3
- data/ext/pg_query/include/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/executor/tuptable.h +1 -1
- data/ext/pg_query/include/fmgr.h +13 -7
- data/ext/pg_query/include/funcapi.h +16 -4
- data/ext/pg_query/include/getaddrinfo.h +1 -1
- data/ext/pg_query/include/jit/jit.h +11 -11
- data/ext/pg_query/include/kwlist_d.h +517 -494
- data/ext/pg_query/include/lib/dshash.h +112 -0
- data/ext/pg_query/include/lib/ilist.h +20 -1
- data/ext/pg_query/include/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/lib/simplehash.h +150 -25
- data/ext/pg_query/include/lib/sort_template.h +432 -0
- data/ext/pg_query/include/lib/stringinfo.h +1 -1
- data/ext/pg_query/include/libpq/auth.h +6 -4
- data/ext/pg_query/include/libpq/crypt.h +5 -4
- data/ext/pg_query/include/libpq/hba.h +43 -4
- data/ext/pg_query/include/libpq/libpq-be.h +23 -6
- data/ext/pg_query/include/libpq/libpq.h +31 -20
- data/ext/pg_query/include/libpq/pqcomm.h +17 -31
- data/ext/pg_query/include/libpq/pqformat.h +1 -1
- data/ext/pg_query/include/libpq/pqsignal.h +4 -4
- data/ext/pg_query/include/mb/pg_wchar.h +106 -23
- data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/miscadmin.h +71 -52
- data/ext/pg_query/include/nodes/bitmapset.h +1 -1
- data/ext/pg_query/include/nodes/execnodes.h +272 -80
- data/ext/pg_query/include/nodes/extensible.h +4 -2
- data/ext/pg_query/include/nodes/lockoptions.h +1 -1
- data/ext/pg_query/include/nodes/makefuncs.h +7 -6
- data/ext/pg_query/include/nodes/memnodes.h +5 -3
- data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
- data/ext/pg_query/include/nodes/nodes.h +30 -11
- data/ext/pg_query/include/nodes/params.h +1 -1
- data/ext/pg_query/include/nodes/parsenodes.h +327 -94
- data/ext/pg_query/include/nodes/pathnodes.h +245 -67
- data/ext/pg_query/include/nodes/pg_list.h +75 -68
- data/ext/pg_query/include/nodes/plannodes.h +128 -30
- data/ext/pg_query/include/nodes/primnodes.h +99 -47
- data/ext/pg_query/include/nodes/print.h +1 -1
- data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/nodes/value.h +58 -39
- data/ext/pg_query/include/optimizer/cost.h +9 -2
- data/ext/pg_query/include/optimizer/geqo.h +9 -7
- data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/optimizer/optimizer.h +25 -22
- data/ext/pg_query/include/optimizer/paths.h +6 -6
- data/ext/pg_query/include/optimizer/planmain.h +15 -14
- data/ext/pg_query/include/parser/analyze.h +19 -5
- data/ext/pg_query/include/parser/gram.h +947 -913
- data/ext/pg_query/include/parser/gramparse.h +1 -1
- data/ext/pg_query/include/parser/kwlist.h +463 -453
- data/ext/pg_query/include/parser/parse_agg.h +2 -7
- data/ext/pg_query/include/parser/parse_coerce.h +4 -1
- data/ext/pg_query/include/parser/parse_expr.h +2 -3
- data/ext/pg_query/include/parser/parse_func.h +2 -1
- data/ext/pg_query/include/parser/parse_node.h +21 -9
- data/ext/pg_query/include/parser/parse_oper.h +1 -3
- data/ext/pg_query/include/parser/parse_relation.h +5 -4
- data/ext/pg_query/include/parser/parse_type.h +1 -1
- data/ext/pg_query/include/parser/parser.h +31 -4
- data/ext/pg_query/include/parser/parsetree.h +1 -1
- data/ext/pg_query/include/parser/scanner.h +1 -1
- data/ext/pg_query/include/parser/scansup.h +2 -5
- data/ext/pg_query/include/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/pg_config.h +94 -46
- data/ext/pg_query/include/pg_config_manual.h +74 -21
- data/ext/pg_query/include/pg_getopt.h +6 -6
- data/ext/pg_query/include/pg_query.h +5 -4
- data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +1220 -422
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +152 -26
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +174 -30
- data/ext/pg_query/include/pg_trace.h +1 -1
- data/ext/pg_query/include/pgstat.h +449 -1237
- data/ext/pg_query/include/pgtime.h +14 -4
- data/ext/pg_query/include/pl_gram.h +126 -128
- data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
- data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/include/plerrcodes.h +9 -1
- data/ext/pg_query/include/plpgsql.h +52 -54
- data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
- data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
- data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
- data/ext/pg_query/include/port/atomics/fallback.h +1 -1
- data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
- data/ext/pg_query/include/port/atomics/generic.h +1 -1
- data/ext/pg_query/include/port/atomics.h +1 -1
- data/ext/pg_query/include/port/pg_bitutils.h +88 -12
- data/ext/pg_query/include/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/port/pg_crc32c.h +1 -1
- data/ext/pg_query/include/port.h +72 -43
- data/ext/pg_query/include/portability/instr_time.h +1 -1
- data/ext/pg_query/include/postgres.h +60 -16
- data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
- data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
- data/ext/pg_query/include/postmaster/bgworker.h +2 -1
- data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
- data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
- data/ext/pg_query/include/postmaster/fork_process.h +1 -1
- data/ext/pg_query/include/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postmaster/pgarch.h +42 -8
- data/ext/pg_query/include/postmaster/postmaster.h +18 -17
- data/ext/pg_query/include/postmaster/startup.h +39 -0
- data/ext/pg_query/include/postmaster/syslogger.h +15 -10
- data/ext/pg_query/include/postmaster/walwriter.h +3 -3
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1422 -916
- data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
- data/ext/pg_query/include/regex/regex.h +18 -16
- data/ext/pg_query/include/replication/logicallauncher.h +3 -5
- data/ext/pg_query/include/replication/logicalproto.h +161 -17
- data/ext/pg_query/include/replication/logicalworker.h +1 -1
- data/ext/pg_query/include/replication/origin.h +7 -7
- data/ext/pg_query/include/replication/reorderbuffer.h +262 -44
- data/ext/pg_query/include/replication/slot.h +23 -12
- data/ext/pg_query/include/replication/syncrep.h +5 -5
- data/ext/pg_query/include/replication/walreceiver.h +145 -13
- data/ext/pg_query/include/replication/walsender.h +8 -8
- data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
- data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/storage/backendid.h +3 -3
- data/ext/pg_query/include/storage/block.h +4 -10
- data/ext/pg_query/include/storage/buf.h +1 -1
- data/ext/pg_query/include/storage/bufmgr.h +19 -14
- data/ext/pg_query/include/storage/bufpage.h +6 -8
- data/ext/pg_query/include/storage/condition_variable.h +13 -2
- data/ext/pg_query/include/storage/dsm.h +4 -1
- data/ext/pg_query/include/storage/dsm_impl.h +3 -2
- data/ext/pg_query/include/storage/fd.h +33 -3
- data/ext/pg_query/include/storage/fileset.h +40 -0
- data/ext/pg_query/include/storage/ipc.h +4 -1
- data/ext/pg_query/include/storage/item.h +1 -1
- data/ext/pg_query/include/storage/itemid.h +1 -1
- data/ext/pg_query/include/storage/itemptr.h +3 -1
- data/ext/pg_query/include/storage/large_object.h +2 -2
- data/ext/pg_query/include/storage/latch.h +9 -13
- data/ext/pg_query/include/storage/lmgr.h +2 -1
- data/ext/pg_query/include/storage/lock.h +17 -13
- data/ext/pg_query/include/storage/lockdefs.h +2 -2
- data/ext/pg_query/include/storage/lwlock.h +6 -32
- data/ext/pg_query/include/storage/lwlocknames.h +0 -1
- data/ext/pg_query/include/storage/off.h +1 -1
- data/ext/pg_query/include/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/storage/pg_shmem.h +9 -7
- data/ext/pg_query/include/storage/pmsignal.h +15 -4
- data/ext/pg_query/include/storage/predicate.h +4 -4
- data/ext/pg_query/include/storage/proc.h +183 -55
- data/ext/pg_query/include/storage/procarray.h +98 -0
- data/ext/pg_query/include/storage/proclist_types.h +1 -1
- data/ext/pg_query/include/storage/procsignal.h +3 -7
- data/ext/pg_query/include/storage/relfilenode.h +1 -1
- data/ext/pg_query/include/storage/s_lock.h +67 -4
- data/ext/pg_query/include/storage/sharedfileset.h +3 -11
- data/ext/pg_query/include/storage/shm_mq.h +5 -4
- data/ext/pg_query/include/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/storage/shmem.h +1 -1
- data/ext/pg_query/include/storage/sinval.h +3 -3
- data/ext/pg_query/include/storage/sinvaladt.h +1 -1
- data/ext/pg_query/include/storage/smgr.h +10 -8
- data/ext/pg_query/include/storage/spin.h +2 -2
- data/ext/pg_query/include/storage/standby.h +13 -6
- data/ext/pg_query/include/storage/standbydefs.h +2 -2
- data/ext/pg_query/include/storage/sync.h +7 -3
- data/ext/pg_query/include/tcop/cmdtag.h +1 -1
- data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
- data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
- data/ext/pg_query/include/tcop/dest.h +1 -1
- data/ext/pg_query/include/tcop/fastpath.h +1 -2
- data/ext/pg_query/include/tcop/pquery.h +7 -1
- data/ext/pg_query/include/tcop/tcopprot.h +19 -11
- data/ext/pg_query/include/tcop/utility.h +7 -3
- data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
- data/ext/pg_query/include/utils/acl.h +24 -3
- data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/utils/array.h +7 -2
- data/ext/pg_query/include/utils/backend_progress.h +44 -0
- data/ext/pg_query/include/utils/backend_status.h +321 -0
- data/ext/pg_query/include/utils/builtins.h +11 -11
- data/ext/pg_query/include/utils/bytea.h +3 -2
- data/ext/pg_query/include/utils/catcache.h +1 -1
- data/ext/pg_query/include/utils/date.h +1 -1
- data/ext/pg_query/include/utils/datetime.h +8 -7
- data/ext/pg_query/include/utils/datum.h +9 -1
- data/ext/pg_query/include/utils/dsa.h +1 -1
- data/ext/pg_query/include/utils/dynahash.h +4 -3
- data/ext/pg_query/include/utils/elog.h +52 -21
- data/ext/pg_query/include/utils/errcodes.h +2 -0
- data/ext/pg_query/include/utils/expandeddatum.h +1 -1
- data/ext/pg_query/include/utils/expandedrecord.h +1 -1
- data/ext/pg_query/include/utils/float.h +7 -7
- data/ext/pg_query/include/utils/fmgroids.h +1300 -696
- data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
- data/ext/pg_query/include/utils/fmgrtab.h +6 -5
- data/ext/pg_query/include/utils/guc.h +69 -43
- data/ext/pg_query/include/utils/guc_tables.h +23 -19
- data/ext/pg_query/include/utils/hsearch.h +15 -11
- data/ext/pg_query/include/utils/inval.h +5 -1
- data/ext/pg_query/include/utils/lsyscache.h +11 -1
- data/ext/pg_query/include/utils/memdebug.h +1 -1
- data/ext/pg_query/include/utils/memutils.h +8 -3
- data/ext/pg_query/include/utils/numeric.h +19 -5
- data/ext/pg_query/include/utils/palloc.h +25 -3
- data/ext/pg_query/include/utils/partcache.h +1 -1
- data/ext/pg_query/include/utils/pg_locale.h +17 -9
- data/ext/pg_query/include/utils/pg_lsn.h +1 -1
- data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
- data/ext/pg_query/include/utils/pidfile.h +1 -1
- data/ext/pg_query/include/utils/plancache.h +6 -5
- data/ext/pg_query/include/utils/portal.h +12 -1
- data/ext/pg_query/include/utils/ps_status.h +1 -1
- data/ext/pg_query/include/utils/queryenvironment.h +1 -1
- data/ext/pg_query/include/utils/queryjumble.h +88 -0
- data/ext/pg_query/include/utils/regproc.h +14 -3
- data/ext/pg_query/include/utils/rel.h +71 -20
- data/ext/pg_query/include/utils/relcache.h +9 -7
- data/ext/pg_query/include/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/utils/resowner.h +1 -1
- data/ext/pg_query/include/utils/rls.h +2 -2
- data/ext/pg_query/include/utils/ruleutils.h +4 -1
- data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/utils/snapmgr.h +35 -14
- data/ext/pg_query/include/utils/snapshot.h +14 -1
- data/ext/pg_query/include/utils/sortsupport.h +117 -2
- data/ext/pg_query/include/utils/syscache.h +6 -1
- data/ext/pg_query/include/utils/timeout.h +11 -4
- data/ext/pg_query/include/utils/timestamp.h +6 -5
- data/ext/pg_query/include/utils/tuplesort.h +25 -11
- data/ext/pg_query/include/utils/tuplestore.h +2 -2
- data/ext/pg_query/include/utils/typcache.h +24 -17
- data/ext/pg_query/include/utils/tzparser.h +1 -1
- data/ext/pg_query/include/utils/varlena.h +5 -3
- data/ext/pg_query/include/utils/wait_event.h +289 -0
- data/ext/pg_query/include/utils/xml.h +4 -4
- data/ext/pg_query/pg_query.pb-c.c +4318 -2307
- data/ext/pg_query/pg_query_deparse.c +1114 -381
- data/ext/pg_query/pg_query_fingerprint.c +46 -10
- data/ext/pg_query/pg_query_fingerprint.h +3 -1
- data/ext/pg_query/pg_query_json_plpgsql.c +55 -12
- data/ext/pg_query/pg_query_normalize.c +163 -20
- data/ext/pg_query/pg_query_outfuncs.h +1 -0
- data/ext/pg_query/pg_query_outfuncs_json.c +65 -16
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
- data/ext/pg_query/pg_query_parse.c +1 -1
- data/ext/pg_query/pg_query_parse_plpgsql.c +79 -16
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
- data/ext/pg_query/pg_query_ruby.c +1 -1
- data/ext/pg_query/pg_query_scan.c +2 -1
- data/ext/pg_query/pg_query_split.c +3 -2
- data/ext/pg_query/src_backend_catalog_namespace.c +21 -9
- data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
- data/ext/pg_query/src_backend_commands_define.c +11 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +424 -109
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +291 -46
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +86 -11
- data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
- data/ext/pg_query/src_backend_nodes_value.c +28 -19
- data/ext/pg_query/src_backend_parser_gram.c +33890 -31262
- data/ext/pg_query/src_backend_parser_parser.c +26 -7
- data/ext/pg_query/src_backend_parser_scan.c +644 -441
- data/ext/pg_query/src_backend_parser_scansup.c +4 -28
- data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
- data/ext/pg_query/src_backend_tcop_postgres.c +73 -24
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
- data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +109 -15
- data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
- data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
- data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
- data/ext/pg_query/src_backend_utils_misc_guc.c +207 -45
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
- data/ext/pg_query/src_common_encnames.c +1 -1
- data/ext/pg_query/src_common_hashfn.c +3 -3
- data/ext/pg_query/src_common_keywords.c +15 -2
- data/ext/pg_query/src_common_kwlist_d.h +517 -494
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_pg_prng.c +152 -0
- data/ext/pg_query/src_common_psprintf.c +1 -1
- data/ext/pg_query/src_common_string.c +7 -1
- data/ext/pg_query/src_common_stringinfo.c +1 -1
- data/ext/pg_query/src_common_wchar.c +712 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1235 -1261
- data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/src_port_pg_bitutils.c +41 -52
- data/ext/pg_query/src_port_pgsleep.c +1 -1
- data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
- data/ext/pg_query/src_port_qsort.c +12 -224
- data/ext/pg_query/src_port_snprintf.c +46 -20
- data/ext/pg_query/src_port_strerror.c +9 -19
- data/ext/pg_query/src_port_strnlen.c +1 -1
- data/lib/pg_query/deparse.rb +7 -1
- data/lib/pg_query/filter_columns.rb +6 -4
- data/lib/pg_query/fingerprint.rb +18 -3
- data/lib/pg_query/node.rb +2 -2
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/parse.rb +87 -51
- data/lib/pg_query/pg_query_pb.rb +1109 -942
- data/lib/pg_query/treewalker.rb +6 -0
- data/lib/pg_query/truncate.rb +54 -8
- data/lib/pg_query/version.rb +1 -1
- metadata +29 -18
- data/ext/pg_query/include/access/xloginsert.h +0 -64
- data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
- data/ext/pg_query/include/parser/parse_clause.h +0 -54
- data/ext/pg_query/include/parser/parse_collate.h +0 -27
- data/ext/pg_query/include/parser/parse_target.h +0 -46
- data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
- data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
- data/ext/pg_query/src_port_erand48.c +0 -127
- data/ext/pg_query/src_port_random.c +0 -31
@@ -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"
|
@@ -62,6 +60,7 @@
|
|
62
60
|
#include "parser/parse_func.h"
|
63
61
|
#include "parser/parse_node.h"
|
64
62
|
#include "parser/parse_oper.h"
|
63
|
+
#include "parser/parse_relation.h"
|
65
64
|
#include "parser/parser.h"
|
66
65
|
#include "parser/parsetree.h"
|
67
66
|
#include "rewrite/rewriteHandler.h"
|
@@ -99,6 +98,11 @@
|
|
99
98
|
#define PRETTYFLAG_INDENT 0x0002
|
100
99
|
#define PRETTYFLAG_SCHEMA 0x0004
|
101
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
|
+
|
102
106
|
/* Default line length for pretty-print wrapping: 0 means wrap always */
|
103
107
|
#define WRAP_COLUMN_DEFAULT 0
|
104
108
|
|
@@ -181,6 +185,10 @@ typedef struct
|
|
181
185
|
List *outer_tlist; /* referent for OUTER_VAR Vars */
|
182
186
|
List *inner_tlist; /* referent for INNER_VAR Vars */
|
183
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;
|
184
192
|
} deparse_namespace;
|
185
193
|
|
186
194
|
/*
|
@@ -346,7 +354,8 @@ static char *pg_get_indexdef_worker(Oid indexrelid, int colno,
|
|
346
354
|
bool attrsOnly, bool keysOnly,
|
347
355
|
bool showTblSpc, bool inherits,
|
348
356
|
int prettyFlags, bool missing_ok);
|
349
|
-
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);
|
350
359
|
static char *pg_get_partkeydef_worker(Oid relid, int prettyFlags,
|
351
360
|
bool attrsOnly, bool missing_ok);
|
352
361
|
static char *pg_get_constraintdef_worker(Oid constraintId, bool fullCommand,
|
@@ -357,6 +366,7 @@ static int print_function_arguments(StringInfo buf, HeapTuple proctup,
|
|
357
366
|
bool print_table_args, bool print_defaults);
|
358
367
|
static void print_function_rettype(StringInfo buf, HeapTuple proctup);
|
359
368
|
static void print_function_trftypes(StringInfo buf, HeapTuple proctup);
|
369
|
+
static void print_function_sqlbody(StringInfo buf, HeapTuple proctup);
|
360
370
|
static void set_rtable_names(deparse_namespace *dpns, List *parent_namespaces,
|
361
371
|
Bitmapset *rels_used);
|
362
372
|
static void set_deparse_for_query(deparse_namespace *dpns, Query *query,
|
@@ -379,6 +389,8 @@ static void identify_join_columns(JoinExpr *j, RangeTblEntry *jrte,
|
|
379
389
|
deparse_columns *colinfo);
|
380
390
|
static char *get_rtable_name(int rtindex, deparse_context *context);
|
381
391
|
static void set_deparse_plan(deparse_namespace *dpns, Plan *plan);
|
392
|
+
static Plan *find_recursive_union(deparse_namespace *dpns,
|
393
|
+
WorkTableScan *wtscan);
|
382
394
|
static void push_child_plan(deparse_namespace *dpns, Plan *plan,
|
383
395
|
deparse_namespace *save_dpns);
|
384
396
|
static void pop_child_plan(deparse_namespace *dpns,
|
@@ -392,26 +404,29 @@ static void make_ruledef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc,
|
|
392
404
|
static void make_viewdef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc,
|
393
405
|
int prettyFlags, int wrapColumn);
|
394
406
|
static void get_query_def(Query *query, StringInfo buf, List *parentnamespace,
|
395
|
-
TupleDesc resultDesc,
|
407
|
+
TupleDesc resultDesc, bool colNamesVisible,
|
396
408
|
int prettyFlags, int wrapColumn, int startIndent);
|
397
409
|
static void get_values_def(List *values_lists, deparse_context *context);
|
398
410
|
static void get_with_clause(Query *query, deparse_context *context);
|
399
411
|
static void get_select_query_def(Query *query, deparse_context *context,
|
400
|
-
TupleDesc resultDesc);
|
401
|
-
static void get_insert_query_def(Query *query, deparse_context *context
|
402
|
-
|
412
|
+
TupleDesc resultDesc, bool colNamesVisible);
|
413
|
+
static void get_insert_query_def(Query *query, deparse_context *context,
|
414
|
+
bool colNamesVisible);
|
415
|
+
static void get_update_query_def(Query *query, deparse_context *context,
|
416
|
+
bool colNamesVisible);
|
403
417
|
static void get_update_query_targetlist_def(Query *query, List *targetList,
|
404
418
|
deparse_context *context,
|
405
419
|
RangeTblEntry *rte);
|
406
|
-
static void get_delete_query_def(Query *query, deparse_context *context
|
420
|
+
static void get_delete_query_def(Query *query, deparse_context *context,
|
421
|
+
bool colNamesVisible);
|
407
422
|
static void get_utility_query_def(Query *query, deparse_context *context);
|
408
423
|
static void get_basic_select_query(Query *query, deparse_context *context,
|
409
|
-
TupleDesc resultDesc);
|
424
|
+
TupleDesc resultDesc, bool colNamesVisible);
|
410
425
|
static void get_target_list(List *targetList, deparse_context *context,
|
411
|
-
TupleDesc resultDesc);
|
426
|
+
TupleDesc resultDesc, bool colNamesVisible);
|
412
427
|
static void get_setop_query(Node *setOp, Query *query,
|
413
428
|
deparse_context *context,
|
414
|
-
TupleDesc resultDesc);
|
429
|
+
TupleDesc resultDesc, bool colNamesVisible);
|
415
430
|
static Node *get_rule_sortgroupclause(Index ref, List *tlist,
|
416
431
|
bool force_colno,
|
417
432
|
deparse_context *context);
|
@@ -440,6 +455,8 @@ static void get_rule_expr(Node *node, deparse_context *context,
|
|
440
455
|
bool showimplicit);
|
441
456
|
static void get_rule_expr_toplevel(Node *node, deparse_context *context,
|
442
457
|
bool showimplicit);
|
458
|
+
static void get_rule_list_toplevel(List *lst, deparse_context *context,
|
459
|
+
bool showimplicit);
|
443
460
|
static void get_rule_expr_funccall(Node *node, deparse_context *context,
|
444
461
|
bool showimplicit);
|
445
462
|
static bool looks_like_function(Node *node);
|
@@ -451,6 +468,7 @@ static void get_agg_expr(Aggref *aggref, deparse_context *context,
|
|
451
468
|
static void get_agg_combine_expr(Node *node, deparse_context *context,
|
452
469
|
void *callback_arg);
|
453
470
|
static void get_windowfunc_expr(WindowFunc *wfunc, deparse_context *context);
|
471
|
+
static bool get_func_sql_syntax(FuncExpr *expr, deparse_context *context);
|
454
472
|
static void get_coercion_expr(Node *arg, deparse_context *context,
|
455
473
|
Oid resulttype, int32 resulttypmod,
|
456
474
|
Node *parentNode);
|
@@ -574,17 +592,46 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
|
|
574
592
|
*/
|
575
593
|
|
576
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
|
+
|
577
606
|
/*
|
578
607
|
* pg_get_statisticsobjdef
|
579
608
|
* Get the definition of an extended statistics object
|
580
609
|
*/
|
581
610
|
|
582
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
|
+
|
583
625
|
/*
|
584
626
|
* Internal workhorse to decompile an extended statistics object.
|
585
627
|
*/
|
586
628
|
|
587
629
|
|
630
|
+
/*
|
631
|
+
* Generate text array of expressions for statistics object.
|
632
|
+
*/
|
633
|
+
|
634
|
+
|
588
635
|
/*
|
589
636
|
* pg_get_partkeydef
|
590
637
|
*
|
@@ -657,6 +704,12 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
|
|
657
704
|
* the one specified by the second parameter. This is sufficient for
|
658
705
|
* partial indexes, column default expressions, etc. We also support
|
659
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.
|
660
713
|
* ----------
|
661
714
|
*/
|
662
715
|
|
@@ -750,6 +803,10 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
|
|
750
803
|
|
751
804
|
|
752
805
|
|
806
|
+
|
807
|
+
|
808
|
+
|
809
|
+
|
753
810
|
/*
|
754
811
|
* deparse_expression - General utility for deparsing expressions
|
755
812
|
*
|
@@ -969,13 +1026,20 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
|
|
969
1026
|
* of a given Plan node
|
970
1027
|
*
|
971
1028
|
* This sets the plan, outer_plan, inner_plan, outer_tlist, inner_tlist,
|
972
|
-
* and index_tlist fields. Caller
|
1029
|
+
* and index_tlist fields. Caller must already have adjusted the ancestors
|
973
1030
|
* list if necessary. Note that the rtable, subplans, and ctes fields do
|
974
1031
|
* not need to change when shifting attention to different plan nodes in a
|
975
1032
|
* single plan tree.
|
976
1033
|
*/
|
977
1034
|
|
978
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
|
+
|
979
1043
|
/*
|
980
1044
|
* push_child_plan: temporarily transfer deparsing attention to a child plan
|
981
1045
|
*
|
@@ -1037,8 +1101,18 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
|
|
1037
1101
|
/* ----------
|
1038
1102
|
* get_query_def - Parse back one query parsetree
|
1039
1103
|
*
|
1040
|
-
*
|
1041
|
-
*
|
1104
|
+
* query: parsetree to be displayed
|
1105
|
+
* buf: output text is appended to buf
|
1106
|
+
* parentnamespace: list (initially empty) of outer-level deparse_namespace's
|
1107
|
+
* resultDesc: if not NULL, the output tuple descriptor for the view
|
1108
|
+
* represented by a SELECT query. We use the column names from it
|
1109
|
+
* to label SELECT output columns, in preference to names in the query
|
1110
|
+
* colNamesVisible: true if the surrounding context cares about the output
|
1111
|
+
* column names at all (as, for example, an EXISTS() context does not);
|
1112
|
+
* when false, we can suppress dummy column labels such as "?column?"
|
1113
|
+
* prettyFlags: bitmask of PRETTYFLAG_XXX options
|
1114
|
+
* wrapColumn: maximum line length, or -1 to disable wrapping
|
1115
|
+
* startIndent: initial indentation amount
|
1042
1116
|
* ----------
|
1043
1117
|
*/
|
1044
1118
|
|
@@ -1074,6 +1148,8 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
|
|
1074
1148
|
* get_target_list - Parse back a SELECT target list
|
1075
1149
|
*
|
1076
1150
|
* This is also used for RETURNING lists in INSERT/UPDATE/DELETE.
|
1151
|
+
*
|
1152
|
+
* resultDesc and colNamesVisible are as for get_query_def()
|
1077
1153
|
* ----------
|
1078
1154
|
*/
|
1079
1155
|
|
@@ -1291,6 +1367,16 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
|
|
1291
1367
|
*/
|
1292
1368
|
|
1293
1369
|
|
1370
|
+
/*
|
1371
|
+
* get_rule_list_toplevel - Parse back a list of toplevel expressions
|
1372
|
+
*
|
1373
|
+
* Apply get_rule_expr_toplevel() to each element of a List.
|
1374
|
+
*
|
1375
|
+
* This adds commas between the expressions, but caller is responsible
|
1376
|
+
* for printing surrounding decoration.
|
1377
|
+
*/
|
1378
|
+
|
1379
|
+
|
1294
1380
|
/*
|
1295
1381
|
* get_rule_expr_funccall - Parse back a function-call expression
|
1296
1382
|
*
|
@@ -1339,6 +1425,14 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
|
|
1339
1425
|
*/
|
1340
1426
|
|
1341
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
|
+
|
1342
1436
|
/* ----------
|
1343
1437
|
* get_coercion_expr
|
1344
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
|
|