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,59 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* lockdefs.h
|
|
4
|
+
* Frontend exposed parts of postgres' low level lock mechanism
|
|
5
|
+
*
|
|
6
|
+
* The split between lockdefs.h and lock.h is not very principled. This file
|
|
7
|
+
* contains definition that have to (indirectly) be available when included by
|
|
8
|
+
* FRONTEND code.
|
|
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/storage/lockdefs.h
|
|
14
|
+
*
|
|
15
|
+
*-------------------------------------------------------------------------
|
|
16
|
+
*/
|
|
17
|
+
#ifndef LOCKDEFS_H_
|
|
18
|
+
#define LOCKDEFS_H_
|
|
19
|
+
|
|
20
|
+
/*
|
|
21
|
+
* LOCKMODE is an integer (1..N) indicating a lock type. LOCKMASK is a bit
|
|
22
|
+
* mask indicating a set of held or requested lock types (the bit 1<<mode
|
|
23
|
+
* corresponds to a particular lock mode).
|
|
24
|
+
*/
|
|
25
|
+
typedef int LOCKMASK;
|
|
26
|
+
typedef int LOCKMODE;
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
* These are the valid values of type LOCKMODE for all the standard lock
|
|
30
|
+
* methods (both DEFAULT and USER).
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/* NoLock is not a lock mode, but a flag value meaning "don't get a lock" */
|
|
34
|
+
#define NoLock 0
|
|
35
|
+
|
|
36
|
+
#define AccessShareLock 1 /* SELECT */
|
|
37
|
+
#define RowShareLock 2 /* SELECT FOR UPDATE/FOR SHARE */
|
|
38
|
+
#define RowExclusiveLock 3 /* INSERT, UPDATE, DELETE */
|
|
39
|
+
#define ShareUpdateExclusiveLock 4 /* VACUUM (non-FULL),ANALYZE, CREATE INDEX
|
|
40
|
+
* CONCURRENTLY */
|
|
41
|
+
#define ShareLock 5 /* CREATE INDEX (WITHOUT CONCURRENTLY) */
|
|
42
|
+
#define ShareRowExclusiveLock 6 /* like EXCLUSIVE MODE, but allows ROW
|
|
43
|
+
* SHARE */
|
|
44
|
+
#define ExclusiveLock 7 /* blocks ROW SHARE/SELECT...FOR UPDATE */
|
|
45
|
+
#define AccessExclusiveLock 8 /* ALTER TABLE, DROP TABLE, VACUUM FULL,
|
|
46
|
+
* and unqualified LOCK TABLE */
|
|
47
|
+
|
|
48
|
+
#define MaxLockMode 8
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
/* WAL representation of an AccessExclusiveLock on a table */
|
|
52
|
+
typedef struct xl_standby_lock
|
|
53
|
+
{
|
|
54
|
+
TransactionId xid; /* xid of holder of AccessExclusiveLock */
|
|
55
|
+
Oid dbOid; /* DB containing table */
|
|
56
|
+
Oid relOid; /* OID of table */
|
|
57
|
+
} xl_standby_lock;
|
|
58
|
+
|
|
59
|
+
#endif /* LOCKDEFS_H_ */
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* lwlock.h
|
|
4
|
+
* Lightweight lock manager
|
|
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/lwlock.h
|
|
11
|
+
*
|
|
12
|
+
*-------------------------------------------------------------------------
|
|
13
|
+
*/
|
|
14
|
+
#ifndef LWLOCK_H
|
|
15
|
+
#define LWLOCK_H
|
|
16
|
+
|
|
17
|
+
#ifdef FRONTEND
|
|
18
|
+
#error "lwlock.h may not be included from frontend code"
|
|
19
|
+
#endif
|
|
20
|
+
|
|
21
|
+
#include "port/atomics.h"
|
|
22
|
+
#include "storage/proclist_types.h"
|
|
23
|
+
#include "storage/s_lock.h"
|
|
24
|
+
|
|
25
|
+
struct PGPROC;
|
|
26
|
+
|
|
27
|
+
/*
|
|
28
|
+
* Code outside of lwlock.c should not manipulate the contents of this
|
|
29
|
+
* structure directly, but we have to declare it here to allow LWLocks to be
|
|
30
|
+
* incorporated into other data structures.
|
|
31
|
+
*/
|
|
32
|
+
typedef struct LWLock
|
|
33
|
+
{
|
|
34
|
+
uint16 tranche; /* tranche ID */
|
|
35
|
+
pg_atomic_uint32 state; /* state of exclusive/nonexclusive lockers */
|
|
36
|
+
proclist_head waiters; /* list of waiting PGPROCs */
|
|
37
|
+
#ifdef LOCK_DEBUG
|
|
38
|
+
pg_atomic_uint32 nwaiters; /* number of waiters */
|
|
39
|
+
struct PGPROC *owner; /* last exclusive owner of the lock */
|
|
40
|
+
#endif
|
|
41
|
+
} LWLock;
|
|
42
|
+
|
|
43
|
+
/*
|
|
44
|
+
* In most cases, it's desirable to force each tranche of LWLocks to be aligned
|
|
45
|
+
* on a cache line boundary and make the array stride a power of 2. This saves
|
|
46
|
+
* a few cycles in indexing, but more importantly ensures that individual
|
|
47
|
+
* LWLocks don't cross cache line boundaries. This reduces cache contention
|
|
48
|
+
* problems, especially on AMD Opterons. In some cases, it's useful to add
|
|
49
|
+
* even more padding so that each LWLock takes up an entire cache line; this is
|
|
50
|
+
* useful, for example, in the main LWLock array, where the overall number of
|
|
51
|
+
* locks is small but some are heavily contended.
|
|
52
|
+
*
|
|
53
|
+
* When allocating a tranche that contains data other than LWLocks, it is
|
|
54
|
+
* probably best to include a bare LWLock and then pad the resulting structure
|
|
55
|
+
* as necessary for performance. For an array that contains only LWLocks,
|
|
56
|
+
* LWLockMinimallyPadded can be used for cases where we just want to ensure
|
|
57
|
+
* that we don't cross cache line boundaries within a single lock, while
|
|
58
|
+
* LWLockPadded can be used for cases where we want each lock to be an entire
|
|
59
|
+
* cache line.
|
|
60
|
+
*
|
|
61
|
+
* An LWLockMinimallyPadded might contain more than the absolute minimum amount
|
|
62
|
+
* of padding required to keep a lock from crossing a cache line boundary,
|
|
63
|
+
* because an unpadded LWLock will normally fit into 16 bytes. We ignore that
|
|
64
|
+
* possibility when determining the minimal amount of padding. Older releases
|
|
65
|
+
* had larger LWLocks, so 32 really was the minimum, and packing them in
|
|
66
|
+
* tighter might hurt performance.
|
|
67
|
+
*
|
|
68
|
+
* LWLOCK_MINIMAL_SIZE should be 32 on basically all common platforms, but
|
|
69
|
+
* because pg_atomic_uint32 is more than 4 bytes on some obscure platforms, we
|
|
70
|
+
* allow for the possibility that it might be 64. Even on those platforms,
|
|
71
|
+
* we probably won't exceed 32 bytes unless LOCK_DEBUG is defined.
|
|
72
|
+
*/
|
|
73
|
+
#define LWLOCK_PADDED_SIZE PG_CACHE_LINE_SIZE
|
|
74
|
+
#define LWLOCK_MINIMAL_SIZE (sizeof(LWLock) <= 32 ? 32 : 64)
|
|
75
|
+
|
|
76
|
+
/* LWLock, padded to a full cache line size */
|
|
77
|
+
typedef union LWLockPadded
|
|
78
|
+
{
|
|
79
|
+
LWLock lock;
|
|
80
|
+
char pad[LWLOCK_PADDED_SIZE];
|
|
81
|
+
} LWLockPadded;
|
|
82
|
+
|
|
83
|
+
/* LWLock, minimally padded */
|
|
84
|
+
typedef union LWLockMinimallyPadded
|
|
85
|
+
{
|
|
86
|
+
LWLock lock;
|
|
87
|
+
char pad[LWLOCK_MINIMAL_SIZE];
|
|
88
|
+
} LWLockMinimallyPadded;
|
|
89
|
+
|
|
90
|
+
extern PGDLLIMPORT LWLockPadded *MainLWLockArray;
|
|
91
|
+
|
|
92
|
+
/* struct for storing named tranche information */
|
|
93
|
+
typedef struct NamedLWLockTranche
|
|
94
|
+
{
|
|
95
|
+
int trancheId;
|
|
96
|
+
char *trancheName;
|
|
97
|
+
} NamedLWLockTranche;
|
|
98
|
+
|
|
99
|
+
extern PGDLLIMPORT NamedLWLockTranche *NamedLWLockTrancheArray;
|
|
100
|
+
extern PGDLLIMPORT int NamedLWLockTrancheRequests;
|
|
101
|
+
|
|
102
|
+
/* Names for fixed lwlocks */
|
|
103
|
+
#include "storage/lwlocknames.h"
|
|
104
|
+
|
|
105
|
+
/*
|
|
106
|
+
* It's a bit odd to declare NUM_BUFFER_PARTITIONS and NUM_LOCK_PARTITIONS
|
|
107
|
+
* here, but we need them to figure out offsets within MainLWLockArray, and
|
|
108
|
+
* having this file include lock.h or bufmgr.h would be backwards.
|
|
109
|
+
*/
|
|
110
|
+
|
|
111
|
+
/* Number of partitions of the shared buffer mapping hashtable */
|
|
112
|
+
#define NUM_BUFFER_PARTITIONS 128
|
|
113
|
+
|
|
114
|
+
/* Number of partitions the shared lock tables are divided into */
|
|
115
|
+
#define LOG2_NUM_LOCK_PARTITIONS 4
|
|
116
|
+
#define NUM_LOCK_PARTITIONS (1 << LOG2_NUM_LOCK_PARTITIONS)
|
|
117
|
+
|
|
118
|
+
/* Number of partitions the shared predicate lock tables are divided into */
|
|
119
|
+
#define LOG2_NUM_PREDICATELOCK_PARTITIONS 4
|
|
120
|
+
#define NUM_PREDICATELOCK_PARTITIONS (1 << LOG2_NUM_PREDICATELOCK_PARTITIONS)
|
|
121
|
+
|
|
122
|
+
/* Offsets for various chunks of preallocated lwlocks. */
|
|
123
|
+
#define BUFFER_MAPPING_LWLOCK_OFFSET NUM_INDIVIDUAL_LWLOCKS
|
|
124
|
+
#define LOCK_MANAGER_LWLOCK_OFFSET \
|
|
125
|
+
(BUFFER_MAPPING_LWLOCK_OFFSET + NUM_BUFFER_PARTITIONS)
|
|
126
|
+
#define PREDICATELOCK_MANAGER_LWLOCK_OFFSET \
|
|
127
|
+
(LOCK_MANAGER_LWLOCK_OFFSET + NUM_LOCK_PARTITIONS)
|
|
128
|
+
#define NUM_FIXED_LWLOCKS \
|
|
129
|
+
(PREDICATELOCK_MANAGER_LWLOCK_OFFSET + NUM_PREDICATELOCK_PARTITIONS)
|
|
130
|
+
|
|
131
|
+
typedef enum LWLockMode
|
|
132
|
+
{
|
|
133
|
+
LW_EXCLUSIVE,
|
|
134
|
+
LW_SHARED,
|
|
135
|
+
LW_WAIT_UNTIL_FREE /* A special mode used in PGPROC->lwWaitMode,
|
|
136
|
+
* when waiting for lock to become free. Not
|
|
137
|
+
* to be used as LWLockAcquire argument */
|
|
138
|
+
} LWLockMode;
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
#ifdef LOCK_DEBUG
|
|
142
|
+
extern bool Trace_lwlocks;
|
|
143
|
+
#endif
|
|
144
|
+
|
|
145
|
+
extern bool LWLockAcquire(LWLock *lock, LWLockMode mode);
|
|
146
|
+
extern bool LWLockConditionalAcquire(LWLock *lock, LWLockMode mode);
|
|
147
|
+
extern bool LWLockAcquireOrWait(LWLock *lock, LWLockMode mode);
|
|
148
|
+
extern void LWLockRelease(LWLock *lock);
|
|
149
|
+
extern void LWLockReleaseClearVar(LWLock *lock, uint64 *valptr, uint64 val);
|
|
150
|
+
extern void LWLockReleaseAll(void);
|
|
151
|
+
extern bool LWLockHeldByMe(LWLock *lock);
|
|
152
|
+
extern bool LWLockHeldByMeInMode(LWLock *lock, LWLockMode mode);
|
|
153
|
+
|
|
154
|
+
extern bool LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval);
|
|
155
|
+
extern void LWLockUpdateVar(LWLock *lock, uint64 *valptr, uint64 value);
|
|
156
|
+
|
|
157
|
+
extern Size LWLockShmemSize(void);
|
|
158
|
+
extern void CreateLWLocks(void);
|
|
159
|
+
extern void InitLWLockAccess(void);
|
|
160
|
+
|
|
161
|
+
extern const char *GetLWLockIdentifier(uint32 classId, uint16 eventId);
|
|
162
|
+
|
|
163
|
+
/*
|
|
164
|
+
* Extensions (or core code) can obtain an LWLocks by calling
|
|
165
|
+
* RequestNamedLWLockTranche() during postmaster startup. Subsequently,
|
|
166
|
+
* call GetNamedLWLockTranche() to obtain a pointer to an array containing
|
|
167
|
+
* the number of LWLocks requested.
|
|
168
|
+
*/
|
|
169
|
+
extern void RequestNamedLWLockTranche(const char *tranche_name, int num_lwlocks);
|
|
170
|
+
extern LWLockPadded *GetNamedLWLockTranche(const char *tranche_name);
|
|
171
|
+
|
|
172
|
+
/*
|
|
173
|
+
* There is another, more flexible method of obtaining lwlocks. First, call
|
|
174
|
+
* LWLockNewTrancheId just once to obtain a tranche ID; this allocates from
|
|
175
|
+
* a shared counter. Next, each individual process using the tranche should
|
|
176
|
+
* call LWLockRegisterTranche() to associate that tranche ID with a name.
|
|
177
|
+
* Finally, LWLockInitialize should be called just once per lwlock, passing
|
|
178
|
+
* the tranche ID as an argument.
|
|
179
|
+
*
|
|
180
|
+
* It may seem strange that each process using the tranche must register it
|
|
181
|
+
* separately, but dynamic shared memory segments aren't guaranteed to be
|
|
182
|
+
* mapped at the same address in all coordinating backends, so storing the
|
|
183
|
+
* registration in the main shared memory segment wouldn't work for that case.
|
|
184
|
+
*/
|
|
185
|
+
extern int LWLockNewTrancheId(void);
|
|
186
|
+
extern void LWLockRegisterTranche(int tranche_id, const char *tranche_name);
|
|
187
|
+
extern void LWLockInitialize(LWLock *lock, int tranche_id);
|
|
188
|
+
|
|
189
|
+
/*
|
|
190
|
+
* Every tranche ID less than NUM_INDIVIDUAL_LWLOCKS is reserved; also,
|
|
191
|
+
* we reserve additional tranche IDs for builtin tranches not included in
|
|
192
|
+
* the set of individual LWLocks. A call to LWLockNewTrancheId will never
|
|
193
|
+
* return a value less than LWTRANCHE_FIRST_USER_DEFINED.
|
|
194
|
+
*/
|
|
195
|
+
typedef enum BuiltinTrancheIds
|
|
196
|
+
{
|
|
197
|
+
LWTRANCHE_XACT_BUFFER = NUM_INDIVIDUAL_LWLOCKS,
|
|
198
|
+
LWTRANCHE_COMMITTS_BUFFER,
|
|
199
|
+
LWTRANCHE_SUBTRANS_BUFFER,
|
|
200
|
+
LWTRANCHE_MULTIXACTOFFSET_BUFFER,
|
|
201
|
+
LWTRANCHE_MULTIXACTMEMBER_BUFFER,
|
|
202
|
+
LWTRANCHE_NOTIFY_BUFFER,
|
|
203
|
+
LWTRANCHE_SERIAL_BUFFER,
|
|
204
|
+
LWTRANCHE_WAL_INSERT,
|
|
205
|
+
LWTRANCHE_BUFFER_CONTENT,
|
|
206
|
+
LWTRANCHE_BUFFER_IO,
|
|
207
|
+
LWTRANCHE_REPLICATION_ORIGIN_STATE,
|
|
208
|
+
LWTRANCHE_REPLICATION_SLOT_IO,
|
|
209
|
+
LWTRANCHE_LOCK_FASTPATH,
|
|
210
|
+
LWTRANCHE_BUFFER_MAPPING,
|
|
211
|
+
LWTRANCHE_LOCK_MANAGER,
|
|
212
|
+
LWTRANCHE_PREDICATE_LOCK_MANAGER,
|
|
213
|
+
LWTRANCHE_PARALLEL_HASH_JOIN,
|
|
214
|
+
LWTRANCHE_PARALLEL_QUERY_DSA,
|
|
215
|
+
LWTRANCHE_PER_SESSION_DSA,
|
|
216
|
+
LWTRANCHE_PER_SESSION_RECORD_TYPE,
|
|
217
|
+
LWTRANCHE_PER_SESSION_RECORD_TYPMOD,
|
|
218
|
+
LWTRANCHE_SHARED_TUPLESTORE,
|
|
219
|
+
LWTRANCHE_SHARED_TIDBITMAP,
|
|
220
|
+
LWTRANCHE_PARALLEL_APPEND,
|
|
221
|
+
LWTRANCHE_PER_XACT_PREDICATE_LIST,
|
|
222
|
+
LWTRANCHE_FIRST_USER_DEFINED
|
|
223
|
+
} BuiltinTrancheIds;
|
|
224
|
+
|
|
225
|
+
/*
|
|
226
|
+
* Prior to PostgreSQL 9.4, we used an enum type called LWLockId to refer
|
|
227
|
+
* to LWLocks. New code should instead use LWLock *. However, for the
|
|
228
|
+
* convenience of third-party code, we include the following typedef.
|
|
229
|
+
*/
|
|
230
|
+
typedef LWLock *LWLockId;
|
|
231
|
+
|
|
232
|
+
#endif /* LWLOCK_H */
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/* autogenerated from src/backend/storage/lmgr/lwlocknames.txt, do not edit */
|
|
2
|
+
/* there is deliberately not an #ifndef LWLOCKNAMES_H here */
|
|
3
|
+
|
|
4
|
+
#define ShmemIndexLock (&MainLWLockArray[1].lock)
|
|
5
|
+
#define OidGenLock (&MainLWLockArray[2].lock)
|
|
6
|
+
#define XidGenLock (&MainLWLockArray[3].lock)
|
|
7
|
+
#define ProcArrayLock (&MainLWLockArray[4].lock)
|
|
8
|
+
#define SInvalReadLock (&MainLWLockArray[5].lock)
|
|
9
|
+
#define SInvalWriteLock (&MainLWLockArray[6].lock)
|
|
10
|
+
#define WALBufMappingLock (&MainLWLockArray[7].lock)
|
|
11
|
+
#define WALWriteLock (&MainLWLockArray[8].lock)
|
|
12
|
+
#define ControlFileLock (&MainLWLockArray[9].lock)
|
|
13
|
+
#define CheckpointLock (&MainLWLockArray[10].lock)
|
|
14
|
+
#define XactSLRULock (&MainLWLockArray[11].lock)
|
|
15
|
+
#define SubtransSLRULock (&MainLWLockArray[12].lock)
|
|
16
|
+
#define MultiXactGenLock (&MainLWLockArray[13].lock)
|
|
17
|
+
#define MultiXactOffsetSLRULock (&MainLWLockArray[14].lock)
|
|
18
|
+
#define MultiXactMemberSLRULock (&MainLWLockArray[15].lock)
|
|
19
|
+
#define RelCacheInitLock (&MainLWLockArray[16].lock)
|
|
20
|
+
#define CheckpointerCommLock (&MainLWLockArray[17].lock)
|
|
21
|
+
#define TwoPhaseStateLock (&MainLWLockArray[18].lock)
|
|
22
|
+
#define TablespaceCreateLock (&MainLWLockArray[19].lock)
|
|
23
|
+
#define BtreeVacuumLock (&MainLWLockArray[20].lock)
|
|
24
|
+
#define AddinShmemInitLock (&MainLWLockArray[21].lock)
|
|
25
|
+
#define AutovacuumLock (&MainLWLockArray[22].lock)
|
|
26
|
+
#define AutovacuumScheduleLock (&MainLWLockArray[23].lock)
|
|
27
|
+
#define SyncScanLock (&MainLWLockArray[24].lock)
|
|
28
|
+
#define RelationMappingLock (&MainLWLockArray[25].lock)
|
|
29
|
+
#define NotifySLRULock (&MainLWLockArray[26].lock)
|
|
30
|
+
#define NotifyQueueLock (&MainLWLockArray[27].lock)
|
|
31
|
+
#define SerializableXactHashLock (&MainLWLockArray[28].lock)
|
|
32
|
+
#define SerializableFinishedListLock (&MainLWLockArray[29].lock)
|
|
33
|
+
#define SerializablePredicateListLock (&MainLWLockArray[30].lock)
|
|
34
|
+
#define SerialSLRULock (&MainLWLockArray[31].lock)
|
|
35
|
+
#define SyncRepLock (&MainLWLockArray[32].lock)
|
|
36
|
+
#define BackgroundWorkerLock (&MainLWLockArray[33].lock)
|
|
37
|
+
#define DynamicSharedMemoryControlLock (&MainLWLockArray[34].lock)
|
|
38
|
+
#define AutoFileLock (&MainLWLockArray[35].lock)
|
|
39
|
+
#define ReplicationSlotAllocationLock (&MainLWLockArray[36].lock)
|
|
40
|
+
#define ReplicationSlotControlLock (&MainLWLockArray[37].lock)
|
|
41
|
+
#define CommitTsSLRULock (&MainLWLockArray[38].lock)
|
|
42
|
+
#define CommitTsLock (&MainLWLockArray[39].lock)
|
|
43
|
+
#define ReplicationOriginLock (&MainLWLockArray[40].lock)
|
|
44
|
+
#define MultiXactTruncationLock (&MainLWLockArray[41].lock)
|
|
45
|
+
#define OldSnapshotTimeMapLock (&MainLWLockArray[42].lock)
|
|
46
|
+
#define LogicalRepWorkerLock (&MainLWLockArray[43].lock)
|
|
47
|
+
#define XactTruncationLock (&MainLWLockArray[44].lock)
|
|
48
|
+
#define WrapLimitsVacuumLock (&MainLWLockArray[46].lock)
|
|
49
|
+
#define NotifyQueueTailLock (&MainLWLockArray[47].lock)
|
|
50
|
+
|
|
51
|
+
#define NUM_INDIVIDUAL_LWLOCKS 48
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* off.h
|
|
4
|
+
* POSTGRES disk "offset" 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/off.h
|
|
11
|
+
*
|
|
12
|
+
*-------------------------------------------------------------------------
|
|
13
|
+
*/
|
|
14
|
+
#ifndef OFF_H
|
|
15
|
+
#define OFF_H
|
|
16
|
+
|
|
17
|
+
#include "storage/itemid.h"
|
|
18
|
+
/*
|
|
19
|
+
* OffsetNumber:
|
|
20
|
+
*
|
|
21
|
+
* this is a 1-based index into the linp (ItemIdData) array in the
|
|
22
|
+
* header of each disk page.
|
|
23
|
+
*/
|
|
24
|
+
typedef uint16 OffsetNumber;
|
|
25
|
+
|
|
26
|
+
#define InvalidOffsetNumber ((OffsetNumber) 0)
|
|
27
|
+
#define FirstOffsetNumber ((OffsetNumber) 1)
|
|
28
|
+
#define MaxOffsetNumber ((OffsetNumber) (BLCKSZ / sizeof(ItemIdData)))
|
|
29
|
+
|
|
30
|
+
/* ----------------
|
|
31
|
+
* support macros
|
|
32
|
+
* ----------------
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/*
|
|
36
|
+
* OffsetNumberIsValid
|
|
37
|
+
* True iff the offset number is valid.
|
|
38
|
+
*/
|
|
39
|
+
#define OffsetNumberIsValid(offsetNumber) \
|
|
40
|
+
((bool) ((offsetNumber != InvalidOffsetNumber) && \
|
|
41
|
+
(offsetNumber <= MaxOffsetNumber)))
|
|
42
|
+
|
|
43
|
+
/*
|
|
44
|
+
* OffsetNumberNext
|
|
45
|
+
* OffsetNumberPrev
|
|
46
|
+
* Increments/decrements the argument. These macros look pointless
|
|
47
|
+
* but they help us disambiguate the different manipulations on
|
|
48
|
+
* OffsetNumbers (e.g., sometimes we subtract one from an
|
|
49
|
+
* OffsetNumber to move back, and sometimes we do so to form a
|
|
50
|
+
* real C array index).
|
|
51
|
+
*/
|
|
52
|
+
#define OffsetNumberNext(offsetNumber) \
|
|
53
|
+
((OffsetNumber) (1 + (offsetNumber)))
|
|
54
|
+
#define OffsetNumberPrev(offsetNumber) \
|
|
55
|
+
((OffsetNumber) (-1 + (offsetNumber)))
|
|
56
|
+
|
|
57
|
+
#endif /* OFF_H */
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* pg_sema.h
|
|
4
|
+
* Platform-independent API for semaphores.
|
|
5
|
+
*
|
|
6
|
+
* PostgreSQL requires counting semaphores (the kind that keep track of
|
|
7
|
+
* multiple unlock operations, and will allow an equal number of subsequent
|
|
8
|
+
* lock operations before blocking). The underlying implementation is
|
|
9
|
+
* not the same on every platform. This file defines the API that must
|
|
10
|
+
* be provided by each port.
|
|
11
|
+
*
|
|
12
|
+
*
|
|
13
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
|
14
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
15
|
+
*
|
|
16
|
+
* src/include/storage/pg_sema.h
|
|
17
|
+
*
|
|
18
|
+
*-------------------------------------------------------------------------
|
|
19
|
+
*/
|
|
20
|
+
#ifndef PG_SEMA_H
|
|
21
|
+
#define PG_SEMA_H
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* struct PGSemaphoreData and pointer type PGSemaphore are the data structure
|
|
25
|
+
* representing an individual semaphore. The contents of PGSemaphoreData vary
|
|
26
|
+
* across implementations and must never be touched by platform-independent
|
|
27
|
+
* code; hence, PGSemaphoreData is declared as an opaque struct here.
|
|
28
|
+
*
|
|
29
|
+
* However, Windows is sufficiently unlike our other ports that it doesn't
|
|
30
|
+
* seem worth insisting on ABI compatibility for Windows too. Hence, on
|
|
31
|
+
* that platform just define PGSemaphore as HANDLE.
|
|
32
|
+
*/
|
|
33
|
+
#ifndef USE_WIN32_SEMAPHORES
|
|
34
|
+
typedef struct PGSemaphoreData *PGSemaphore;
|
|
35
|
+
#else
|
|
36
|
+
typedef HANDLE PGSemaphore;
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
/* Report amount of shared memory needed */
|
|
41
|
+
extern Size PGSemaphoreShmemSize(int maxSemas);
|
|
42
|
+
|
|
43
|
+
/* Module initialization (called during postmaster start or shmem reinit) */
|
|
44
|
+
extern void PGReserveSemaphores(int maxSemas);
|
|
45
|
+
|
|
46
|
+
/* Allocate a PGSemaphore structure with initial count 1 */
|
|
47
|
+
extern PGSemaphore PGSemaphoreCreate(void);
|
|
48
|
+
|
|
49
|
+
/* Reset a previously-initialized PGSemaphore to have count 0 */
|
|
50
|
+
extern void PGSemaphoreReset(PGSemaphore sema);
|
|
51
|
+
|
|
52
|
+
/* Lock a semaphore (decrement count), blocking if count would be < 0 */
|
|
53
|
+
extern void PGSemaphoreLock(PGSemaphore sema);
|
|
54
|
+
|
|
55
|
+
/* Unlock a semaphore (increment count) */
|
|
56
|
+
extern void PGSemaphoreUnlock(PGSemaphore sema);
|
|
57
|
+
|
|
58
|
+
/* Lock a semaphore only if able to do so without blocking */
|
|
59
|
+
extern bool PGSemaphoreTryLock(PGSemaphore sema);
|
|
60
|
+
|
|
61
|
+
#endif /* PG_SEMA_H */
|