gitlab-pg_query 1.3.1 → 2.0.4
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 +217 -99
- data/README.md +92 -69
- data/Rakefile +85 -5
- data/ext/pg_query/extconf.rb +3 -40
- data/ext/pg_query/guc-file.c +0 -0
- data/ext/pg_query/include/access/amapi.h +246 -0
- data/ext/pg_query/include/access/attmap.h +52 -0
- data/ext/pg_query/include/access/attnum.h +64 -0
- data/ext/pg_query/include/access/clog.h +61 -0
- data/ext/pg_query/include/access/commit_ts.h +77 -0
- data/ext/pg_query/include/access/detoast.h +92 -0
- data/ext/pg_query/include/access/genam.h +228 -0
- data/ext/pg_query/include/access/gin.h +78 -0
- data/ext/pg_query/include/access/htup.h +89 -0
- data/ext/pg_query/include/access/htup_details.h +819 -0
- data/ext/pg_query/include/access/itup.h +161 -0
- data/ext/pg_query/include/access/parallel.h +82 -0
- data/ext/pg_query/include/access/printtup.h +35 -0
- data/ext/pg_query/include/access/relation.h +28 -0
- data/ext/pg_query/include/access/relscan.h +176 -0
- data/ext/pg_query/include/access/rmgr.h +35 -0
- data/ext/pg_query/include/access/rmgrlist.h +49 -0
- data/ext/pg_query/include/access/sdir.h +58 -0
- data/ext/pg_query/include/access/skey.h +151 -0
- data/ext/pg_query/include/access/stratnum.h +83 -0
- data/ext/pg_query/include/access/sysattr.h +29 -0
- data/ext/pg_query/include/access/table.h +27 -0
- data/ext/pg_query/include/access/tableam.h +1825 -0
- data/ext/pg_query/include/access/transam.h +265 -0
- data/ext/pg_query/include/access/tupconvert.h +51 -0
- data/ext/pg_query/include/access/tupdesc.h +154 -0
- data/ext/pg_query/include/access/tupmacs.h +247 -0
- data/ext/pg_query/include/access/twophase.h +61 -0
- data/ext/pg_query/include/access/xact.h +463 -0
- data/ext/pg_query/include/access/xlog.h +398 -0
- data/ext/pg_query/include/access/xlog_internal.h +330 -0
- data/ext/pg_query/include/access/xlogdefs.h +109 -0
- data/ext/pg_query/include/access/xloginsert.h +64 -0
- data/ext/pg_query/include/access/xlogreader.h +327 -0
- data/ext/pg_query/include/access/xlogrecord.h +227 -0
- data/ext/pg_query/include/bootstrap/bootstrap.h +62 -0
- data/ext/pg_query/include/c.h +1322 -0
- data/ext/pg_query/include/catalog/catalog.h +42 -0
- data/ext/pg_query/include/catalog/catversion.h +58 -0
- data/ext/pg_query/include/catalog/dependency.h +275 -0
- data/ext/pg_query/include/catalog/genbki.h +64 -0
- data/ext/pg_query/include/catalog/index.h +199 -0
- data/ext/pg_query/include/catalog/indexing.h +366 -0
- data/ext/pg_query/include/catalog/namespace.h +188 -0
- data/ext/pg_query/include/catalog/objectaccess.h +197 -0
- data/ext/pg_query/include/catalog/objectaddress.h +84 -0
- data/ext/pg_query/include/catalog/pg_aggregate.h +176 -0
- data/ext/pg_query/include/catalog/pg_aggregate_d.h +77 -0
- data/ext/pg_query/include/catalog/pg_am.h +60 -0
- data/ext/pg_query/include/catalog/pg_am_d.h +45 -0
- data/ext/pg_query/include/catalog/pg_attribute.h +204 -0
- data/ext/pg_query/include/catalog/pg_attribute_d.h +59 -0
- data/ext/pg_query/include/catalog/pg_authid.h +58 -0
- data/ext/pg_query/include/catalog/pg_authid_d.h +49 -0
- data/ext/pg_query/include/catalog/pg_class.h +200 -0
- data/ext/pg_query/include/catalog/pg_class_d.h +103 -0
- data/ext/pg_query/include/catalog/pg_collation.h +73 -0
- data/ext/pg_query/include/catalog/pg_collation_d.h +45 -0
- data/ext/pg_query/include/catalog/pg_constraint.h +247 -0
- data/ext/pg_query/include/catalog/pg_constraint_d.h +67 -0
- data/ext/pg_query/include/catalog/pg_control.h +250 -0
- data/ext/pg_query/include/catalog/pg_conversion.h +72 -0
- data/ext/pg_query/include/catalog/pg_conversion_d.h +35 -0
- data/ext/pg_query/include/catalog/pg_depend.h +73 -0
- data/ext/pg_query/include/catalog/pg_depend_d.h +34 -0
- data/ext/pg_query/include/catalog/pg_event_trigger.h +51 -0
- data/ext/pg_query/include/catalog/pg_event_trigger_d.h +34 -0
- data/ext/pg_query/include/catalog/pg_index.h +80 -0
- data/ext/pg_query/include/catalog/pg_index_d.h +56 -0
- data/ext/pg_query/include/catalog/pg_language.h +67 -0
- data/ext/pg_query/include/catalog/pg_language_d.h +39 -0
- data/ext/pg_query/include/catalog/pg_namespace.h +59 -0
- data/ext/pg_query/include/catalog/pg_namespace_d.h +34 -0
- data/ext/pg_query/include/catalog/pg_opclass.h +85 -0
- data/ext/pg_query/include/catalog/pg_opclass_d.h +49 -0
- data/ext/pg_query/include/catalog/pg_operator.h +102 -0
- data/ext/pg_query/include/catalog/pg_operator_d.h +106 -0
- data/ext/pg_query/include/catalog/pg_opfamily.h +60 -0
- data/ext/pg_query/include/catalog/pg_opfamily_d.h +47 -0
- data/ext/pg_query/include/catalog/pg_partitioned_table.h +63 -0
- data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +35 -0
- data/ext/pg_query/include/catalog/pg_proc.h +211 -0
- data/ext/pg_query/include/catalog/pg_proc_d.h +99 -0
- data/ext/pg_query/include/catalog/pg_publication.h +115 -0
- data/ext/pg_query/include/catalog/pg_publication_d.h +36 -0
- data/ext/pg_query/include/catalog/pg_replication_origin.h +57 -0
- data/ext/pg_query/include/catalog/pg_replication_origin_d.h +29 -0
- data/ext/pg_query/include/catalog/pg_statistic.h +275 -0
- data/ext/pg_query/include/catalog/pg_statistic_d.h +194 -0
- data/ext/pg_query/include/catalog/pg_statistic_ext.h +74 -0
- data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +40 -0
- data/ext/pg_query/include/catalog/pg_transform.h +45 -0
- data/ext/pg_query/include/catalog/pg_transform_d.h +32 -0
- data/ext/pg_query/include/catalog/pg_trigger.h +137 -0
- data/ext/pg_query/include/catalog/pg_trigger_d.h +106 -0
- data/ext/pg_query/include/catalog/pg_ts_config.h +50 -0
- data/ext/pg_query/include/catalog/pg_ts_config_d.h +32 -0
- data/ext/pg_query/include/catalog/pg_ts_dict.h +54 -0
- data/ext/pg_query/include/catalog/pg_ts_dict_d.h +33 -0
- data/ext/pg_query/include/catalog/pg_ts_parser.h +57 -0
- data/ext/pg_query/include/catalog/pg_ts_parser_d.h +35 -0
- data/ext/pg_query/include/catalog/pg_ts_template.h +48 -0
- data/ext/pg_query/include/catalog/pg_ts_template_d.h +32 -0
- data/ext/pg_query/include/catalog/pg_type.h +372 -0
- data/ext/pg_query/include/catalog/pg_type_d.h +285 -0
- data/ext/pg_query/include/catalog/storage.h +48 -0
- data/ext/pg_query/include/commands/async.h +54 -0
- data/ext/pg_query/include/commands/dbcommands.h +35 -0
- data/ext/pg_query/include/commands/defrem.h +173 -0
- data/ext/pg_query/include/commands/event_trigger.h +88 -0
- data/ext/pg_query/include/commands/explain.h +127 -0
- data/ext/pg_query/include/commands/prepare.h +61 -0
- data/ext/pg_query/include/commands/tablespace.h +67 -0
- data/ext/pg_query/include/commands/trigger.h +277 -0
- data/ext/pg_query/include/commands/user.h +37 -0
- data/ext/pg_query/include/commands/vacuum.h +293 -0
- data/ext/pg_query/include/commands/variable.h +38 -0
- data/ext/pg_query/include/common/file_perm.h +56 -0
- data/ext/pg_query/include/common/hashfn.h +104 -0
- data/ext/pg_query/include/common/ip.h +37 -0
- data/ext/pg_query/include/common/keywords.h +33 -0
- data/ext/pg_query/include/common/kwlookup.h +44 -0
- data/ext/pg_query/include/common/relpath.h +90 -0
- data/ext/pg_query/include/common/string.h +19 -0
- data/ext/pg_query/include/common/unicode_combining_table.h +196 -0
- data/ext/pg_query/include/datatype/timestamp.h +197 -0
- data/ext/pg_query/include/executor/execdesc.h +70 -0
- data/ext/pg_query/include/executor/executor.h +614 -0
- data/ext/pg_query/include/executor/functions.h +41 -0
- data/ext/pg_query/include/executor/instrument.h +101 -0
- data/ext/pg_query/include/executor/spi.h +175 -0
- data/ext/pg_query/include/executor/tablefunc.h +67 -0
- data/ext/pg_query/include/executor/tuptable.h +487 -0
- data/ext/pg_query/include/fmgr.h +775 -0
- data/ext/pg_query/include/funcapi.h +348 -0
- data/ext/pg_query/include/getaddrinfo.h +162 -0
- data/ext/pg_query/include/jit/jit.h +105 -0
- data/ext/pg_query/include/kwlist_d.h +1072 -0
- data/ext/pg_query/include/lib/ilist.h +727 -0
- data/ext/pg_query/include/lib/pairingheap.h +102 -0
- data/ext/pg_query/include/lib/simplehash.h +1059 -0
- data/ext/pg_query/include/lib/stringinfo.h +161 -0
- data/ext/pg_query/include/libpq/auth.h +29 -0
- data/ext/pg_query/include/libpq/crypt.h +46 -0
- data/ext/pg_query/include/libpq/hba.h +140 -0
- data/ext/pg_query/include/libpq/libpq-be.h +326 -0
- data/ext/pg_query/include/libpq/libpq.h +133 -0
- data/ext/pg_query/include/libpq/pqcomm.h +208 -0
- data/ext/pg_query/include/libpq/pqformat.h +210 -0
- data/ext/pg_query/include/libpq/pqsignal.h +42 -0
- data/ext/pg_query/include/mb/pg_wchar.h +672 -0
- data/ext/pg_query/include/mb/stringinfo_mb.h +24 -0
- data/ext/pg_query/include/miscadmin.h +476 -0
- data/ext/pg_query/include/nodes/bitmapset.h +122 -0
- data/ext/pg_query/include/nodes/execnodes.h +2520 -0
- data/ext/pg_query/include/nodes/extensible.h +160 -0
- data/ext/pg_query/include/nodes/lockoptions.h +61 -0
- data/ext/pg_query/include/nodes/makefuncs.h +108 -0
- data/ext/pg_query/include/nodes/memnodes.h +108 -0
- data/ext/pg_query/include/nodes/nodeFuncs.h +162 -0
- data/ext/pg_query/include/nodes/nodes.h +842 -0
- data/ext/pg_query/include/nodes/params.h +170 -0
- data/ext/pg_query/include/nodes/parsenodes.h +3579 -0
- data/ext/pg_query/include/nodes/pathnodes.h +2556 -0
- data/ext/pg_query/include/nodes/pg_list.h +605 -0
- data/ext/pg_query/include/nodes/plannodes.h +1251 -0
- data/ext/pg_query/include/nodes/primnodes.h +1541 -0
- data/ext/pg_query/include/nodes/print.h +34 -0
- data/ext/pg_query/include/nodes/tidbitmap.h +75 -0
- data/ext/pg_query/include/nodes/value.h +61 -0
- data/ext/pg_query/include/optimizer/cost.h +206 -0
- data/ext/pg_query/include/optimizer/geqo.h +88 -0
- data/ext/pg_query/include/optimizer/geqo_gene.h +45 -0
- data/ext/pg_query/include/optimizer/optimizer.h +199 -0
- data/ext/pg_query/include/optimizer/paths.h +249 -0
- data/ext/pg_query/include/optimizer/planmain.h +119 -0
- data/ext/pg_query/include/parser/analyze.h +49 -0
- data/ext/pg_query/include/parser/gram.h +1067 -0
- data/ext/pg_query/include/parser/gramparse.h +75 -0
- data/ext/pg_query/include/parser/kwlist.h +477 -0
- data/ext/pg_query/include/parser/parse_agg.h +68 -0
- data/ext/pg_query/include/parser/parse_clause.h +54 -0
- data/ext/pg_query/include/parser/parse_coerce.h +97 -0
- data/ext/pg_query/include/parser/parse_collate.h +27 -0
- data/ext/pg_query/include/parser/parse_expr.h +26 -0
- data/ext/pg_query/include/parser/parse_func.h +73 -0
- data/ext/pg_query/include/parser/parse_node.h +327 -0
- data/ext/pg_query/include/parser/parse_oper.h +67 -0
- data/ext/pg_query/include/parser/parse_relation.h +123 -0
- data/ext/pg_query/include/parser/parse_target.h +46 -0
- data/ext/pg_query/include/parser/parse_type.h +60 -0
- data/ext/pg_query/include/parser/parser.h +41 -0
- data/ext/pg_query/include/parser/parsetree.h +61 -0
- data/ext/pg_query/include/parser/scanner.h +152 -0
- data/ext/pg_query/include/parser/scansup.h +30 -0
- data/ext/pg_query/include/partitioning/partdefs.h +26 -0
- data/ext/pg_query/include/pg_config.h +989 -0
- data/ext/pg_query/include/pg_config_ext.h +8 -0
- data/ext/pg_query/include/pg_config_manual.h +350 -0
- data/ext/pg_query/include/pg_config_os.h +8 -0
- data/ext/pg_query/include/pg_getopt.h +56 -0
- data/ext/pg_query/include/pg_query.h +121 -0
- data/ext/pg_query/include/pg_query_enum_defs.c +2454 -0
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +875 -0
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +12413 -0
- data/ext/pg_query/include/pg_query_json_helper.c +61 -0
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +686 -0
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +2437 -0
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +222 -0
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +2878 -0
- data/ext/pg_query/include/pg_trace.h +17 -0
- data/ext/pg_query/include/pgstat.h +1487 -0
- data/ext/pg_query/include/pgtime.h +84 -0
- data/ext/pg_query/include/pl_gram.h +385 -0
- data/ext/pg_query/include/pl_reserved_kwlist.h +52 -0
- data/ext/pg_query/include/pl_reserved_kwlist_d.h +114 -0
- data/ext/pg_query/include/pl_unreserved_kwlist.h +112 -0
- data/ext/pg_query/include/pl_unreserved_kwlist_d.h +246 -0
- data/ext/pg_query/include/plerrcodes.h +990 -0
- data/ext/pg_query/include/plpgsql.h +1347 -0
- data/ext/pg_query/include/port.h +524 -0
- data/ext/pg_query/include/port/atomics.h +524 -0
- data/ext/pg_query/include/port/atomics/arch-arm.h +26 -0
- data/ext/pg_query/include/port/atomics/arch-ppc.h +254 -0
- data/ext/pg_query/include/port/atomics/arch-x86.h +252 -0
- data/ext/pg_query/include/port/atomics/fallback.h +170 -0
- data/ext/pg_query/include/port/atomics/generic-gcc.h +286 -0
- data/ext/pg_query/include/port/atomics/generic.h +401 -0
- data/ext/pg_query/include/port/pg_bitutils.h +226 -0
- data/ext/pg_query/include/port/pg_bswap.h +161 -0
- data/ext/pg_query/include/port/pg_crc32c.h +101 -0
- data/ext/pg_query/include/portability/instr_time.h +256 -0
- data/ext/pg_query/include/postgres.h +764 -0
- data/ext/pg_query/include/postgres_ext.h +74 -0
- data/ext/pg_query/include/postmaster/autovacuum.h +83 -0
- data/ext/pg_query/include/postmaster/bgworker.h +161 -0
- data/ext/pg_query/include/postmaster/bgworker_internals.h +64 -0
- data/ext/pg_query/include/postmaster/bgwriter.h +45 -0
- data/ext/pg_query/include/postmaster/fork_process.h +17 -0
- data/ext/pg_query/include/postmaster/interrupt.h +32 -0
- data/ext/pg_query/include/postmaster/pgarch.h +39 -0
- data/ext/pg_query/include/postmaster/postmaster.h +77 -0
- data/ext/pg_query/include/postmaster/syslogger.h +98 -0
- data/ext/pg_query/include/postmaster/walwriter.h +21 -0
- data/ext/pg_query/include/protobuf-c.h +1106 -0
- data/ext/pg_query/include/protobuf-c/protobuf-c.h +1106 -0
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +10846 -0
- data/ext/pg_query/include/protobuf/pg_query.pb.h +124718 -0
- data/ext/pg_query/include/regex/regex.h +184 -0
- data/ext/pg_query/include/replication/logicallauncher.h +31 -0
- data/ext/pg_query/include/replication/logicalproto.h +110 -0
- data/ext/pg_query/include/replication/logicalworker.h +19 -0
- data/ext/pg_query/include/replication/origin.h +73 -0
- data/ext/pg_query/include/replication/reorderbuffer.h +467 -0
- data/ext/pg_query/include/replication/slot.h +219 -0
- data/ext/pg_query/include/replication/syncrep.h +115 -0
- data/ext/pg_query/include/replication/walreceiver.h +340 -0
- data/ext/pg_query/include/replication/walsender.h +74 -0
- data/ext/pg_query/include/rewrite/prs2lock.h +46 -0
- data/ext/pg_query/include/rewrite/rewriteHandler.h +40 -0
- data/ext/pg_query/include/rewrite/rewriteManip.h +87 -0
- data/ext/pg_query/include/rewrite/rewriteSupport.h +26 -0
- data/ext/pg_query/include/storage/backendid.h +37 -0
- data/ext/pg_query/include/storage/block.h +121 -0
- data/ext/pg_query/include/storage/buf.h +46 -0
- data/ext/pg_query/include/storage/bufmgr.h +292 -0
- data/ext/pg_query/include/storage/bufpage.h +459 -0
- data/ext/pg_query/include/storage/condition_variable.h +62 -0
- data/ext/pg_query/include/storage/dsm.h +61 -0
- data/ext/pg_query/include/storage/dsm_impl.h +75 -0
- data/ext/pg_query/include/storage/fd.h +168 -0
- data/ext/pg_query/include/storage/ipc.h +81 -0
- data/ext/pg_query/include/storage/item.h +19 -0
- data/ext/pg_query/include/storage/itemid.h +184 -0
- data/ext/pg_query/include/storage/itemptr.h +206 -0
- data/ext/pg_query/include/storage/large_object.h +100 -0
- data/ext/pg_query/include/storage/latch.h +190 -0
- data/ext/pg_query/include/storage/lmgr.h +114 -0
- data/ext/pg_query/include/storage/lock.h +612 -0
- data/ext/pg_query/include/storage/lockdefs.h +59 -0
- data/ext/pg_query/include/storage/lwlock.h +232 -0
- data/ext/pg_query/include/storage/lwlocknames.h +51 -0
- data/ext/pg_query/include/storage/off.h +57 -0
- data/ext/pg_query/include/storage/pg_sema.h +61 -0
- data/ext/pg_query/include/storage/pg_shmem.h +90 -0
- data/ext/pg_query/include/storage/pmsignal.h +94 -0
- data/ext/pg_query/include/storage/predicate.h +87 -0
- data/ext/pg_query/include/storage/proc.h +333 -0
- data/ext/pg_query/include/storage/proclist_types.h +51 -0
- data/ext/pg_query/include/storage/procsignal.h +75 -0
- data/ext/pg_query/include/storage/relfilenode.h +99 -0
- data/ext/pg_query/include/storage/s_lock.h +1047 -0
- data/ext/pg_query/include/storage/sharedfileset.h +45 -0
- data/ext/pg_query/include/storage/shm_mq.h +85 -0
- data/ext/pg_query/include/storage/shm_toc.h +58 -0
- data/ext/pg_query/include/storage/shmem.h +81 -0
- data/ext/pg_query/include/storage/sinval.h +153 -0
- data/ext/pg_query/include/storage/sinvaladt.h +43 -0
- data/ext/pg_query/include/storage/smgr.h +109 -0
- data/ext/pg_query/include/storage/spin.h +77 -0
- data/ext/pg_query/include/storage/standby.h +91 -0
- data/ext/pg_query/include/storage/standbydefs.h +74 -0
- data/ext/pg_query/include/storage/sync.h +62 -0
- data/ext/pg_query/include/tcop/cmdtag.h +58 -0
- data/ext/pg_query/include/tcop/cmdtaglist.h +217 -0
- data/ext/pg_query/include/tcop/deparse_utility.h +108 -0
- data/ext/pg_query/include/tcop/dest.h +149 -0
- data/ext/pg_query/include/tcop/fastpath.h +21 -0
- data/ext/pg_query/include/tcop/pquery.h +45 -0
- data/ext/pg_query/include/tcop/tcopprot.h +89 -0
- data/ext/pg_query/include/tcop/utility.h +108 -0
- data/ext/pg_query/include/tsearch/ts_cache.h +98 -0
- data/ext/pg_query/include/utils/acl.h +312 -0
- data/ext/pg_query/include/utils/aclchk_internal.h +45 -0
- data/ext/pg_query/include/utils/array.h +458 -0
- data/ext/pg_query/include/utils/builtins.h +127 -0
- data/ext/pg_query/include/utils/bytea.h +27 -0
- data/ext/pg_query/include/utils/catcache.h +231 -0
- data/ext/pg_query/include/utils/date.h +90 -0
- data/ext/pg_query/include/utils/datetime.h +343 -0
- data/ext/pg_query/include/utils/datum.h +68 -0
- data/ext/pg_query/include/utils/dsa.h +123 -0
- data/ext/pg_query/include/utils/dynahash.h +19 -0
- data/ext/pg_query/include/utils/elog.h +439 -0
- data/ext/pg_query/include/utils/errcodes.h +352 -0
- data/ext/pg_query/include/utils/expandeddatum.h +159 -0
- data/ext/pg_query/include/utils/expandedrecord.h +231 -0
- data/ext/pg_query/include/utils/float.h +356 -0
- data/ext/pg_query/include/utils/fmgroids.h +2657 -0
- data/ext/pg_query/include/utils/fmgrprotos.h +2646 -0
- data/ext/pg_query/include/utils/fmgrtab.h +48 -0
- data/ext/pg_query/include/utils/guc.h +443 -0
- data/ext/pg_query/include/utils/guc_tables.h +272 -0
- data/ext/pg_query/include/utils/hsearch.h +149 -0
- data/ext/pg_query/include/utils/inval.h +64 -0
- data/ext/pg_query/include/utils/lsyscache.h +197 -0
- data/ext/pg_query/include/utils/memdebug.h +82 -0
- data/ext/pg_query/include/utils/memutils.h +225 -0
- data/ext/pg_query/include/utils/numeric.h +76 -0
- data/ext/pg_query/include/utils/palloc.h +136 -0
- data/ext/pg_query/include/utils/partcache.h +102 -0
- data/ext/pg_query/include/utils/pg_locale.h +119 -0
- data/ext/pg_query/include/utils/pg_lsn.h +29 -0
- data/ext/pg_query/include/utils/pidfile.h +56 -0
- data/ext/pg_query/include/utils/plancache.h +235 -0
- data/ext/pg_query/include/utils/portal.h +241 -0
- data/ext/pg_query/include/utils/probes.h +114 -0
- data/ext/pg_query/include/utils/ps_status.h +25 -0
- data/ext/pg_query/include/utils/queryenvironment.h +74 -0
- data/ext/pg_query/include/utils/regproc.h +28 -0
- data/ext/pg_query/include/utils/rel.h +644 -0
- data/ext/pg_query/include/utils/relcache.h +151 -0
- data/ext/pg_query/include/utils/reltrigger.h +81 -0
- data/ext/pg_query/include/utils/resowner.h +86 -0
- data/ext/pg_query/include/utils/rls.h +50 -0
- data/ext/pg_query/include/utils/ruleutils.h +44 -0
- data/ext/pg_query/include/utils/sharedtuplestore.h +61 -0
- data/ext/pg_query/include/utils/snapmgr.h +158 -0
- data/ext/pg_query/include/utils/snapshot.h +206 -0
- data/ext/pg_query/include/utils/sortsupport.h +276 -0
- data/ext/pg_query/include/utils/syscache.h +219 -0
- data/ext/pg_query/include/utils/timeout.h +88 -0
- data/ext/pg_query/include/utils/timestamp.h +116 -0
- data/ext/pg_query/include/utils/tuplesort.h +277 -0
- data/ext/pg_query/include/utils/tuplestore.h +91 -0
- data/ext/pg_query/include/utils/typcache.h +202 -0
- data/ext/pg_query/include/utils/tzparser.h +39 -0
- data/ext/pg_query/include/utils/varlena.h +39 -0
- data/ext/pg_query/include/utils/xml.h +84 -0
- data/ext/pg_query/include/xxhash.h +5445 -0
- data/ext/pg_query/include/xxhash/xxhash.h +5445 -0
- data/ext/pg_query/pg_query.c +104 -0
- data/ext/pg_query/pg_query.pb-c.c +37628 -0
- data/ext/pg_query/pg_query_deparse.c +9959 -0
- data/ext/pg_query/pg_query_fingerprint.c +295 -0
- data/ext/pg_query/pg_query_fingerprint.h +8 -0
- data/ext/pg_query/pg_query_internal.h +24 -0
- data/ext/pg_query/pg_query_json_plpgsql.c +738 -0
- data/ext/pg_query/pg_query_json_plpgsql.h +9 -0
- data/ext/pg_query/pg_query_normalize.c +439 -0
- data/ext/pg_query/pg_query_outfuncs.h +10 -0
- data/ext/pg_query/pg_query_outfuncs_json.c +297 -0
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +237 -0
- data/ext/pg_query/pg_query_parse.c +148 -0
- data/ext/pg_query/pg_query_parse_plpgsql.c +460 -0
- data/ext/pg_query/pg_query_readfuncs.h +11 -0
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +142 -0
- data/ext/pg_query/pg_query_ruby.c +108 -12
- data/ext/pg_query/pg_query_scan.c +173 -0
- data/ext/pg_query/pg_query_split.c +221 -0
- data/ext/pg_query/protobuf-c.c +3660 -0
- data/ext/pg_query/src_backend_catalog_namespace.c +1051 -0
- data/ext/pg_query/src_backend_catalog_pg_proc.c +142 -0
- data/ext/pg_query/src_backend_commands_define.c +117 -0
- data/ext/pg_query/src_backend_libpq_pqcomm.c +651 -0
- data/ext/pg_query/src_backend_nodes_bitmapset.c +513 -0
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +6013 -0
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +4003 -0
- data/ext/pg_query/src_backend_nodes_extensible.c +99 -0
- data/ext/pg_query/src_backend_nodes_list.c +922 -0
- data/ext/pg_query/src_backend_nodes_makefuncs.c +417 -0
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +1363 -0
- data/ext/pg_query/src_backend_nodes_value.c +84 -0
- data/ext/pg_query/src_backend_parser_gram.c +47456 -0
- data/ext/pg_query/src_backend_parser_parse_expr.c +313 -0
- data/ext/pg_query/src_backend_parser_parser.c +497 -0
- data/ext/pg_query/src_backend_parser_scan.c +7091 -0
- data/ext/pg_query/src_backend_parser_scansup.c +160 -0
- data/ext/pg_query/src_backend_postmaster_postmaster.c +2230 -0
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +192 -0
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +370 -0
- data/ext/pg_query/src_backend_tcop_postgres.c +776 -0
- data/ext/pg_query/src_backend_utils_adt_datum.c +326 -0
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +98 -0
- data/ext/pg_query/src_backend_utils_adt_format_type.c +136 -0
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +1683 -0
- data/ext/pg_query/src_backend_utils_error_assert.c +74 -0
- data/ext/pg_query/src_backend_utils_error_elog.c +1748 -0
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +570 -0
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +1086 -0
- data/ext/pg_query/src_backend_utils_init_globals.c +168 -0
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +839 -0
- data/ext/pg_query/src_backend_utils_misc_guc.c +1831 -0
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +1560 -0
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +1006 -0
- data/ext/pg_query/src_common_encnames.c +158 -0
- data/ext/pg_query/src_common_keywords.c +39 -0
- data/ext/pg_query/src_common_kwlist_d.h +1081 -0
- data/ext/pg_query/src_common_kwlookup.c +91 -0
- data/ext/pg_query/src_common_psprintf.c +158 -0
- data/ext/pg_query/src_common_string.c +86 -0
- data/ext/pg_query/src_common_stringinfo.c +336 -0
- data/ext/pg_query/src_common_wchar.c +1651 -0
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1133 -0
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +877 -0
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +6533 -0
- data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +107 -0
- data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +123 -0
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +671 -0
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +255 -0
- data/ext/pg_query/src_port_erand48.c +127 -0
- data/ext/pg_query/src_port_pg_bitutils.c +246 -0
- data/ext/pg_query/src_port_pgsleep.c +69 -0
- data/ext/pg_query/src_port_pgstrcasecmp.c +83 -0
- data/ext/pg_query/src_port_qsort.c +240 -0
- data/ext/pg_query/src_port_random.c +31 -0
- data/ext/pg_query/src_port_snprintf.c +1449 -0
- data/ext/pg_query/src_port_strerror.c +324 -0
- data/ext/pg_query/src_port_strnlen.c +39 -0
- data/ext/pg_query/xxhash.c +43 -0
- data/lib/pg_query.rb +7 -4
- data/lib/pg_query/constants.rb +21 -0
- data/lib/pg_query/deparse.rb +15 -1581
- data/lib/pg_query/filter_columns.rb +88 -85
- data/lib/pg_query/fingerprint.rb +122 -87
- data/lib/pg_query/json_field_names.rb +1402 -0
- data/lib/pg_query/node.rb +31 -0
- data/lib/pg_query/param_refs.rb +42 -37
- data/lib/pg_query/parse.rb +220 -203
- data/lib/pg_query/parse_error.rb +1 -1
- data/lib/pg_query/pg_query_pb.rb +3211 -0
- data/lib/pg_query/scan.rb +23 -0
- data/lib/pg_query/treewalker.rb +24 -40
- data/lib/pg_query/truncate.rb +71 -42
- data/lib/pg_query/version.rb +2 -2
- metadata +472 -11
- data/ext/pg_query/pg_query_ruby.h +0 -10
- data/lib/pg_query/deep_dup.rb +0 -16
- data/lib/pg_query/deparse/alter_table.rb +0 -42
- data/lib/pg_query/deparse/interval.rb +0 -105
- data/lib/pg_query/deparse/keywords.rb +0 -159
- data/lib/pg_query/deparse/rename.rb +0 -41
- data/lib/pg_query/legacy_parsetree.rb +0 -109
- data/lib/pg_query/node_types.rb +0 -296
@@ -0,0 +1,197 @@
|
|
1
|
+
/*-------------------------------------------------------------------------
|
2
|
+
*
|
3
|
+
* lsyscache.h
|
4
|
+
* Convenience routines for common queries in the system catalog cache.
|
5
|
+
*
|
6
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
7
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
8
|
+
*
|
9
|
+
* src/include/utils/lsyscache.h
|
10
|
+
*
|
11
|
+
*-------------------------------------------------------------------------
|
12
|
+
*/
|
13
|
+
#ifndef LSYSCACHE_H
|
14
|
+
#define LSYSCACHE_H
|
15
|
+
|
16
|
+
#include "access/attnum.h"
|
17
|
+
#include "access/htup.h"
|
18
|
+
#include "nodes/pg_list.h"
|
19
|
+
|
20
|
+
/* Result list element for get_op_btree_interpretation */
|
21
|
+
typedef struct OpBtreeInterpretation
|
22
|
+
{
|
23
|
+
Oid opfamily_id; /* btree opfamily containing operator */
|
24
|
+
int strategy; /* its strategy number */
|
25
|
+
Oid oplefttype; /* declared left input datatype */
|
26
|
+
Oid oprighttype; /* declared right input datatype */
|
27
|
+
} OpBtreeInterpretation;
|
28
|
+
|
29
|
+
/* I/O function selector for get_type_io_data */
|
30
|
+
typedef enum IOFuncSelector
|
31
|
+
{
|
32
|
+
IOFunc_input,
|
33
|
+
IOFunc_output,
|
34
|
+
IOFunc_receive,
|
35
|
+
IOFunc_send
|
36
|
+
} IOFuncSelector;
|
37
|
+
|
38
|
+
/* Flag bits for get_attstatsslot */
|
39
|
+
#define ATTSTATSSLOT_VALUES 0x01
|
40
|
+
#define ATTSTATSSLOT_NUMBERS 0x02
|
41
|
+
|
42
|
+
/* Result struct for get_attstatsslot */
|
43
|
+
typedef struct AttStatsSlot
|
44
|
+
{
|
45
|
+
/* Always filled: */
|
46
|
+
Oid staop; /* Actual staop for the found slot */
|
47
|
+
Oid stacoll; /* Actual collation for the found slot */
|
48
|
+
/* Filled if ATTSTATSSLOT_VALUES is specified: */
|
49
|
+
Oid valuetype; /* Actual datatype of the values */
|
50
|
+
Datum *values; /* slot's "values" array, or NULL if none */
|
51
|
+
int nvalues; /* length of values[], or 0 */
|
52
|
+
/* Filled if ATTSTATSSLOT_NUMBERS is specified: */
|
53
|
+
float4 *numbers; /* slot's "numbers" array, or NULL if none */
|
54
|
+
int nnumbers; /* length of numbers[], or 0 */
|
55
|
+
|
56
|
+
/* Remaining fields are private to get_attstatsslot/free_attstatsslot */
|
57
|
+
void *values_arr; /* palloc'd values array, if any */
|
58
|
+
void *numbers_arr; /* palloc'd numbers array, if any */
|
59
|
+
} AttStatsSlot;
|
60
|
+
|
61
|
+
/* Hook for plugins to get control in get_attavgwidth() */
|
62
|
+
typedef int32 (*get_attavgwidth_hook_type) (Oid relid, AttrNumber attnum);
|
63
|
+
extern PGDLLIMPORT get_attavgwidth_hook_type get_attavgwidth_hook;
|
64
|
+
|
65
|
+
extern bool op_in_opfamily(Oid opno, Oid opfamily);
|
66
|
+
extern int get_op_opfamily_strategy(Oid opno, Oid opfamily);
|
67
|
+
extern Oid get_op_opfamily_sortfamily(Oid opno, Oid opfamily);
|
68
|
+
extern void get_op_opfamily_properties(Oid opno, Oid opfamily, bool ordering_op,
|
69
|
+
int *strategy,
|
70
|
+
Oid *lefttype,
|
71
|
+
Oid *righttype);
|
72
|
+
extern Oid get_opfamily_member(Oid opfamily, Oid lefttype, Oid righttype,
|
73
|
+
int16 strategy);
|
74
|
+
extern bool get_ordering_op_properties(Oid opno,
|
75
|
+
Oid *opfamily, Oid *opcintype, int16 *strategy);
|
76
|
+
extern Oid get_equality_op_for_ordering_op(Oid opno, bool *reverse);
|
77
|
+
extern Oid get_ordering_op_for_equality_op(Oid opno, bool use_lhs_type);
|
78
|
+
extern List *get_mergejoin_opfamilies(Oid opno);
|
79
|
+
extern bool get_compatible_hash_operators(Oid opno,
|
80
|
+
Oid *lhs_opno, Oid *rhs_opno);
|
81
|
+
extern bool get_op_hash_functions(Oid opno,
|
82
|
+
RegProcedure *lhs_procno, RegProcedure *rhs_procno);
|
83
|
+
extern List *get_op_btree_interpretation(Oid opno);
|
84
|
+
extern bool equality_ops_are_compatible(Oid opno1, Oid opno2);
|
85
|
+
extern bool comparison_ops_are_compatible(Oid opno1, Oid opno2);
|
86
|
+
extern Oid get_opfamily_proc(Oid opfamily, Oid lefttype, Oid righttype,
|
87
|
+
int16 procnum);
|
88
|
+
extern char *get_attname(Oid relid, AttrNumber attnum, bool missing_ok);
|
89
|
+
extern AttrNumber get_attnum(Oid relid, const char *attname);
|
90
|
+
extern char get_attgenerated(Oid relid, AttrNumber attnum);
|
91
|
+
extern Oid get_atttype(Oid relid, AttrNumber attnum);
|
92
|
+
extern void get_atttypetypmodcoll(Oid relid, AttrNumber attnum,
|
93
|
+
Oid *typid, int32 *typmod, Oid *collid);
|
94
|
+
extern Datum get_attoptions(Oid relid, int16 attnum);
|
95
|
+
extern Oid get_cast_oid(Oid sourcetypeid, Oid targettypeid, bool missing_ok);
|
96
|
+
extern char *get_collation_name(Oid colloid);
|
97
|
+
extern bool get_collation_isdeterministic(Oid colloid);
|
98
|
+
extern char *get_constraint_name(Oid conoid);
|
99
|
+
extern char *get_language_name(Oid langoid, bool missing_ok);
|
100
|
+
extern Oid get_opclass_family(Oid opclass);
|
101
|
+
extern Oid get_opclass_input_type(Oid opclass);
|
102
|
+
extern bool get_opclass_opfamily_and_input_type(Oid opclass,
|
103
|
+
Oid *opfamily, Oid *opcintype);
|
104
|
+
extern RegProcedure get_opcode(Oid opno);
|
105
|
+
extern char *get_opname(Oid opno);
|
106
|
+
extern Oid get_op_rettype(Oid opno);
|
107
|
+
extern void op_input_types(Oid opno, Oid *lefttype, Oid *righttype);
|
108
|
+
extern bool op_mergejoinable(Oid opno, Oid inputtype);
|
109
|
+
extern bool op_hashjoinable(Oid opno, Oid inputtype);
|
110
|
+
extern bool op_strict(Oid opno);
|
111
|
+
extern char op_volatile(Oid opno);
|
112
|
+
extern Oid get_commutator(Oid opno);
|
113
|
+
extern Oid get_negator(Oid opno);
|
114
|
+
extern RegProcedure get_oprrest(Oid opno);
|
115
|
+
extern RegProcedure get_oprjoin(Oid opno);
|
116
|
+
extern char *get_func_name(Oid funcid);
|
117
|
+
extern Oid get_func_namespace(Oid funcid);
|
118
|
+
extern Oid get_func_rettype(Oid funcid);
|
119
|
+
extern int get_func_nargs(Oid funcid);
|
120
|
+
extern Oid get_func_signature(Oid funcid, Oid **argtypes, int *nargs);
|
121
|
+
extern Oid get_func_variadictype(Oid funcid);
|
122
|
+
extern bool get_func_retset(Oid funcid);
|
123
|
+
extern bool func_strict(Oid funcid);
|
124
|
+
extern char func_volatile(Oid funcid);
|
125
|
+
extern char func_parallel(Oid funcid);
|
126
|
+
extern char get_func_prokind(Oid funcid);
|
127
|
+
extern bool get_func_leakproof(Oid funcid);
|
128
|
+
extern RegProcedure get_func_support(Oid funcid);
|
129
|
+
extern Oid get_relname_relid(const char *relname, Oid relnamespace);
|
130
|
+
extern char *get_rel_name(Oid relid);
|
131
|
+
extern Oid get_rel_namespace(Oid relid);
|
132
|
+
extern Oid get_rel_type_id(Oid relid);
|
133
|
+
extern char get_rel_relkind(Oid relid);
|
134
|
+
extern bool get_rel_relispartition(Oid relid);
|
135
|
+
extern Oid get_rel_tablespace(Oid relid);
|
136
|
+
extern char get_rel_persistence(Oid relid);
|
137
|
+
extern Oid get_transform_fromsql(Oid typid, Oid langid, List *trftypes);
|
138
|
+
extern Oid get_transform_tosql(Oid typid, Oid langid, List *trftypes);
|
139
|
+
extern bool get_typisdefined(Oid typid);
|
140
|
+
extern int16 get_typlen(Oid typid);
|
141
|
+
extern bool get_typbyval(Oid typid);
|
142
|
+
extern void get_typlenbyval(Oid typid, int16 *typlen, bool *typbyval);
|
143
|
+
extern void get_typlenbyvalalign(Oid typid, int16 *typlen, bool *typbyval,
|
144
|
+
char *typalign);
|
145
|
+
extern Oid getTypeIOParam(HeapTuple typeTuple);
|
146
|
+
extern void get_type_io_data(Oid typid,
|
147
|
+
IOFuncSelector which_func,
|
148
|
+
int16 *typlen,
|
149
|
+
bool *typbyval,
|
150
|
+
char *typalign,
|
151
|
+
char *typdelim,
|
152
|
+
Oid *typioparam,
|
153
|
+
Oid *func);
|
154
|
+
extern char get_typstorage(Oid typid);
|
155
|
+
extern Node *get_typdefault(Oid typid);
|
156
|
+
extern char get_typtype(Oid typid);
|
157
|
+
extern bool type_is_rowtype(Oid typid);
|
158
|
+
extern bool type_is_enum(Oid typid);
|
159
|
+
extern bool type_is_range(Oid typid);
|
160
|
+
extern void get_type_category_preferred(Oid typid,
|
161
|
+
char *typcategory,
|
162
|
+
bool *typispreferred);
|
163
|
+
extern Oid get_typ_typrelid(Oid typid);
|
164
|
+
extern Oid get_element_type(Oid typid);
|
165
|
+
extern Oid get_array_type(Oid typid);
|
166
|
+
extern Oid get_promoted_array_type(Oid typid);
|
167
|
+
extern Oid get_base_element_type(Oid typid);
|
168
|
+
extern void getTypeInputInfo(Oid type, Oid *typInput, Oid *typIOParam);
|
169
|
+
extern void getTypeOutputInfo(Oid type, Oid *typOutput, bool *typIsVarlena);
|
170
|
+
extern void getTypeBinaryInputInfo(Oid type, Oid *typReceive, Oid *typIOParam);
|
171
|
+
extern void getTypeBinaryOutputInfo(Oid type, Oid *typSend, bool *typIsVarlena);
|
172
|
+
extern Oid get_typmodin(Oid typid);
|
173
|
+
extern Oid get_typcollation(Oid typid);
|
174
|
+
extern bool type_is_collatable(Oid typid);
|
175
|
+
extern Oid getBaseType(Oid typid);
|
176
|
+
extern Oid getBaseTypeAndTypmod(Oid typid, int32 *typmod);
|
177
|
+
extern int32 get_typavgwidth(Oid typid, int32 typmod);
|
178
|
+
extern int32 get_attavgwidth(Oid relid, AttrNumber attnum);
|
179
|
+
extern bool get_attstatsslot(AttStatsSlot *sslot, HeapTuple statstuple,
|
180
|
+
int reqkind, Oid reqop, int flags);
|
181
|
+
extern void free_attstatsslot(AttStatsSlot *sslot);
|
182
|
+
extern char *get_namespace_name(Oid nspid);
|
183
|
+
extern char *get_namespace_name_or_temp(Oid nspid);
|
184
|
+
extern Oid get_range_subtype(Oid rangeOid);
|
185
|
+
extern Oid get_range_collation(Oid rangeOid);
|
186
|
+
extern Oid get_index_column_opclass(Oid index_oid, int attno);
|
187
|
+
extern bool get_index_isreplident(Oid index_oid);
|
188
|
+
extern bool get_index_isvalid(Oid index_oid);
|
189
|
+
extern bool get_index_isclustered(Oid index_oid);
|
190
|
+
|
191
|
+
#define type_is_array(typid) (get_element_type(typid) != InvalidOid)
|
192
|
+
/* type_is_array_domain accepts both plain arrays and domains over arrays */
|
193
|
+
#define type_is_array_domain(typid) (get_base_element_type(typid) != InvalidOid)
|
194
|
+
|
195
|
+
#define TypeIsToastable(typid) (get_typstorage(typid) != TYPSTORAGE_PLAIN)
|
196
|
+
|
197
|
+
#endif /* LSYSCACHE_H */
|
@@ -0,0 +1,82 @@
|
|
1
|
+
/*-------------------------------------------------------------------------
|
2
|
+
*
|
3
|
+
* memdebug.h
|
4
|
+
* Memory debugging support.
|
5
|
+
*
|
6
|
+
* Currently, this file either wraps <valgrind/memcheck.h> or substitutes
|
7
|
+
* empty definitions for Valgrind client request macros we use.
|
8
|
+
*
|
9
|
+
*
|
10
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
11
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
12
|
+
*
|
13
|
+
* src/include/utils/memdebug.h
|
14
|
+
*
|
15
|
+
*-------------------------------------------------------------------------
|
16
|
+
*/
|
17
|
+
#ifndef MEMDEBUG_H
|
18
|
+
#define MEMDEBUG_H
|
19
|
+
|
20
|
+
#ifdef USE_VALGRIND
|
21
|
+
#include <valgrind/memcheck.h>
|
22
|
+
#else
|
23
|
+
#define VALGRIND_CHECK_MEM_IS_DEFINED(addr, size) do {} while (0)
|
24
|
+
#define VALGRIND_CREATE_MEMPOOL(context, redzones, zeroed) do {} while (0)
|
25
|
+
#define VALGRIND_DESTROY_MEMPOOL(context) do {} while (0)
|
26
|
+
#define VALGRIND_MAKE_MEM_DEFINED(addr, size) do {} while (0)
|
27
|
+
#define VALGRIND_MAKE_MEM_NOACCESS(addr, size) do {} while (0)
|
28
|
+
#define VALGRIND_MAKE_MEM_UNDEFINED(addr, size) do {} while (0)
|
29
|
+
#define VALGRIND_MEMPOOL_ALLOC(context, addr, size) do {} while (0)
|
30
|
+
#define VALGRIND_MEMPOOL_FREE(context, addr) do {} while (0)
|
31
|
+
#define VALGRIND_MEMPOOL_CHANGE(context, optr, nptr, size) do {} while (0)
|
32
|
+
#endif
|
33
|
+
|
34
|
+
|
35
|
+
#ifdef CLOBBER_FREED_MEMORY
|
36
|
+
|
37
|
+
/* Wipe freed memory for debugging purposes */
|
38
|
+
static inline void
|
39
|
+
wipe_mem(void *ptr, size_t size)
|
40
|
+
{
|
41
|
+
VALGRIND_MAKE_MEM_UNDEFINED(ptr, size);
|
42
|
+
memset(ptr, 0x7F, size);
|
43
|
+
VALGRIND_MAKE_MEM_NOACCESS(ptr, size);
|
44
|
+
}
|
45
|
+
|
46
|
+
#endif /* CLOBBER_FREED_MEMORY */
|
47
|
+
|
48
|
+
#ifdef MEMORY_CONTEXT_CHECKING
|
49
|
+
|
50
|
+
static inline void
|
51
|
+
set_sentinel(void *base, Size offset)
|
52
|
+
{
|
53
|
+
char *ptr = (char *) base + offset;
|
54
|
+
|
55
|
+
VALGRIND_MAKE_MEM_UNDEFINED(ptr, 1);
|
56
|
+
*ptr = 0x7E;
|
57
|
+
VALGRIND_MAKE_MEM_NOACCESS(ptr, 1);
|
58
|
+
}
|
59
|
+
|
60
|
+
static inline bool
|
61
|
+
sentinel_ok(const void *base, Size offset)
|
62
|
+
{
|
63
|
+
const char *ptr = (const char *) base + offset;
|
64
|
+
bool ret;
|
65
|
+
|
66
|
+
VALGRIND_MAKE_MEM_DEFINED(ptr, 1);
|
67
|
+
ret = *ptr == 0x7E;
|
68
|
+
VALGRIND_MAKE_MEM_NOACCESS(ptr, 1);
|
69
|
+
|
70
|
+
return ret;
|
71
|
+
}
|
72
|
+
|
73
|
+
#endif /* MEMORY_CONTEXT_CHECKING */
|
74
|
+
|
75
|
+
#ifdef RANDOMIZE_ALLOCATED_MEMORY
|
76
|
+
|
77
|
+
void randomize_mem(char *ptr, size_t size);
|
78
|
+
|
79
|
+
#endif /* RANDOMIZE_ALLOCATED_MEMORY */
|
80
|
+
|
81
|
+
|
82
|
+
#endif /* MEMDEBUG_H */
|
@@ -0,0 +1,225 @@
|
|
1
|
+
/*-------------------------------------------------------------------------
|
2
|
+
*
|
3
|
+
* memutils.h
|
4
|
+
* This file contains declarations for memory allocation utility
|
5
|
+
* functions. These are functions that are not quite widely used
|
6
|
+
* enough to justify going in utils/palloc.h, but are still part
|
7
|
+
* of the API of the memory management subsystem.
|
8
|
+
*
|
9
|
+
*
|
10
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
11
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
12
|
+
*
|
13
|
+
* src/include/utils/memutils.h
|
14
|
+
*
|
15
|
+
*-------------------------------------------------------------------------
|
16
|
+
*/
|
17
|
+
#ifndef MEMUTILS_H
|
18
|
+
#define MEMUTILS_H
|
19
|
+
|
20
|
+
#include "nodes/memnodes.h"
|
21
|
+
|
22
|
+
|
23
|
+
/*
|
24
|
+
* MaxAllocSize, MaxAllocHugeSize
|
25
|
+
* Quasi-arbitrary limits on size of allocations.
|
26
|
+
*
|
27
|
+
* Note:
|
28
|
+
* There is no guarantee that smaller allocations will succeed, but
|
29
|
+
* larger requests will be summarily denied.
|
30
|
+
*
|
31
|
+
* palloc() enforces MaxAllocSize, chosen to correspond to the limiting size
|
32
|
+
* of varlena objects under TOAST. See VARSIZE_4B() and related macros in
|
33
|
+
* postgres.h. Many datatypes assume that any allocatable size can be
|
34
|
+
* represented in a varlena header. This limit also permits a caller to use
|
35
|
+
* an "int" variable for an index into or length of an allocation. Callers
|
36
|
+
* careful to avoid these hazards can access the higher limit with
|
37
|
+
* MemoryContextAllocHuge(). Both limits permit code to assume that it may
|
38
|
+
* compute twice an allocation's size without overflow.
|
39
|
+
*/
|
40
|
+
#define MaxAllocSize ((Size) 0x3fffffff) /* 1 gigabyte - 1 */
|
41
|
+
|
42
|
+
#define AllocSizeIsValid(size) ((Size) (size) <= MaxAllocSize)
|
43
|
+
|
44
|
+
#define MaxAllocHugeSize (SIZE_MAX / 2)
|
45
|
+
|
46
|
+
#define AllocHugeSizeIsValid(size) ((Size) (size) <= MaxAllocHugeSize)
|
47
|
+
|
48
|
+
|
49
|
+
/*
|
50
|
+
* Standard top-level memory contexts.
|
51
|
+
*
|
52
|
+
* Only TopMemoryContext and ErrorContext are initialized by
|
53
|
+
* MemoryContextInit() itself.
|
54
|
+
*/
|
55
|
+
extern PGDLLIMPORT __thread MemoryContext TopMemoryContext;
|
56
|
+
extern PGDLLIMPORT __thread MemoryContext ErrorContext;
|
57
|
+
extern PGDLLIMPORT MemoryContext PostmasterContext;
|
58
|
+
extern PGDLLIMPORT MemoryContext CacheMemoryContext;
|
59
|
+
extern PGDLLIMPORT MemoryContext MessageContext;
|
60
|
+
extern PGDLLIMPORT MemoryContext TopTransactionContext;
|
61
|
+
extern PGDLLIMPORT MemoryContext CurTransactionContext;
|
62
|
+
|
63
|
+
/* This is a transient link to the active portal's memory context: */
|
64
|
+
extern PGDLLIMPORT MemoryContext PortalContext;
|
65
|
+
|
66
|
+
/* Backwards compatibility macro */
|
67
|
+
#define MemoryContextResetAndDeleteChildren(ctx) MemoryContextReset(ctx)
|
68
|
+
|
69
|
+
|
70
|
+
/*
|
71
|
+
* Memory-context-type-independent functions in mcxt.c
|
72
|
+
*/
|
73
|
+
extern void MemoryContextInit(void);
|
74
|
+
extern void MemoryContextReset(MemoryContext context);
|
75
|
+
extern void MemoryContextDelete(MemoryContext context);
|
76
|
+
extern void MemoryContextResetOnly(MemoryContext context);
|
77
|
+
extern void MemoryContextResetChildren(MemoryContext context);
|
78
|
+
extern void MemoryContextDeleteChildren(MemoryContext context);
|
79
|
+
extern void MemoryContextSetIdentifier(MemoryContext context, const char *id);
|
80
|
+
extern void MemoryContextSetParent(MemoryContext context,
|
81
|
+
MemoryContext new_parent);
|
82
|
+
extern Size GetMemoryChunkSpace(void *pointer);
|
83
|
+
extern MemoryContext MemoryContextGetParent(MemoryContext context);
|
84
|
+
extern bool MemoryContextIsEmpty(MemoryContext context);
|
85
|
+
extern Size MemoryContextMemAllocated(MemoryContext context, bool recurse);
|
86
|
+
extern void MemoryContextStats(MemoryContext context);
|
87
|
+
extern void MemoryContextStatsDetail(MemoryContext context, int max_children);
|
88
|
+
extern void MemoryContextAllowInCriticalSection(MemoryContext context,
|
89
|
+
bool allow);
|
90
|
+
|
91
|
+
#ifdef MEMORY_CONTEXT_CHECKING
|
92
|
+
extern void MemoryContextCheck(MemoryContext context);
|
93
|
+
#endif
|
94
|
+
extern bool MemoryContextContains(MemoryContext context, void *pointer);
|
95
|
+
|
96
|
+
/* Handy macro for copying and assigning context ID ... but note double eval */
|
97
|
+
#define MemoryContextCopyAndSetIdentifier(cxt, id) \
|
98
|
+
MemoryContextSetIdentifier(cxt, MemoryContextStrdup(cxt, id))
|
99
|
+
|
100
|
+
/*
|
101
|
+
* GetMemoryChunkContext
|
102
|
+
* Given a currently-allocated chunk, determine the context
|
103
|
+
* it belongs to.
|
104
|
+
*
|
105
|
+
* All chunks allocated by any memory context manager are required to be
|
106
|
+
* preceded by the corresponding MemoryContext stored, without padding, in the
|
107
|
+
* preceding sizeof(void*) bytes. A currently-allocated chunk must contain a
|
108
|
+
* backpointer to its owning context. The backpointer is used by pfree() and
|
109
|
+
* repalloc() to find the context to call.
|
110
|
+
*/
|
111
|
+
#ifndef FRONTEND
|
112
|
+
static inline MemoryContext
|
113
|
+
GetMemoryChunkContext(void *pointer)
|
114
|
+
{
|
115
|
+
MemoryContext context;
|
116
|
+
|
117
|
+
/*
|
118
|
+
* Try to detect bogus pointers handed to us, poorly though we can.
|
119
|
+
* Presumably, a pointer that isn't MAXALIGNED isn't pointing at an
|
120
|
+
* allocated chunk.
|
121
|
+
*/
|
122
|
+
Assert(pointer != NULL);
|
123
|
+
Assert(pointer == (void *) MAXALIGN(pointer));
|
124
|
+
|
125
|
+
/*
|
126
|
+
* OK, it's probably safe to look at the context.
|
127
|
+
*/
|
128
|
+
context = *(MemoryContext *) (((char *) pointer) - sizeof(void *));
|
129
|
+
|
130
|
+
AssertArg(MemoryContextIsValid(context));
|
131
|
+
|
132
|
+
return context;
|
133
|
+
}
|
134
|
+
#endif
|
135
|
+
|
136
|
+
/*
|
137
|
+
* This routine handles the context-type-independent part of memory
|
138
|
+
* context creation. It's intended to be called from context-type-
|
139
|
+
* specific creation routines, and noplace else.
|
140
|
+
*/
|
141
|
+
extern void MemoryContextCreate(MemoryContext node,
|
142
|
+
NodeTag tag,
|
143
|
+
const MemoryContextMethods *methods,
|
144
|
+
MemoryContext parent,
|
145
|
+
const char *name);
|
146
|
+
|
147
|
+
|
148
|
+
/*
|
149
|
+
* Memory-context-type-specific functions
|
150
|
+
*/
|
151
|
+
|
152
|
+
/* aset.c */
|
153
|
+
extern MemoryContext AllocSetContextCreateInternal(MemoryContext parent,
|
154
|
+
const char *name,
|
155
|
+
Size minContextSize,
|
156
|
+
Size initBlockSize,
|
157
|
+
Size maxBlockSize);
|
158
|
+
extern void AllocSetDeleteFreeList(MemoryContext context);
|
159
|
+
|
160
|
+
/*
|
161
|
+
* This wrapper macro exists to check for non-constant strings used as context
|
162
|
+
* names; that's no longer supported. (Use MemoryContextSetIdentifier if you
|
163
|
+
* want to provide a variable identifier.)
|
164
|
+
*/
|
165
|
+
#ifdef HAVE__BUILTIN_CONSTANT_P
|
166
|
+
#define AllocSetContextCreate(parent, name, ...) \
|
167
|
+
(StaticAssertExpr(__builtin_constant_p(name), \
|
168
|
+
"memory context names must be constant strings"), \
|
169
|
+
AllocSetContextCreateInternal(parent, name, __VA_ARGS__))
|
170
|
+
#else
|
171
|
+
#define AllocSetContextCreate \
|
172
|
+
AllocSetContextCreateInternal
|
173
|
+
#endif
|
174
|
+
|
175
|
+
/* slab.c */
|
176
|
+
extern MemoryContext SlabContextCreate(MemoryContext parent,
|
177
|
+
const char *name,
|
178
|
+
Size blockSize,
|
179
|
+
Size chunkSize);
|
180
|
+
|
181
|
+
/* generation.c */
|
182
|
+
extern MemoryContext GenerationContextCreate(MemoryContext parent,
|
183
|
+
const char *name,
|
184
|
+
Size blockSize);
|
185
|
+
|
186
|
+
/*
|
187
|
+
* Recommended default alloc parameters, suitable for "ordinary" contexts
|
188
|
+
* that might hold quite a lot of data.
|
189
|
+
*/
|
190
|
+
#define ALLOCSET_DEFAULT_MINSIZE 0
|
191
|
+
#define ALLOCSET_DEFAULT_INITSIZE (8 * 1024)
|
192
|
+
#define ALLOCSET_DEFAULT_MAXSIZE (8 * 1024 * 1024)
|
193
|
+
#define ALLOCSET_DEFAULT_SIZES \
|
194
|
+
ALLOCSET_DEFAULT_MINSIZE, ALLOCSET_DEFAULT_INITSIZE, ALLOCSET_DEFAULT_MAXSIZE
|
195
|
+
|
196
|
+
/*
|
197
|
+
* Recommended alloc parameters for "small" contexts that are never expected
|
198
|
+
* to contain much data (for example, a context to contain a query plan).
|
199
|
+
*/
|
200
|
+
#define ALLOCSET_SMALL_MINSIZE 0
|
201
|
+
#define ALLOCSET_SMALL_INITSIZE (1 * 1024)
|
202
|
+
#define ALLOCSET_SMALL_MAXSIZE (8 * 1024)
|
203
|
+
#define ALLOCSET_SMALL_SIZES \
|
204
|
+
ALLOCSET_SMALL_MINSIZE, ALLOCSET_SMALL_INITSIZE, ALLOCSET_SMALL_MAXSIZE
|
205
|
+
|
206
|
+
/*
|
207
|
+
* Recommended alloc parameters for contexts that should start out small,
|
208
|
+
* but might sometimes grow big.
|
209
|
+
*/
|
210
|
+
#define ALLOCSET_START_SMALL_SIZES \
|
211
|
+
ALLOCSET_SMALL_MINSIZE, ALLOCSET_SMALL_INITSIZE, ALLOCSET_DEFAULT_MAXSIZE
|
212
|
+
|
213
|
+
|
214
|
+
/*
|
215
|
+
* Threshold above which a request in an AllocSet context is certain to be
|
216
|
+
* allocated separately (and thereby have constant allocation overhead).
|
217
|
+
* Few callers should be interested in this, but tuplesort/tuplestore need
|
218
|
+
* to know it.
|
219
|
+
*/
|
220
|
+
#define ALLOCSET_SEPARATE_THRESHOLD 8192
|
221
|
+
|
222
|
+
#define SLAB_DEFAULT_BLOCK_SIZE (8 * 1024)
|
223
|
+
#define SLAB_LARGE_BLOCK_SIZE (8 * 1024 * 1024)
|
224
|
+
|
225
|
+
#endif /* MEMUTILS_H */
|