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,62 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* condition_variable.h
|
|
4
|
+
* Condition variables
|
|
5
|
+
*
|
|
6
|
+
* A condition variable is a method of waiting until a certain condition
|
|
7
|
+
* becomes true. Conventionally, a condition variable supports three
|
|
8
|
+
* operations: (1) sleep; (2) signal, which wakes up one process sleeping
|
|
9
|
+
* on the condition variable; and (3) broadcast, which wakes up every
|
|
10
|
+
* process sleeping on the condition variable. In our implementation,
|
|
11
|
+
* condition variables put a process into an interruptible sleep (so it
|
|
12
|
+
* can be canceled prior to the fulfillment of the condition) and do not
|
|
13
|
+
* use pointers internally (so that they are safe to use within DSMs).
|
|
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/condition_variable.h
|
|
19
|
+
*
|
|
20
|
+
*-------------------------------------------------------------------------
|
|
21
|
+
*/
|
|
22
|
+
#ifndef CONDITION_VARIABLE_H
|
|
23
|
+
#define CONDITION_VARIABLE_H
|
|
24
|
+
|
|
25
|
+
#include "storage/proclist_types.h"
|
|
26
|
+
#include "storage/s_lock.h"
|
|
27
|
+
|
|
28
|
+
typedef struct
|
|
29
|
+
{
|
|
30
|
+
slock_t mutex; /* spinlock protecting the wakeup list */
|
|
31
|
+
proclist_head wakeup; /* list of wake-able processes */
|
|
32
|
+
} ConditionVariable;
|
|
33
|
+
|
|
34
|
+
/* Initialize a condition variable. */
|
|
35
|
+
extern void ConditionVariableInit(ConditionVariable *cv);
|
|
36
|
+
|
|
37
|
+
/*
|
|
38
|
+
* To sleep on a condition variable, a process should use a loop which first
|
|
39
|
+
* checks the condition, exiting the loop if it is met, and then calls
|
|
40
|
+
* ConditionVariableSleep. Spurious wakeups are possible, but should be
|
|
41
|
+
* infrequent. After exiting the loop, ConditionVariableCancelSleep must
|
|
42
|
+
* be called to ensure that the process is no longer in the wait list for
|
|
43
|
+
* the condition variable.
|
|
44
|
+
*/
|
|
45
|
+
extern void ConditionVariableSleep(ConditionVariable *cv, uint32 wait_event_info);
|
|
46
|
+
extern bool ConditionVariableTimedSleep(ConditionVariable *cv, long timeout,
|
|
47
|
+
uint32 wait_event_info);
|
|
48
|
+
extern void ConditionVariableCancelSleep(void);
|
|
49
|
+
|
|
50
|
+
/*
|
|
51
|
+
* Optionally, ConditionVariablePrepareToSleep can be called before entering
|
|
52
|
+
* the test-and-sleep loop described above. Doing so is more efficient if
|
|
53
|
+
* at least one sleep is needed, whereas not doing so is more efficient when
|
|
54
|
+
* no sleep is needed because the test condition is true the first time.
|
|
55
|
+
*/
|
|
56
|
+
extern void ConditionVariablePrepareToSleep(ConditionVariable *cv);
|
|
57
|
+
|
|
58
|
+
/* Wake up a single waiter (via signal) or all waiters (via broadcast). */
|
|
59
|
+
extern void ConditionVariableSignal(ConditionVariable *cv);
|
|
60
|
+
extern void ConditionVariableBroadcast(ConditionVariable *cv);
|
|
61
|
+
|
|
62
|
+
#endif /* CONDITION_VARIABLE_H */
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* dsm.h
|
|
4
|
+
* manage dynamic shared memory segments
|
|
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/dsm.h
|
|
10
|
+
*
|
|
11
|
+
*-------------------------------------------------------------------------
|
|
12
|
+
*/
|
|
13
|
+
#ifndef DSM_H
|
|
14
|
+
#define DSM_H
|
|
15
|
+
|
|
16
|
+
#include "storage/dsm_impl.h"
|
|
17
|
+
|
|
18
|
+
typedef struct dsm_segment dsm_segment;
|
|
19
|
+
|
|
20
|
+
#define DSM_CREATE_NULL_IF_MAXSEGMENTS 0x0001
|
|
21
|
+
|
|
22
|
+
/* A sentinel value for an invalid DSM handle. */
|
|
23
|
+
#define DSM_HANDLE_INVALID 0
|
|
24
|
+
|
|
25
|
+
/* Startup and shutdown functions. */
|
|
26
|
+
struct PGShmemHeader; /* avoid including pg_shmem.h */
|
|
27
|
+
extern void dsm_cleanup_using_control_segment(dsm_handle old_control_handle);
|
|
28
|
+
extern void dsm_postmaster_startup(struct PGShmemHeader *);
|
|
29
|
+
extern void dsm_backend_shutdown(void);
|
|
30
|
+
extern void dsm_detach_all(void);
|
|
31
|
+
|
|
32
|
+
#ifdef EXEC_BACKEND
|
|
33
|
+
extern void dsm_set_control_handle(dsm_handle h);
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
/* Functions that create or remove mappings. */
|
|
37
|
+
extern dsm_segment *dsm_create(Size size, int flags);
|
|
38
|
+
extern dsm_segment *dsm_attach(dsm_handle h);
|
|
39
|
+
extern void dsm_detach(dsm_segment *seg);
|
|
40
|
+
|
|
41
|
+
/* Resource management functions. */
|
|
42
|
+
extern void dsm_pin_mapping(dsm_segment *seg);
|
|
43
|
+
extern void dsm_unpin_mapping(dsm_segment *seg);
|
|
44
|
+
extern void dsm_pin_segment(dsm_segment *seg);
|
|
45
|
+
extern void dsm_unpin_segment(dsm_handle h);
|
|
46
|
+
extern dsm_segment *dsm_find_mapping(dsm_handle h);
|
|
47
|
+
|
|
48
|
+
/* Informational functions. */
|
|
49
|
+
extern void *dsm_segment_address(dsm_segment *seg);
|
|
50
|
+
extern Size dsm_segment_map_length(dsm_segment *seg);
|
|
51
|
+
extern dsm_handle dsm_segment_handle(dsm_segment *seg);
|
|
52
|
+
|
|
53
|
+
/* Cleanup hooks. */
|
|
54
|
+
typedef void (*on_dsm_detach_callback) (dsm_segment *, Datum arg);
|
|
55
|
+
extern void on_dsm_detach(dsm_segment *seg,
|
|
56
|
+
on_dsm_detach_callback function, Datum arg);
|
|
57
|
+
extern void cancel_on_dsm_detach(dsm_segment *seg,
|
|
58
|
+
on_dsm_detach_callback function, Datum arg);
|
|
59
|
+
extern void reset_on_dsm_detach(void);
|
|
60
|
+
|
|
61
|
+
#endif /* DSM_H */
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* dsm_impl.h
|
|
4
|
+
* low-level dynamic shared memory primitives
|
|
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/dsm_impl.h
|
|
10
|
+
*
|
|
11
|
+
*-------------------------------------------------------------------------
|
|
12
|
+
*/
|
|
13
|
+
#ifndef DSM_IMPL_H
|
|
14
|
+
#define DSM_IMPL_H
|
|
15
|
+
|
|
16
|
+
/* Dynamic shared memory implementations. */
|
|
17
|
+
#define DSM_IMPL_POSIX 1
|
|
18
|
+
#define DSM_IMPL_SYSV 2
|
|
19
|
+
#define DSM_IMPL_WINDOWS 3
|
|
20
|
+
#define DSM_IMPL_MMAP 4
|
|
21
|
+
|
|
22
|
+
/*
|
|
23
|
+
* Determine which dynamic shared memory implementations will be supported
|
|
24
|
+
* on this platform, and which one will be the default.
|
|
25
|
+
*/
|
|
26
|
+
#ifdef WIN32
|
|
27
|
+
#define USE_DSM_WINDOWS
|
|
28
|
+
#define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_WINDOWS
|
|
29
|
+
#else
|
|
30
|
+
#ifdef HAVE_SHM_OPEN
|
|
31
|
+
#define USE_DSM_POSIX
|
|
32
|
+
#define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_POSIX
|
|
33
|
+
#endif
|
|
34
|
+
#define USE_DSM_SYSV
|
|
35
|
+
#ifndef DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE
|
|
36
|
+
#define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_SYSV
|
|
37
|
+
#endif
|
|
38
|
+
#define USE_DSM_MMAP
|
|
39
|
+
#endif
|
|
40
|
+
|
|
41
|
+
/* GUC. */
|
|
42
|
+
extern int dynamic_shared_memory_type;
|
|
43
|
+
|
|
44
|
+
/*
|
|
45
|
+
* Directory for on-disk state.
|
|
46
|
+
*
|
|
47
|
+
* This is used by all implementations for crash recovery and by the mmap
|
|
48
|
+
* implementation for storage.
|
|
49
|
+
*/
|
|
50
|
+
#define PG_DYNSHMEM_DIR "pg_dynshmem"
|
|
51
|
+
#define PG_DYNSHMEM_MMAP_FILE_PREFIX "mmap."
|
|
52
|
+
|
|
53
|
+
/* A "name" for a dynamic shared memory segment. */
|
|
54
|
+
typedef uint32 dsm_handle;
|
|
55
|
+
|
|
56
|
+
/* All the shared-memory operations we know about. */
|
|
57
|
+
typedef enum
|
|
58
|
+
{
|
|
59
|
+
DSM_OP_CREATE,
|
|
60
|
+
DSM_OP_ATTACH,
|
|
61
|
+
DSM_OP_DETACH,
|
|
62
|
+
DSM_OP_DESTROY
|
|
63
|
+
} dsm_op;
|
|
64
|
+
|
|
65
|
+
/* Create, attach to, detach from, resize, or destroy a segment. */
|
|
66
|
+
extern bool dsm_impl_op(dsm_op op, dsm_handle handle, Size request_size,
|
|
67
|
+
void **impl_private, void **mapped_address, Size *mapped_size,
|
|
68
|
+
int elevel);
|
|
69
|
+
|
|
70
|
+
/* Implementation-dependent actions required to keep segment until shutdown. */
|
|
71
|
+
extern void dsm_impl_pin_segment(dsm_handle handle, void *impl_private,
|
|
72
|
+
void **impl_private_pm_handle);
|
|
73
|
+
extern void dsm_impl_unpin_segment(dsm_handle handle, void **impl_private);
|
|
74
|
+
|
|
75
|
+
#endif /* DSM_IMPL_H */
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* fd.h
|
|
4
|
+
* Virtual file descriptor 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/fd.h
|
|
11
|
+
*
|
|
12
|
+
*-------------------------------------------------------------------------
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/*
|
|
16
|
+
* calls:
|
|
17
|
+
*
|
|
18
|
+
* File {Close, Read, Write, Size, Sync}
|
|
19
|
+
* {Path Name Open, Allocate, Free} File
|
|
20
|
+
*
|
|
21
|
+
* These are NOT JUST RENAMINGS OF THE UNIX ROUTINES.
|
|
22
|
+
* Use them for all file activity...
|
|
23
|
+
*
|
|
24
|
+
* File fd;
|
|
25
|
+
* fd = PathNameOpenFile("foo", O_RDONLY);
|
|
26
|
+
*
|
|
27
|
+
* AllocateFile();
|
|
28
|
+
* FreeFile();
|
|
29
|
+
*
|
|
30
|
+
* Use AllocateFile, not fopen, if you need a stdio file (FILE*); then
|
|
31
|
+
* use FreeFile, not fclose, to close it. AVOID using stdio for files
|
|
32
|
+
* that you intend to hold open for any length of time, since there is
|
|
33
|
+
* no way for them to share kernel file descriptors with other files.
|
|
34
|
+
*
|
|
35
|
+
* Likewise, use AllocateDir/FreeDir, not opendir/closedir, to allocate
|
|
36
|
+
* open directories (DIR*), and OpenTransientFile/CloseTransientFile for an
|
|
37
|
+
* unbuffered file descriptor.
|
|
38
|
+
*
|
|
39
|
+
* If you really can't use any of the above, at least call AcquireExternalFD
|
|
40
|
+
* or ReserveExternalFD to report any file descriptors that are held for any
|
|
41
|
+
* length of time. Failure to do so risks unnecessary EMFILE errors.
|
|
42
|
+
*/
|
|
43
|
+
#ifndef FD_H
|
|
44
|
+
#define FD_H
|
|
45
|
+
|
|
46
|
+
#include <dirent.h>
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
typedef int File;
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
/* GUC parameter */
|
|
53
|
+
extern PGDLLIMPORT int max_files_per_process;
|
|
54
|
+
extern PGDLLIMPORT bool data_sync_retry;
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
* This is private to fd.c, but exported for save/restore_backend_variables()
|
|
58
|
+
*/
|
|
59
|
+
extern int max_safe_fds;
|
|
60
|
+
|
|
61
|
+
/*
|
|
62
|
+
* On Windows, we have to interpret EACCES as possibly meaning the same as
|
|
63
|
+
* ENOENT, because if a file is unlinked-but-not-yet-gone on that platform,
|
|
64
|
+
* that's what you get. Ugh. This code is designed so that we don't
|
|
65
|
+
* actually believe these cases are okay without further evidence (namely,
|
|
66
|
+
* a pending fsync request getting canceled ... see ProcessSyncRequests).
|
|
67
|
+
*/
|
|
68
|
+
#ifndef WIN32
|
|
69
|
+
#define FILE_POSSIBLY_DELETED(err) ((err) == ENOENT)
|
|
70
|
+
#else
|
|
71
|
+
#define FILE_POSSIBLY_DELETED(err) ((err) == ENOENT || (err) == EACCES)
|
|
72
|
+
#endif
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
* prototypes for functions in fd.c
|
|
76
|
+
*/
|
|
77
|
+
|
|
78
|
+
/* Operations on virtual Files --- equivalent to Unix kernel file ops */
|
|
79
|
+
extern File PathNameOpenFile(const char *fileName, int fileFlags);
|
|
80
|
+
extern File PathNameOpenFilePerm(const char *fileName, int fileFlags, mode_t fileMode);
|
|
81
|
+
extern File OpenTemporaryFile(bool interXact);
|
|
82
|
+
extern void FileClose(File file);
|
|
83
|
+
extern int FilePrefetch(File file, off_t offset, int amount, uint32 wait_event_info);
|
|
84
|
+
extern int FileRead(File file, char *buffer, int amount, off_t offset, uint32 wait_event_info);
|
|
85
|
+
extern int FileWrite(File file, char *buffer, int amount, off_t offset, uint32 wait_event_info);
|
|
86
|
+
extern int FileSync(File file, uint32 wait_event_info);
|
|
87
|
+
extern off_t FileSize(File file);
|
|
88
|
+
extern int FileTruncate(File file, off_t offset, uint32 wait_event_info);
|
|
89
|
+
extern void FileWriteback(File file, off_t offset, off_t nbytes, uint32 wait_event_info);
|
|
90
|
+
extern char *FilePathName(File file);
|
|
91
|
+
extern int FileGetRawDesc(File file);
|
|
92
|
+
extern int FileGetRawFlags(File file);
|
|
93
|
+
extern mode_t FileGetRawMode(File file);
|
|
94
|
+
|
|
95
|
+
/* Operations used for sharing named temporary files */
|
|
96
|
+
extern File PathNameCreateTemporaryFile(const char *name, bool error_on_failure);
|
|
97
|
+
extern File PathNameOpenTemporaryFile(const char *name);
|
|
98
|
+
extern bool PathNameDeleteTemporaryFile(const char *name, bool error_on_failure);
|
|
99
|
+
extern void PathNameCreateTemporaryDir(const char *base, const char *name);
|
|
100
|
+
extern void PathNameDeleteTemporaryDir(const char *name);
|
|
101
|
+
extern void TempTablespacePath(char *path, Oid tablespace);
|
|
102
|
+
|
|
103
|
+
/* Operations that allow use of regular stdio --- USE WITH CAUTION */
|
|
104
|
+
extern FILE *AllocateFile(const char *name, const char *mode);
|
|
105
|
+
extern int FreeFile(FILE *file);
|
|
106
|
+
|
|
107
|
+
/* Operations that allow use of pipe streams (popen/pclose) */
|
|
108
|
+
extern FILE *OpenPipeStream(const char *command, const char *mode);
|
|
109
|
+
extern int ClosePipeStream(FILE *file);
|
|
110
|
+
|
|
111
|
+
/* Operations to allow use of the <dirent.h> library routines */
|
|
112
|
+
extern DIR *AllocateDir(const char *dirname);
|
|
113
|
+
extern struct dirent *ReadDir(DIR *dir, const char *dirname);
|
|
114
|
+
extern struct dirent *ReadDirExtended(DIR *dir, const char *dirname,
|
|
115
|
+
int elevel);
|
|
116
|
+
extern int FreeDir(DIR *dir);
|
|
117
|
+
|
|
118
|
+
/* Operations to allow use of a plain kernel FD, with automatic cleanup */
|
|
119
|
+
extern int OpenTransientFile(const char *fileName, int fileFlags);
|
|
120
|
+
extern int OpenTransientFilePerm(const char *fileName, int fileFlags, mode_t fileMode);
|
|
121
|
+
extern int CloseTransientFile(int fd);
|
|
122
|
+
|
|
123
|
+
/* If you've really really gotta have a plain kernel FD, use this */
|
|
124
|
+
extern int BasicOpenFile(const char *fileName, int fileFlags);
|
|
125
|
+
extern int BasicOpenFilePerm(const char *fileName, int fileFlags, mode_t fileMode);
|
|
126
|
+
|
|
127
|
+
/* Use these for other cases, and also for long-lived BasicOpenFile FDs */
|
|
128
|
+
extern bool AcquireExternalFD(void);
|
|
129
|
+
extern void ReserveExternalFD(void);
|
|
130
|
+
extern void ReleaseExternalFD(void);
|
|
131
|
+
|
|
132
|
+
/* Make a directory with default permissions */
|
|
133
|
+
extern int MakePGDirectory(const char *directoryName);
|
|
134
|
+
|
|
135
|
+
/* Miscellaneous support routines */
|
|
136
|
+
extern void InitFileAccess(void);
|
|
137
|
+
extern void set_max_safe_fds(void);
|
|
138
|
+
extern void closeAllVfds(void);
|
|
139
|
+
extern void SetTempTablespaces(Oid *tableSpaces, int numSpaces);
|
|
140
|
+
extern bool TempTablespacesAreSet(void);
|
|
141
|
+
extern int GetTempTablespaces(Oid *tableSpaces, int numSpaces);
|
|
142
|
+
extern Oid GetNextTempTableSpace(void);
|
|
143
|
+
extern void AtEOXact_Files(bool isCommit);
|
|
144
|
+
extern void AtEOSubXact_Files(bool isCommit, SubTransactionId mySubid,
|
|
145
|
+
SubTransactionId parentSubid);
|
|
146
|
+
extern void RemovePgTempFiles(void);
|
|
147
|
+
extern void RemovePgTempFilesInDir(const char *tmpdirname, bool missing_ok,
|
|
148
|
+
bool unlink_all);
|
|
149
|
+
extern bool looks_like_temp_rel_name(const char *name);
|
|
150
|
+
|
|
151
|
+
extern int pg_fsync(int fd);
|
|
152
|
+
extern int pg_fsync_no_writethrough(int fd);
|
|
153
|
+
extern int pg_fsync_writethrough(int fd);
|
|
154
|
+
extern int pg_fdatasync(int fd);
|
|
155
|
+
extern void pg_flush_data(int fd, off_t offset, off_t amount);
|
|
156
|
+
extern void fsync_fname(const char *fname, bool isdir);
|
|
157
|
+
extern int fsync_fname_ext(const char *fname, bool isdir, bool ignore_perm, int elevel);
|
|
158
|
+
extern int durable_rename(const char *oldfile, const char *newfile, int loglevel);
|
|
159
|
+
extern int durable_unlink(const char *fname, int loglevel);
|
|
160
|
+
extern int durable_rename_excl(const char *oldfile, const char *newfile, int loglevel);
|
|
161
|
+
extern void SyncDataDirectory(void);
|
|
162
|
+
extern int data_sync_elevel(int elevel);
|
|
163
|
+
|
|
164
|
+
/* Filename components */
|
|
165
|
+
#define PG_TEMP_FILES_DIR "pgsql_tmp"
|
|
166
|
+
#define PG_TEMP_FILE_PREFIX "pgsql_tmp"
|
|
167
|
+
|
|
168
|
+
#endif /* FD_H */
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* ipc.h
|
|
4
|
+
* POSTGRES inter-process communication definitions.
|
|
5
|
+
*
|
|
6
|
+
* This file is misnamed, as it no longer has much of anything directly
|
|
7
|
+
* to do with IPC. The functionality here is concerned with managing
|
|
8
|
+
* exit-time cleanup for either a postmaster or a backend.
|
|
9
|
+
*
|
|
10
|
+
*
|
|
11
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
|
12
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
13
|
+
*
|
|
14
|
+
* src/include/storage/ipc.h
|
|
15
|
+
*
|
|
16
|
+
*-------------------------------------------------------------------------
|
|
17
|
+
*/
|
|
18
|
+
#ifndef IPC_H
|
|
19
|
+
#define IPC_H
|
|
20
|
+
|
|
21
|
+
typedef void (*pg_on_exit_callback) (int code, Datum arg);
|
|
22
|
+
typedef void (*shmem_startup_hook_type) (void);
|
|
23
|
+
|
|
24
|
+
/*----------
|
|
25
|
+
* API for handling cleanup that must occur during either ereport(ERROR)
|
|
26
|
+
* or ereport(FATAL) exits from a block of code. (Typical examples are
|
|
27
|
+
* undoing transient changes to shared-memory state.)
|
|
28
|
+
*
|
|
29
|
+
* PG_ENSURE_ERROR_CLEANUP(cleanup_function, arg);
|
|
30
|
+
* {
|
|
31
|
+
* ... code that might throw ereport(ERROR) or ereport(FATAL) ...
|
|
32
|
+
* }
|
|
33
|
+
* PG_END_ENSURE_ERROR_CLEANUP(cleanup_function, arg);
|
|
34
|
+
*
|
|
35
|
+
* where the cleanup code is in a function declared per pg_on_exit_callback.
|
|
36
|
+
* The Datum value "arg" can carry any information the cleanup function
|
|
37
|
+
* needs.
|
|
38
|
+
*
|
|
39
|
+
* This construct ensures that cleanup_function() will be called during
|
|
40
|
+
* either ERROR or FATAL exits. It will not be called on successful
|
|
41
|
+
* exit from the controlled code. (If you want it to happen then too,
|
|
42
|
+
* call the function yourself from just after the construct.)
|
|
43
|
+
*
|
|
44
|
+
* Note: the macro arguments are multiply evaluated, so avoid side-effects.
|
|
45
|
+
*----------
|
|
46
|
+
*/
|
|
47
|
+
#define PG_ENSURE_ERROR_CLEANUP(cleanup_function, arg) \
|
|
48
|
+
do { \
|
|
49
|
+
before_shmem_exit(cleanup_function, arg); \
|
|
50
|
+
PG_TRY()
|
|
51
|
+
|
|
52
|
+
#define PG_END_ENSURE_ERROR_CLEANUP(cleanup_function, arg) \
|
|
53
|
+
cancel_before_shmem_exit(cleanup_function, arg); \
|
|
54
|
+
PG_CATCH(); \
|
|
55
|
+
{ \
|
|
56
|
+
cancel_before_shmem_exit(cleanup_function, arg); \
|
|
57
|
+
cleanup_function (0, arg); \
|
|
58
|
+
PG_RE_THROW(); \
|
|
59
|
+
} \
|
|
60
|
+
PG_END_TRY(); \
|
|
61
|
+
} while (0)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
/* ipc.c */
|
|
65
|
+
extern PGDLLIMPORT __thread bool proc_exit_inprogress;
|
|
66
|
+
extern PGDLLIMPORT bool shmem_exit_inprogress;
|
|
67
|
+
|
|
68
|
+
extern void proc_exit(int code) pg_attribute_noreturn();
|
|
69
|
+
extern void shmem_exit(int code);
|
|
70
|
+
extern void on_proc_exit(pg_on_exit_callback function, Datum arg);
|
|
71
|
+
extern void on_shmem_exit(pg_on_exit_callback function, Datum arg);
|
|
72
|
+
extern void before_shmem_exit(pg_on_exit_callback function, Datum arg);
|
|
73
|
+
extern void cancel_before_shmem_exit(pg_on_exit_callback function, Datum arg);
|
|
74
|
+
extern void on_exit_reset(void);
|
|
75
|
+
|
|
76
|
+
/* ipci.c */
|
|
77
|
+
extern PGDLLIMPORT shmem_startup_hook_type shmem_startup_hook;
|
|
78
|
+
|
|
79
|
+
extern void CreateSharedMemoryAndSemaphores(void);
|
|
80
|
+
|
|
81
|
+
#endif /* IPC_H */
|