pg_query 1.1.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +163 -52
- data/README.md +80 -69
- data/Rakefile +82 -1
- data/ext/pg_query/extconf.rb +3 -31
- 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 +988 -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 +9953 -0
- data/ext/pg_query/pg_query_fingerprint.c +292 -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 +437 -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 +16 -1117
- data/lib/pg_query/filter_columns.rb +86 -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 -200
- 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 +64 -43
- data/lib/pg_query/version.rb +2 -2
- metadata +473 -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/legacy_parsetree.rb +0 -109
- data/lib/pg_query/node_types.rb +0 -284
@@ -0,0 +1,45 @@
|
|
1
|
+
/*-------------------------------------------------------------------------
|
2
|
+
*
|
3
|
+
* sharedfileset.h
|
4
|
+
* Shared temporary file management.
|
5
|
+
*
|
6
|
+
*
|
7
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
8
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
9
|
+
*
|
10
|
+
* src/include/storage/sharedfileset.h
|
11
|
+
*
|
12
|
+
*-------------------------------------------------------------------------
|
13
|
+
*/
|
14
|
+
|
15
|
+
#ifndef SHAREDFILESET_H
|
16
|
+
#define SHAREDFILESET_H
|
17
|
+
|
18
|
+
#include "storage/dsm.h"
|
19
|
+
#include "storage/fd.h"
|
20
|
+
#include "storage/spin.h"
|
21
|
+
|
22
|
+
/*
|
23
|
+
* A set of temporary files that can be shared by multiple backends.
|
24
|
+
*/
|
25
|
+
typedef struct SharedFileSet
|
26
|
+
{
|
27
|
+
pid_t creator_pid; /* PID of the creating process */
|
28
|
+
uint32 number; /* per-PID identifier */
|
29
|
+
slock_t mutex; /* mutex protecting the reference count */
|
30
|
+
int refcnt; /* number of attached backends */
|
31
|
+
int ntablespaces; /* number of tablespaces to use */
|
32
|
+
Oid tablespaces[8]; /* OIDs of tablespaces to use. Assumes that
|
33
|
+
* it's rare that there more than temp
|
34
|
+
* tablespaces. */
|
35
|
+
} SharedFileSet;
|
36
|
+
|
37
|
+
extern void SharedFileSetInit(SharedFileSet *fileset, dsm_segment *seg);
|
38
|
+
extern void SharedFileSetAttach(SharedFileSet *fileset, dsm_segment *seg);
|
39
|
+
extern File SharedFileSetCreate(SharedFileSet *fileset, const char *name);
|
40
|
+
extern File SharedFileSetOpen(SharedFileSet *fileset, const char *name);
|
41
|
+
extern bool SharedFileSetDelete(SharedFileSet *fileset, const char *name,
|
42
|
+
bool error_on_failure);
|
43
|
+
extern void SharedFileSetDeleteAll(SharedFileSet *fileset);
|
44
|
+
|
45
|
+
#endif
|
@@ -0,0 +1,85 @@
|
|
1
|
+
/*-------------------------------------------------------------------------
|
2
|
+
*
|
3
|
+
* shm_mq.h
|
4
|
+
* single-reader, single-writer shared memory message queue
|
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/storage/shm_mq.h
|
10
|
+
*
|
11
|
+
*-------------------------------------------------------------------------
|
12
|
+
*/
|
13
|
+
#ifndef SHM_MQ_H
|
14
|
+
#define SHM_MQ_H
|
15
|
+
|
16
|
+
#include "postmaster/bgworker.h"
|
17
|
+
#include "storage/dsm.h"
|
18
|
+
#include "storage/proc.h"
|
19
|
+
|
20
|
+
/* The queue itself, in shared memory. */
|
21
|
+
struct shm_mq;
|
22
|
+
typedef struct shm_mq shm_mq;
|
23
|
+
|
24
|
+
/* Backend-private state. */
|
25
|
+
struct shm_mq_handle;
|
26
|
+
typedef struct shm_mq_handle shm_mq_handle;
|
27
|
+
|
28
|
+
/* Descriptors for a single write spanning multiple locations. */
|
29
|
+
typedef struct
|
30
|
+
{
|
31
|
+
const char *data;
|
32
|
+
Size len;
|
33
|
+
} shm_mq_iovec;
|
34
|
+
|
35
|
+
/* Possible results of a send or receive operation. */
|
36
|
+
typedef enum
|
37
|
+
{
|
38
|
+
SHM_MQ_SUCCESS, /* Sent or received a message. */
|
39
|
+
SHM_MQ_WOULD_BLOCK, /* Not completed; retry later. */
|
40
|
+
SHM_MQ_DETACHED /* Other process has detached queue. */
|
41
|
+
} shm_mq_result;
|
42
|
+
|
43
|
+
/*
|
44
|
+
* Primitives to create a queue and set the sender and receiver.
|
45
|
+
*
|
46
|
+
* Both the sender and the receiver must be set before any messages are read
|
47
|
+
* or written, but they need not be set by the same process. Each must be
|
48
|
+
* set exactly once.
|
49
|
+
*/
|
50
|
+
extern shm_mq *shm_mq_create(void *address, Size size);
|
51
|
+
extern void shm_mq_set_receiver(shm_mq *mq, PGPROC *);
|
52
|
+
extern void shm_mq_set_sender(shm_mq *mq, PGPROC *);
|
53
|
+
|
54
|
+
/* Accessor methods for sender and receiver. */
|
55
|
+
extern PGPROC *shm_mq_get_receiver(shm_mq *);
|
56
|
+
extern PGPROC *shm_mq_get_sender(shm_mq *);
|
57
|
+
|
58
|
+
/* Set up backend-local queue state. */
|
59
|
+
extern shm_mq_handle *shm_mq_attach(shm_mq *mq, dsm_segment *seg,
|
60
|
+
BackgroundWorkerHandle *handle);
|
61
|
+
|
62
|
+
/* Associate worker handle with shm_mq. */
|
63
|
+
extern void shm_mq_set_handle(shm_mq_handle *, BackgroundWorkerHandle *);
|
64
|
+
|
65
|
+
/* Break connection, release handle resources. */
|
66
|
+
extern void shm_mq_detach(shm_mq_handle *mqh);
|
67
|
+
|
68
|
+
/* Get the shm_mq from handle. */
|
69
|
+
extern shm_mq *shm_mq_get_queue(shm_mq_handle *mqh);
|
70
|
+
|
71
|
+
/* Send or receive messages. */
|
72
|
+
extern shm_mq_result shm_mq_send(shm_mq_handle *mqh,
|
73
|
+
Size nbytes, const void *data, bool nowait);
|
74
|
+
extern shm_mq_result shm_mq_sendv(shm_mq_handle *mqh,
|
75
|
+
shm_mq_iovec *iov, int iovcnt, bool nowait);
|
76
|
+
extern shm_mq_result shm_mq_receive(shm_mq_handle *mqh,
|
77
|
+
Size *nbytesp, void **datap, bool nowait);
|
78
|
+
|
79
|
+
/* Wait for our counterparty to attach to the queue. */
|
80
|
+
extern shm_mq_result shm_mq_wait_for_attach(shm_mq_handle *mqh);
|
81
|
+
|
82
|
+
/* Smallest possible queue. */
|
83
|
+
extern PGDLLIMPORT const Size shm_mq_minimum_size;
|
84
|
+
|
85
|
+
#endif /* SHM_MQ_H */
|
@@ -0,0 +1,58 @@
|
|
1
|
+
/*-------------------------------------------------------------------------
|
2
|
+
*
|
3
|
+
* shm_toc.h
|
4
|
+
* shared memory segment table of contents
|
5
|
+
*
|
6
|
+
* This is intended to provide a simple way to divide a chunk of shared
|
7
|
+
* memory (probably dynamic shared memory allocated via dsm_create) into
|
8
|
+
* a number of regions and keep track of the addresses of those regions or
|
9
|
+
* key data structures within those regions. This is not intended to
|
10
|
+
* scale to a large number of keys and will perform poorly if used that
|
11
|
+
* way; if you need a large number of pointers, store them within some
|
12
|
+
* other data structure within the segment and only put the pointer to
|
13
|
+
* the data structure itself in the table of contents.
|
14
|
+
*
|
15
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
16
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
17
|
+
*
|
18
|
+
* src/include/storage/shm_toc.h
|
19
|
+
*
|
20
|
+
*-------------------------------------------------------------------------
|
21
|
+
*/
|
22
|
+
#ifndef SHM_TOC_H
|
23
|
+
#define SHM_TOC_H
|
24
|
+
|
25
|
+
#include "storage/shmem.h" /* for add_size() */
|
26
|
+
|
27
|
+
/* shm_toc is an opaque type known only within shm_toc.c */
|
28
|
+
typedef struct shm_toc shm_toc;
|
29
|
+
|
30
|
+
extern shm_toc *shm_toc_create(uint64 magic, void *address, Size nbytes);
|
31
|
+
extern shm_toc *shm_toc_attach(uint64 magic, void *address);
|
32
|
+
extern void *shm_toc_allocate(shm_toc *toc, Size nbytes);
|
33
|
+
extern Size shm_toc_freespace(shm_toc *toc);
|
34
|
+
extern void shm_toc_insert(shm_toc *toc, uint64 key, void *address);
|
35
|
+
extern void *shm_toc_lookup(shm_toc *toc, uint64 key, bool noError);
|
36
|
+
|
37
|
+
/*
|
38
|
+
* Tools for estimating how large a chunk of shared memory will be needed
|
39
|
+
* to store a TOC and its dependent objects. Note: we don't really support
|
40
|
+
* large numbers of keys, but it's convenient to declare number_of_keys
|
41
|
+
* as a Size anyway.
|
42
|
+
*/
|
43
|
+
typedef struct
|
44
|
+
{
|
45
|
+
Size space_for_chunks;
|
46
|
+
Size number_of_keys;
|
47
|
+
} shm_toc_estimator;
|
48
|
+
|
49
|
+
#define shm_toc_initialize_estimator(e) \
|
50
|
+
((e)->space_for_chunks = 0, (e)->number_of_keys = 0)
|
51
|
+
#define shm_toc_estimate_chunk(e, sz) \
|
52
|
+
((e)->space_for_chunks = add_size((e)->space_for_chunks, BUFFERALIGN(sz)))
|
53
|
+
#define shm_toc_estimate_keys(e, cnt) \
|
54
|
+
((e)->number_of_keys = add_size((e)->number_of_keys, cnt))
|
55
|
+
|
56
|
+
extern Size shm_toc_estimate(shm_toc_estimator *e);
|
57
|
+
|
58
|
+
#endif /* SHM_TOC_H */
|
@@ -0,0 +1,81 @@
|
|
1
|
+
/*-------------------------------------------------------------------------
|
2
|
+
*
|
3
|
+
* shmem.h
|
4
|
+
* shared memory management structures
|
5
|
+
*
|
6
|
+
* Historical note:
|
7
|
+
* A long time ago, Postgres' shared memory region was allowed to be mapped
|
8
|
+
* at a different address in each process, and shared memory "pointers" were
|
9
|
+
* passed around as offsets relative to the start of the shared memory region.
|
10
|
+
* That is no longer the case: each process must map the shared memory region
|
11
|
+
* at the same address. This means shared memory pointers can be passed
|
12
|
+
* around directly between different processes.
|
13
|
+
*
|
14
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
15
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
16
|
+
*
|
17
|
+
* src/include/storage/shmem.h
|
18
|
+
*
|
19
|
+
*-------------------------------------------------------------------------
|
20
|
+
*/
|
21
|
+
#ifndef SHMEM_H
|
22
|
+
#define SHMEM_H
|
23
|
+
|
24
|
+
#include "utils/hsearch.h"
|
25
|
+
|
26
|
+
|
27
|
+
/* shmqueue.c */
|
28
|
+
typedef struct SHM_QUEUE
|
29
|
+
{
|
30
|
+
struct SHM_QUEUE *prev;
|
31
|
+
struct SHM_QUEUE *next;
|
32
|
+
} SHM_QUEUE;
|
33
|
+
|
34
|
+
/* shmem.c */
|
35
|
+
extern void InitShmemAccess(void *seghdr);
|
36
|
+
extern void InitShmemAllocation(void);
|
37
|
+
extern void *ShmemAlloc(Size size);
|
38
|
+
extern void *ShmemAllocNoError(Size size);
|
39
|
+
extern void *ShmemAllocUnlocked(Size size);
|
40
|
+
extern bool ShmemAddrIsValid(const void *addr);
|
41
|
+
extern void InitShmemIndex(void);
|
42
|
+
extern HTAB *ShmemInitHash(const char *name, long init_size, long max_size,
|
43
|
+
HASHCTL *infoP, int hash_flags);
|
44
|
+
extern void *ShmemInitStruct(const char *name, Size size, bool *foundPtr);
|
45
|
+
extern Size add_size(Size s1, Size s2);
|
46
|
+
extern Size mul_size(Size s1, Size s2);
|
47
|
+
|
48
|
+
/* ipci.c */
|
49
|
+
extern void RequestAddinShmemSpace(Size size);
|
50
|
+
|
51
|
+
/* size constants for the shmem index table */
|
52
|
+
/* max size of data structure string name */
|
53
|
+
#define SHMEM_INDEX_KEYSIZE (48)
|
54
|
+
/* estimated size of the shmem index table (not a hard limit) */
|
55
|
+
#define SHMEM_INDEX_SIZE (64)
|
56
|
+
|
57
|
+
/* this is a hash bucket in the shmem index table */
|
58
|
+
typedef struct
|
59
|
+
{
|
60
|
+
char key[SHMEM_INDEX_KEYSIZE]; /* string name */
|
61
|
+
void *location; /* location in shared mem */
|
62
|
+
Size size; /* # bytes requested for the structure */
|
63
|
+
Size allocated_size; /* # bytes actually allocated */
|
64
|
+
} ShmemIndexEnt;
|
65
|
+
|
66
|
+
/*
|
67
|
+
* prototypes for functions in shmqueue.c
|
68
|
+
*/
|
69
|
+
extern void SHMQueueInit(SHM_QUEUE *queue);
|
70
|
+
extern void SHMQueueElemInit(SHM_QUEUE *queue);
|
71
|
+
extern void SHMQueueDelete(SHM_QUEUE *queue);
|
72
|
+
extern void SHMQueueInsertBefore(SHM_QUEUE *queue, SHM_QUEUE *elem);
|
73
|
+
extern void SHMQueueInsertAfter(SHM_QUEUE *queue, SHM_QUEUE *elem);
|
74
|
+
extern Pointer SHMQueueNext(const SHM_QUEUE *queue, const SHM_QUEUE *curElem,
|
75
|
+
Size linkOffset);
|
76
|
+
extern Pointer SHMQueuePrev(const SHM_QUEUE *queue, const SHM_QUEUE *curElem,
|
77
|
+
Size linkOffset);
|
78
|
+
extern bool SHMQueueEmpty(const SHM_QUEUE *queue);
|
79
|
+
extern bool SHMQueueIsDetached(const SHM_QUEUE *queue);
|
80
|
+
|
81
|
+
#endif /* SHMEM_H */
|
@@ -0,0 +1,153 @@
|
|
1
|
+
/*-------------------------------------------------------------------------
|
2
|
+
*
|
3
|
+
* sinval.h
|
4
|
+
* POSTGRES shared cache invalidation communication definitions.
|
5
|
+
*
|
6
|
+
*
|
7
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
8
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
9
|
+
*
|
10
|
+
* src/include/storage/sinval.h
|
11
|
+
*
|
12
|
+
*-------------------------------------------------------------------------
|
13
|
+
*/
|
14
|
+
#ifndef SINVAL_H
|
15
|
+
#define SINVAL_H
|
16
|
+
|
17
|
+
#include <signal.h>
|
18
|
+
|
19
|
+
#include "storage/relfilenode.h"
|
20
|
+
|
21
|
+
/*
|
22
|
+
* We support several types of shared-invalidation messages:
|
23
|
+
* * invalidate a specific tuple in a specific catcache
|
24
|
+
* * invalidate all catcache entries from a given system catalog
|
25
|
+
* * invalidate a relcache entry for a specific logical relation
|
26
|
+
* * invalidate all relcache entries
|
27
|
+
* * invalidate an smgr cache entry for a specific physical relation
|
28
|
+
* * invalidate the mapped-relation mapping for a given database
|
29
|
+
* * invalidate any saved snapshot that might be used to scan a given relation
|
30
|
+
* More types could be added if needed. The message type is identified by
|
31
|
+
* the first "int8" field of the message struct. Zero or positive means a
|
32
|
+
* specific-catcache inval message (and also serves as the catcache ID field).
|
33
|
+
* Negative values identify the other message types, as per codes below.
|
34
|
+
*
|
35
|
+
* Catcache inval events are initially driven by detecting tuple inserts,
|
36
|
+
* updates and deletions in system catalogs (see CacheInvalidateHeapTuple).
|
37
|
+
* An update can generate two inval events, one for the old tuple and one for
|
38
|
+
* the new, but this is reduced to one event if the tuple's hash key doesn't
|
39
|
+
* change. Note that the inval events themselves don't actually say whether
|
40
|
+
* the tuple is being inserted or deleted. Also, since we transmit only a
|
41
|
+
* hash key, there is a small risk of unnecessary invalidations due to chance
|
42
|
+
* matches of hash keys.
|
43
|
+
*
|
44
|
+
* Note that some system catalogs have multiple caches on them (with different
|
45
|
+
* indexes). On detecting a tuple invalidation in such a catalog, separate
|
46
|
+
* catcache inval messages must be generated for each of its caches, since
|
47
|
+
* the hash keys will generally be different.
|
48
|
+
*
|
49
|
+
* Catcache, relcache, and snapshot invalidations are transactional, and so
|
50
|
+
* are sent to other backends upon commit. Internally to the generating
|
51
|
+
* backend, they are also processed at CommandCounterIncrement so that later
|
52
|
+
* commands in the same transaction see the new state. The generating backend
|
53
|
+
* also has to process them at abort, to flush out any cache state it's loaded
|
54
|
+
* from no-longer-valid entries.
|
55
|
+
*
|
56
|
+
* smgr and relation mapping invalidations are non-transactional: they are
|
57
|
+
* sent immediately when the underlying file change is made.
|
58
|
+
*/
|
59
|
+
|
60
|
+
typedef struct
|
61
|
+
{
|
62
|
+
int8 id; /* cache ID --- must be first */
|
63
|
+
Oid dbId; /* database ID, or 0 if a shared relation */
|
64
|
+
uint32 hashValue; /* hash value of key for this catcache */
|
65
|
+
} SharedInvalCatcacheMsg;
|
66
|
+
|
67
|
+
#define SHAREDINVALCATALOG_ID (-1)
|
68
|
+
|
69
|
+
typedef struct
|
70
|
+
{
|
71
|
+
int8 id; /* type field --- must be first */
|
72
|
+
Oid dbId; /* database ID, or 0 if a shared catalog */
|
73
|
+
Oid catId; /* ID of catalog whose contents are invalid */
|
74
|
+
} SharedInvalCatalogMsg;
|
75
|
+
|
76
|
+
#define SHAREDINVALRELCACHE_ID (-2)
|
77
|
+
|
78
|
+
typedef struct
|
79
|
+
{
|
80
|
+
int8 id; /* type field --- must be first */
|
81
|
+
Oid dbId; /* database ID, or 0 if a shared relation */
|
82
|
+
Oid relId; /* relation ID, or 0 if whole relcache */
|
83
|
+
} SharedInvalRelcacheMsg;
|
84
|
+
|
85
|
+
#define SHAREDINVALSMGR_ID (-3)
|
86
|
+
|
87
|
+
typedef struct
|
88
|
+
{
|
89
|
+
/* note: field layout chosen to pack into 16 bytes */
|
90
|
+
int8 id; /* type field --- must be first */
|
91
|
+
int8 backend_hi; /* high bits of backend ID, if temprel */
|
92
|
+
uint16 backend_lo; /* low bits of backend ID, if temprel */
|
93
|
+
RelFileNode rnode; /* spcNode, dbNode, relNode */
|
94
|
+
} SharedInvalSmgrMsg;
|
95
|
+
|
96
|
+
#define SHAREDINVALRELMAP_ID (-4)
|
97
|
+
|
98
|
+
typedef struct
|
99
|
+
{
|
100
|
+
int8 id; /* type field --- must be first */
|
101
|
+
Oid dbId; /* database ID, or 0 for shared catalogs */
|
102
|
+
} SharedInvalRelmapMsg;
|
103
|
+
|
104
|
+
#define SHAREDINVALSNAPSHOT_ID (-5)
|
105
|
+
|
106
|
+
typedef struct
|
107
|
+
{
|
108
|
+
int8 id; /* type field --- must be first */
|
109
|
+
Oid dbId; /* database ID, or 0 if a shared relation */
|
110
|
+
Oid relId; /* relation ID */
|
111
|
+
} SharedInvalSnapshotMsg;
|
112
|
+
|
113
|
+
typedef union
|
114
|
+
{
|
115
|
+
int8 id; /* type field --- must be first */
|
116
|
+
SharedInvalCatcacheMsg cc;
|
117
|
+
SharedInvalCatalogMsg cat;
|
118
|
+
SharedInvalRelcacheMsg rc;
|
119
|
+
SharedInvalSmgrMsg sm;
|
120
|
+
SharedInvalRelmapMsg rm;
|
121
|
+
SharedInvalSnapshotMsg sn;
|
122
|
+
} SharedInvalidationMessage;
|
123
|
+
|
124
|
+
|
125
|
+
/* Counter of messages processed; don't worry about overflow. */
|
126
|
+
extern uint64 SharedInvalidMessageCounter;
|
127
|
+
|
128
|
+
extern volatile sig_atomic_t catchupInterruptPending;
|
129
|
+
|
130
|
+
extern void SendSharedInvalidMessages(const SharedInvalidationMessage *msgs,
|
131
|
+
int n);
|
132
|
+
extern void ReceiveSharedInvalidMessages(void (*invalFunction) (SharedInvalidationMessage *msg),
|
133
|
+
void (*resetFunction) (void));
|
134
|
+
|
135
|
+
/* signal handler for catchup events (PROCSIG_CATCHUP_INTERRUPT) */
|
136
|
+
extern void HandleCatchupInterrupt(void);
|
137
|
+
|
138
|
+
/*
|
139
|
+
* enable/disable processing of catchup events directly from signal handler.
|
140
|
+
* The enable routine first performs processing of any catchup events that
|
141
|
+
* have occurred since the last disable.
|
142
|
+
*/
|
143
|
+
extern void ProcessCatchupInterrupt(void);
|
144
|
+
|
145
|
+
extern int xactGetCommittedInvalidationMessages(SharedInvalidationMessage **msgs,
|
146
|
+
bool *RelcacheInitFileInval);
|
147
|
+
extern void ProcessCommittedInvalidationMessages(SharedInvalidationMessage *msgs,
|
148
|
+
int nmsgs, bool RelcacheInitFileInval,
|
149
|
+
Oid dbid, Oid tsid);
|
150
|
+
|
151
|
+
extern void LocalExecuteInvalidationMessage(SharedInvalidationMessage *msg);
|
152
|
+
|
153
|
+
#endif /* SINVAL_H */
|
@@ -0,0 +1,43 @@
|
|
1
|
+
/*-------------------------------------------------------------------------
|
2
|
+
*
|
3
|
+
* sinvaladt.h
|
4
|
+
* POSTGRES shared cache invalidation data manager.
|
5
|
+
*
|
6
|
+
* The shared cache invalidation manager is responsible for transmitting
|
7
|
+
* invalidation messages between backends. Any message sent by any backend
|
8
|
+
* must be delivered to all already-running backends before it can be
|
9
|
+
* forgotten. (If we run out of space, we instead deliver a "RESET"
|
10
|
+
* message to backends that have fallen too far behind.)
|
11
|
+
*
|
12
|
+
* The struct type SharedInvalidationMessage, defining the contents of
|
13
|
+
* a single message, is defined in sinval.h.
|
14
|
+
*
|
15
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
16
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
17
|
+
*
|
18
|
+
* src/include/storage/sinvaladt.h
|
19
|
+
*
|
20
|
+
*-------------------------------------------------------------------------
|
21
|
+
*/
|
22
|
+
#ifndef SINVALADT_H
|
23
|
+
#define SINVALADT_H
|
24
|
+
|
25
|
+
#include "storage/lock.h"
|
26
|
+
#include "storage/sinval.h"
|
27
|
+
|
28
|
+
/*
|
29
|
+
* prototypes for functions in sinvaladt.c
|
30
|
+
*/
|
31
|
+
extern Size SInvalShmemSize(void);
|
32
|
+
extern void CreateSharedInvalidationState(void);
|
33
|
+
extern void SharedInvalBackendInit(bool sendOnly);
|
34
|
+
extern PGPROC *BackendIdGetProc(int backendID);
|
35
|
+
extern void BackendIdGetTransactionIds(int backendID, TransactionId *xid, TransactionId *xmin);
|
36
|
+
|
37
|
+
extern void SIInsertDataEntries(const SharedInvalidationMessage *data, int n);
|
38
|
+
extern int SIGetDataEntries(SharedInvalidationMessage *data, int datasize);
|
39
|
+
extern void SICleanupQueue(bool callerHasWriteLock, int minFree);
|
40
|
+
|
41
|
+
extern LocalTransactionId GetNextLocalTransactionId(void);
|
42
|
+
|
43
|
+
#endif /* SINVALADT_H */
|