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,19 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* item.h
|
|
4
|
+
* POSTGRES disk item 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/item.h
|
|
11
|
+
*
|
|
12
|
+
*-------------------------------------------------------------------------
|
|
13
|
+
*/
|
|
14
|
+
#ifndef ITEM_H
|
|
15
|
+
#define ITEM_H
|
|
16
|
+
|
|
17
|
+
typedef Pointer Item;
|
|
18
|
+
|
|
19
|
+
#endif /* ITEM_H */
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* itemid.h
|
|
4
|
+
* Standard POSTGRES buffer page item identifier/line pointer 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/itemid.h
|
|
11
|
+
*
|
|
12
|
+
*-------------------------------------------------------------------------
|
|
13
|
+
*/
|
|
14
|
+
#ifndef ITEMID_H
|
|
15
|
+
#define ITEMID_H
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
* A line pointer on a buffer page. See buffer page definitions and comments
|
|
19
|
+
* for an explanation of how line pointers are used.
|
|
20
|
+
*
|
|
21
|
+
* In some cases a line pointer is "in use" but does not have any associated
|
|
22
|
+
* storage on the page. By convention, lp_len == 0 in every line pointer
|
|
23
|
+
* that does not have storage, independently of its lp_flags state.
|
|
24
|
+
*/
|
|
25
|
+
typedef struct ItemIdData
|
|
26
|
+
{
|
|
27
|
+
unsigned lp_off:15, /* offset to tuple (from start of page) */
|
|
28
|
+
lp_flags:2, /* state of line pointer, see below */
|
|
29
|
+
lp_len:15; /* byte length of tuple */
|
|
30
|
+
} ItemIdData;
|
|
31
|
+
|
|
32
|
+
typedef ItemIdData *ItemId;
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
* lp_flags has these possible states. An UNUSED line pointer is available
|
|
36
|
+
* for immediate re-use, the other states are not.
|
|
37
|
+
*/
|
|
38
|
+
#define LP_UNUSED 0 /* unused (should always have lp_len=0) */
|
|
39
|
+
#define LP_NORMAL 1 /* used (should always have lp_len>0) */
|
|
40
|
+
#define LP_REDIRECT 2 /* HOT redirect (should have lp_len=0) */
|
|
41
|
+
#define LP_DEAD 3 /* dead, may or may not have storage */
|
|
42
|
+
|
|
43
|
+
/*
|
|
44
|
+
* Item offsets and lengths are represented by these types when
|
|
45
|
+
* they're not actually stored in an ItemIdData.
|
|
46
|
+
*/
|
|
47
|
+
typedef uint16 ItemOffset;
|
|
48
|
+
typedef uint16 ItemLength;
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
/* ----------------
|
|
52
|
+
* support macros
|
|
53
|
+
* ----------------
|
|
54
|
+
*/
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
* ItemIdGetLength
|
|
58
|
+
*/
|
|
59
|
+
#define ItemIdGetLength(itemId) \
|
|
60
|
+
((itemId)->lp_len)
|
|
61
|
+
|
|
62
|
+
/*
|
|
63
|
+
* ItemIdGetOffset
|
|
64
|
+
*/
|
|
65
|
+
#define ItemIdGetOffset(itemId) \
|
|
66
|
+
((itemId)->lp_off)
|
|
67
|
+
|
|
68
|
+
/*
|
|
69
|
+
* ItemIdGetFlags
|
|
70
|
+
*/
|
|
71
|
+
#define ItemIdGetFlags(itemId) \
|
|
72
|
+
((itemId)->lp_flags)
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
* ItemIdGetRedirect
|
|
76
|
+
* In a REDIRECT pointer, lp_off holds offset number for next line pointer
|
|
77
|
+
*/
|
|
78
|
+
#define ItemIdGetRedirect(itemId) \
|
|
79
|
+
((itemId)->lp_off)
|
|
80
|
+
|
|
81
|
+
/*
|
|
82
|
+
* ItemIdIsValid
|
|
83
|
+
* True iff item identifier is valid.
|
|
84
|
+
* This is a pretty weak test, probably useful only in Asserts.
|
|
85
|
+
*/
|
|
86
|
+
#define ItemIdIsValid(itemId) PointerIsValid(itemId)
|
|
87
|
+
|
|
88
|
+
/*
|
|
89
|
+
* ItemIdIsUsed
|
|
90
|
+
* True iff item identifier is in use.
|
|
91
|
+
*/
|
|
92
|
+
#define ItemIdIsUsed(itemId) \
|
|
93
|
+
((itemId)->lp_flags != LP_UNUSED)
|
|
94
|
+
|
|
95
|
+
/*
|
|
96
|
+
* ItemIdIsNormal
|
|
97
|
+
* True iff item identifier is in state NORMAL.
|
|
98
|
+
*/
|
|
99
|
+
#define ItemIdIsNormal(itemId) \
|
|
100
|
+
((itemId)->lp_flags == LP_NORMAL)
|
|
101
|
+
|
|
102
|
+
/*
|
|
103
|
+
* ItemIdIsRedirected
|
|
104
|
+
* True iff item identifier is in state REDIRECT.
|
|
105
|
+
*/
|
|
106
|
+
#define ItemIdIsRedirected(itemId) \
|
|
107
|
+
((itemId)->lp_flags == LP_REDIRECT)
|
|
108
|
+
|
|
109
|
+
/*
|
|
110
|
+
* ItemIdIsDead
|
|
111
|
+
* True iff item identifier is in state DEAD.
|
|
112
|
+
*/
|
|
113
|
+
#define ItemIdIsDead(itemId) \
|
|
114
|
+
((itemId)->lp_flags == LP_DEAD)
|
|
115
|
+
|
|
116
|
+
/*
|
|
117
|
+
* ItemIdHasStorage
|
|
118
|
+
* True iff item identifier has associated storage.
|
|
119
|
+
*/
|
|
120
|
+
#define ItemIdHasStorage(itemId) \
|
|
121
|
+
((itemId)->lp_len != 0)
|
|
122
|
+
|
|
123
|
+
/*
|
|
124
|
+
* ItemIdSetUnused
|
|
125
|
+
* Set the item identifier to be UNUSED, with no storage.
|
|
126
|
+
* Beware of multiple evaluations of itemId!
|
|
127
|
+
*/
|
|
128
|
+
#define ItemIdSetUnused(itemId) \
|
|
129
|
+
( \
|
|
130
|
+
(itemId)->lp_flags = LP_UNUSED, \
|
|
131
|
+
(itemId)->lp_off = 0, \
|
|
132
|
+
(itemId)->lp_len = 0 \
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
/*
|
|
136
|
+
* ItemIdSetNormal
|
|
137
|
+
* Set the item identifier to be NORMAL, with the specified storage.
|
|
138
|
+
* Beware of multiple evaluations of itemId!
|
|
139
|
+
*/
|
|
140
|
+
#define ItemIdSetNormal(itemId, off, len) \
|
|
141
|
+
( \
|
|
142
|
+
(itemId)->lp_flags = LP_NORMAL, \
|
|
143
|
+
(itemId)->lp_off = (off), \
|
|
144
|
+
(itemId)->lp_len = (len) \
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
/*
|
|
148
|
+
* ItemIdSetRedirect
|
|
149
|
+
* Set the item identifier to be REDIRECT, with the specified link.
|
|
150
|
+
* Beware of multiple evaluations of itemId!
|
|
151
|
+
*/
|
|
152
|
+
#define ItemIdSetRedirect(itemId, link) \
|
|
153
|
+
( \
|
|
154
|
+
(itemId)->lp_flags = LP_REDIRECT, \
|
|
155
|
+
(itemId)->lp_off = (link), \
|
|
156
|
+
(itemId)->lp_len = 0 \
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
/*
|
|
160
|
+
* ItemIdSetDead
|
|
161
|
+
* Set the item identifier to be DEAD, with no storage.
|
|
162
|
+
* Beware of multiple evaluations of itemId!
|
|
163
|
+
*/
|
|
164
|
+
#define ItemIdSetDead(itemId) \
|
|
165
|
+
( \
|
|
166
|
+
(itemId)->lp_flags = LP_DEAD, \
|
|
167
|
+
(itemId)->lp_off = 0, \
|
|
168
|
+
(itemId)->lp_len = 0 \
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
/*
|
|
172
|
+
* ItemIdMarkDead
|
|
173
|
+
* Set the item identifier to be DEAD, keeping its existing storage.
|
|
174
|
+
*
|
|
175
|
+
* Note: in indexes, this is used as if it were a hint-bit mechanism;
|
|
176
|
+
* we trust that multiple processors can do this in parallel and get
|
|
177
|
+
* the same result.
|
|
178
|
+
*/
|
|
179
|
+
#define ItemIdMarkDead(itemId) \
|
|
180
|
+
( \
|
|
181
|
+
(itemId)->lp_flags = LP_DEAD \
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
#endif /* ITEMID_H */
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* itemptr.h
|
|
4
|
+
* POSTGRES disk item pointer 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/itemptr.h
|
|
11
|
+
*
|
|
12
|
+
*-------------------------------------------------------------------------
|
|
13
|
+
*/
|
|
14
|
+
#ifndef ITEMPTR_H
|
|
15
|
+
#define ITEMPTR_H
|
|
16
|
+
|
|
17
|
+
#include "storage/block.h"
|
|
18
|
+
#include "storage/off.h"
|
|
19
|
+
|
|
20
|
+
/*
|
|
21
|
+
* ItemPointer:
|
|
22
|
+
*
|
|
23
|
+
* This is a pointer to an item within a disk page of a known file
|
|
24
|
+
* (for example, a cross-link from an index to its parent table).
|
|
25
|
+
* ip_blkid tells us which block, ip_posid tells us which entry in
|
|
26
|
+
* the linp (ItemIdData) array we want.
|
|
27
|
+
*
|
|
28
|
+
* Note: because there is an item pointer in each tuple header and index
|
|
29
|
+
* tuple header on disk, it's very important not to waste space with
|
|
30
|
+
* structure padding bytes. The struct is designed to be six bytes long
|
|
31
|
+
* (it contains three int16 fields) but a few compilers will pad it to
|
|
32
|
+
* eight bytes unless coerced. We apply appropriate persuasion where
|
|
33
|
+
* possible. If your compiler can't be made to play along, you'll waste
|
|
34
|
+
* lots of space.
|
|
35
|
+
*/
|
|
36
|
+
typedef struct ItemPointerData
|
|
37
|
+
{
|
|
38
|
+
BlockIdData ip_blkid;
|
|
39
|
+
OffsetNumber ip_posid;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* If compiler understands packed and aligned pragmas, use those */
|
|
43
|
+
#if defined(pg_attribute_packed) && defined(pg_attribute_aligned)
|
|
44
|
+
pg_attribute_packed()
|
|
45
|
+
pg_attribute_aligned(2)
|
|
46
|
+
#endif
|
|
47
|
+
ItemPointerData;
|
|
48
|
+
|
|
49
|
+
typedef ItemPointerData *ItemPointer;
|
|
50
|
+
|
|
51
|
+
/* ----------------
|
|
52
|
+
* special values used in heap tuples (t_ctid)
|
|
53
|
+
* ----------------
|
|
54
|
+
*/
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
* If a heap tuple holds a speculative insertion token rather than a real
|
|
58
|
+
* TID, ip_posid is set to SpecTokenOffsetNumber, and the token is stored in
|
|
59
|
+
* ip_blkid. SpecTokenOffsetNumber must be higher than MaxOffsetNumber, so
|
|
60
|
+
* that it can be distinguished from a valid offset number in a regular item
|
|
61
|
+
* pointer.
|
|
62
|
+
*/
|
|
63
|
+
#define SpecTokenOffsetNumber 0xfffe
|
|
64
|
+
|
|
65
|
+
/*
|
|
66
|
+
* When a tuple is moved to a different partition by UPDATE, the t_ctid of
|
|
67
|
+
* the old tuple version is set to this magic value.
|
|
68
|
+
*/
|
|
69
|
+
#define MovedPartitionsOffsetNumber 0xfffd
|
|
70
|
+
#define MovedPartitionsBlockNumber InvalidBlockNumber
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
/* ----------------
|
|
74
|
+
* support macros
|
|
75
|
+
* ----------------
|
|
76
|
+
*/
|
|
77
|
+
|
|
78
|
+
/*
|
|
79
|
+
* ItemPointerIsValid
|
|
80
|
+
* True iff the disk item pointer is not NULL.
|
|
81
|
+
*/
|
|
82
|
+
#define ItemPointerIsValid(pointer) \
|
|
83
|
+
((bool) (PointerIsValid(pointer) && ((pointer)->ip_posid != 0)))
|
|
84
|
+
|
|
85
|
+
/*
|
|
86
|
+
* ItemPointerGetBlockNumberNoCheck
|
|
87
|
+
* Returns the block number of a disk item pointer.
|
|
88
|
+
*/
|
|
89
|
+
#define ItemPointerGetBlockNumberNoCheck(pointer) \
|
|
90
|
+
( \
|
|
91
|
+
BlockIdGetBlockNumber(&(pointer)->ip_blkid) \
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
/*
|
|
95
|
+
* ItemPointerGetBlockNumber
|
|
96
|
+
* As above, but verifies that the item pointer looks valid.
|
|
97
|
+
*/
|
|
98
|
+
#define ItemPointerGetBlockNumber(pointer) \
|
|
99
|
+
( \
|
|
100
|
+
AssertMacro(ItemPointerIsValid(pointer)), \
|
|
101
|
+
ItemPointerGetBlockNumberNoCheck(pointer) \
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
/*
|
|
105
|
+
* ItemPointerGetOffsetNumberNoCheck
|
|
106
|
+
* Returns the offset number of a disk item pointer.
|
|
107
|
+
*/
|
|
108
|
+
#define ItemPointerGetOffsetNumberNoCheck(pointer) \
|
|
109
|
+
( \
|
|
110
|
+
(pointer)->ip_posid \
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
/*
|
|
114
|
+
* ItemPointerGetOffsetNumber
|
|
115
|
+
* As above, but verifies that the item pointer looks valid.
|
|
116
|
+
*/
|
|
117
|
+
#define ItemPointerGetOffsetNumber(pointer) \
|
|
118
|
+
( \
|
|
119
|
+
AssertMacro(ItemPointerIsValid(pointer)), \
|
|
120
|
+
ItemPointerGetOffsetNumberNoCheck(pointer) \
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
/*
|
|
124
|
+
* ItemPointerSet
|
|
125
|
+
* Sets a disk item pointer to the specified block and offset.
|
|
126
|
+
*/
|
|
127
|
+
#define ItemPointerSet(pointer, blockNumber, offNum) \
|
|
128
|
+
( \
|
|
129
|
+
AssertMacro(PointerIsValid(pointer)), \
|
|
130
|
+
BlockIdSet(&((pointer)->ip_blkid), blockNumber), \
|
|
131
|
+
(pointer)->ip_posid = offNum \
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
/*
|
|
135
|
+
* ItemPointerSetBlockNumber
|
|
136
|
+
* Sets a disk item pointer to the specified block.
|
|
137
|
+
*/
|
|
138
|
+
#define ItemPointerSetBlockNumber(pointer, blockNumber) \
|
|
139
|
+
( \
|
|
140
|
+
AssertMacro(PointerIsValid(pointer)), \
|
|
141
|
+
BlockIdSet(&((pointer)->ip_blkid), blockNumber) \
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
/*
|
|
145
|
+
* ItemPointerSetOffsetNumber
|
|
146
|
+
* Sets a disk item pointer to the specified offset.
|
|
147
|
+
*/
|
|
148
|
+
#define ItemPointerSetOffsetNumber(pointer, offsetNumber) \
|
|
149
|
+
( \
|
|
150
|
+
AssertMacro(PointerIsValid(pointer)), \
|
|
151
|
+
(pointer)->ip_posid = (offsetNumber) \
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
/*
|
|
155
|
+
* ItemPointerCopy
|
|
156
|
+
* Copies the contents of one disk item pointer to another.
|
|
157
|
+
*
|
|
158
|
+
* Should there ever be padding in an ItemPointer this would need to be handled
|
|
159
|
+
* differently as it's used as hash key.
|
|
160
|
+
*/
|
|
161
|
+
#define ItemPointerCopy(fromPointer, toPointer) \
|
|
162
|
+
( \
|
|
163
|
+
AssertMacro(PointerIsValid(toPointer)), \
|
|
164
|
+
AssertMacro(PointerIsValid(fromPointer)), \
|
|
165
|
+
*(toPointer) = *(fromPointer) \
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
/*
|
|
169
|
+
* ItemPointerSetInvalid
|
|
170
|
+
* Sets a disk item pointer to be invalid.
|
|
171
|
+
*/
|
|
172
|
+
#define ItemPointerSetInvalid(pointer) \
|
|
173
|
+
( \
|
|
174
|
+
AssertMacro(PointerIsValid(pointer)), \
|
|
175
|
+
BlockIdSet(&((pointer)->ip_blkid), InvalidBlockNumber), \
|
|
176
|
+
(pointer)->ip_posid = InvalidOffsetNumber \
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
/*
|
|
180
|
+
* ItemPointerIndicatesMovedPartitions
|
|
181
|
+
* True iff the block number indicates the tuple has moved to another
|
|
182
|
+
* partition.
|
|
183
|
+
*/
|
|
184
|
+
#define ItemPointerIndicatesMovedPartitions(pointer) \
|
|
185
|
+
( \
|
|
186
|
+
ItemPointerGetOffsetNumber(pointer) == MovedPartitionsOffsetNumber && \
|
|
187
|
+
ItemPointerGetBlockNumberNoCheck(pointer) == MovedPartitionsBlockNumber \
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
/*
|
|
191
|
+
* ItemPointerSetMovedPartitions
|
|
192
|
+
* Indicate that the item referenced by the itempointer has moved into a
|
|
193
|
+
* different partition.
|
|
194
|
+
*/
|
|
195
|
+
#define ItemPointerSetMovedPartitions(pointer) \
|
|
196
|
+
ItemPointerSet((pointer), MovedPartitionsBlockNumber, MovedPartitionsOffsetNumber)
|
|
197
|
+
|
|
198
|
+
/* ----------------
|
|
199
|
+
* externs
|
|
200
|
+
* ----------------
|
|
201
|
+
*/
|
|
202
|
+
|
|
203
|
+
extern bool ItemPointerEquals(ItemPointer pointer1, ItemPointer pointer2);
|
|
204
|
+
extern int32 ItemPointerCompare(ItemPointer arg1, ItemPointer arg2);
|
|
205
|
+
|
|
206
|
+
#endif /* ITEMPTR_H */
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* large_object.h
|
|
4
|
+
* Declarations for PostgreSQL large objects. POSTGRES 4.2 supported
|
|
5
|
+
* zillions of large objects (internal, external, jaquith, inversion).
|
|
6
|
+
* Now we only support inversion.
|
|
7
|
+
*
|
|
8
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
|
9
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
10
|
+
*
|
|
11
|
+
* src/include/storage/large_object.h
|
|
12
|
+
*
|
|
13
|
+
*-------------------------------------------------------------------------
|
|
14
|
+
*/
|
|
15
|
+
#ifndef LARGE_OBJECT_H
|
|
16
|
+
#define LARGE_OBJECT_H
|
|
17
|
+
|
|
18
|
+
#include "utils/snapshot.h"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
/*----------
|
|
22
|
+
* Data about a currently-open large object.
|
|
23
|
+
*
|
|
24
|
+
* id is the logical OID of the large object
|
|
25
|
+
* snapshot is the snapshot to use for read/write operations
|
|
26
|
+
* subid is the subtransaction that opened the desc (or currently owns it)
|
|
27
|
+
* offset is the current seek offset within the LO
|
|
28
|
+
* flags contains some flag bits
|
|
29
|
+
*
|
|
30
|
+
* NOTE: as of v11, permission checks are made when the large object is
|
|
31
|
+
* opened; therefore IFS_RDLOCK/IFS_WRLOCK indicate that read or write mode
|
|
32
|
+
* has been requested *and* the corresponding permission has been checked.
|
|
33
|
+
*
|
|
34
|
+
* NOTE: before 7.1, we also had to store references to the separate table
|
|
35
|
+
* and index of a specific large object. Now they all live in pg_largeobject
|
|
36
|
+
* and are accessed via a common relation descriptor.
|
|
37
|
+
*----------
|
|
38
|
+
*/
|
|
39
|
+
typedef struct LargeObjectDesc
|
|
40
|
+
{
|
|
41
|
+
Oid id; /* LO's identifier */
|
|
42
|
+
Snapshot snapshot; /* snapshot to use */
|
|
43
|
+
SubTransactionId subid; /* owning subtransaction ID */
|
|
44
|
+
uint64 offset; /* current seek pointer */
|
|
45
|
+
int flags; /* see flag bits below */
|
|
46
|
+
|
|
47
|
+
/* bits in flags: */
|
|
48
|
+
#define IFS_RDLOCK (1 << 0) /* LO was opened for reading */
|
|
49
|
+
#define IFS_WRLOCK (1 << 1) /* LO was opened for writing */
|
|
50
|
+
|
|
51
|
+
} LargeObjectDesc;
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
/*
|
|
55
|
+
* Each "page" (tuple) of a large object can hold this much data
|
|
56
|
+
*
|
|
57
|
+
* We could set this as high as BLCKSZ less some overhead, but it seems
|
|
58
|
+
* better to make it a smaller value, so that not as much space is used
|
|
59
|
+
* up when a page-tuple is updated. Note that the value is deliberately
|
|
60
|
+
* chosen large enough to trigger the tuple toaster, so that we will
|
|
61
|
+
* attempt to compress page tuples in-line. (But they won't be moved off
|
|
62
|
+
* unless the user creates a toast-table for pg_largeobject...)
|
|
63
|
+
*
|
|
64
|
+
* Also, it seems to be a smart move to make the page size be a power of 2,
|
|
65
|
+
* since clients will often be written to send data in power-of-2 blocks.
|
|
66
|
+
* This avoids unnecessary tuple updates caused by partial-page writes.
|
|
67
|
+
*
|
|
68
|
+
* NB: Changing LOBLKSIZE requires an initdb.
|
|
69
|
+
*/
|
|
70
|
+
#define LOBLKSIZE (BLCKSZ / 4)
|
|
71
|
+
|
|
72
|
+
/*
|
|
73
|
+
* Maximum length in bytes for a large object. To make this larger, we'd
|
|
74
|
+
* have to widen pg_largeobject.pageno as well as various internal variables.
|
|
75
|
+
*/
|
|
76
|
+
#define MAX_LARGE_OBJECT_SIZE ((int64) INT_MAX * LOBLKSIZE)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
/*
|
|
80
|
+
* GUC: backwards-compatibility flag to suppress LO permission checks
|
|
81
|
+
*/
|
|
82
|
+
extern bool lo_compat_privileges;
|
|
83
|
+
|
|
84
|
+
/*
|
|
85
|
+
* Function definitions...
|
|
86
|
+
*/
|
|
87
|
+
|
|
88
|
+
/* inversion stuff in inv_api.c */
|
|
89
|
+
extern void close_lo_relation(bool isCommit);
|
|
90
|
+
extern Oid inv_create(Oid lobjId);
|
|
91
|
+
extern LargeObjectDesc *inv_open(Oid lobjId, int flags, MemoryContext mcxt);
|
|
92
|
+
extern void inv_close(LargeObjectDesc *obj_desc);
|
|
93
|
+
extern int inv_drop(Oid lobjId);
|
|
94
|
+
extern int64 inv_seek(LargeObjectDesc *obj_desc, int64 offset, int whence);
|
|
95
|
+
extern int64 inv_tell(LargeObjectDesc *obj_desc);
|
|
96
|
+
extern int inv_read(LargeObjectDesc *obj_desc, char *buf, int nbytes);
|
|
97
|
+
extern int inv_write(LargeObjectDesc *obj_desc, const char *buf, int nbytes);
|
|
98
|
+
extern void inv_truncate(LargeObjectDesc *obj_desc, int64 len);
|
|
99
|
+
|
|
100
|
+
#endif /* LARGE_OBJECT_H */
|