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,326 @@
|
|
|
1
|
+
/*--------------------------------------------------------------------
|
|
2
|
+
* Symbols referenced in this file:
|
|
3
|
+
* - datumCopy
|
|
4
|
+
* - datumGetSize
|
|
5
|
+
* - datumIsEqual
|
|
6
|
+
*--------------------------------------------------------------------
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/*-------------------------------------------------------------------------
|
|
10
|
+
*
|
|
11
|
+
* datum.c
|
|
12
|
+
* POSTGRES Datum (abstract data type) manipulation routines.
|
|
13
|
+
*
|
|
14
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
|
15
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
16
|
+
*
|
|
17
|
+
*
|
|
18
|
+
* IDENTIFICATION
|
|
19
|
+
* src/backend/utils/adt/datum.c
|
|
20
|
+
*
|
|
21
|
+
*-------------------------------------------------------------------------
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/*
|
|
25
|
+
* In the implementation of these routines we assume the following:
|
|
26
|
+
*
|
|
27
|
+
* A) if a type is "byVal" then all the information is stored in the
|
|
28
|
+
* Datum itself (i.e. no pointers involved!). In this case the
|
|
29
|
+
* length of the type is always greater than zero and not more than
|
|
30
|
+
* "sizeof(Datum)"
|
|
31
|
+
*
|
|
32
|
+
* B) if a type is not "byVal" and it has a fixed length (typlen > 0),
|
|
33
|
+
* then the "Datum" always contains a pointer to a stream of bytes.
|
|
34
|
+
* The number of significant bytes are always equal to the typlen.
|
|
35
|
+
*
|
|
36
|
+
* C) if a type is not "byVal" and has typlen == -1,
|
|
37
|
+
* then the "Datum" always points to a "struct varlena".
|
|
38
|
+
* This varlena structure has information about the actual length of this
|
|
39
|
+
* particular instance of the type and about its value.
|
|
40
|
+
*
|
|
41
|
+
* D) if a type is not "byVal" and has typlen == -2,
|
|
42
|
+
* then the "Datum" always points to a null-terminated C string.
|
|
43
|
+
*
|
|
44
|
+
* Note that we do not treat "toasted" datums specially; therefore what
|
|
45
|
+
* will be copied or compared is the compressed data or toast reference.
|
|
46
|
+
* An exception is made for datumCopy() of an expanded object, however,
|
|
47
|
+
* because most callers expect to get a simple contiguous (and pfree'able)
|
|
48
|
+
* result from datumCopy(). See also datumTransfer().
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
#include "postgres.h"
|
|
52
|
+
|
|
53
|
+
#include "access/detoast.h"
|
|
54
|
+
#include "fmgr.h"
|
|
55
|
+
#include "utils/builtins.h"
|
|
56
|
+
#include "utils/datum.h"
|
|
57
|
+
#include "utils/expandeddatum.h"
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
/*-------------------------------------------------------------------------
|
|
61
|
+
* datumGetSize
|
|
62
|
+
*
|
|
63
|
+
* Find the "real" size of a datum, given the datum value,
|
|
64
|
+
* whether it is a "by value", and the declared type length.
|
|
65
|
+
* (For TOAST pointer datums, this is the size of the pointer datum.)
|
|
66
|
+
*
|
|
67
|
+
* This is essentially an out-of-line version of the att_addlength_datum()
|
|
68
|
+
* macro in access/tupmacs.h. We do a tad more error checking though.
|
|
69
|
+
*-------------------------------------------------------------------------
|
|
70
|
+
*/
|
|
71
|
+
Size
|
|
72
|
+
datumGetSize(Datum value, bool typByVal, int typLen)
|
|
73
|
+
{
|
|
74
|
+
Size size;
|
|
75
|
+
|
|
76
|
+
if (typByVal)
|
|
77
|
+
{
|
|
78
|
+
/* Pass-by-value types are always fixed-length */
|
|
79
|
+
Assert(typLen > 0 && typLen <= sizeof(Datum));
|
|
80
|
+
size = (Size) typLen;
|
|
81
|
+
}
|
|
82
|
+
else
|
|
83
|
+
{
|
|
84
|
+
if (typLen > 0)
|
|
85
|
+
{
|
|
86
|
+
/* Fixed-length pass-by-ref type */
|
|
87
|
+
size = (Size) typLen;
|
|
88
|
+
}
|
|
89
|
+
else if (typLen == -1)
|
|
90
|
+
{
|
|
91
|
+
/* It is a varlena datatype */
|
|
92
|
+
struct varlena *s = (struct varlena *) DatumGetPointer(value);
|
|
93
|
+
|
|
94
|
+
if (!PointerIsValid(s))
|
|
95
|
+
ereport(ERROR,
|
|
96
|
+
(errcode(ERRCODE_DATA_EXCEPTION),
|
|
97
|
+
errmsg("invalid Datum pointer")));
|
|
98
|
+
|
|
99
|
+
size = (Size) VARSIZE_ANY(s);
|
|
100
|
+
}
|
|
101
|
+
else if (typLen == -2)
|
|
102
|
+
{
|
|
103
|
+
/* It is a cstring datatype */
|
|
104
|
+
char *s = (char *) DatumGetPointer(value);
|
|
105
|
+
|
|
106
|
+
if (!PointerIsValid(s))
|
|
107
|
+
ereport(ERROR,
|
|
108
|
+
(errcode(ERRCODE_DATA_EXCEPTION),
|
|
109
|
+
errmsg("invalid Datum pointer")));
|
|
110
|
+
|
|
111
|
+
size = (Size) (strlen(s) + 1);
|
|
112
|
+
}
|
|
113
|
+
else
|
|
114
|
+
{
|
|
115
|
+
elog(ERROR, "invalid typLen: %d", typLen);
|
|
116
|
+
size = 0; /* keep compiler quiet */
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return size;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/*-------------------------------------------------------------------------
|
|
124
|
+
* datumCopy
|
|
125
|
+
*
|
|
126
|
+
* Make a copy of a non-NULL datum.
|
|
127
|
+
*
|
|
128
|
+
* If the datatype is pass-by-reference, memory is obtained with palloc().
|
|
129
|
+
*
|
|
130
|
+
* If the value is a reference to an expanded object, we flatten into memory
|
|
131
|
+
* obtained with palloc(). We need to copy because one of the main uses of
|
|
132
|
+
* this function is to copy a datum out of a transient memory context that's
|
|
133
|
+
* about to be destroyed, and the expanded object is probably in a child
|
|
134
|
+
* context that will also go away. Moreover, many callers assume that the
|
|
135
|
+
* result is a single pfree-able chunk.
|
|
136
|
+
*-------------------------------------------------------------------------
|
|
137
|
+
*/
|
|
138
|
+
Datum
|
|
139
|
+
datumCopy(Datum value, bool typByVal, int typLen)
|
|
140
|
+
{
|
|
141
|
+
Datum res;
|
|
142
|
+
|
|
143
|
+
if (typByVal)
|
|
144
|
+
res = value;
|
|
145
|
+
else if (typLen == -1)
|
|
146
|
+
{
|
|
147
|
+
/* It is a varlena datatype */
|
|
148
|
+
struct varlena *vl = (struct varlena *) DatumGetPointer(value);
|
|
149
|
+
|
|
150
|
+
if (VARATT_IS_EXTERNAL_EXPANDED(vl))
|
|
151
|
+
{
|
|
152
|
+
/* Flatten into the caller's memory context */
|
|
153
|
+
ExpandedObjectHeader *eoh = DatumGetEOHP(value);
|
|
154
|
+
Size resultsize;
|
|
155
|
+
char *resultptr;
|
|
156
|
+
|
|
157
|
+
resultsize = EOH_get_flat_size(eoh);
|
|
158
|
+
resultptr = (char *) palloc(resultsize);
|
|
159
|
+
EOH_flatten_into(eoh, (void *) resultptr, resultsize);
|
|
160
|
+
res = PointerGetDatum(resultptr);
|
|
161
|
+
}
|
|
162
|
+
else
|
|
163
|
+
{
|
|
164
|
+
/* Otherwise, just copy the varlena datum verbatim */
|
|
165
|
+
Size realSize;
|
|
166
|
+
char *resultptr;
|
|
167
|
+
|
|
168
|
+
realSize = (Size) VARSIZE_ANY(vl);
|
|
169
|
+
resultptr = (char *) palloc(realSize);
|
|
170
|
+
memcpy(resultptr, vl, realSize);
|
|
171
|
+
res = PointerGetDatum(resultptr);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
else
|
|
175
|
+
{
|
|
176
|
+
/* Pass by reference, but not varlena, so not toasted */
|
|
177
|
+
Size realSize;
|
|
178
|
+
char *resultptr;
|
|
179
|
+
|
|
180
|
+
realSize = datumGetSize(value, typByVal, typLen);
|
|
181
|
+
|
|
182
|
+
resultptr = (char *) palloc(realSize);
|
|
183
|
+
memcpy(resultptr, DatumGetPointer(value), realSize);
|
|
184
|
+
res = PointerGetDatum(resultptr);
|
|
185
|
+
}
|
|
186
|
+
return res;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/*-------------------------------------------------------------------------
|
|
190
|
+
* datumTransfer
|
|
191
|
+
*
|
|
192
|
+
* Transfer a non-NULL datum into the current memory context.
|
|
193
|
+
*
|
|
194
|
+
* This is equivalent to datumCopy() except when the datum is a read-write
|
|
195
|
+
* pointer to an expanded object. In that case we merely reparent the object
|
|
196
|
+
* into the current context, and return its standard R/W pointer (in case the
|
|
197
|
+
* given one is a transient pointer of shorter lifespan).
|
|
198
|
+
*-------------------------------------------------------------------------
|
|
199
|
+
*/
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
/*-------------------------------------------------------------------------
|
|
203
|
+
* datumIsEqual
|
|
204
|
+
*
|
|
205
|
+
* Return true if two datums are equal, false otherwise
|
|
206
|
+
*
|
|
207
|
+
* NOTE: XXX!
|
|
208
|
+
* We just compare the bytes of the two values, one by one.
|
|
209
|
+
* This routine will return false if there are 2 different
|
|
210
|
+
* representations of the same value (something along the lines
|
|
211
|
+
* of say the representation of zero in one's complement arithmetic).
|
|
212
|
+
* Also, it will probably not give the answer you want if either
|
|
213
|
+
* datum has been "toasted".
|
|
214
|
+
*
|
|
215
|
+
* Do not try to make this any smarter than it currently is with respect
|
|
216
|
+
* to "toasted" datums, because some of the callers could be working in the
|
|
217
|
+
* context of an aborted transaction.
|
|
218
|
+
*-------------------------------------------------------------------------
|
|
219
|
+
*/
|
|
220
|
+
bool
|
|
221
|
+
datumIsEqual(Datum value1, Datum value2, bool typByVal, int typLen)
|
|
222
|
+
{
|
|
223
|
+
bool res;
|
|
224
|
+
|
|
225
|
+
if (typByVal)
|
|
226
|
+
{
|
|
227
|
+
/*
|
|
228
|
+
* just compare the two datums. NOTE: just comparing "len" bytes will
|
|
229
|
+
* not do the work, because we do not know how these bytes are aligned
|
|
230
|
+
* inside the "Datum". We assume instead that any given datatype is
|
|
231
|
+
* consistent about how it fills extraneous bits in the Datum.
|
|
232
|
+
*/
|
|
233
|
+
res = (value1 == value2);
|
|
234
|
+
}
|
|
235
|
+
else
|
|
236
|
+
{
|
|
237
|
+
Size size1,
|
|
238
|
+
size2;
|
|
239
|
+
char *s1,
|
|
240
|
+
*s2;
|
|
241
|
+
|
|
242
|
+
/*
|
|
243
|
+
* Compare the bytes pointed by the pointers stored in the datums.
|
|
244
|
+
*/
|
|
245
|
+
size1 = datumGetSize(value1, typByVal, typLen);
|
|
246
|
+
size2 = datumGetSize(value2, typByVal, typLen);
|
|
247
|
+
if (size1 != size2)
|
|
248
|
+
return false;
|
|
249
|
+
s1 = (char *) DatumGetPointer(value1);
|
|
250
|
+
s2 = (char *) DatumGetPointer(value2);
|
|
251
|
+
res = (memcmp(s1, s2, size1) == 0);
|
|
252
|
+
}
|
|
253
|
+
return res;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/*-------------------------------------------------------------------------
|
|
257
|
+
* datum_image_eq
|
|
258
|
+
*
|
|
259
|
+
* Compares two datums for identical contents, based on byte images. Return
|
|
260
|
+
* true if the two datums are equal, false otherwise.
|
|
261
|
+
*-------------------------------------------------------------------------
|
|
262
|
+
*/
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
/*-------------------------------------------------------------------------
|
|
266
|
+
* btequalimage
|
|
267
|
+
*
|
|
268
|
+
* Generic "equalimage" support function.
|
|
269
|
+
*
|
|
270
|
+
* B-Tree operator classes whose equality function could safely be replaced by
|
|
271
|
+
* datum_image_eq() in all cases can use this as their "equalimage" support
|
|
272
|
+
* function.
|
|
273
|
+
*
|
|
274
|
+
* Currently, we unconditionally assume that any B-Tree operator class that
|
|
275
|
+
* registers btequalimage as its support function 4 must be able to safely use
|
|
276
|
+
* optimizations like deduplication (i.e. we return true unconditionally). If
|
|
277
|
+
* it ever proved necessary to rescind support for an operator class, we could
|
|
278
|
+
* do that in a targeted fashion by doing something with the opcintype
|
|
279
|
+
* argument.
|
|
280
|
+
*-------------------------------------------------------------------------
|
|
281
|
+
*/
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
/*-------------------------------------------------------------------------
|
|
285
|
+
* datumEstimateSpace
|
|
286
|
+
*
|
|
287
|
+
* Compute the amount of space that datumSerialize will require for a
|
|
288
|
+
* particular Datum.
|
|
289
|
+
*-------------------------------------------------------------------------
|
|
290
|
+
*/
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
/*-------------------------------------------------------------------------
|
|
294
|
+
* datumSerialize
|
|
295
|
+
*
|
|
296
|
+
* Serialize a possibly-NULL datum into caller-provided storage.
|
|
297
|
+
*
|
|
298
|
+
* Note: "expanded" objects are flattened so as to produce a self-contained
|
|
299
|
+
* representation, but other sorts of toast pointers are transferred as-is.
|
|
300
|
+
* This is because the intended use of this function is to pass the value
|
|
301
|
+
* to another process within the same database server. The other process
|
|
302
|
+
* could not access an "expanded" object within this process's memory, but
|
|
303
|
+
* we assume it can dereference the same TOAST pointers this one can.
|
|
304
|
+
*
|
|
305
|
+
* The format is as follows: first, we write a 4-byte header word, which
|
|
306
|
+
* is either the length of a pass-by-reference datum, -1 for a
|
|
307
|
+
* pass-by-value datum, or -2 for a NULL. If the value is NULL, nothing
|
|
308
|
+
* further is written. If it is pass-by-value, sizeof(Datum) bytes
|
|
309
|
+
* follow. Otherwise, the number of bytes indicated by the header word
|
|
310
|
+
* follow. The caller is responsible for ensuring that there is enough
|
|
311
|
+
* storage to store the number of bytes that will be written; use
|
|
312
|
+
* datumEstimateSpace() to find out how many will be needed.
|
|
313
|
+
* *start_address is updated to point to the byte immediately following
|
|
314
|
+
* those written.
|
|
315
|
+
*-------------------------------------------------------------------------
|
|
316
|
+
*/
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
/*-------------------------------------------------------------------------
|
|
320
|
+
* datumRestore
|
|
321
|
+
*
|
|
322
|
+
* Restore a possibly-NULL datum previously serialized by datumSerialize.
|
|
323
|
+
* *start_address is updated according to the number of bytes consumed.
|
|
324
|
+
*-------------------------------------------------------------------------
|
|
325
|
+
*/
|
|
326
|
+
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/*--------------------------------------------------------------------
|
|
2
|
+
* Symbols referenced in this file:
|
|
3
|
+
* - DatumGetEOHP
|
|
4
|
+
* - EOH_get_flat_size
|
|
5
|
+
* - EOH_flatten_into
|
|
6
|
+
*--------------------------------------------------------------------
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/*-------------------------------------------------------------------------
|
|
10
|
+
*
|
|
11
|
+
* expandeddatum.c
|
|
12
|
+
* Support functions for "expanded" value representations.
|
|
13
|
+
*
|
|
14
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
|
15
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
16
|
+
*
|
|
17
|
+
*
|
|
18
|
+
* IDENTIFICATION
|
|
19
|
+
* src/backend/utils/adt/expandeddatum.c
|
|
20
|
+
*
|
|
21
|
+
*-------------------------------------------------------------------------
|
|
22
|
+
*/
|
|
23
|
+
#include "postgres.h"
|
|
24
|
+
|
|
25
|
+
#include "utils/expandeddatum.h"
|
|
26
|
+
#include "utils/memutils.h"
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
* DatumGetEOHP
|
|
30
|
+
*
|
|
31
|
+
* Given a Datum that is an expanded-object reference, extract the pointer.
|
|
32
|
+
*
|
|
33
|
+
* This is a bit tedious since the pointer may not be properly aligned;
|
|
34
|
+
* compare VARATT_EXTERNAL_GET_POINTER().
|
|
35
|
+
*/
|
|
36
|
+
ExpandedObjectHeader *
|
|
37
|
+
DatumGetEOHP(Datum d)
|
|
38
|
+
{
|
|
39
|
+
varattrib_1b_e *datum = (varattrib_1b_e *) DatumGetPointer(d);
|
|
40
|
+
varatt_expanded ptr;
|
|
41
|
+
|
|
42
|
+
Assert(VARATT_IS_EXTERNAL_EXPANDED(datum));
|
|
43
|
+
memcpy(&ptr, VARDATA_EXTERNAL(datum), sizeof(ptr));
|
|
44
|
+
Assert(VARATT_IS_EXPANDED_HEADER(ptr.eohptr));
|
|
45
|
+
return ptr.eohptr;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/*
|
|
49
|
+
* EOH_init_header
|
|
50
|
+
*
|
|
51
|
+
* Initialize the common header of an expanded object.
|
|
52
|
+
*
|
|
53
|
+
* The main thing this encapsulates is initializing the TOAST pointers.
|
|
54
|
+
*/
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
/*
|
|
58
|
+
* EOH_get_flat_size
|
|
59
|
+
* EOH_flatten_into
|
|
60
|
+
*
|
|
61
|
+
* Convenience functions for invoking the "methods" of an expanded object.
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
Size
|
|
65
|
+
EOH_get_flat_size(ExpandedObjectHeader *eohptr)
|
|
66
|
+
{
|
|
67
|
+
return eohptr->eoh_methods->get_flat_size(eohptr);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
void
|
|
71
|
+
EOH_flatten_into(ExpandedObjectHeader *eohptr,
|
|
72
|
+
void *result, Size allocated_size)
|
|
73
|
+
{
|
|
74
|
+
eohptr->eoh_methods->flatten_into(eohptr, result, allocated_size);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/*
|
|
78
|
+
* If the Datum represents a R/W expanded object, change it to R/O.
|
|
79
|
+
* Otherwise return the original Datum.
|
|
80
|
+
*
|
|
81
|
+
* Caller must ensure that the datum is a non-null varlena value. Typically
|
|
82
|
+
* this is invoked via MakeExpandedObjectReadOnly(), which checks that.
|
|
83
|
+
*/
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
/*
|
|
87
|
+
* Transfer ownership of an expanded object to a new parent memory context.
|
|
88
|
+
* The object must be referenced by a R/W pointer, and what we return is
|
|
89
|
+
* always its "standard" R/W pointer, which is certain to have the same
|
|
90
|
+
* lifespan as the object itself. (The passed-in pointer might not, and
|
|
91
|
+
* in any case wouldn't provide a unique identifier if it's not that one.)
|
|
92
|
+
*/
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
/*
|
|
96
|
+
* Delete an expanded object (must be referenced by a R/W pointer).
|
|
97
|
+
*/
|
|
98
|
+
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/*--------------------------------------------------------------------
|
|
2
|
+
* Symbols referenced in this file:
|
|
3
|
+
* - format_type_be
|
|
4
|
+
*--------------------------------------------------------------------
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/*-------------------------------------------------------------------------
|
|
8
|
+
*
|
|
9
|
+
* format_type.c
|
|
10
|
+
* Display type names "nicely".
|
|
11
|
+
*
|
|
12
|
+
*
|
|
13
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
|
14
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
15
|
+
*
|
|
16
|
+
* IDENTIFICATION
|
|
17
|
+
* src/backend/utils/adt/format_type.c
|
|
18
|
+
*
|
|
19
|
+
*-------------------------------------------------------------------------
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
#include "postgres.h"
|
|
23
|
+
|
|
24
|
+
#include <ctype.h>
|
|
25
|
+
|
|
26
|
+
#include "access/htup_details.h"
|
|
27
|
+
#include "catalog/namespace.h"
|
|
28
|
+
#include "catalog/pg_type.h"
|
|
29
|
+
#include "mb/pg_wchar.h"
|
|
30
|
+
#include "utils/builtins.h"
|
|
31
|
+
#include "utils/lsyscache.h"
|
|
32
|
+
#include "utils/numeric.h"
|
|
33
|
+
#include "utils/syscache.h"
|
|
34
|
+
|
|
35
|
+
static char *printTypmod(const char *typname, int32 typmod, Oid typmodout);
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
/*
|
|
39
|
+
* SQL function: format_type(type_oid, typemod)
|
|
40
|
+
*
|
|
41
|
+
* `type_oid' is from pg_type.oid, `typemod' is from
|
|
42
|
+
* pg_attribute.atttypmod. This function will get the type name and
|
|
43
|
+
* format it and the modifier to canonical SQL format, if the type is
|
|
44
|
+
* a standard type. Otherwise you just get pg_type.typname back,
|
|
45
|
+
* double quoted if it contains funny characters or matches a keyword.
|
|
46
|
+
*
|
|
47
|
+
* If typemod is NULL then we are formatting a type name in a context where
|
|
48
|
+
* no typemod is available, eg a function argument or result type. This
|
|
49
|
+
* yields a slightly different result from specifying typemod = -1 in some
|
|
50
|
+
* cases. Given typemod = -1 we feel compelled to produce an output that
|
|
51
|
+
* the parser will interpret as having typemod -1, so that pg_dump will
|
|
52
|
+
* produce CREATE TABLE commands that recreate the original state. But
|
|
53
|
+
* given NULL typemod, we assume that the parser's interpretation of
|
|
54
|
+
* typemod doesn't matter, and so we are willing to output a slightly
|
|
55
|
+
* "prettier" representation of the same type. For example, type = bpchar
|
|
56
|
+
* and typemod = NULL gets you "character", whereas typemod = -1 gets you
|
|
57
|
+
* "bpchar" --- the former will be interpreted as character(1) by the
|
|
58
|
+
* parser, which does not yield typemod -1.
|
|
59
|
+
*
|
|
60
|
+
* XXX encoding a meaning in typemod = NULL is ugly; it'd have been
|
|
61
|
+
* cleaner to make two functions of one and two arguments respectively.
|
|
62
|
+
* Not worth changing it now, however.
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
/*
|
|
67
|
+
* format_type_extended
|
|
68
|
+
* Generate a possibly-qualified type name.
|
|
69
|
+
*
|
|
70
|
+
* The default behavior is to only qualify if the type is not in the search
|
|
71
|
+
* path, to ignore the given typmod, and to raise an error if a non-existent
|
|
72
|
+
* type_oid is given.
|
|
73
|
+
*
|
|
74
|
+
* The following bits in 'flags' modify the behavior:
|
|
75
|
+
* - FORMAT_TYPE_TYPEMOD_GIVEN
|
|
76
|
+
* include the typmod in the output (typmod could still be -1 though)
|
|
77
|
+
* - FORMAT_TYPE_ALLOW_INVALID
|
|
78
|
+
* if the type OID is invalid or unknown, return ??? or such instead
|
|
79
|
+
* of failing
|
|
80
|
+
* - FORMAT_TYPE_FORCE_QUALIFY
|
|
81
|
+
* always schema-qualify type names, regardless of search_path
|
|
82
|
+
*
|
|
83
|
+
* Note that TYPEMOD_GIVEN is not interchangeable with "typemod == -1";
|
|
84
|
+
* see the comments above for format_type().
|
|
85
|
+
*
|
|
86
|
+
* Returns a palloc'd string.
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
/*
|
|
91
|
+
* This version is for use within the backend in error messages, etc.
|
|
92
|
+
* One difference is that it will fail for an invalid type.
|
|
93
|
+
*
|
|
94
|
+
* The result is always a palloc'd string.
|
|
95
|
+
*/
|
|
96
|
+
char * format_type_be(Oid type_oid) { return pstrdup("-"); }
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
/*
|
|
100
|
+
* This version returns a name that is always qualified (unless it's one
|
|
101
|
+
* of the SQL-keyword type names, such as TIMESTAMP WITH TIME ZONE).
|
|
102
|
+
*/
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
/*
|
|
106
|
+
* This version allows a nondefault typemod to be specified.
|
|
107
|
+
*/
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
/*
|
|
111
|
+
* Add typmod decoration to the basic type name
|
|
112
|
+
*/
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
/*
|
|
117
|
+
* type_maximum_size --- determine maximum width of a variable-width column
|
|
118
|
+
*
|
|
119
|
+
* If the max width is indeterminate, return -1. In particular, we return
|
|
120
|
+
* -1 for any type not known to this routine. We assume the caller has
|
|
121
|
+
* already determined that the type is a variable-width type, so it's not
|
|
122
|
+
* necessary to look up the type's pg_type tuple here.
|
|
123
|
+
*
|
|
124
|
+
* This may appear unrelated to format_type(), but in fact the two routines
|
|
125
|
+
* share knowledge of the encoding of typmod for different types, so it's
|
|
126
|
+
* convenient to keep them together. (XXX now that most of this knowledge
|
|
127
|
+
* has been pushed out of format_type into the typmodout functions, it's
|
|
128
|
+
* interesting to wonder if it's worth trying to factor this code too...)
|
|
129
|
+
*/
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
/*
|
|
134
|
+
* oidvectortypes - converts a vector of type OIDs to "typname" list
|
|
135
|
+
*/
|
|
136
|
+
|