pg_query 4.2.3 → 5.0.0
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 +6 -0
- data/README.md +6 -8
- data/Rakefile +3 -3
- data/ext/pg_query/extconf.rb +1 -3
- data/ext/pg_query/include/access/amapi.h +3 -1
- data/ext/pg_query/include/access/attmap.h +5 -3
- data/ext/pg_query/include/access/attnum.h +1 -1
- data/ext/pg_query/include/access/clog.h +1 -1
- data/ext/pg_query/include/access/commit_ts.h +1 -1
- data/ext/pg_query/include/access/detoast.h +1 -1
- data/ext/pg_query/include/access/genam.h +7 -5
- data/ext/pg_query/include/access/gin.h +16 -3
- data/ext/pg_query/include/access/htup.h +1 -1
- data/ext/pg_query/include/access/htup_details.h +6 -2
- data/ext/pg_query/include/access/itup.h +61 -58
- data/ext/pg_query/include/access/parallel.h +2 -2
- data/ext/pg_query/include/access/printtup.h +1 -1
- data/ext/pg_query/include/access/relation.h +1 -1
- data/ext/pg_query/include/access/relscan.h +1 -1
- data/ext/pg_query/include/access/rmgrlist.h +2 -2
- data/ext/pg_query/include/access/sdir.h +12 -3
- data/ext/pg_query/include/access/skey.h +1 -1
- data/ext/pg_query/include/access/stratnum.h +1 -1
- data/ext/pg_query/include/access/sysattr.h +1 -1
- data/ext/pg_query/include/access/table.h +1 -1
- data/ext/pg_query/include/access/tableam.h +68 -45
- data/ext/pg_query/include/access/toast_compression.h +1 -1
- data/ext/pg_query/include/access/transam.h +1 -1
- data/ext/pg_query/include/access/tsmapi.h +82 -0
- data/ext/pg_query/include/access/tupconvert.h +5 -2
- data/ext/pg_query/include/access/tupdesc.h +2 -2
- data/ext/pg_query/include/access/tupmacs.h +58 -98
- data/ext/pg_query/include/access/twophase.h +2 -2
- data/ext/pg_query/include/access/xact.h +25 -18
- data/ext/pg_query/include/access/xlog.h +15 -16
- data/ext/pg_query/include/access/xlog_internal.h +100 -62
- data/ext/pg_query/include/access/xlogbackup.h +41 -0
- data/ext/pg_query/include/access/xlogdefs.h +6 -25
- data/ext/pg_query/include/access/xlogprefetcher.h +1 -1
- data/ext/pg_query/include/access/xlogreader.h +7 -6
- data/ext/pg_query/include/access/xlogrecord.h +17 -5
- data/ext/pg_query/include/access/xlogrecovery.h +4 -3
- data/ext/pg_query/include/archive/archive_module.h +59 -0
- data/ext/pg_query/include/c.h +144 -156
- data/ext/pg_query/include/catalog/catalog.h +4 -3
- data/ext/pg_query/include/catalog/catversion.h +6 -2
- data/ext/pg_query/include/catalog/dependency.h +5 -4
- data/ext/pg_query/include/catalog/genbki.h +7 -6
- data/ext/pg_query/include/catalog/index.h +4 -4
- data/ext/pg_query/include/catalog/indexing.h +1 -1
- data/ext/pg_query/include/catalog/namespace.h +2 -2
- data/ext/pg_query/include/catalog/objectaccess.h +10 -8
- data/ext/pg_query/include/catalog/objectaddress.h +3 -3
- data/ext/pg_query/include/catalog/pg_aggregate.h +1 -1
- data/ext/pg_query/include/catalog/pg_aggregate_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_am.h +1 -1
- data/ext/pg_query/include/catalog/pg_am_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_attribute.h +19 -17
- data/ext/pg_query/include/catalog/pg_attribute_d.h +19 -19
- data/ext/pg_query/include/catalog/pg_authid.h +1 -1
- data/ext/pg_query/include/catalog/pg_authid_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_class.h +1 -1
- data/ext/pg_query/include/catalog/pg_class_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_collation.h +3 -1
- data/ext/pg_query/include/catalog/pg_collation_d.h +4 -3
- data/ext/pg_query/include/catalog/pg_constraint.h +2 -2
- data/ext/pg_query/include/catalog/pg_constraint_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_control.h +9 -1
- data/ext/pg_query/include/catalog/pg_conversion.h +2 -2
- data/ext/pg_query/include/catalog/pg_conversion_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_database.h +124 -0
- data/ext/pg_query/include/catalog/pg_database_d.h +52 -0
- data/ext/pg_query/include/catalog/pg_depend.h +1 -1
- data/ext/pg_query/include/catalog/pg_depend_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_event_trigger.h +1 -1
- data/ext/pg_query/include/catalog/pg_event_trigger_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_index.h +1 -1
- data/ext/pg_query/include/catalog/pg_index_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_language.h +1 -1
- data/ext/pg_query/include/catalog/pg_language_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_namespace.h +1 -1
- data/ext/pg_query/include/catalog/pg_namespace_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_opclass.h +1 -1
- data/ext/pg_query/include/catalog/pg_opclass_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_operator.h +1 -1
- data/ext/pg_query/include/catalog/pg_operator_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_opfamily.h +3 -2
- data/ext/pg_query/include/catalog/pg_opfamily_d.h +4 -2
- data/ext/pg_query/include/catalog/pg_partitioned_table.h +1 -1
- data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_proc.h +1 -1
- data/ext/pg_query/include/catalog/pg_proc_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_publication.h +2 -5
- data/ext/pg_query/include/catalog/pg_publication_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_replication_origin.h +1 -1
- data/ext/pg_query/include/catalog/pg_replication_origin_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_statistic.h +1 -1
- data/ext/pg_query/include/catalog/pg_statistic_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_statistic_ext.h +1 -1
- data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_transform.h +1 -1
- data/ext/pg_query/include/catalog/pg_transform_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_trigger.h +1 -1
- data/ext/pg_query/include/catalog/pg_trigger_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_config.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_config_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_dict.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_dict_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_parser.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_parser_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_template.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_template_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_type.h +1 -1
- data/ext/pg_query/include/catalog/pg_type_d.h +1 -1
- data/ext/pg_query/include/catalog/storage.h +6 -6
- data/ext/pg_query/include/commands/async.h +1 -1
- data/ext/pg_query/include/commands/dbcommands.h +2 -1
- data/ext/pg_query/include/commands/defrem.h +2 -1
- data/ext/pg_query/include/commands/event_trigger.h +1 -1
- data/ext/pg_query/include/commands/explain.h +3 -1
- data/ext/pg_query/include/commands/prepare.h +1 -1
- data/ext/pg_query/include/commands/tablespace.h +4 -4
- data/ext/pg_query/include/commands/trigger.h +15 -14
- data/ext/pg_query/include/commands/user.h +9 -3
- data/ext/pg_query/include/commands/vacuum.h +60 -14
- data/ext/pg_query/include/common/cryptohash.h +39 -0
- data/ext/pg_query/include/common/file_perm.h +1 -1
- data/ext/pg_query/include/common/hashfn.h +1 -1
- data/ext/pg_query/include/common/int.h +437 -0
- data/ext/pg_query/include/common/ip.h +4 -2
- data/ext/pg_query/include/common/keywords.h +1 -1
- data/ext/pg_query/include/common/kwlookup.h +2 -2
- data/ext/pg_query/include/common/pg_prng.h +3 -2
- data/ext/pg_query/include/common/relpath.h +20 -13
- data/ext/pg_query/include/common/scram-common.h +70 -0
- data/ext/pg_query/include/common/sha2.h +32 -0
- data/ext/pg_query/include/common/string.h +5 -3
- data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +10 -10
- data/ext/pg_query/include/common/{unicode_combining_table.h → unicode_nonspacing_table.h} +31 -13
- data/ext/pg_query/include/copyfuncs.funcs.c +5013 -0
- data/ext/pg_query/include/copyfuncs.switch.c +938 -0
- data/ext/pg_query/include/datatype/timestamp.h +11 -4
- data/ext/pg_query/include/equalfuncs.funcs.c +3097 -0
- data/ext/pg_query/include/equalfuncs.switch.c +785 -0
- data/ext/pg_query/include/executor/execdesc.h +1 -1
- data/ext/pg_query/include/executor/executor.h +34 -17
- data/ext/pg_query/include/executor/functions.h +1 -1
- data/ext/pg_query/include/executor/instrument.h +1 -1
- data/ext/pg_query/include/executor/spi.h +2 -2
- data/ext/pg_query/include/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/executor/tuptable.h +18 -11
- data/ext/pg_query/include/fmgr.h +21 -2
- data/ext/pg_query/include/foreign/fdwapi.h +294 -0
- data/ext/pg_query/include/funcapi.h +12 -12
- data/ext/pg_query/include/gram.h +1127 -0
- data/ext/pg_query/include/{parser/gramparse.h → gramparse.h} +4 -4
- data/ext/pg_query/include/jit/jit.h +2 -2
- data/ext/pg_query/include/kwlist_d.h +534 -510
- data/ext/pg_query/include/lib/dshash.h +4 -1
- data/ext/pg_query/include/lib/ilist.h +435 -22
- data/ext/pg_query/include/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/lib/simplehash.h +9 -9
- data/ext/pg_query/include/lib/sort_template.h +1 -1
- data/ext/pg_query/include/lib/stringinfo.h +3 -3
- data/ext/pg_query/include/libpq/auth.h +8 -2
- data/ext/pg_query/include/libpq/crypt.h +1 -1
- data/ext/pg_query/include/libpq/hba.h +24 -17
- data/ext/pg_query/include/libpq/libpq-be.h +36 -25
- data/ext/pg_query/include/libpq/libpq.h +1 -1
- data/ext/pg_query/include/libpq/pqcomm.h +10 -41
- data/ext/pg_query/include/libpq/pqformat.h +2 -2
- data/ext/pg_query/include/libpq/pqsignal.h +22 -10
- data/ext/pg_query/include/libpq/sasl.h +136 -0
- data/ext/pg_query/include/libpq/scram.h +37 -0
- data/ext/pg_query/include/mb/pg_wchar.h +35 -18
- data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/miscadmin.h +26 -14
- data/ext/pg_query/include/nodes/bitmapset.h +11 -7
- data/ext/pg_query/include/nodes/execnodes.h +83 -30
- data/ext/pg_query/include/nodes/extensible.h +5 -3
- data/ext/pg_query/include/nodes/lockoptions.h +1 -1
- data/ext/pg_query/include/nodes/makefuncs.h +14 -2
- data/ext/pg_query/include/nodes/memnodes.h +7 -4
- data/ext/pg_query/include/nodes/miscnodes.h +56 -0
- data/ext/pg_query/include/nodes/nodeFuncs.h +89 -29
- data/ext/pg_query/include/nodes/nodes.h +95 -510
- data/ext/pg_query/include/nodes/nodetags.h +471 -0
- data/ext/pg_query/include/nodes/params.h +3 -3
- data/ext/pg_query/include/nodes/parsenodes.h +377 -139
- data/ext/pg_query/include/nodes/pathnodes.h +1090 -440
- data/ext/pg_query/include/nodes/pg_list.h +30 -7
- data/ext/pg_query/include/nodes/plannodes.h +367 -124
- data/ext/pg_query/include/nodes/primnodes.h +670 -222
- data/ext/pg_query/include/nodes/print.h +1 -1
- data/ext/pg_query/include/{utils → nodes}/queryjumble.h +5 -7
- data/ext/pg_query/include/nodes/replnodes.h +111 -0
- data/ext/pg_query/include/nodes/supportnodes.h +346 -0
- data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/nodes/value.h +12 -2
- data/ext/pg_query/include/optimizer/cost.h +6 -4
- data/ext/pg_query/include/optimizer/geqo.h +1 -1
- data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/optimizer/optimizer.h +8 -8
- data/ext/pg_query/include/optimizer/paths.h +16 -7
- data/ext/pg_query/include/optimizer/planmain.h +3 -6
- data/ext/pg_query/include/parser/analyze.h +4 -3
- data/ext/pg_query/include/parser/kwlist.h +12 -1
- data/ext/pg_query/include/parser/parse_agg.h +4 -2
- data/ext/pg_query/include/parser/parse_coerce.h +3 -1
- data/ext/pg_query/include/parser/parse_expr.h +1 -1
- data/ext/pg_query/include/parser/parse_func.h +1 -1
- data/ext/pg_query/include/parser/parse_node.h +22 -4
- data/ext/pg_query/include/parser/parse_oper.h +3 -3
- data/ext/pg_query/include/parser/parse_relation.h +8 -3
- data/ext/pg_query/include/parser/parse_type.h +4 -3
- data/ext/pg_query/include/parser/parser.h +1 -1
- data/ext/pg_query/include/parser/parsetree.h +1 -1
- data/ext/pg_query/include/parser/scanner.h +2 -2
- data/ext/pg_query/include/parser/scansup.h +1 -1
- data/ext/pg_query/include/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/pg_config.h +21 -216
- data/ext/pg_query/include/pg_config_manual.h +8 -46
- data/ext/pg_query/include/pg_getopt.h +1 -1
- data/ext/pg_query/include/pg_query.h +27 -3
- data/ext/pg_query/include/pg_query_enum_defs.c +311 -149
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +545 -489
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +5092 -4432
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +385 -343
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +1294 -1161
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +137 -123
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +1657 -1496
- data/ext/pg_query/include/pg_trace.h +1 -1
- data/ext/pg_query/include/pgstat.h +172 -93
- data/ext/pg_query/include/pgtime.h +3 -3
- data/ext/pg_query/include/pl_gram.h +64 -62
- data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/pl_reserved_kwlist_d.h +1 -1
- data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -1
- data/ext/pg_query/include/pl_unreserved_kwlist_d.h +48 -46
- data/ext/pg_query/include/plpgsql.h +17 -22
- data/ext/pg_query/include/port/atomics/arch-arm.h +3 -3
- data/ext/pg_query/include/port/atomics/arch-ppc.h +21 -21
- data/ext/pg_query/include/port/atomics/arch-x86.h +2 -2
- data/ext/pg_query/include/port/atomics/fallback.h +3 -3
- data/ext/pg_query/include/port/atomics/generic-gcc.h +1 -1
- data/ext/pg_query/include/port/atomics/generic.h +1 -1
- data/ext/pg_query/include/port/atomics.h +2 -7
- data/ext/pg_query/include/port/pg_bitutils.h +62 -25
- data/ext/pg_query/include/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/port/pg_crc32c.h +1 -1
- data/ext/pg_query/include/port/simd.h +375 -0
- data/ext/pg_query/include/port.h +42 -75
- data/ext/pg_query/include/portability/instr_time.h +81 -140
- data/ext/pg_query/include/postgres.h +205 -434
- data/ext/pg_query/include/postgres_ext.h +0 -1
- data/ext/pg_query/include/postmaster/autovacuum.h +1 -4
- data/ext/pg_query/include/postmaster/auxprocess.h +1 -1
- data/ext/pg_query/include/postmaster/bgworker.h +2 -2
- data/ext/pg_query/include/postmaster/bgworker_internals.h +1 -1
- data/ext/pg_query/include/postmaster/bgwriter.h +2 -2
- data/ext/pg_query/include/postmaster/fork_process.h +1 -1
- data/ext/pg_query/include/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postmaster/pgarch.h +1 -38
- data/ext/pg_query/include/postmaster/postmaster.h +5 -2
- data/ext/pg_query/include/postmaster/startup.h +3 -1
- data/ext/pg_query/include/postmaster/syslogger.h +2 -2
- data/ext/pg_query/include/postmaster/walwriter.h +3 -1
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +6186 -5585
- data/ext/pg_query/include/protobuf/pg_query.pb.h +112443 -91222
- data/ext/pg_query/include/regex/regex.h +9 -6
- data/ext/pg_query/include/replication/logicallauncher.h +6 -1
- data/ext/pg_query/include/replication/logicalproto.h +30 -10
- data/ext/pg_query/include/replication/logicalworker.h +14 -1
- data/ext/pg_query/include/replication/origin.h +4 -4
- data/ext/pg_query/include/replication/reorderbuffer.h +113 -45
- data/ext/pg_query/include/replication/slot.h +25 -6
- data/ext/pg_query/include/replication/syncrep.h +2 -8
- data/ext/pg_query/include/replication/walreceiver.h +15 -9
- data/ext/pg_query/include/replication/walsender.h +13 -13
- data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -4
- data/ext/pg_query/include/rewrite/rewriteManip.h +11 -2
- data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/src_backend_nodes_copyfuncs.funcs.c +5321 -0
- data/ext/pg_query/include/src_backend_nodes_equalfuncs.funcs.c +3354 -0
- data/ext/pg_query/include/storage/backendid.h +1 -1
- data/ext/pg_query/include/storage/block.h +24 -31
- data/ext/pg_query/include/storage/buf.h +1 -1
- data/ext/pg_query/include/storage/bufmgr.h +183 -87
- data/ext/pg_query/include/storage/bufpage.h +146 -93
- data/ext/pg_query/include/storage/condition_variable.h +2 -2
- data/ext/pg_query/include/storage/dsm.h +3 -6
- data/ext/pg_query/include/storage/dsm_impl.h +4 -1
- data/ext/pg_query/include/storage/fd.h +24 -20
- data/ext/pg_query/include/storage/fileset.h +1 -1
- data/ext/pg_query/include/storage/ipc.h +1 -1
- data/ext/pg_query/include/storage/item.h +1 -1
- data/ext/pg_query/include/storage/itemid.h +1 -1
- data/ext/pg_query/include/storage/itemptr.h +94 -57
- data/ext/pg_query/include/storage/large_object.h +1 -1
- data/ext/pg_query/include/storage/latch.h +9 -1
- data/ext/pg_query/include/storage/lmgr.h +6 -1
- data/ext/pg_query/include/storage/lock.h +21 -13
- data/ext/pg_query/include/storage/lockdefs.h +3 -3
- data/ext/pg_query/include/storage/lwlock.h +16 -2
- data/ext/pg_query/include/storage/off.h +1 -1
- data/ext/pg_query/include/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/storage/pg_shmem.h +1 -1
- data/ext/pg_query/include/storage/pmsignal.h +1 -1
- data/ext/pg_query/include/storage/predicate.h +2 -2
- data/ext/pg_query/include/storage/proc.h +22 -17
- data/ext/pg_query/include/storage/procarray.h +3 -2
- data/ext/pg_query/include/storage/proclist_types.h +1 -1
- data/ext/pg_query/include/storage/procsignal.h +3 -1
- data/ext/pg_query/include/storage/relfilelocator.h +99 -0
- data/ext/pg_query/include/storage/s_lock.h +66 -309
- data/ext/pg_query/include/storage/sharedfileset.h +1 -1
- data/ext/pg_query/include/storage/shm_mq.h +1 -1
- data/ext/pg_query/include/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/storage/shmem.h +1 -23
- data/ext/pg_query/include/storage/sinval.h +3 -3
- data/ext/pg_query/include/storage/sinvaladt.h +4 -2
- data/ext/pg_query/include/storage/smgr.h +12 -10
- data/ext/pg_query/include/storage/spin.h +1 -1
- data/ext/pg_query/include/storage/standby.h +9 -8
- data/ext/pg_query/include/storage/standbydefs.h +1 -1
- data/ext/pg_query/include/storage/sync.h +3 -3
- data/ext/pg_query/include/tcop/cmdtag.h +7 -2
- data/ext/pg_query/include/tcop/cmdtaglist.h +1 -1
- data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
- data/ext/pg_query/include/tcop/dest.h +1 -3
- data/ext/pg_query/include/tcop/fastpath.h +1 -1
- data/ext/pg_query/include/tcop/pquery.h +1 -1
- data/ext/pg_query/include/tcop/tcopprot.h +1 -4
- data/ext/pg_query/include/tcop/utility.h +1 -1
- data/ext/pg_query/include/tsearch/ts_cache.h +2 -4
- data/ext/pg_query/include/utils/acl.h +26 -81
- data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/utils/array.h +19 -1
- data/ext/pg_query/include/utils/backend_progress.h +2 -1
- data/ext/pg_query/include/utils/backend_status.h +24 -3
- data/ext/pg_query/include/utils/builtins.h +14 -5
- data/ext/pg_query/include/utils/bytea.h +1 -1
- data/ext/pg_query/include/utils/catcache.h +1 -1
- data/ext/pg_query/include/utils/date.h +37 -9
- data/ext/pg_query/include/utils/datetime.h +41 -21
- data/ext/pg_query/include/utils/datum.h +1 -1
- data/ext/pg_query/include/utils/dsa.h +5 -1
- data/ext/pg_query/include/utils/elog.h +101 -26
- data/ext/pg_query/include/utils/expandeddatum.h +14 -3
- data/ext/pg_query/include/utils/expandedrecord.h +14 -4
- data/ext/pg_query/include/utils/float.h +7 -6
- data/ext/pg_query/include/utils/fmgroids.h +54 -1
- data/ext/pg_query/include/utils/fmgrprotos.h +45 -3
- data/ext/pg_query/include/utils/fmgrtab.h +1 -1
- data/ext/pg_query/include/utils/guc.h +55 -82
- data/ext/pg_query/include/utils/guc_hooks.h +163 -0
- data/ext/pg_query/include/utils/guc_tables.h +49 -3
- data/ext/pg_query/include/utils/hsearch.h +1 -1
- data/ext/pg_query/include/utils/inval.h +3 -3
- data/ext/pg_query/include/utils/logtape.h +77 -0
- data/ext/pg_query/include/utils/lsyscache.h +5 -1
- data/ext/pg_query/include/utils/memdebug.h +1 -1
- data/ext/pg_query/include/utils/memutils.h +5 -49
- data/ext/pg_query/include/utils/memutils_internal.h +136 -0
- data/ext/pg_query/include/utils/memutils_memorychunk.h +237 -0
- data/ext/pg_query/include/utils/numeric.h +20 -5
- data/ext/pg_query/include/utils/palloc.h +8 -1
- data/ext/pg_query/include/utils/partcache.h +3 -2
- data/ext/pg_query/include/utils/pg_locale.h +22 -14
- data/ext/pg_query/include/utils/pgstat_internal.h +37 -7
- data/ext/pg_query/include/utils/pidfile.h +1 -1
- data/ext/pg_query/include/utils/plancache.h +1 -1
- data/ext/pg_query/include/utils/portal.h +1 -1
- data/ext/pg_query/include/utils/probes.h +6 -6
- data/ext/pg_query/include/utils/ps_status.h +23 -1
- data/ext/pg_query/include/utils/queryenvironment.h +1 -1
- data/ext/pg_query/include/utils/regproc.h +3 -3
- data/ext/pg_query/include/utils/rel.h +60 -43
- data/ext/pg_query/include/utils/relcache.h +13 -8
- data/ext/pg_query/include/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/utils/resowner.h +1 -1
- data/ext/pg_query/include/utils/ruleutils.h +6 -1
- data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/utils/snapmgr.h +4 -2
- data/ext/pg_query/include/utils/snapshot.h +1 -1
- data/ext/pg_query/include/utils/sortsupport.h +2 -2
- data/ext/pg_query/include/utils/syscache.h +4 -1
- data/ext/pg_query/include/utils/timeout.h +1 -1
- data/ext/pg_query/include/utils/timestamp.h +41 -11
- data/ext/pg_query/include/utils/tuplesort.h +189 -35
- data/ext/pg_query/include/utils/tuplestore.h +1 -1
- data/ext/pg_query/include/utils/typcache.h +1 -1
- data/ext/pg_query/include/utils/varlena.h +13 -1
- data/ext/pg_query/include/utils/wait_event.h +9 -4
- data/ext/pg_query/include/utils/xml.h +15 -5
- data/ext/pg_query/include/varatt.h +358 -0
- data/ext/pg_query/pg_query.c +1 -1
- data/ext/pg_query/pg_query.pb-c.c +19755 -17757
- data/ext/pg_query/pg_query_fingerprint.c +8 -3
- data/ext/pg_query/pg_query_fingerprint.h +1 -1
- data/ext/pg_query/pg_query_internal.h +1 -1
- data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
- data/ext/pg_query/pg_query_normalize.c +1 -1
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +2 -2
- data/ext/pg_query/pg_query_parse.c +46 -4
- data/ext/pg_query/pg_query_parse_plpgsql.c +1 -1
- data/ext/pg_query/pg_query_scan.c +1 -1
- data/ext/pg_query/pg_query_split.c +2 -2
- data/ext/pg_query/postgres_deparse.c +503 -105
- data/ext/pg_query/src_backend_catalog_namespace.c +7 -2
- data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -1
- data/ext/pg_query/src_backend_commands_define.c +1 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +11 -70
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
- data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
- data/ext/pg_query/src_backend_nodes_list.c +14 -2
- data/ext/pg_query/src_backend_nodes_makefuncs.c +95 -1
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +283 -132
- data/ext/pg_query/src_backend_nodes_value.c +1 -1
- data/ext/pg_query/src_backend_parser_gram.c +33208 -31806
- data/ext/pg_query/src_backend_parser_parser.c +28 -2
- data/ext/pg_query/src_backend_parser_scan.c +4318 -3329
- data/ext/pg_query/src_backend_parser_scansup.c +1 -1
- data/ext/pg_query/src_backend_postmaster_postmaster.c +129 -110
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
- data/ext/pg_query/src_backend_tcop_postgres.c +66 -87
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_datum.c +5 -7
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +79 -5
- data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
- data/ext/pg_query/src_backend_utils_error_elog.c +354 -97
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +33 -1
- data/ext/pg_query/src_backend_utils_init_globals.c +5 -2
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +13 -4
- data/ext/pg_query/src_backend_utils_misc_guc_tables.c +494 -0
- data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +449 -312
- data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +398 -49
- data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
- data/ext/pg_query/src_common_encnames.c +4 -1
- data/ext/pg_query/src_common_hashfn.c +1 -1
- data/ext/pg_query/src_common_keywords.c +1 -1
- data/ext/pg_query/src_common_kwlist_d.h +534 -510
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_psprintf.c +1 -1
- data/ext/pg_query/src_common_stringinfo.c +4 -4
- data/ext/pg_query/src_common_wchar.c +9 -8
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +661 -694
- data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
- data/ext/pg_query/src_port_pg_bitutils.c +1 -1
- data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
- data/ext/pg_query/src_port_snprintf.c +3 -7
- data/ext/pg_query/src_port_strerror.c +1 -1
- data/ext/pg_query/src_port_strnlen.c +1 -1
- data/lib/pg_query/pg_query_pb.rb +166 -3191
- data/lib/pg_query/treewalker.rb +7 -2
- data/lib/pg_query/version.rb +1 -1
- metadata +43 -24
- data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
- data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
- data/ext/pg_query/include/commands/variable.h +0 -38
- data/ext/pg_query/include/getaddrinfo.h +0 -162
- data/ext/pg_query/include/parser/gram.h +0 -1101
- data/ext/pg_query/include/storage/relfilenode.h +0 -99
- data/ext/pg_query/include/utils/dynahash.h +0 -20
- data/ext/pg_query/include/utils/pg_lsn.h +0 -29
- data/ext/pg_query/include/utils/rls.h +0 -50
- data/ext/pg_query/include/utils/tzparser.h +0 -39
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -371
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
- data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
- data/ext/pg_query/src_common_pg_prng.c +0 -152
- data/ext/pg_query/src_common_string.c +0 -92
- data/ext/pg_query/src_port_pgsleep.c +0 -69
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Client-side code should include postgres_fe.h instead.
|
|
8
8
|
*
|
|
9
9
|
*
|
|
10
|
-
* Portions Copyright (c) 1996-
|
|
10
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
11
11
|
* Portions Copyright (c) 1995, Regents of the University of California
|
|
12
12
|
*
|
|
13
13
|
* src/include/postgres.h
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
*
|
|
24
24
|
* section description
|
|
25
25
|
* ------- ------------------------------------------------
|
|
26
|
-
* 1)
|
|
27
|
-
* 2)
|
|
26
|
+
* 1) Datum type + support functions
|
|
27
|
+
* 2) miscellaneous
|
|
28
28
|
*
|
|
29
29
|
* NOTES
|
|
30
30
|
*
|
|
@@ -35,8 +35,7 @@
|
|
|
35
35
|
* postgres_fe.h. We do that since those type definitions are needed by
|
|
36
36
|
* frontend modules that want to deal with binary data transmission to or
|
|
37
37
|
* from the backend. Type definitions in this file should be for
|
|
38
|
-
* representations that never escape the backend, such as Datum
|
|
39
|
-
* TOASTed varlena objects.
|
|
38
|
+
* representations that never escape the backend, such as Datum.
|
|
40
39
|
*
|
|
41
40
|
*----------------------------------------------------------------
|
|
42
41
|
*/
|
|
@@ -48,353 +47,7 @@
|
|
|
48
47
|
#include "utils/palloc.h"
|
|
49
48
|
|
|
50
49
|
/* ----------------------------------------------------------------
|
|
51
|
-
* Section 1:
|
|
52
|
-
* ----------------------------------------------------------------
|
|
53
|
-
*/
|
|
54
|
-
|
|
55
|
-
/*
|
|
56
|
-
* struct varatt_external is a traditional "TOAST pointer", that is, the
|
|
57
|
-
* information needed to fetch a Datum stored out-of-line in a TOAST table.
|
|
58
|
-
* The data is compressed if and only if the external size stored in
|
|
59
|
-
* va_extinfo is less than va_rawsize - VARHDRSZ.
|
|
60
|
-
*
|
|
61
|
-
* This struct must not contain any padding, because we sometimes compare
|
|
62
|
-
* these pointers using memcmp.
|
|
63
|
-
*
|
|
64
|
-
* Note that this information is stored unaligned within actual tuples, so
|
|
65
|
-
* you need to memcpy from the tuple into a local struct variable before
|
|
66
|
-
* you can look at these fields! (The reason we use memcmp is to avoid
|
|
67
|
-
* having to do that just to detect equality of two TOAST pointers...)
|
|
68
|
-
*/
|
|
69
|
-
typedef struct varatt_external
|
|
70
|
-
{
|
|
71
|
-
int32 va_rawsize; /* Original data size (includes header) */
|
|
72
|
-
uint32 va_extinfo; /* External saved size (without header) and
|
|
73
|
-
* compression method */
|
|
74
|
-
Oid va_valueid; /* Unique ID of value within TOAST table */
|
|
75
|
-
Oid va_toastrelid; /* RelID of TOAST table containing it */
|
|
76
|
-
} varatt_external;
|
|
77
|
-
|
|
78
|
-
/*
|
|
79
|
-
* These macros define the "saved size" portion of va_extinfo. Its remaining
|
|
80
|
-
* two high-order bits identify the compression method.
|
|
81
|
-
*/
|
|
82
|
-
#define VARLENA_EXTSIZE_BITS 30
|
|
83
|
-
#define VARLENA_EXTSIZE_MASK ((1U << VARLENA_EXTSIZE_BITS) - 1)
|
|
84
|
-
|
|
85
|
-
/*
|
|
86
|
-
* struct varatt_indirect is a "TOAST pointer" representing an out-of-line
|
|
87
|
-
* Datum that's stored in memory, not in an external toast relation.
|
|
88
|
-
* The creator of such a Datum is entirely responsible that the referenced
|
|
89
|
-
* storage survives for as long as referencing pointer Datums can exist.
|
|
90
|
-
*
|
|
91
|
-
* Note that just as for struct varatt_external, this struct is stored
|
|
92
|
-
* unaligned within any containing tuple.
|
|
93
|
-
*/
|
|
94
|
-
typedef struct varatt_indirect
|
|
95
|
-
{
|
|
96
|
-
struct varlena *pointer; /* Pointer to in-memory varlena */
|
|
97
|
-
} varatt_indirect;
|
|
98
|
-
|
|
99
|
-
/*
|
|
100
|
-
* struct varatt_expanded is a "TOAST pointer" representing an out-of-line
|
|
101
|
-
* Datum that is stored in memory, in some type-specific, not necessarily
|
|
102
|
-
* physically contiguous format that is convenient for computation not
|
|
103
|
-
* storage. APIs for this, in particular the definition of struct
|
|
104
|
-
* ExpandedObjectHeader, are in src/include/utils/expandeddatum.h.
|
|
105
|
-
*
|
|
106
|
-
* Note that just as for struct varatt_external, this struct is stored
|
|
107
|
-
* unaligned within any containing tuple.
|
|
108
|
-
*/
|
|
109
|
-
typedef struct ExpandedObjectHeader ExpandedObjectHeader;
|
|
110
|
-
|
|
111
|
-
typedef struct varatt_expanded
|
|
112
|
-
{
|
|
113
|
-
ExpandedObjectHeader *eohptr;
|
|
114
|
-
} varatt_expanded;
|
|
115
|
-
|
|
116
|
-
/*
|
|
117
|
-
* Type tag for the various sorts of "TOAST pointer" datums. The peculiar
|
|
118
|
-
* value for VARTAG_ONDISK comes from a requirement for on-disk compatibility
|
|
119
|
-
* with a previous notion that the tag field was the pointer datum's length.
|
|
120
|
-
*/
|
|
121
|
-
typedef enum vartag_external
|
|
122
|
-
{
|
|
123
|
-
VARTAG_INDIRECT = 1,
|
|
124
|
-
VARTAG_EXPANDED_RO = 2,
|
|
125
|
-
VARTAG_EXPANDED_RW = 3,
|
|
126
|
-
VARTAG_ONDISK = 18
|
|
127
|
-
} vartag_external;
|
|
128
|
-
|
|
129
|
-
/* this test relies on the specific tag values above */
|
|
130
|
-
#define VARTAG_IS_EXPANDED(tag) \
|
|
131
|
-
(((tag) & ~1) == VARTAG_EXPANDED_RO)
|
|
132
|
-
|
|
133
|
-
#define VARTAG_SIZE(tag) \
|
|
134
|
-
((tag) == VARTAG_INDIRECT ? sizeof(varatt_indirect) : \
|
|
135
|
-
VARTAG_IS_EXPANDED(tag) ? sizeof(varatt_expanded) : \
|
|
136
|
-
(tag) == VARTAG_ONDISK ? sizeof(varatt_external) : \
|
|
137
|
-
TrapMacro(true, "unrecognized TOAST vartag"))
|
|
138
|
-
|
|
139
|
-
/*
|
|
140
|
-
* These structs describe the header of a varlena object that may have been
|
|
141
|
-
* TOASTed. Generally, don't reference these structs directly, but use the
|
|
142
|
-
* macros below.
|
|
143
|
-
*
|
|
144
|
-
* We use separate structs for the aligned and unaligned cases because the
|
|
145
|
-
* compiler might otherwise think it could generate code that assumes
|
|
146
|
-
* alignment while touching fields of a 1-byte-header varlena.
|
|
147
|
-
*/
|
|
148
|
-
typedef union
|
|
149
|
-
{
|
|
150
|
-
struct /* Normal varlena (4-byte length) */
|
|
151
|
-
{
|
|
152
|
-
uint32 va_header;
|
|
153
|
-
char va_data[FLEXIBLE_ARRAY_MEMBER];
|
|
154
|
-
} va_4byte;
|
|
155
|
-
struct /* Compressed-in-line format */
|
|
156
|
-
{
|
|
157
|
-
uint32 va_header;
|
|
158
|
-
uint32 va_tcinfo; /* Original data size (excludes header) and
|
|
159
|
-
* compression method; see va_extinfo */
|
|
160
|
-
char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Compressed data */
|
|
161
|
-
} va_compressed;
|
|
162
|
-
} varattrib_4b;
|
|
163
|
-
|
|
164
|
-
typedef struct
|
|
165
|
-
{
|
|
166
|
-
uint8 va_header;
|
|
167
|
-
char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Data begins here */
|
|
168
|
-
} varattrib_1b;
|
|
169
|
-
|
|
170
|
-
/* TOAST pointers are a subset of varattrib_1b with an identifying tag byte */
|
|
171
|
-
typedef struct
|
|
172
|
-
{
|
|
173
|
-
uint8 va_header; /* Always 0x80 or 0x01 */
|
|
174
|
-
uint8 va_tag; /* Type of datum */
|
|
175
|
-
char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Type-specific data */
|
|
176
|
-
} varattrib_1b_e;
|
|
177
|
-
|
|
178
|
-
/*
|
|
179
|
-
* Bit layouts for varlena headers on big-endian machines:
|
|
180
|
-
*
|
|
181
|
-
* 00xxxxxx 4-byte length word, aligned, uncompressed data (up to 1G)
|
|
182
|
-
* 01xxxxxx 4-byte length word, aligned, *compressed* data (up to 1G)
|
|
183
|
-
* 10000000 1-byte length word, unaligned, TOAST pointer
|
|
184
|
-
* 1xxxxxxx 1-byte length word, unaligned, uncompressed data (up to 126b)
|
|
185
|
-
*
|
|
186
|
-
* Bit layouts for varlena headers on little-endian machines:
|
|
187
|
-
*
|
|
188
|
-
* xxxxxx00 4-byte length word, aligned, uncompressed data (up to 1G)
|
|
189
|
-
* xxxxxx10 4-byte length word, aligned, *compressed* data (up to 1G)
|
|
190
|
-
* 00000001 1-byte length word, unaligned, TOAST pointer
|
|
191
|
-
* xxxxxxx1 1-byte length word, unaligned, uncompressed data (up to 126b)
|
|
192
|
-
*
|
|
193
|
-
* The "xxx" bits are the length field (which includes itself in all cases).
|
|
194
|
-
* In the big-endian case we mask to extract the length, in the little-endian
|
|
195
|
-
* case we shift. Note that in both cases the flag bits are in the physically
|
|
196
|
-
* first byte. Also, it is not possible for a 1-byte length word to be zero;
|
|
197
|
-
* this lets us disambiguate alignment padding bytes from the start of an
|
|
198
|
-
* unaligned datum. (We now *require* pad bytes to be filled with zero!)
|
|
199
|
-
*
|
|
200
|
-
* In TOAST pointers the va_tag field (see varattrib_1b_e) is used to discern
|
|
201
|
-
* the specific type and length of the pointer datum.
|
|
202
|
-
*/
|
|
203
|
-
|
|
204
|
-
/*
|
|
205
|
-
* Endian-dependent macros. These are considered internal --- use the
|
|
206
|
-
* external macros below instead of using these directly.
|
|
207
|
-
*
|
|
208
|
-
* Note: IS_1B is true for external toast records but VARSIZE_1B will return 0
|
|
209
|
-
* for such records. Hence you should usually check for IS_EXTERNAL before
|
|
210
|
-
* checking for IS_1B.
|
|
211
|
-
*/
|
|
212
|
-
|
|
213
|
-
#ifdef WORDS_BIGENDIAN
|
|
214
|
-
|
|
215
|
-
#define VARATT_IS_4B(PTR) \
|
|
216
|
-
((((varattrib_1b *) (PTR))->va_header & 0x80) == 0x00)
|
|
217
|
-
#define VARATT_IS_4B_U(PTR) \
|
|
218
|
-
((((varattrib_1b *) (PTR))->va_header & 0xC0) == 0x00)
|
|
219
|
-
#define VARATT_IS_4B_C(PTR) \
|
|
220
|
-
((((varattrib_1b *) (PTR))->va_header & 0xC0) == 0x40)
|
|
221
|
-
#define VARATT_IS_1B(PTR) \
|
|
222
|
-
((((varattrib_1b *) (PTR))->va_header & 0x80) == 0x80)
|
|
223
|
-
#define VARATT_IS_1B_E(PTR) \
|
|
224
|
-
((((varattrib_1b *) (PTR))->va_header) == 0x80)
|
|
225
|
-
#define VARATT_NOT_PAD_BYTE(PTR) \
|
|
226
|
-
(*((uint8 *) (PTR)) != 0)
|
|
227
|
-
|
|
228
|
-
/* VARSIZE_4B() should only be used on known-aligned data */
|
|
229
|
-
#define VARSIZE_4B(PTR) \
|
|
230
|
-
(((varattrib_4b *) (PTR))->va_4byte.va_header & 0x3FFFFFFF)
|
|
231
|
-
#define VARSIZE_1B(PTR) \
|
|
232
|
-
(((varattrib_1b *) (PTR))->va_header & 0x7F)
|
|
233
|
-
#define VARTAG_1B_E(PTR) \
|
|
234
|
-
(((varattrib_1b_e *) (PTR))->va_tag)
|
|
235
|
-
|
|
236
|
-
#define SET_VARSIZE_4B(PTR,len) \
|
|
237
|
-
(((varattrib_4b *) (PTR))->va_4byte.va_header = (len) & 0x3FFFFFFF)
|
|
238
|
-
#define SET_VARSIZE_4B_C(PTR,len) \
|
|
239
|
-
(((varattrib_4b *) (PTR))->va_4byte.va_header = ((len) & 0x3FFFFFFF) | 0x40000000)
|
|
240
|
-
#define SET_VARSIZE_1B(PTR,len) \
|
|
241
|
-
(((varattrib_1b *) (PTR))->va_header = (len) | 0x80)
|
|
242
|
-
#define SET_VARTAG_1B_E(PTR,tag) \
|
|
243
|
-
(((varattrib_1b_e *) (PTR))->va_header = 0x80, \
|
|
244
|
-
((varattrib_1b_e *) (PTR))->va_tag = (tag))
|
|
245
|
-
|
|
246
|
-
#else /* !WORDS_BIGENDIAN */
|
|
247
|
-
|
|
248
|
-
#define VARATT_IS_4B(PTR) \
|
|
249
|
-
((((varattrib_1b *) (PTR))->va_header & 0x01) == 0x00)
|
|
250
|
-
#define VARATT_IS_4B_U(PTR) \
|
|
251
|
-
((((varattrib_1b *) (PTR))->va_header & 0x03) == 0x00)
|
|
252
|
-
#define VARATT_IS_4B_C(PTR) \
|
|
253
|
-
((((varattrib_1b *) (PTR))->va_header & 0x03) == 0x02)
|
|
254
|
-
#define VARATT_IS_1B(PTR) \
|
|
255
|
-
((((varattrib_1b *) (PTR))->va_header & 0x01) == 0x01)
|
|
256
|
-
#define VARATT_IS_1B_E(PTR) \
|
|
257
|
-
((((varattrib_1b *) (PTR))->va_header) == 0x01)
|
|
258
|
-
#define VARATT_NOT_PAD_BYTE(PTR) \
|
|
259
|
-
(*((uint8 *) (PTR)) != 0)
|
|
260
|
-
|
|
261
|
-
/* VARSIZE_4B() should only be used on known-aligned data */
|
|
262
|
-
#define VARSIZE_4B(PTR) \
|
|
263
|
-
((((varattrib_4b *) (PTR))->va_4byte.va_header >> 2) & 0x3FFFFFFF)
|
|
264
|
-
#define VARSIZE_1B(PTR) \
|
|
265
|
-
((((varattrib_1b *) (PTR))->va_header >> 1) & 0x7F)
|
|
266
|
-
#define VARTAG_1B_E(PTR) \
|
|
267
|
-
(((varattrib_1b_e *) (PTR))->va_tag)
|
|
268
|
-
|
|
269
|
-
#define SET_VARSIZE_4B(PTR,len) \
|
|
270
|
-
(((varattrib_4b *) (PTR))->va_4byte.va_header = (((uint32) (len)) << 2))
|
|
271
|
-
#define SET_VARSIZE_4B_C(PTR,len) \
|
|
272
|
-
(((varattrib_4b *) (PTR))->va_4byte.va_header = (((uint32) (len)) << 2) | 0x02)
|
|
273
|
-
#define SET_VARSIZE_1B(PTR,len) \
|
|
274
|
-
(((varattrib_1b *) (PTR))->va_header = (((uint8) (len)) << 1) | 0x01)
|
|
275
|
-
#define SET_VARTAG_1B_E(PTR,tag) \
|
|
276
|
-
(((varattrib_1b_e *) (PTR))->va_header = 0x01, \
|
|
277
|
-
((varattrib_1b_e *) (PTR))->va_tag = (tag))
|
|
278
|
-
|
|
279
|
-
#endif /* WORDS_BIGENDIAN */
|
|
280
|
-
|
|
281
|
-
#define VARDATA_4B(PTR) (((varattrib_4b *) (PTR))->va_4byte.va_data)
|
|
282
|
-
#define VARDATA_4B_C(PTR) (((varattrib_4b *) (PTR))->va_compressed.va_data)
|
|
283
|
-
#define VARDATA_1B(PTR) (((varattrib_1b *) (PTR))->va_data)
|
|
284
|
-
#define VARDATA_1B_E(PTR) (((varattrib_1b_e *) (PTR))->va_data)
|
|
285
|
-
|
|
286
|
-
/*
|
|
287
|
-
* Externally visible TOAST macros begin here.
|
|
288
|
-
*/
|
|
289
|
-
|
|
290
|
-
#define VARHDRSZ_EXTERNAL offsetof(varattrib_1b_e, va_data)
|
|
291
|
-
#define VARHDRSZ_COMPRESSED offsetof(varattrib_4b, va_compressed.va_data)
|
|
292
|
-
#define VARHDRSZ_SHORT offsetof(varattrib_1b, va_data)
|
|
293
|
-
|
|
294
|
-
#define VARATT_SHORT_MAX 0x7F
|
|
295
|
-
#define VARATT_CAN_MAKE_SHORT(PTR) \
|
|
296
|
-
(VARATT_IS_4B_U(PTR) && \
|
|
297
|
-
(VARSIZE(PTR) - VARHDRSZ + VARHDRSZ_SHORT) <= VARATT_SHORT_MAX)
|
|
298
|
-
#define VARATT_CONVERTED_SHORT_SIZE(PTR) \
|
|
299
|
-
(VARSIZE(PTR) - VARHDRSZ + VARHDRSZ_SHORT)
|
|
300
|
-
|
|
301
|
-
/*
|
|
302
|
-
* In consumers oblivious to data alignment, call PG_DETOAST_DATUM_PACKED(),
|
|
303
|
-
* VARDATA_ANY(), VARSIZE_ANY() and VARSIZE_ANY_EXHDR(). Elsewhere, call
|
|
304
|
-
* PG_DETOAST_DATUM(), VARDATA() and VARSIZE(). Directly fetching an int16,
|
|
305
|
-
* int32 or wider field in the struct representing the datum layout requires
|
|
306
|
-
* aligned data. memcpy() is alignment-oblivious, as are most operations on
|
|
307
|
-
* datatypes, such as text, whose layout struct contains only char fields.
|
|
308
|
-
*
|
|
309
|
-
* Code assembling a new datum should call VARDATA() and SET_VARSIZE().
|
|
310
|
-
* (Datums begin life untoasted.)
|
|
311
|
-
*
|
|
312
|
-
* Other macros here should usually be used only by tuple assembly/disassembly
|
|
313
|
-
* code and code that specifically wants to work with still-toasted Datums.
|
|
314
|
-
*/
|
|
315
|
-
#define VARDATA(PTR) VARDATA_4B(PTR)
|
|
316
|
-
#define VARSIZE(PTR) VARSIZE_4B(PTR)
|
|
317
|
-
|
|
318
|
-
#define VARSIZE_SHORT(PTR) VARSIZE_1B(PTR)
|
|
319
|
-
#define VARDATA_SHORT(PTR) VARDATA_1B(PTR)
|
|
320
|
-
|
|
321
|
-
#define VARTAG_EXTERNAL(PTR) VARTAG_1B_E(PTR)
|
|
322
|
-
#define VARSIZE_EXTERNAL(PTR) (VARHDRSZ_EXTERNAL + VARTAG_SIZE(VARTAG_EXTERNAL(PTR)))
|
|
323
|
-
#define VARDATA_EXTERNAL(PTR) VARDATA_1B_E(PTR)
|
|
324
|
-
|
|
325
|
-
#define VARATT_IS_COMPRESSED(PTR) VARATT_IS_4B_C(PTR)
|
|
326
|
-
#define VARATT_IS_EXTERNAL(PTR) VARATT_IS_1B_E(PTR)
|
|
327
|
-
#define VARATT_IS_EXTERNAL_ONDISK(PTR) \
|
|
328
|
-
(VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_ONDISK)
|
|
329
|
-
#define VARATT_IS_EXTERNAL_INDIRECT(PTR) \
|
|
330
|
-
(VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_INDIRECT)
|
|
331
|
-
#define VARATT_IS_EXTERNAL_EXPANDED_RO(PTR) \
|
|
332
|
-
(VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_EXPANDED_RO)
|
|
333
|
-
#define VARATT_IS_EXTERNAL_EXPANDED_RW(PTR) \
|
|
334
|
-
(VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_EXPANDED_RW)
|
|
335
|
-
#define VARATT_IS_EXTERNAL_EXPANDED(PTR) \
|
|
336
|
-
(VARATT_IS_EXTERNAL(PTR) && VARTAG_IS_EXPANDED(VARTAG_EXTERNAL(PTR)))
|
|
337
|
-
#define VARATT_IS_EXTERNAL_NON_EXPANDED(PTR) \
|
|
338
|
-
(VARATT_IS_EXTERNAL(PTR) && !VARTAG_IS_EXPANDED(VARTAG_EXTERNAL(PTR)))
|
|
339
|
-
#define VARATT_IS_SHORT(PTR) VARATT_IS_1B(PTR)
|
|
340
|
-
#define VARATT_IS_EXTENDED(PTR) (!VARATT_IS_4B_U(PTR))
|
|
341
|
-
|
|
342
|
-
#define SET_VARSIZE(PTR, len) SET_VARSIZE_4B(PTR, len)
|
|
343
|
-
#define SET_VARSIZE_SHORT(PTR, len) SET_VARSIZE_1B(PTR, len)
|
|
344
|
-
#define SET_VARSIZE_COMPRESSED(PTR, len) SET_VARSIZE_4B_C(PTR, len)
|
|
345
|
-
|
|
346
|
-
#define SET_VARTAG_EXTERNAL(PTR, tag) SET_VARTAG_1B_E(PTR, tag)
|
|
347
|
-
|
|
348
|
-
#define VARSIZE_ANY(PTR) \
|
|
349
|
-
(VARATT_IS_1B_E(PTR) ? VARSIZE_EXTERNAL(PTR) : \
|
|
350
|
-
(VARATT_IS_1B(PTR) ? VARSIZE_1B(PTR) : \
|
|
351
|
-
VARSIZE_4B(PTR)))
|
|
352
|
-
|
|
353
|
-
/* Size of a varlena data, excluding header */
|
|
354
|
-
#define VARSIZE_ANY_EXHDR(PTR) \
|
|
355
|
-
(VARATT_IS_1B_E(PTR) ? VARSIZE_EXTERNAL(PTR)-VARHDRSZ_EXTERNAL : \
|
|
356
|
-
(VARATT_IS_1B(PTR) ? VARSIZE_1B(PTR)-VARHDRSZ_SHORT : \
|
|
357
|
-
VARSIZE_4B(PTR)-VARHDRSZ))
|
|
358
|
-
|
|
359
|
-
/* caution: this will not work on an external or compressed-in-line Datum */
|
|
360
|
-
/* caution: this will return a possibly unaligned pointer */
|
|
361
|
-
#define VARDATA_ANY(PTR) \
|
|
362
|
-
(VARATT_IS_1B(PTR) ? VARDATA_1B(PTR) : VARDATA_4B(PTR))
|
|
363
|
-
|
|
364
|
-
/* Decompressed size and compression method of a compressed-in-line Datum */
|
|
365
|
-
#define VARDATA_COMPRESSED_GET_EXTSIZE(PTR) \
|
|
366
|
-
(((varattrib_4b *) (PTR))->va_compressed.va_tcinfo & VARLENA_EXTSIZE_MASK)
|
|
367
|
-
#define VARDATA_COMPRESSED_GET_COMPRESS_METHOD(PTR) \
|
|
368
|
-
(((varattrib_4b *) (PTR))->va_compressed.va_tcinfo >> VARLENA_EXTSIZE_BITS)
|
|
369
|
-
|
|
370
|
-
/* Same for external Datums; but note argument is a struct varatt_external */
|
|
371
|
-
#define VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) \
|
|
372
|
-
((toast_pointer).va_extinfo & VARLENA_EXTSIZE_MASK)
|
|
373
|
-
#define VARATT_EXTERNAL_GET_COMPRESS_METHOD(toast_pointer) \
|
|
374
|
-
((toast_pointer).va_extinfo >> VARLENA_EXTSIZE_BITS)
|
|
375
|
-
|
|
376
|
-
#define VARATT_EXTERNAL_SET_SIZE_AND_COMPRESS_METHOD(toast_pointer, len, cm) \
|
|
377
|
-
do { \
|
|
378
|
-
Assert((cm) == TOAST_PGLZ_COMPRESSION_ID || \
|
|
379
|
-
(cm) == TOAST_LZ4_COMPRESSION_ID); \
|
|
380
|
-
((toast_pointer).va_extinfo = \
|
|
381
|
-
(len) | ((uint32) (cm) << VARLENA_EXTSIZE_BITS)); \
|
|
382
|
-
} while (0)
|
|
383
|
-
|
|
384
|
-
/*
|
|
385
|
-
* Testing whether an externally-stored value is compressed now requires
|
|
386
|
-
* comparing size stored in va_extinfo (the actual length of the external data)
|
|
387
|
-
* to rawsize (the original uncompressed datum's size). The latter includes
|
|
388
|
-
* VARHDRSZ overhead, the former doesn't. We never use compression unless it
|
|
389
|
-
* actually saves space, so we expect either equality or less-than.
|
|
390
|
-
*/
|
|
391
|
-
#define VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer) \
|
|
392
|
-
(VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) < \
|
|
393
|
-
(toast_pointer).va_rawsize - VARHDRSZ)
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
/* ----------------------------------------------------------------
|
|
397
|
-
* Section 2: Datum type + support macros
|
|
50
|
+
* Section 1: Datum type + support functions
|
|
398
51
|
* ----------------------------------------------------------------
|
|
399
52
|
*/
|
|
400
53
|
|
|
@@ -404,7 +57,7 @@ typedef struct
|
|
|
404
57
|
*
|
|
405
58
|
* sizeof(Datum) == sizeof(void *) == 4 or 8
|
|
406
59
|
*
|
|
407
|
-
* The
|
|
60
|
+
* The functions below and the analogous functions for other types should be used to
|
|
408
61
|
* convert between a Datum and the appropriate C type.
|
|
409
62
|
*/
|
|
410
63
|
|
|
@@ -433,8 +86,11 @@ typedef struct NullableDatum
|
|
|
433
86
|
*
|
|
434
87
|
* Note: any nonzero value will be considered true.
|
|
435
88
|
*/
|
|
436
|
-
|
|
437
|
-
|
|
89
|
+
static inline bool
|
|
90
|
+
DatumGetBool(Datum X)
|
|
91
|
+
{
|
|
92
|
+
return (X != 0);
|
|
93
|
+
}
|
|
438
94
|
|
|
439
95
|
/*
|
|
440
96
|
* BoolGetDatum
|
|
@@ -442,162 +98,231 @@ typedef struct NullableDatum
|
|
|
442
98
|
*
|
|
443
99
|
* Note: any nonzero value will be considered true.
|
|
444
100
|
*/
|
|
445
|
-
|
|
446
|
-
|
|
101
|
+
static inline Datum
|
|
102
|
+
BoolGetDatum(bool X)
|
|
103
|
+
{
|
|
104
|
+
return (Datum) (X ? 1 : 0);
|
|
105
|
+
}
|
|
447
106
|
|
|
448
107
|
/*
|
|
449
108
|
* DatumGetChar
|
|
450
109
|
* Returns character value of a datum.
|
|
451
110
|
*/
|
|
452
|
-
|
|
453
|
-
|
|
111
|
+
static inline char
|
|
112
|
+
DatumGetChar(Datum X)
|
|
113
|
+
{
|
|
114
|
+
return (char) X;
|
|
115
|
+
}
|
|
454
116
|
|
|
455
117
|
/*
|
|
456
118
|
* CharGetDatum
|
|
457
119
|
* Returns datum representation for a character.
|
|
458
120
|
*/
|
|
459
|
-
|
|
460
|
-
|
|
121
|
+
static inline Datum
|
|
122
|
+
CharGetDatum(char X)
|
|
123
|
+
{
|
|
124
|
+
return (Datum) X;
|
|
125
|
+
}
|
|
461
126
|
|
|
462
127
|
/*
|
|
463
128
|
* Int8GetDatum
|
|
464
129
|
* Returns datum representation for an 8-bit integer.
|
|
465
130
|
*/
|
|
466
|
-
|
|
467
|
-
|
|
131
|
+
static inline Datum
|
|
132
|
+
Int8GetDatum(int8 X)
|
|
133
|
+
{
|
|
134
|
+
return (Datum) X;
|
|
135
|
+
}
|
|
468
136
|
|
|
469
137
|
/*
|
|
470
138
|
* DatumGetUInt8
|
|
471
139
|
* Returns 8-bit unsigned integer value of a datum.
|
|
472
140
|
*/
|
|
473
|
-
|
|
474
|
-
|
|
141
|
+
static inline uint8
|
|
142
|
+
DatumGetUInt8(Datum X)
|
|
143
|
+
{
|
|
144
|
+
return (uint8) X;
|
|
145
|
+
}
|
|
475
146
|
|
|
476
147
|
/*
|
|
477
148
|
* UInt8GetDatum
|
|
478
149
|
* Returns datum representation for an 8-bit unsigned integer.
|
|
479
150
|
*/
|
|
480
|
-
|
|
481
|
-
|
|
151
|
+
static inline Datum
|
|
152
|
+
UInt8GetDatum(uint8 X)
|
|
153
|
+
{
|
|
154
|
+
return (Datum) X;
|
|
155
|
+
}
|
|
482
156
|
|
|
483
157
|
/*
|
|
484
158
|
* DatumGetInt16
|
|
485
159
|
* Returns 16-bit integer value of a datum.
|
|
486
160
|
*/
|
|
487
|
-
|
|
488
|
-
|
|
161
|
+
static inline int16
|
|
162
|
+
DatumGetInt16(Datum X)
|
|
163
|
+
{
|
|
164
|
+
return (int16) X;
|
|
165
|
+
}
|
|
489
166
|
|
|
490
167
|
/*
|
|
491
168
|
* Int16GetDatum
|
|
492
169
|
* Returns datum representation for a 16-bit integer.
|
|
493
170
|
*/
|
|
494
|
-
|
|
495
|
-
|
|
171
|
+
static inline Datum
|
|
172
|
+
Int16GetDatum(int16 X)
|
|
173
|
+
{
|
|
174
|
+
return (Datum) X;
|
|
175
|
+
}
|
|
496
176
|
|
|
497
177
|
/*
|
|
498
178
|
* DatumGetUInt16
|
|
499
179
|
* Returns 16-bit unsigned integer value of a datum.
|
|
500
180
|
*/
|
|
501
|
-
|
|
502
|
-
|
|
181
|
+
static inline uint16
|
|
182
|
+
DatumGetUInt16(Datum X)
|
|
183
|
+
{
|
|
184
|
+
return (uint16) X;
|
|
185
|
+
}
|
|
503
186
|
|
|
504
187
|
/*
|
|
505
188
|
* UInt16GetDatum
|
|
506
189
|
* Returns datum representation for a 16-bit unsigned integer.
|
|
507
190
|
*/
|
|
508
|
-
|
|
509
|
-
|
|
191
|
+
static inline Datum
|
|
192
|
+
UInt16GetDatum(uint16 X)
|
|
193
|
+
{
|
|
194
|
+
return (Datum) X;
|
|
195
|
+
}
|
|
510
196
|
|
|
511
197
|
/*
|
|
512
198
|
* DatumGetInt32
|
|
513
199
|
* Returns 32-bit integer value of a datum.
|
|
514
200
|
*/
|
|
515
|
-
|
|
516
|
-
|
|
201
|
+
static inline int32
|
|
202
|
+
DatumGetInt32(Datum X)
|
|
203
|
+
{
|
|
204
|
+
return (int32) X;
|
|
205
|
+
}
|
|
517
206
|
|
|
518
207
|
/*
|
|
519
208
|
* Int32GetDatum
|
|
520
209
|
* Returns datum representation for a 32-bit integer.
|
|
521
210
|
*/
|
|
522
|
-
|
|
523
|
-
|
|
211
|
+
static inline Datum
|
|
212
|
+
Int32GetDatum(int32 X)
|
|
213
|
+
{
|
|
214
|
+
return (Datum) X;
|
|
215
|
+
}
|
|
524
216
|
|
|
525
217
|
/*
|
|
526
218
|
* DatumGetUInt32
|
|
527
219
|
* Returns 32-bit unsigned integer value of a datum.
|
|
528
220
|
*/
|
|
529
|
-
|
|
530
|
-
|
|
221
|
+
static inline uint32
|
|
222
|
+
DatumGetUInt32(Datum X)
|
|
223
|
+
{
|
|
224
|
+
return (uint32) X;
|
|
225
|
+
}
|
|
531
226
|
|
|
532
227
|
/*
|
|
533
228
|
* UInt32GetDatum
|
|
534
229
|
* Returns datum representation for a 32-bit unsigned integer.
|
|
535
230
|
*/
|
|
536
|
-
|
|
537
|
-
|
|
231
|
+
static inline Datum
|
|
232
|
+
UInt32GetDatum(uint32 X)
|
|
233
|
+
{
|
|
234
|
+
return (Datum) X;
|
|
235
|
+
}
|
|
538
236
|
|
|
539
237
|
/*
|
|
540
238
|
* DatumGetObjectId
|
|
541
239
|
* Returns object identifier value of a datum.
|
|
542
240
|
*/
|
|
543
|
-
|
|
544
|
-
|
|
241
|
+
static inline Oid
|
|
242
|
+
DatumGetObjectId(Datum X)
|
|
243
|
+
{
|
|
244
|
+
return (Oid) X;
|
|
245
|
+
}
|
|
545
246
|
|
|
546
247
|
/*
|
|
547
248
|
* ObjectIdGetDatum
|
|
548
249
|
* Returns datum representation for an object identifier.
|
|
549
250
|
*/
|
|
550
|
-
|
|
551
|
-
|
|
251
|
+
static inline Datum
|
|
252
|
+
ObjectIdGetDatum(Oid X)
|
|
253
|
+
{
|
|
254
|
+
return (Datum) X;
|
|
255
|
+
}
|
|
552
256
|
|
|
553
257
|
/*
|
|
554
258
|
* DatumGetTransactionId
|
|
555
259
|
* Returns transaction identifier value of a datum.
|
|
556
260
|
*/
|
|
557
|
-
|
|
558
|
-
|
|
261
|
+
static inline TransactionId
|
|
262
|
+
DatumGetTransactionId(Datum X)
|
|
263
|
+
{
|
|
264
|
+
return (TransactionId) X;
|
|
265
|
+
}
|
|
559
266
|
|
|
560
267
|
/*
|
|
561
268
|
* TransactionIdGetDatum
|
|
562
269
|
* Returns datum representation for a transaction identifier.
|
|
563
270
|
*/
|
|
564
|
-
|
|
565
|
-
|
|
271
|
+
static inline Datum
|
|
272
|
+
TransactionIdGetDatum(TransactionId X)
|
|
273
|
+
{
|
|
274
|
+
return (Datum) X;
|
|
275
|
+
}
|
|
566
276
|
|
|
567
277
|
/*
|
|
568
278
|
* MultiXactIdGetDatum
|
|
569
279
|
* Returns datum representation for a multixact identifier.
|
|
570
280
|
*/
|
|
571
|
-
|
|
572
|
-
|
|
281
|
+
static inline Datum
|
|
282
|
+
MultiXactIdGetDatum(MultiXactId X)
|
|
283
|
+
{
|
|
284
|
+
return (Datum) X;
|
|
285
|
+
}
|
|
573
286
|
|
|
574
287
|
/*
|
|
575
288
|
* DatumGetCommandId
|
|
576
289
|
* Returns command identifier value of a datum.
|
|
577
290
|
*/
|
|
578
|
-
|
|
579
|
-
|
|
291
|
+
static inline CommandId
|
|
292
|
+
DatumGetCommandId(Datum X)
|
|
293
|
+
{
|
|
294
|
+
return (CommandId) X;
|
|
295
|
+
}
|
|
580
296
|
|
|
581
297
|
/*
|
|
582
298
|
* CommandIdGetDatum
|
|
583
299
|
* Returns datum representation for a command identifier.
|
|
584
300
|
*/
|
|
585
|
-
|
|
586
|
-
|
|
301
|
+
static inline Datum
|
|
302
|
+
CommandIdGetDatum(CommandId X)
|
|
303
|
+
{
|
|
304
|
+
return (Datum) X;
|
|
305
|
+
}
|
|
587
306
|
|
|
588
307
|
/*
|
|
589
308
|
* DatumGetPointer
|
|
590
309
|
* Returns pointer value of a datum.
|
|
591
310
|
*/
|
|
592
|
-
|
|
593
|
-
|
|
311
|
+
static inline Pointer
|
|
312
|
+
DatumGetPointer(Datum X)
|
|
313
|
+
{
|
|
314
|
+
return (Pointer) X;
|
|
315
|
+
}
|
|
594
316
|
|
|
595
317
|
/*
|
|
596
318
|
* PointerGetDatum
|
|
597
319
|
* Returns datum representation for a pointer.
|
|
598
320
|
*/
|
|
599
|
-
|
|
600
|
-
|
|
321
|
+
static inline Datum
|
|
322
|
+
PointerGetDatum(const void *X)
|
|
323
|
+
{
|
|
324
|
+
return (Datum) X;
|
|
325
|
+
}
|
|
601
326
|
|
|
602
327
|
/*
|
|
603
328
|
* DatumGetCString
|
|
@@ -606,8 +331,11 @@ typedef struct NullableDatum
|
|
|
606
331
|
* Note: C string is not a full-fledged Postgres type at present,
|
|
607
332
|
* but type input functions use this conversion for their inputs.
|
|
608
333
|
*/
|
|
609
|
-
|
|
610
|
-
|
|
334
|
+
static inline char *
|
|
335
|
+
DatumGetCString(Datum X)
|
|
336
|
+
{
|
|
337
|
+
return (char *) DatumGetPointer(X);
|
|
338
|
+
}
|
|
611
339
|
|
|
612
340
|
/*
|
|
613
341
|
* CStringGetDatum
|
|
@@ -618,15 +346,21 @@ typedef struct NullableDatum
|
|
|
618
346
|
* Note: CString is pass-by-reference; caller must ensure the pointed-to
|
|
619
347
|
* value has adequate lifetime.
|
|
620
348
|
*/
|
|
621
|
-
|
|
622
|
-
|
|
349
|
+
static inline Datum
|
|
350
|
+
CStringGetDatum(const char *X)
|
|
351
|
+
{
|
|
352
|
+
return PointerGetDatum(X);
|
|
353
|
+
}
|
|
623
354
|
|
|
624
355
|
/*
|
|
625
356
|
* DatumGetName
|
|
626
357
|
* Returns name value of a datum.
|
|
627
358
|
*/
|
|
628
|
-
|
|
629
|
-
|
|
359
|
+
static inline Name
|
|
360
|
+
DatumGetName(Datum X)
|
|
361
|
+
{
|
|
362
|
+
return (Name) DatumGetPointer(X);
|
|
363
|
+
}
|
|
630
364
|
|
|
631
365
|
/*
|
|
632
366
|
* NameGetDatum
|
|
@@ -635,21 +369,27 @@ typedef struct NullableDatum
|
|
|
635
369
|
* Note: Name is pass-by-reference; caller must ensure the pointed-to
|
|
636
370
|
* value has adequate lifetime.
|
|
637
371
|
*/
|
|
638
|
-
|
|
639
|
-
|
|
372
|
+
static inline Datum
|
|
373
|
+
NameGetDatum(const NameData *X)
|
|
374
|
+
{
|
|
375
|
+
return CStringGetDatum(NameStr(*X));
|
|
376
|
+
}
|
|
640
377
|
|
|
641
378
|
/*
|
|
642
379
|
* DatumGetInt64
|
|
643
380
|
* Returns 64-bit integer value of a datum.
|
|
644
381
|
*
|
|
645
|
-
* Note: this
|
|
382
|
+
* Note: this function hides whether int64 is pass by value or by reference.
|
|
646
383
|
*/
|
|
647
|
-
|
|
384
|
+
static inline int64
|
|
385
|
+
DatumGetInt64(Datum X)
|
|
386
|
+
{
|
|
648
387
|
#ifdef USE_FLOAT8_BYVAL
|
|
649
|
-
|
|
388
|
+
return (int64) X;
|
|
650
389
|
#else
|
|
651
|
-
|
|
390
|
+
return *((int64 *) DatumGetPointer(X));
|
|
652
391
|
#endif
|
|
392
|
+
}
|
|
653
393
|
|
|
654
394
|
/*
|
|
655
395
|
* Int64GetDatum
|
|
@@ -658,25 +398,32 @@ typedef struct NullableDatum
|
|
|
658
398
|
* Note: if int64 is pass by reference, this function returns a reference
|
|
659
399
|
* to palloc'd space.
|
|
660
400
|
*/
|
|
661
|
-
|
|
662
401
|
#ifdef USE_FLOAT8_BYVAL
|
|
663
|
-
|
|
402
|
+
static inline Datum
|
|
403
|
+
Int64GetDatum(int64 X)
|
|
404
|
+
{
|
|
405
|
+
return (Datum) X;
|
|
406
|
+
}
|
|
664
407
|
#else
|
|
665
408
|
extern Datum Int64GetDatum(int64 X);
|
|
666
409
|
#endif
|
|
667
410
|
|
|
411
|
+
|
|
668
412
|
/*
|
|
669
413
|
* DatumGetUInt64
|
|
670
414
|
* Returns 64-bit unsigned integer value of a datum.
|
|
671
415
|
*
|
|
672
|
-
* Note: this
|
|
416
|
+
* Note: this function hides whether int64 is pass by value or by reference.
|
|
673
417
|
*/
|
|
674
|
-
|
|
418
|
+
static inline uint64
|
|
419
|
+
DatumGetUInt64(Datum X)
|
|
420
|
+
{
|
|
675
421
|
#ifdef USE_FLOAT8_BYVAL
|
|
676
|
-
|
|
422
|
+
return (uint64) X;
|
|
677
423
|
#else
|
|
678
|
-
|
|
424
|
+
return *((uint64 *) DatumGetPointer(X));
|
|
679
425
|
#endif
|
|
426
|
+
}
|
|
680
427
|
|
|
681
428
|
/*
|
|
682
429
|
* UInt64GetDatum
|
|
@@ -685,12 +432,15 @@ extern Datum Int64GetDatum(int64 X);
|
|
|
685
432
|
* Note: if int64 is pass by reference, this function returns a reference
|
|
686
433
|
* to palloc'd space.
|
|
687
434
|
*/
|
|
688
|
-
|
|
435
|
+
static inline Datum
|
|
436
|
+
UInt64GetDatum(uint64 X)
|
|
437
|
+
{
|
|
689
438
|
#ifdef USE_FLOAT8_BYVAL
|
|
690
|
-
|
|
439
|
+
return (Datum) X;
|
|
691
440
|
#else
|
|
692
|
-
|
|
441
|
+
return Int64GetDatum((int64) X);
|
|
693
442
|
#endif
|
|
443
|
+
}
|
|
694
444
|
|
|
695
445
|
/*
|
|
696
446
|
* Float <-> Datum conversions
|
|
@@ -738,13 +488,12 @@ Float4GetDatum(float4 X)
|
|
|
738
488
|
* DatumGetFloat8
|
|
739
489
|
* Returns 8-byte floating point value of a datum.
|
|
740
490
|
*
|
|
741
|
-
* Note: this
|
|
491
|
+
* Note: this function hides whether float8 is pass by value or by reference.
|
|
742
492
|
*/
|
|
743
|
-
|
|
744
|
-
#ifdef USE_FLOAT8_BYVAL
|
|
745
493
|
static inline float8
|
|
746
494
|
DatumGetFloat8(Datum X)
|
|
747
495
|
{
|
|
496
|
+
#ifdef USE_FLOAT8_BYVAL
|
|
748
497
|
union
|
|
749
498
|
{
|
|
750
499
|
int64 value;
|
|
@@ -753,10 +502,10 @@ DatumGetFloat8(Datum X)
|
|
|
753
502
|
|
|
754
503
|
myunion.value = DatumGetInt64(X);
|
|
755
504
|
return myunion.retval;
|
|
756
|
-
}
|
|
757
505
|
#else
|
|
758
|
-
|
|
506
|
+
return *((float8 *) DatumGetPointer(X));
|
|
759
507
|
#endif
|
|
508
|
+
}
|
|
760
509
|
|
|
761
510
|
/*
|
|
762
511
|
* Float8GetDatum
|
|
@@ -765,7 +514,6 @@ DatumGetFloat8(Datum X)
|
|
|
765
514
|
* Note: if float8 is pass by reference, this function returns a reference
|
|
766
515
|
* to palloc'd space.
|
|
767
516
|
*/
|
|
768
|
-
|
|
769
517
|
#ifdef USE_FLOAT8_BYVAL
|
|
770
518
|
static inline Datum
|
|
771
519
|
Float8GetDatum(float8 X)
|
|
@@ -793,16 +541,39 @@ extern Datum Float8GetDatum(float8 X);
|
|
|
793
541
|
* sacrificing performance when they are. The argument must be a variable
|
|
794
542
|
* that will exist and have the same value for as long as the Datum is needed.
|
|
795
543
|
* In the pass-by-ref case, the address of the variable is taken to use as
|
|
796
|
-
* the Datum. In the pass-by-val case, these
|
|
797
|
-
*
|
|
544
|
+
* the Datum. In the pass-by-val case, these are the same as the non-Fast
|
|
545
|
+
* functions, except for asserting that the variable is of the correct type.
|
|
798
546
|
*/
|
|
799
547
|
|
|
800
548
|
#ifdef USE_FLOAT8_BYVAL
|
|
801
|
-
#define Int64GetDatumFast(X)
|
|
802
|
-
|
|
549
|
+
#define Int64GetDatumFast(X) \
|
|
550
|
+
(AssertVariableIsOfTypeMacro(X, int64), Int64GetDatum(X))
|
|
551
|
+
#define Float8GetDatumFast(X) \
|
|
552
|
+
(AssertVariableIsOfTypeMacro(X, double), Float8GetDatum(X))
|
|
553
|
+
#else
|
|
554
|
+
#define Int64GetDatumFast(X) \
|
|
555
|
+
(AssertVariableIsOfTypeMacro(X, int64), PointerGetDatum(&(X)))
|
|
556
|
+
#define Float8GetDatumFast(X) \
|
|
557
|
+
(AssertVariableIsOfTypeMacro(X, double), PointerGetDatum(&(X)))
|
|
558
|
+
#endif
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
/* ----------------------------------------------------------------
|
|
562
|
+
* Section 2: miscellaneous
|
|
563
|
+
* ----------------------------------------------------------------
|
|
564
|
+
*/
|
|
565
|
+
|
|
566
|
+
/*
|
|
567
|
+
* NON_EXEC_STATIC: It's sometimes useful to define a variable or function
|
|
568
|
+
* that is normally static but extern when using EXEC_BACKEND (see
|
|
569
|
+
* pg_config_manual.h). There would then typically be some code in
|
|
570
|
+
* postmaster.c that uses those extern symbols to transfer state between
|
|
571
|
+
* processes or do whatever other things it needs to do in EXEC_BACKEND mode.
|
|
572
|
+
*/
|
|
573
|
+
#ifdef EXEC_BACKEND
|
|
574
|
+
#define NON_EXEC_STATIC
|
|
803
575
|
#else
|
|
804
|
-
#define
|
|
805
|
-
#define Float8GetDatumFast(X) PointerGetDatum(&(X))
|
|
576
|
+
#define NON_EXEC_STATIC static
|
|
806
577
|
#endif
|
|
807
578
|
|
|
808
579
|
#endif /* POSTGRES_H */
|