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,219 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* syscache.h
|
|
4
|
+
* System catalog cache definitions.
|
|
5
|
+
*
|
|
6
|
+
* See also lsyscache.h, which provides convenience routines for
|
|
7
|
+
* common cache-lookup operations.
|
|
8
|
+
*
|
|
9
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
|
10
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
11
|
+
*
|
|
12
|
+
* src/include/utils/syscache.h
|
|
13
|
+
*
|
|
14
|
+
*-------------------------------------------------------------------------
|
|
15
|
+
*/
|
|
16
|
+
#ifndef SYSCACHE_H
|
|
17
|
+
#define SYSCACHE_H
|
|
18
|
+
|
|
19
|
+
#include "access/attnum.h"
|
|
20
|
+
#include "access/htup.h"
|
|
21
|
+
/* we intentionally do not include utils/catcache.h here */
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* SysCache identifiers.
|
|
25
|
+
*
|
|
26
|
+
* The order of these identifiers must match the order
|
|
27
|
+
* of the entries in the array cacheinfo[] in syscache.c.
|
|
28
|
+
* Keep them in alphabetical order (renumbering only costs a
|
|
29
|
+
* backend rebuild).
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
enum SysCacheIdentifier
|
|
33
|
+
{
|
|
34
|
+
AGGFNOID = 0,
|
|
35
|
+
AMNAME,
|
|
36
|
+
AMOID,
|
|
37
|
+
AMOPOPID,
|
|
38
|
+
AMOPSTRATEGY,
|
|
39
|
+
AMPROCNUM,
|
|
40
|
+
ATTNAME,
|
|
41
|
+
ATTNUM,
|
|
42
|
+
AUTHMEMMEMROLE,
|
|
43
|
+
AUTHMEMROLEMEM,
|
|
44
|
+
AUTHNAME,
|
|
45
|
+
AUTHOID,
|
|
46
|
+
CASTSOURCETARGET,
|
|
47
|
+
CLAAMNAMENSP,
|
|
48
|
+
CLAOID,
|
|
49
|
+
COLLNAMEENCNSP,
|
|
50
|
+
COLLOID,
|
|
51
|
+
CONDEFAULT,
|
|
52
|
+
CONNAMENSP,
|
|
53
|
+
CONSTROID,
|
|
54
|
+
CONVOID,
|
|
55
|
+
DATABASEOID,
|
|
56
|
+
DEFACLROLENSPOBJ,
|
|
57
|
+
ENUMOID,
|
|
58
|
+
ENUMTYPOIDNAME,
|
|
59
|
+
EVENTTRIGGERNAME,
|
|
60
|
+
EVENTTRIGGEROID,
|
|
61
|
+
FOREIGNDATAWRAPPERNAME,
|
|
62
|
+
FOREIGNDATAWRAPPEROID,
|
|
63
|
+
FOREIGNSERVERNAME,
|
|
64
|
+
FOREIGNSERVEROID,
|
|
65
|
+
FOREIGNTABLEREL,
|
|
66
|
+
INDEXRELID,
|
|
67
|
+
LANGNAME,
|
|
68
|
+
LANGOID,
|
|
69
|
+
NAMESPACENAME,
|
|
70
|
+
NAMESPACEOID,
|
|
71
|
+
OPERNAMENSP,
|
|
72
|
+
OPEROID,
|
|
73
|
+
OPFAMILYAMNAMENSP,
|
|
74
|
+
OPFAMILYOID,
|
|
75
|
+
PARTRELID,
|
|
76
|
+
PROCNAMEARGSNSP,
|
|
77
|
+
PROCOID,
|
|
78
|
+
PUBLICATIONNAME,
|
|
79
|
+
PUBLICATIONOID,
|
|
80
|
+
PUBLICATIONREL,
|
|
81
|
+
PUBLICATIONRELMAP,
|
|
82
|
+
RANGETYPE,
|
|
83
|
+
RELNAMENSP,
|
|
84
|
+
RELOID,
|
|
85
|
+
REPLORIGIDENT,
|
|
86
|
+
REPLORIGNAME,
|
|
87
|
+
RULERELNAME,
|
|
88
|
+
SEQRELID,
|
|
89
|
+
STATEXTDATASTXOID,
|
|
90
|
+
STATEXTNAMENSP,
|
|
91
|
+
STATEXTOID,
|
|
92
|
+
STATRELATTINH,
|
|
93
|
+
SUBSCRIPTIONNAME,
|
|
94
|
+
SUBSCRIPTIONOID,
|
|
95
|
+
SUBSCRIPTIONRELMAP,
|
|
96
|
+
TABLESPACEOID,
|
|
97
|
+
TRFOID,
|
|
98
|
+
TRFTYPELANG,
|
|
99
|
+
TSCONFIGMAP,
|
|
100
|
+
TSCONFIGNAMENSP,
|
|
101
|
+
TSCONFIGOID,
|
|
102
|
+
TSDICTNAMENSP,
|
|
103
|
+
TSDICTOID,
|
|
104
|
+
TSPARSERNAMENSP,
|
|
105
|
+
TSPARSEROID,
|
|
106
|
+
TSTEMPLATENAMENSP,
|
|
107
|
+
TSTEMPLATEOID,
|
|
108
|
+
TYPENAMENSP,
|
|
109
|
+
TYPEOID,
|
|
110
|
+
USERMAPPINGOID,
|
|
111
|
+
USERMAPPINGUSERSERVER
|
|
112
|
+
|
|
113
|
+
#define SysCacheSize (USERMAPPINGUSERSERVER + 1)
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
extern void InitCatalogCache(void);
|
|
117
|
+
extern void InitCatalogCachePhase2(void);
|
|
118
|
+
|
|
119
|
+
extern HeapTuple SearchSysCache(int cacheId,
|
|
120
|
+
Datum key1, Datum key2, Datum key3, Datum key4);
|
|
121
|
+
|
|
122
|
+
/*
|
|
123
|
+
* The use of argument specific numbers is encouraged. They're faster, and
|
|
124
|
+
* insulates the caller from changes in the maximum number of keys.
|
|
125
|
+
*/
|
|
126
|
+
extern HeapTuple SearchSysCache1(int cacheId,
|
|
127
|
+
Datum key1);
|
|
128
|
+
extern HeapTuple SearchSysCache2(int cacheId,
|
|
129
|
+
Datum key1, Datum key2);
|
|
130
|
+
extern HeapTuple SearchSysCache3(int cacheId,
|
|
131
|
+
Datum key1, Datum key2, Datum key3);
|
|
132
|
+
extern HeapTuple SearchSysCache4(int cacheId,
|
|
133
|
+
Datum key1, Datum key2, Datum key3, Datum key4);
|
|
134
|
+
|
|
135
|
+
extern void ReleaseSysCache(HeapTuple tuple);
|
|
136
|
+
|
|
137
|
+
/* convenience routines */
|
|
138
|
+
extern HeapTuple SearchSysCacheCopy(int cacheId,
|
|
139
|
+
Datum key1, Datum key2, Datum key3, Datum key4);
|
|
140
|
+
extern bool SearchSysCacheExists(int cacheId,
|
|
141
|
+
Datum key1, Datum key2, Datum key3, Datum key4);
|
|
142
|
+
extern Oid GetSysCacheOid(int cacheId, AttrNumber oidcol,
|
|
143
|
+
Datum key1, Datum key2, Datum key3, Datum key4);
|
|
144
|
+
|
|
145
|
+
extern HeapTuple SearchSysCacheAttName(Oid relid, const char *attname);
|
|
146
|
+
extern HeapTuple SearchSysCacheCopyAttName(Oid relid, const char *attname);
|
|
147
|
+
extern bool SearchSysCacheExistsAttName(Oid relid, const char *attname);
|
|
148
|
+
|
|
149
|
+
extern HeapTuple SearchSysCacheAttNum(Oid relid, int16 attnum);
|
|
150
|
+
extern HeapTuple SearchSysCacheCopyAttNum(Oid relid, int16 attnum);
|
|
151
|
+
|
|
152
|
+
extern Datum SysCacheGetAttr(int cacheId, HeapTuple tup,
|
|
153
|
+
AttrNumber attributeNumber, bool *isNull);
|
|
154
|
+
|
|
155
|
+
extern uint32 GetSysCacheHashValue(int cacheId,
|
|
156
|
+
Datum key1, Datum key2, Datum key3, Datum key4);
|
|
157
|
+
|
|
158
|
+
/* list-search interface. Users of this must import catcache.h too */
|
|
159
|
+
struct catclist;
|
|
160
|
+
extern struct catclist *SearchSysCacheList(int cacheId, int nkeys,
|
|
161
|
+
Datum key1, Datum key2, Datum key3);
|
|
162
|
+
|
|
163
|
+
extern void SysCacheInvalidate(int cacheId, uint32 hashValue);
|
|
164
|
+
|
|
165
|
+
extern bool RelationInvalidatesSnapshotsOnly(Oid relid);
|
|
166
|
+
extern bool RelationHasSysCache(Oid relid);
|
|
167
|
+
extern bool RelationSupportsSysCache(Oid relid);
|
|
168
|
+
|
|
169
|
+
/*
|
|
170
|
+
* The use of the macros below rather than direct calls to the corresponding
|
|
171
|
+
* functions is encouraged, as it insulates the caller from changes in the
|
|
172
|
+
* maximum number of keys.
|
|
173
|
+
*/
|
|
174
|
+
#define SearchSysCacheCopy1(cacheId, key1) \
|
|
175
|
+
SearchSysCacheCopy(cacheId, key1, 0, 0, 0)
|
|
176
|
+
#define SearchSysCacheCopy2(cacheId, key1, key2) \
|
|
177
|
+
SearchSysCacheCopy(cacheId, key1, key2, 0, 0)
|
|
178
|
+
#define SearchSysCacheCopy3(cacheId, key1, key2, key3) \
|
|
179
|
+
SearchSysCacheCopy(cacheId, key1, key2, key3, 0)
|
|
180
|
+
#define SearchSysCacheCopy4(cacheId, key1, key2, key3, key4) \
|
|
181
|
+
SearchSysCacheCopy(cacheId, key1, key2, key3, key4)
|
|
182
|
+
|
|
183
|
+
#define SearchSysCacheExists1(cacheId, key1) \
|
|
184
|
+
SearchSysCacheExists(cacheId, key1, 0, 0, 0)
|
|
185
|
+
#define SearchSysCacheExists2(cacheId, key1, key2) \
|
|
186
|
+
SearchSysCacheExists(cacheId, key1, key2, 0, 0)
|
|
187
|
+
#define SearchSysCacheExists3(cacheId, key1, key2, key3) \
|
|
188
|
+
SearchSysCacheExists(cacheId, key1, key2, key3, 0)
|
|
189
|
+
#define SearchSysCacheExists4(cacheId, key1, key2, key3, key4) \
|
|
190
|
+
SearchSysCacheExists(cacheId, key1, key2, key3, key4)
|
|
191
|
+
|
|
192
|
+
#define GetSysCacheOid1(cacheId, oidcol, key1) \
|
|
193
|
+
GetSysCacheOid(cacheId, oidcol, key1, 0, 0, 0)
|
|
194
|
+
#define GetSysCacheOid2(cacheId, oidcol, key1, key2) \
|
|
195
|
+
GetSysCacheOid(cacheId, oidcol, key1, key2, 0, 0)
|
|
196
|
+
#define GetSysCacheOid3(cacheId, oidcol, key1, key2, key3) \
|
|
197
|
+
GetSysCacheOid(cacheId, oidcol, key1, key2, key3, 0)
|
|
198
|
+
#define GetSysCacheOid4(cacheId, oidcol, key1, key2, key3, key4) \
|
|
199
|
+
GetSysCacheOid(cacheId, oidcol, key1, key2, key3, key4)
|
|
200
|
+
|
|
201
|
+
#define GetSysCacheHashValue1(cacheId, key1) \
|
|
202
|
+
GetSysCacheHashValue(cacheId, key1, 0, 0, 0)
|
|
203
|
+
#define GetSysCacheHashValue2(cacheId, key1, key2) \
|
|
204
|
+
GetSysCacheHashValue(cacheId, key1, key2, 0, 0)
|
|
205
|
+
#define GetSysCacheHashValue3(cacheId, key1, key2, key3) \
|
|
206
|
+
GetSysCacheHashValue(cacheId, key1, key2, key3, 0)
|
|
207
|
+
#define GetSysCacheHashValue4(cacheId, key1, key2, key3, key4) \
|
|
208
|
+
GetSysCacheHashValue(cacheId, key1, key2, key3, key4)
|
|
209
|
+
|
|
210
|
+
#define SearchSysCacheList1(cacheId, key1) \
|
|
211
|
+
SearchSysCacheList(cacheId, 1, key1, 0, 0)
|
|
212
|
+
#define SearchSysCacheList2(cacheId, key1, key2) \
|
|
213
|
+
SearchSysCacheList(cacheId, 2, key1, key2, 0)
|
|
214
|
+
#define SearchSysCacheList3(cacheId, key1, key2, key3) \
|
|
215
|
+
SearchSysCacheList(cacheId, 3, key1, key2, key3)
|
|
216
|
+
|
|
217
|
+
#define ReleaseSysCacheList(x) ReleaseCatCacheList(x)
|
|
218
|
+
|
|
219
|
+
#endif /* SYSCACHE_H */
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* timeout.h
|
|
4
|
+
* Routines to multiplex SIGALRM interrupts for multiple timeout reasons.
|
|
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/utils/timeout.h
|
|
11
|
+
*
|
|
12
|
+
*-------------------------------------------------------------------------
|
|
13
|
+
*/
|
|
14
|
+
#ifndef TIMEOUT_H
|
|
15
|
+
#define TIMEOUT_H
|
|
16
|
+
|
|
17
|
+
#include "datatype/timestamp.h"
|
|
18
|
+
|
|
19
|
+
/*
|
|
20
|
+
* Identifiers for timeout reasons. Note that in case multiple timeouts
|
|
21
|
+
* trigger at the same time, they are serviced in the order of this enum.
|
|
22
|
+
*/
|
|
23
|
+
typedef enum TimeoutId
|
|
24
|
+
{
|
|
25
|
+
/* Predefined timeout reasons */
|
|
26
|
+
STARTUP_PACKET_TIMEOUT,
|
|
27
|
+
DEADLOCK_TIMEOUT,
|
|
28
|
+
LOCK_TIMEOUT,
|
|
29
|
+
STATEMENT_TIMEOUT,
|
|
30
|
+
STANDBY_DEADLOCK_TIMEOUT,
|
|
31
|
+
STANDBY_TIMEOUT,
|
|
32
|
+
STANDBY_LOCK_TIMEOUT,
|
|
33
|
+
IDLE_IN_TRANSACTION_SESSION_TIMEOUT,
|
|
34
|
+
/* First user-definable timeout reason */
|
|
35
|
+
USER_TIMEOUT,
|
|
36
|
+
/* Maximum number of timeout reasons */
|
|
37
|
+
MAX_TIMEOUTS = 16
|
|
38
|
+
} TimeoutId;
|
|
39
|
+
|
|
40
|
+
/* callback function signature */
|
|
41
|
+
typedef void (*timeout_handler_proc) (void);
|
|
42
|
+
|
|
43
|
+
/*
|
|
44
|
+
* Parameter structure for setting multiple timeouts at once
|
|
45
|
+
*/
|
|
46
|
+
typedef enum TimeoutType
|
|
47
|
+
{
|
|
48
|
+
TMPARAM_AFTER,
|
|
49
|
+
TMPARAM_AT
|
|
50
|
+
} TimeoutType;
|
|
51
|
+
|
|
52
|
+
typedef struct
|
|
53
|
+
{
|
|
54
|
+
TimeoutId id; /* timeout to set */
|
|
55
|
+
TimeoutType type; /* TMPARAM_AFTER or TMPARAM_AT */
|
|
56
|
+
int delay_ms; /* only used for TMPARAM_AFTER */
|
|
57
|
+
TimestampTz fin_time; /* only used for TMPARAM_AT */
|
|
58
|
+
} EnableTimeoutParams;
|
|
59
|
+
|
|
60
|
+
/*
|
|
61
|
+
* Parameter structure for clearing multiple timeouts at once
|
|
62
|
+
*/
|
|
63
|
+
typedef struct
|
|
64
|
+
{
|
|
65
|
+
TimeoutId id; /* timeout to clear */
|
|
66
|
+
bool keep_indicator; /* keep the indicator flag? */
|
|
67
|
+
} DisableTimeoutParams;
|
|
68
|
+
|
|
69
|
+
/* timeout setup */
|
|
70
|
+
extern void InitializeTimeouts(void);
|
|
71
|
+
extern TimeoutId RegisterTimeout(TimeoutId id, timeout_handler_proc handler);
|
|
72
|
+
extern void reschedule_timeouts(void);
|
|
73
|
+
|
|
74
|
+
/* timeout operation */
|
|
75
|
+
extern void enable_timeout_after(TimeoutId id, int delay_ms);
|
|
76
|
+
extern void enable_timeout_at(TimeoutId id, TimestampTz fin_time);
|
|
77
|
+
extern void enable_timeouts(const EnableTimeoutParams *timeouts, int count);
|
|
78
|
+
extern void disable_timeout(TimeoutId id, bool keep_indicator);
|
|
79
|
+
extern void disable_timeouts(const DisableTimeoutParams *timeouts, int count);
|
|
80
|
+
extern void disable_all_timeouts(bool keep_indicators);
|
|
81
|
+
|
|
82
|
+
/* accessors */
|
|
83
|
+
extern bool get_timeout_active(TimeoutId id);
|
|
84
|
+
extern bool get_timeout_indicator(TimeoutId id, bool reset_indicator);
|
|
85
|
+
extern TimestampTz get_timeout_start_time(TimeoutId id);
|
|
86
|
+
extern TimestampTz get_timeout_finish_time(TimeoutId id);
|
|
87
|
+
|
|
88
|
+
#endif /* TIMEOUT_H */
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* timestamp.h
|
|
4
|
+
* Definitions for the SQL "timestamp" and "interval" types.
|
|
5
|
+
*
|
|
6
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
|
7
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
8
|
+
*
|
|
9
|
+
* src/include/utils/timestamp.h
|
|
10
|
+
*
|
|
11
|
+
*-------------------------------------------------------------------------
|
|
12
|
+
*/
|
|
13
|
+
#ifndef TIMESTAMP_H
|
|
14
|
+
#define TIMESTAMP_H
|
|
15
|
+
|
|
16
|
+
#include "datatype/timestamp.h"
|
|
17
|
+
#include "fmgr.h"
|
|
18
|
+
#include "pgtime.h"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
* Macros for fmgr-callable functions.
|
|
23
|
+
*
|
|
24
|
+
* For Timestamp, we make use of the same support routines as for int64.
|
|
25
|
+
* Therefore Timestamp is pass-by-reference if and only if int64 is!
|
|
26
|
+
*/
|
|
27
|
+
#define DatumGetTimestamp(X) ((Timestamp) DatumGetInt64(X))
|
|
28
|
+
#define DatumGetTimestampTz(X) ((TimestampTz) DatumGetInt64(X))
|
|
29
|
+
#define DatumGetIntervalP(X) ((Interval *) DatumGetPointer(X))
|
|
30
|
+
|
|
31
|
+
#define TimestampGetDatum(X) Int64GetDatum(X)
|
|
32
|
+
#define TimestampTzGetDatum(X) Int64GetDatum(X)
|
|
33
|
+
#define IntervalPGetDatum(X) PointerGetDatum(X)
|
|
34
|
+
|
|
35
|
+
#define PG_GETARG_TIMESTAMP(n) DatumGetTimestamp(PG_GETARG_DATUM(n))
|
|
36
|
+
#define PG_GETARG_TIMESTAMPTZ(n) DatumGetTimestampTz(PG_GETARG_DATUM(n))
|
|
37
|
+
#define PG_GETARG_INTERVAL_P(n) DatumGetIntervalP(PG_GETARG_DATUM(n))
|
|
38
|
+
|
|
39
|
+
#define PG_RETURN_TIMESTAMP(x) return TimestampGetDatum(x)
|
|
40
|
+
#define PG_RETURN_TIMESTAMPTZ(x) return TimestampTzGetDatum(x)
|
|
41
|
+
#define PG_RETURN_INTERVAL_P(x) return IntervalPGetDatum(x)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
#define TIMESTAMP_MASK(b) (1 << (b))
|
|
45
|
+
#define INTERVAL_MASK(b) (1 << (b))
|
|
46
|
+
|
|
47
|
+
/* Macros to handle packing and unpacking the typmod field for intervals */
|
|
48
|
+
#define INTERVAL_FULL_RANGE (0x7FFF)
|
|
49
|
+
#define INTERVAL_RANGE_MASK (0x7FFF)
|
|
50
|
+
#define INTERVAL_FULL_PRECISION (0xFFFF)
|
|
51
|
+
#define INTERVAL_PRECISION_MASK (0xFFFF)
|
|
52
|
+
#define INTERVAL_TYPMOD(p,r) ((((r) & INTERVAL_RANGE_MASK) << 16) | ((p) & INTERVAL_PRECISION_MASK))
|
|
53
|
+
#define INTERVAL_PRECISION(t) ((t) & INTERVAL_PRECISION_MASK)
|
|
54
|
+
#define INTERVAL_RANGE(t) (((t) >> 16) & INTERVAL_RANGE_MASK)
|
|
55
|
+
|
|
56
|
+
#define TimestampTzPlusMilliseconds(tz,ms) ((tz) + ((ms) * (int64) 1000))
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
/* Set at postmaster start */
|
|
60
|
+
extern TimestampTz PgStartTime;
|
|
61
|
+
|
|
62
|
+
/* Set at configuration reload */
|
|
63
|
+
extern TimestampTz PgReloadTime;
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
/* Internal routines (not fmgr-callable) */
|
|
67
|
+
|
|
68
|
+
extern int32 anytimestamp_typmod_check(bool istz, int32 typmod);
|
|
69
|
+
|
|
70
|
+
extern TimestampTz GetCurrentTimestamp(void);
|
|
71
|
+
extern TimestampTz GetSQLCurrentTimestamp(int32 typmod);
|
|
72
|
+
extern Timestamp GetSQLLocalTimestamp(int32 typmod);
|
|
73
|
+
extern void TimestampDifference(TimestampTz start_time, TimestampTz stop_time,
|
|
74
|
+
long *secs, int *microsecs);
|
|
75
|
+
extern long TimestampDifferenceMilliseconds(TimestampTz start_time,
|
|
76
|
+
TimestampTz stop_time);
|
|
77
|
+
extern bool TimestampDifferenceExceeds(TimestampTz start_time,
|
|
78
|
+
TimestampTz stop_time,
|
|
79
|
+
int msec);
|
|
80
|
+
|
|
81
|
+
extern TimestampTz time_t_to_timestamptz(pg_time_t tm);
|
|
82
|
+
extern pg_time_t timestamptz_to_time_t(TimestampTz t);
|
|
83
|
+
|
|
84
|
+
extern const char *timestamptz_to_str(TimestampTz t);
|
|
85
|
+
|
|
86
|
+
extern int tm2timestamp(struct pg_tm *tm, fsec_t fsec, int *tzp, Timestamp *dt);
|
|
87
|
+
extern int timestamp2tm(Timestamp dt, int *tzp, struct pg_tm *tm,
|
|
88
|
+
fsec_t *fsec, const char **tzn, pg_tz *attimezone);
|
|
89
|
+
extern void dt2time(Timestamp dt, int *hour, int *min, int *sec, fsec_t *fsec);
|
|
90
|
+
|
|
91
|
+
extern int interval2tm(Interval span, struct pg_tm *tm, fsec_t *fsec);
|
|
92
|
+
extern int tm2interval(struct pg_tm *tm, fsec_t fsec, Interval *span);
|
|
93
|
+
|
|
94
|
+
extern Timestamp SetEpochTimestamp(void);
|
|
95
|
+
extern void GetEpochTime(struct pg_tm *tm);
|
|
96
|
+
|
|
97
|
+
extern int timestamp_cmp_internal(Timestamp dt1, Timestamp dt2);
|
|
98
|
+
|
|
99
|
+
/* timestamp comparison works for timestamptz also */
|
|
100
|
+
#define timestamptz_cmp_internal(dt1,dt2) timestamp_cmp_internal(dt1, dt2)
|
|
101
|
+
|
|
102
|
+
extern TimestampTz timestamp2timestamptz_opt_overflow(Timestamp timestamp,
|
|
103
|
+
int *overflow);
|
|
104
|
+
extern int32 timestamp_cmp_timestamptz_internal(Timestamp timestampVal,
|
|
105
|
+
TimestampTz dt2);
|
|
106
|
+
|
|
107
|
+
extern int isoweek2j(int year, int week);
|
|
108
|
+
extern void isoweek2date(int woy, int *year, int *mon, int *mday);
|
|
109
|
+
extern void isoweekdate2date(int isoweek, int wday, int *year, int *mon, int *mday);
|
|
110
|
+
extern int date2isoweek(int year, int mon, int mday);
|
|
111
|
+
extern int date2isoyear(int year, int mon, int mday);
|
|
112
|
+
extern int date2isoyearday(int year, int mon, int mday);
|
|
113
|
+
|
|
114
|
+
extern bool TimestampTimestampTzRequiresRewrite(void);
|
|
115
|
+
|
|
116
|
+
#endif /* TIMESTAMP_H */
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* tuplesort.h
|
|
4
|
+
* Generalized tuple sorting routines.
|
|
5
|
+
*
|
|
6
|
+
* This module handles sorting of heap tuples, index tuples, or single
|
|
7
|
+
* Datums (and could easily support other kinds of sortable objects,
|
|
8
|
+
* if necessary). It works efficiently for both small and large amounts
|
|
9
|
+
* of data. Small amounts are sorted in-memory using qsort(). Large
|
|
10
|
+
* amounts are sorted using temporary files and a standard external sort
|
|
11
|
+
* algorithm. Parallel sorts use a variant of this external sort
|
|
12
|
+
* algorithm, and are typically only used for large amounts of data.
|
|
13
|
+
*
|
|
14
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
|
15
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
16
|
+
*
|
|
17
|
+
* src/include/utils/tuplesort.h
|
|
18
|
+
*
|
|
19
|
+
*-------------------------------------------------------------------------
|
|
20
|
+
*/
|
|
21
|
+
#ifndef TUPLESORT_H
|
|
22
|
+
#define TUPLESORT_H
|
|
23
|
+
|
|
24
|
+
#include "access/itup.h"
|
|
25
|
+
#include "executor/tuptable.h"
|
|
26
|
+
#include "storage/dsm.h"
|
|
27
|
+
#include "utils/relcache.h"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
/*
|
|
31
|
+
* Tuplesortstate and Sharedsort are opaque types whose details are not
|
|
32
|
+
* known outside tuplesort.c.
|
|
33
|
+
*/
|
|
34
|
+
typedef struct Tuplesortstate Tuplesortstate;
|
|
35
|
+
typedef struct Sharedsort Sharedsort;
|
|
36
|
+
|
|
37
|
+
/*
|
|
38
|
+
* Tuplesort parallel coordination state, allocated by each participant in
|
|
39
|
+
* local memory. Participant caller initializes everything. See usage notes
|
|
40
|
+
* below.
|
|
41
|
+
*/
|
|
42
|
+
typedef struct SortCoordinateData
|
|
43
|
+
{
|
|
44
|
+
/* Worker process? If not, must be leader. */
|
|
45
|
+
bool isWorker;
|
|
46
|
+
|
|
47
|
+
/*
|
|
48
|
+
* Leader-process-passed number of participants known launched (workers
|
|
49
|
+
* set this to -1). Includes state within leader needed for it to
|
|
50
|
+
* participate as a worker, if any.
|
|
51
|
+
*/
|
|
52
|
+
int nParticipants;
|
|
53
|
+
|
|
54
|
+
/* Private opaque state (points to shared memory) */
|
|
55
|
+
Sharedsort *sharedsort;
|
|
56
|
+
} SortCoordinateData;
|
|
57
|
+
|
|
58
|
+
typedef struct SortCoordinateData *SortCoordinate;
|
|
59
|
+
|
|
60
|
+
/*
|
|
61
|
+
* Data structures for reporting sort statistics. Note that
|
|
62
|
+
* TuplesortInstrumentation can't contain any pointers because we
|
|
63
|
+
* sometimes put it in shared memory.
|
|
64
|
+
*
|
|
65
|
+
* The parallel-sort infrastructure relies on having a zero TuplesortMethod
|
|
66
|
+
* to indicate that a worker never did anything, so we assign zero to
|
|
67
|
+
* SORT_TYPE_STILL_IN_PROGRESS. The other values of this enum can be
|
|
68
|
+
* OR'ed together to represent a situation where different workers used
|
|
69
|
+
* different methods, so we need a separate bit for each one. Keep the
|
|
70
|
+
* NUM_TUPLESORTMETHODS constant in sync with the number of bits!
|
|
71
|
+
*/
|
|
72
|
+
typedef enum
|
|
73
|
+
{
|
|
74
|
+
SORT_TYPE_STILL_IN_PROGRESS = 0,
|
|
75
|
+
SORT_TYPE_TOP_N_HEAPSORT = 1 << 0,
|
|
76
|
+
SORT_TYPE_QUICKSORT = 1 << 1,
|
|
77
|
+
SORT_TYPE_EXTERNAL_SORT = 1 << 2,
|
|
78
|
+
SORT_TYPE_EXTERNAL_MERGE = 1 << 3
|
|
79
|
+
} TuplesortMethod;
|
|
80
|
+
|
|
81
|
+
#define NUM_TUPLESORTMETHODS 4
|
|
82
|
+
|
|
83
|
+
typedef enum
|
|
84
|
+
{
|
|
85
|
+
SORT_SPACE_TYPE_DISK,
|
|
86
|
+
SORT_SPACE_TYPE_MEMORY
|
|
87
|
+
} TuplesortSpaceType;
|
|
88
|
+
|
|
89
|
+
typedef struct TuplesortInstrumentation
|
|
90
|
+
{
|
|
91
|
+
TuplesortMethod sortMethod; /* sort algorithm used */
|
|
92
|
+
TuplesortSpaceType spaceType; /* type of space spaceUsed represents */
|
|
93
|
+
int64 spaceUsed; /* space consumption, in kB */
|
|
94
|
+
} TuplesortInstrumentation;
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
/*
|
|
98
|
+
* We provide multiple interfaces to what is essentially the same code,
|
|
99
|
+
* since different callers have different data to be sorted and want to
|
|
100
|
+
* specify the sort key information differently. There are two APIs for
|
|
101
|
+
* sorting HeapTuples and two more for sorting IndexTuples. Yet another
|
|
102
|
+
* API supports sorting bare Datums.
|
|
103
|
+
*
|
|
104
|
+
* Serial sort callers should pass NULL for their coordinate argument.
|
|
105
|
+
*
|
|
106
|
+
* The "heap" API actually stores/sorts MinimalTuples, which means it doesn't
|
|
107
|
+
* preserve the system columns (tuple identity and transaction visibility
|
|
108
|
+
* info). The sort keys are specified by column numbers within the tuples
|
|
109
|
+
* and sort operator OIDs. We save some cycles by passing and returning the
|
|
110
|
+
* tuples in TupleTableSlots, rather than forming actual HeapTuples (which'd
|
|
111
|
+
* have to be converted to MinimalTuples). This API works well for sorts
|
|
112
|
+
* executed as parts of plan trees.
|
|
113
|
+
*
|
|
114
|
+
* The "cluster" API stores/sorts full HeapTuples including all visibility
|
|
115
|
+
* info. The sort keys are specified by reference to a btree index that is
|
|
116
|
+
* defined on the relation to be sorted. Note that putheaptuple/getheaptuple
|
|
117
|
+
* go with this API, not the "begin_heap" one!
|
|
118
|
+
*
|
|
119
|
+
* The "index_btree" API stores/sorts IndexTuples (preserving all their
|
|
120
|
+
* header fields). The sort keys are specified by a btree index definition.
|
|
121
|
+
*
|
|
122
|
+
* The "index_hash" API is similar to index_btree, but the tuples are
|
|
123
|
+
* actually sorted by their hash codes not the raw data.
|
|
124
|
+
*
|
|
125
|
+
* Parallel sort callers are required to coordinate multiple tuplesort states
|
|
126
|
+
* in a leader process and one or more worker processes. The leader process
|
|
127
|
+
* must launch workers, and have each perform an independent "partial"
|
|
128
|
+
* tuplesort, typically fed by the parallel heap interface. The leader later
|
|
129
|
+
* produces the final output (internally, it merges runs output by workers).
|
|
130
|
+
*
|
|
131
|
+
* Callers must do the following to perform a sort in parallel using multiple
|
|
132
|
+
* worker processes:
|
|
133
|
+
*
|
|
134
|
+
* 1. Request tuplesort-private shared memory for n workers. Use
|
|
135
|
+
* tuplesort_estimate_shared() to get the required size.
|
|
136
|
+
* 2. Have leader process initialize allocated shared memory using
|
|
137
|
+
* tuplesort_initialize_shared(). Launch workers.
|
|
138
|
+
* 3. Initialize a coordinate argument within both the leader process, and
|
|
139
|
+
* for each worker process. This has a pointer to the shared
|
|
140
|
+
* tuplesort-private structure, as well as some caller-initialized fields.
|
|
141
|
+
* Leader's coordinate argument reliably indicates number of workers
|
|
142
|
+
* launched (this is unused by workers).
|
|
143
|
+
* 4. Begin a tuplesort using some appropriate tuplesort_begin* routine,
|
|
144
|
+
* (passing the coordinate argument) within each worker. The workMem
|
|
145
|
+
* arguments need not be identical. All other arguments should match
|
|
146
|
+
* exactly, though.
|
|
147
|
+
* 5. tuplesort_attach_shared() should be called by all workers. Feed tuples
|
|
148
|
+
* to each worker, and call tuplesort_performsort() within each when input
|
|
149
|
+
* is exhausted.
|
|
150
|
+
* 6. Call tuplesort_end() in each worker process. Worker processes can shut
|
|
151
|
+
* down once tuplesort_end() returns.
|
|
152
|
+
* 7. Begin a tuplesort in the leader using the same tuplesort_begin*
|
|
153
|
+
* routine, passing a leader-appropriate coordinate argument (this can
|
|
154
|
+
* happen as early as during step 3, actually, since we only need to know
|
|
155
|
+
* the number of workers successfully launched). The leader must now wait
|
|
156
|
+
* for workers to finish. Caller must use own mechanism for ensuring that
|
|
157
|
+
* next step isn't reached until all workers have called and returned from
|
|
158
|
+
* tuplesort_performsort(). (Note that it's okay if workers have already
|
|
159
|
+
* also called tuplesort_end() by then.)
|
|
160
|
+
* 8. Call tuplesort_performsort() in leader. Consume output using the
|
|
161
|
+
* appropriate tuplesort_get* routine. Leader can skip this step if
|
|
162
|
+
* tuplesort turns out to be unnecessary.
|
|
163
|
+
* 9. Call tuplesort_end() in leader.
|
|
164
|
+
*
|
|
165
|
+
* This division of labor assumes nothing about how input tuples are produced,
|
|
166
|
+
* but does require that caller combine the state of multiple tuplesorts for
|
|
167
|
+
* any purpose other than producing the final output. For example, callers
|
|
168
|
+
* must consider that tuplesort_get_stats() reports on only one worker's role
|
|
169
|
+
* in a sort (or the leader's role), and not statistics for the sort as a
|
|
170
|
+
* whole.
|
|
171
|
+
*
|
|
172
|
+
* Note that callers may use the leader process to sort runs as if it was an
|
|
173
|
+
* independent worker process (prior to the process performing a leader sort
|
|
174
|
+
* to produce the final sorted output). Doing so only requires a second
|
|
175
|
+
* "partial" tuplesort within the leader process, initialized like that of a
|
|
176
|
+
* worker process. The steps above don't touch on this directly. The only
|
|
177
|
+
* difference is that the tuplesort_attach_shared() call is never needed within
|
|
178
|
+
* leader process, because the backend as a whole holds the shared fileset
|
|
179
|
+
* reference. A worker Tuplesortstate in leader is expected to do exactly the
|
|
180
|
+
* same amount of total initial processing work as a worker process
|
|
181
|
+
* Tuplesortstate, since the leader process has nothing else to do before
|
|
182
|
+
* workers finish.
|
|
183
|
+
*
|
|
184
|
+
* Note that only a very small amount of memory will be allocated prior to
|
|
185
|
+
* the leader state first consuming input, and that workers will free the
|
|
186
|
+
* vast majority of their memory upon returning from tuplesort_performsort().
|
|
187
|
+
* Callers can rely on this to arrange for memory to be used in a way that
|
|
188
|
+
* respects a workMem-style budget across an entire parallel sort operation.
|
|
189
|
+
*
|
|
190
|
+
* Callers are responsible for parallel safety in general. However, they
|
|
191
|
+
* can at least rely on there being no parallel safety hazards within
|
|
192
|
+
* tuplesort, because tuplesort thinks of the sort as several independent
|
|
193
|
+
* sorts whose results are combined. Since, in general, the behavior of
|
|
194
|
+
* sort operators is immutable, caller need only worry about the parallel
|
|
195
|
+
* safety of whatever the process is through which input tuples are
|
|
196
|
+
* generated (typically, caller uses a parallel heap scan).
|
|
197
|
+
*/
|
|
198
|
+
|
|
199
|
+
extern Tuplesortstate *tuplesort_begin_heap(TupleDesc tupDesc,
|
|
200
|
+
int nkeys, AttrNumber *attNums,
|
|
201
|
+
Oid *sortOperators, Oid *sortCollations,
|
|
202
|
+
bool *nullsFirstFlags,
|
|
203
|
+
int workMem, SortCoordinate coordinate,
|
|
204
|
+
bool randomAccess);
|
|
205
|
+
extern Tuplesortstate *tuplesort_begin_cluster(TupleDesc tupDesc,
|
|
206
|
+
Relation indexRel, int workMem,
|
|
207
|
+
SortCoordinate coordinate, bool randomAccess);
|
|
208
|
+
extern Tuplesortstate *tuplesort_begin_index_btree(Relation heapRel,
|
|
209
|
+
Relation indexRel,
|
|
210
|
+
bool enforceUnique,
|
|
211
|
+
int workMem, SortCoordinate coordinate,
|
|
212
|
+
bool randomAccess);
|
|
213
|
+
extern Tuplesortstate *tuplesort_begin_index_hash(Relation heapRel,
|
|
214
|
+
Relation indexRel,
|
|
215
|
+
uint32 high_mask,
|
|
216
|
+
uint32 low_mask,
|
|
217
|
+
uint32 max_buckets,
|
|
218
|
+
int workMem, SortCoordinate coordinate,
|
|
219
|
+
bool randomAccess);
|
|
220
|
+
extern Tuplesortstate *tuplesort_begin_datum(Oid datumType,
|
|
221
|
+
Oid sortOperator, Oid sortCollation,
|
|
222
|
+
bool nullsFirstFlag,
|
|
223
|
+
int workMem, SortCoordinate coordinate,
|
|
224
|
+
bool randomAccess);
|
|
225
|
+
|
|
226
|
+
extern void tuplesort_set_bound(Tuplesortstate *state, int64 bound);
|
|
227
|
+
extern bool tuplesort_used_bound(Tuplesortstate *state);
|
|
228
|
+
|
|
229
|
+
extern void tuplesort_puttupleslot(Tuplesortstate *state,
|
|
230
|
+
TupleTableSlot *slot);
|
|
231
|
+
extern void tuplesort_putheaptuple(Tuplesortstate *state, HeapTuple tup);
|
|
232
|
+
extern void tuplesort_putindextuplevalues(Tuplesortstate *state,
|
|
233
|
+
Relation rel, ItemPointer self,
|
|
234
|
+
Datum *values, bool *isnull);
|
|
235
|
+
extern void tuplesort_putdatum(Tuplesortstate *state, Datum val,
|
|
236
|
+
bool isNull);
|
|
237
|
+
|
|
238
|
+
extern void tuplesort_performsort(Tuplesortstate *state);
|
|
239
|
+
|
|
240
|
+
extern bool tuplesort_gettupleslot(Tuplesortstate *state, bool forward,
|
|
241
|
+
bool copy, TupleTableSlot *slot, Datum *abbrev);
|
|
242
|
+
extern HeapTuple tuplesort_getheaptuple(Tuplesortstate *state, bool forward);
|
|
243
|
+
extern IndexTuple tuplesort_getindextuple(Tuplesortstate *state, bool forward);
|
|
244
|
+
extern bool tuplesort_getdatum(Tuplesortstate *state, bool forward,
|
|
245
|
+
Datum *val, bool *isNull, Datum *abbrev);
|
|
246
|
+
|
|
247
|
+
extern bool tuplesort_skiptuples(Tuplesortstate *state, int64 ntuples,
|
|
248
|
+
bool forward);
|
|
249
|
+
|
|
250
|
+
extern void tuplesort_end(Tuplesortstate *state);
|
|
251
|
+
|
|
252
|
+
extern void tuplesort_reset(Tuplesortstate *state);
|
|
253
|
+
|
|
254
|
+
extern void tuplesort_get_stats(Tuplesortstate *state,
|
|
255
|
+
TuplesortInstrumentation *stats);
|
|
256
|
+
extern const char *tuplesort_method_name(TuplesortMethod m);
|
|
257
|
+
extern const char *tuplesort_space_type_name(TuplesortSpaceType t);
|
|
258
|
+
|
|
259
|
+
extern int tuplesort_merge_order(int64 allowedMem);
|
|
260
|
+
|
|
261
|
+
extern Size tuplesort_estimate_shared(int nworkers);
|
|
262
|
+
extern void tuplesort_initialize_shared(Sharedsort *shared, int nWorkers,
|
|
263
|
+
dsm_segment *seg);
|
|
264
|
+
extern void tuplesort_attach_shared(Sharedsort *shared, dsm_segment *seg);
|
|
265
|
+
|
|
266
|
+
/*
|
|
267
|
+
* These routines may only be called if randomAccess was specified 'true'.
|
|
268
|
+
* Likewise, backwards scan in gettuple/getdatum is only allowed if
|
|
269
|
+
* randomAccess was specified. Note that parallel sorts do not support
|
|
270
|
+
* randomAccess.
|
|
271
|
+
*/
|
|
272
|
+
|
|
273
|
+
extern void tuplesort_rescan(Tuplesortstate *state);
|
|
274
|
+
extern void tuplesort_markpos(Tuplesortstate *state);
|
|
275
|
+
extern void tuplesort_restorepos(Tuplesortstate *state);
|
|
276
|
+
|
|
277
|
+
#endif /* TUPLESORT_H */
|