/src/postgres/src/include/utils/expandeddatum.h
Line | Count | Source |
1 | | /*------------------------------------------------------------------------- |
2 | | * |
3 | | * expandeddatum.h |
4 | | * Declarations for access to "expanded" value representations. |
5 | | * |
6 | | * Complex data types, particularly container types such as arrays and |
7 | | * records, usually have on-disk representations that are compact but not |
8 | | * especially convenient to modify. What's more, when we do modify them, |
9 | | * having to recopy all the rest of the value can be extremely inefficient. |
10 | | * Therefore, we provide a notion of an "expanded" representation that is used |
11 | | * only in memory and is optimized more for computation than storage. |
12 | | * The format appearing on disk is called the data type's "flattened" |
13 | | * representation, since it is required to be a contiguous blob of bytes -- |
14 | | * but the type can have an expanded representation that is not. Data types |
15 | | * must provide means to translate an expanded representation back to |
16 | | * flattened form. |
17 | | * |
18 | | * An expanded object is meant to survive across multiple operations, but |
19 | | * not to be enormously long-lived; for example it might be a local variable |
20 | | * in a PL/pgSQL procedure. So its extra bulk compared to the on-disk format |
21 | | * is a worthwhile trade-off. |
22 | | * |
23 | | * References to expanded objects are a type of TOAST pointer. |
24 | | * Because of longstanding conventions in Postgres, this means that the |
25 | | * flattened form of such an object must always be a varlena object. |
26 | | * Fortunately that's no restriction in practice. |
27 | | * |
28 | | * There are actually two kinds of TOAST pointers for expanded objects: |
29 | | * read-only and read-write pointers. Possession of one of the latter |
30 | | * authorizes a function to modify the value in-place rather than copying it |
31 | | * as would normally be required. Functions should always return a read-write |
32 | | * pointer to any new expanded object they create. Functions that modify an |
33 | | * argument value in-place must take care that they do not corrupt the old |
34 | | * value if they fail partway through. |
35 | | * |
36 | | * |
37 | | * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group |
38 | | * Portions Copyright (c) 1994, Regents of the University of California |
39 | | * |
40 | | * src/include/utils/expandeddatum.h |
41 | | * |
42 | | *------------------------------------------------------------------------- |
43 | | */ |
44 | | #ifndef EXPANDEDDATUM_H |
45 | | #define EXPANDEDDATUM_H |
46 | | |
47 | | #include "varatt.h" |
48 | | |
49 | | /* Size of an EXTERNAL datum that contains a pointer to an expanded object */ |
50 | | #define EXPANDED_POINTER_SIZE (VARHDRSZ_EXTERNAL + sizeof(varatt_expanded)) |
51 | | |
52 | | /* |
53 | | * "Methods" that must be provided for any expanded object. |
54 | | * |
55 | | * get_flat_size: compute space needed for flattened representation (total, |
56 | | * including header). |
57 | | * |
58 | | * flatten_into: construct flattened representation in the caller-allocated |
59 | | * space at *result, of size allocated_size (which will always be the result |
60 | | * of a preceding get_flat_size call; it's passed for cross-checking). |
61 | | * |
62 | | * The flattened representation must be a valid in-line, non-compressed, |
63 | | * 4-byte-header varlena object. |
64 | | * |
65 | | * Note: construction of a heap tuple from an expanded datum calls |
66 | | * get_flat_size twice, so it's worthwhile to make sure that that doesn't |
67 | | * incur too much overhead. |
68 | | */ |
69 | | typedef Size (*EOM_get_flat_size_method) (ExpandedObjectHeader *eohptr); |
70 | | typedef void (*EOM_flatten_into_method) (ExpandedObjectHeader *eohptr, |
71 | | void *result, Size allocated_size); |
72 | | |
73 | | /* Struct of function pointers for an expanded object's methods */ |
74 | | typedef struct ExpandedObjectMethods |
75 | | { |
76 | | EOM_get_flat_size_method get_flat_size; |
77 | | EOM_flatten_into_method flatten_into; |
78 | | } ExpandedObjectMethods; |
79 | | |
80 | | /* |
81 | | * Every expanded object must contain this header; typically the header |
82 | | * is embedded in some larger struct that adds type-specific fields. |
83 | | * |
84 | | * It is presumed that the header object and all subsidiary data are stored |
85 | | * in eoh_context, so that the object can be freed by deleting that context, |
86 | | * or its storage lifespan can be altered by reparenting the context. |
87 | | * (In principle the object could own additional resources, such as malloc'd |
88 | | * storage, and use a memory context reset callback to free them upon reset or |
89 | | * deletion of eoh_context.) |
90 | | * |
91 | | * We set up two TOAST pointers within the standard header, one read-write |
92 | | * and one read-only. This allows functions to return either kind of pointer |
93 | | * without making an additional allocation, and in particular without worrying |
94 | | * whether a separately palloc'd object would have sufficient lifespan. |
95 | | * But note that these pointers are just a convenience; a pointer object |
96 | | * appearing somewhere else would still be legal. |
97 | | * |
98 | | * The typedef declaration for this appears in varatt.h. |
99 | | */ |
100 | | struct ExpandedObjectHeader |
101 | | { |
102 | | /* Phony varlena header */ |
103 | | int32 vl_len_; /* always EOH_HEADER_MAGIC, see below */ |
104 | | |
105 | | /* Pointer to methods required for object type */ |
106 | | const ExpandedObjectMethods *eoh_methods; |
107 | | |
108 | | /* Memory context containing this header and subsidiary data */ |
109 | | MemoryContext eoh_context; |
110 | | |
111 | | /* Standard R/W TOAST pointer for this object is kept here */ |
112 | | char eoh_rw_ptr[EXPANDED_POINTER_SIZE]; |
113 | | |
114 | | /* Standard R/O TOAST pointer for this object is kept here */ |
115 | | char eoh_ro_ptr[EXPANDED_POINTER_SIZE]; |
116 | | }; |
117 | | |
118 | | /* |
119 | | * Particularly for read-only functions, it is handy to be able to work with |
120 | | * either regular "flat" varlena inputs or expanded inputs of the same data |
121 | | * type. To allow determining which case an argument-fetching function has |
122 | | * returned, the first int32 of an ExpandedObjectHeader always contains -1 |
123 | | * (EOH_HEADER_MAGIC to the code). This works since no 4-byte-header varlena |
124 | | * could have that as its first 4 bytes. Caution: we could not reliably tell |
125 | | * the difference between an ExpandedObjectHeader and a short-header object |
126 | | * with this trick. However, it works fine if the argument fetching code |
127 | | * always returns either a 4-byte-header flat object or an expanded object. |
128 | | */ |
129 | 0 | #define EOH_HEADER_MAGIC (-1) |
130 | | #define VARATT_IS_EXPANDED_HEADER(PTR) \ |
131 | 0 | (((varattrib_4b *) (PTR))->va_4byte.va_header == (uint32) EOH_HEADER_MAGIC) |
132 | | |
133 | | /* |
134 | | * Generic support functions for expanded objects. |
135 | | * (More of these might be worth inlining later.) |
136 | | */ |
137 | | |
138 | | static inline Datum |
139 | | EOHPGetRWDatum(const struct ExpandedObjectHeader *eohptr) |
140 | 0 | { |
141 | 0 | return PointerGetDatum(eohptr->eoh_rw_ptr); |
142 | 0 | } Unexecuted instantiation: fuzzer_initialize.c:EOHPGetRWDatum Unexecuted instantiation: brin.c:EOHPGetRWDatum Unexecuted instantiation: brin_minmax_multi.c:EOHPGetRWDatum Unexecuted instantiation: detoast.c:EOHPGetRWDatum Unexecuted instantiation: heaptuple.c:EOHPGetRWDatum Unexecuted instantiation: reloptions.c:EOHPGetRWDatum Unexecuted instantiation: ginarrayproc.c:EOHPGetRWDatum Unexecuted instantiation: gininsert.c:EOHPGetRWDatum Unexecuted instantiation: nbtpreprocesskeys.c:EOHPGetRWDatum Unexecuted instantiation: nbtsort.c:EOHPGetRWDatum Unexecuted instantiation: xlogdesc.c:EOHPGetRWDatum Unexecuted instantiation: tableamapi.c:EOHPGetRWDatum Unexecuted instantiation: clog.c:EOHPGetRWDatum Unexecuted instantiation: commit_ts.c:EOHPGetRWDatum Unexecuted instantiation: multixact.c:EOHPGetRWDatum Unexecuted instantiation: parallel.c:EOHPGetRWDatum Unexecuted instantiation: slru.c:EOHPGetRWDatum Unexecuted instantiation: subtrans.c:EOHPGetRWDatum Unexecuted instantiation: xact.c:EOHPGetRWDatum Unexecuted instantiation: xlog.c:EOHPGetRWDatum Unexecuted instantiation: xlogprefetcher.c:EOHPGetRWDatum Unexecuted instantiation: xlogrecovery.c:EOHPGetRWDatum Unexecuted instantiation: bootparse.c:EOHPGetRWDatum Unexecuted instantiation: bootscanner.c:EOHPGetRWDatum Unexecuted instantiation: bootstrap.c:EOHPGetRWDatum Unexecuted instantiation: aclchk.c:EOHPGetRWDatum Unexecuted instantiation: catalog.c:EOHPGetRWDatum Unexecuted instantiation: dependency.c:EOHPGetRWDatum Unexecuted instantiation: heap.c:EOHPGetRWDatum Unexecuted instantiation: index.c:EOHPGetRWDatum Unexecuted instantiation: namespace.c:EOHPGetRWDatum Unexecuted instantiation: objectaddress.c:EOHPGetRWDatum Unexecuted instantiation: pg_constraint.c:EOHPGetRWDatum Unexecuted instantiation: pg_db_role_setting.c:EOHPGetRWDatum Unexecuted instantiation: pg_parameter_acl.c:EOHPGetRWDatum Unexecuted instantiation: pg_proc.c:EOHPGetRWDatum Unexecuted instantiation: pg_publication.c:EOHPGetRWDatum Unexecuted instantiation: pg_shdepend.c:EOHPGetRWDatum Unexecuted instantiation: pg_subscription.c:EOHPGetRWDatum Unexecuted instantiation: pg_type.c:EOHPGetRWDatum Unexecuted instantiation: analyze.c:EOHPGetRWDatum Unexecuted instantiation: gram.c:EOHPGetRWDatum Unexecuted instantiation: parse_clause.c:EOHPGetRWDatum Unexecuted instantiation: parse_type.c:EOHPGetRWDatum Unexecuted instantiation: parse_utilcmd.c:EOHPGetRWDatum Unexecuted instantiation: aggregatecmds.c:EOHPGetRWDatum Unexecuted instantiation: alter.c:EOHPGetRWDatum Unexecuted instantiation: amcmds.c:EOHPGetRWDatum Unexecuted instantiation: async.c:EOHPGetRWDatum Unexecuted instantiation: collationcmds.c:EOHPGetRWDatum Unexecuted instantiation: copy.c:EOHPGetRWDatum Unexecuted instantiation: copyfrom.c:EOHPGetRWDatum Unexecuted instantiation: copyto.c:EOHPGetRWDatum Unexecuted instantiation: createas.c:EOHPGetRWDatum Unexecuted instantiation: dbcommands.c:EOHPGetRWDatum Unexecuted instantiation: define.c:EOHPGetRWDatum Unexecuted instantiation: discard.c:EOHPGetRWDatum Unexecuted instantiation: dropcmds.c:EOHPGetRWDatum Unexecuted instantiation: event_trigger.c:EOHPGetRWDatum Unexecuted instantiation: explain.c:EOHPGetRWDatum Unexecuted instantiation: explain_state.c:EOHPGetRWDatum Unexecuted instantiation: extension.c:EOHPGetRWDatum Unexecuted instantiation: foreigncmds.c:EOHPGetRWDatum Unexecuted instantiation: functioncmds.c:EOHPGetRWDatum Unexecuted instantiation: indexcmds.c:EOHPGetRWDatum Unexecuted instantiation: matview.c:EOHPGetRWDatum Unexecuted instantiation: opclasscmds.c:EOHPGetRWDatum Unexecuted instantiation: operatorcmds.c:EOHPGetRWDatum Unexecuted instantiation: policy.c:EOHPGetRWDatum Unexecuted instantiation: portalcmds.c:EOHPGetRWDatum Unexecuted instantiation: prepare.c:EOHPGetRWDatum Unexecuted instantiation: publicationcmds.c:EOHPGetRWDatum Unexecuted instantiation: repack.c:EOHPGetRWDatum Unexecuted instantiation: repack_worker.c:EOHPGetRWDatum Unexecuted instantiation: schemacmds.c:EOHPGetRWDatum Unexecuted instantiation: sequence.c:EOHPGetRWDatum Unexecuted instantiation: statscmds.c:EOHPGetRWDatum Unexecuted instantiation: subscriptioncmds.c:EOHPGetRWDatum Unexecuted instantiation: tablecmds.c:EOHPGetRWDatum Unexecuted instantiation: tablespace.c:EOHPGetRWDatum Unexecuted instantiation: trigger.c:EOHPGetRWDatum Unexecuted instantiation: tsearchcmds.c:EOHPGetRWDatum Unexecuted instantiation: typecmds.c:EOHPGetRWDatum Unexecuted instantiation: user.c:EOHPGetRWDatum Unexecuted instantiation: vacuum.c:EOHPGetRWDatum Unexecuted instantiation: vacuumparallel.c:EOHPGetRWDatum Unexecuted instantiation: variable.c:EOHPGetRWDatum Unexecuted instantiation: wait.c:EOHPGetRWDatum Unexecuted instantiation: execExpr.c:EOHPGetRWDatum Unexecuted instantiation: execExprInterp.c:EOHPGetRWDatum Unexecuted instantiation: execMain.c:EOHPGetRWDatum Unexecuted instantiation: execParallel.c:EOHPGetRWDatum Unexecuted instantiation: execTuples.c:EOHPGetRWDatum Unexecuted instantiation: functions.c:EOHPGetRWDatum Unexecuted instantiation: instrument.c:EOHPGetRWDatum Unexecuted instantiation: nodeAgg.c:EOHPGetRWDatum Unexecuted instantiation: nodeIndexscan.c:EOHPGetRWDatum Unexecuted instantiation: nodeSubplan.c:EOHPGetRWDatum Unexecuted instantiation: nodeTableFuncscan.c:EOHPGetRWDatum Unexecuted instantiation: nodeTidscan.c:EOHPGetRWDatum Unexecuted instantiation: nodeValuesscan.c:EOHPGetRWDatum Unexecuted instantiation: nodeWindowAgg.c:EOHPGetRWDatum Unexecuted instantiation: spi.c:EOHPGetRWDatum Unexecuted instantiation: foreign.c:EOHPGetRWDatum Unexecuted instantiation: auth.c:EOHPGetRWDatum Unexecuted instantiation: be-secure-common.c:EOHPGetRWDatum Unexecuted instantiation: be-secure.c:EOHPGetRWDatum Unexecuted instantiation: hba.c:EOHPGetRWDatum Unexecuted instantiation: pqcomm.c:EOHPGetRWDatum Unexecuted instantiation: pqmq.c:EOHPGetRWDatum Unexecuted instantiation: createplan.c:EOHPGetRWDatum Unexecuted instantiation: setrefs.c:EOHPGetRWDatum Unexecuted instantiation: clauses.c:EOHPGetRWDatum Unexecuted instantiation: plancat.c:EOHPGetRWDatum Unexecuted instantiation: predtest.c:EOHPGetRWDatum Unexecuted instantiation: partbounds.c:EOHPGetRWDatum Unexecuted instantiation: partprune.c:EOHPGetRWDatum Unexecuted instantiation: pg_shmem.c:EOHPGetRWDatum Unexecuted instantiation: autovacuum.c:EOHPGetRWDatum Unexecuted instantiation: bgworker.c:EOHPGetRWDatum Unexecuted instantiation: checkpointer.c:EOHPGetRWDatum Unexecuted instantiation: datachecksum_state.c:EOHPGetRWDatum Unexecuted instantiation: interrupt.c:EOHPGetRWDatum Unexecuted instantiation: pgarch.c:EOHPGetRWDatum Unexecuted instantiation: postmaster.c:EOHPGetRWDatum Unexecuted instantiation: startup.c:EOHPGetRWDatum Unexecuted instantiation: syslogger.c:EOHPGetRWDatum Unexecuted instantiation: walsummarizer.c:EOHPGetRWDatum Unexecuted instantiation: applyparallelworker.c:EOHPGetRWDatum Unexecuted instantiation: launcher.c:EOHPGetRWDatum Unexecuted instantiation: logical.c:EOHPGetRWDatum Unexecuted instantiation: logicalfuncs.c:EOHPGetRWDatum Unexecuted instantiation: origin.c:EOHPGetRWDatum Unexecuted instantiation: sequencesync.c:EOHPGetRWDatum Unexecuted instantiation: slotsync.c:EOHPGetRWDatum Unexecuted instantiation: tablesync.c:EOHPGetRWDatum Unexecuted instantiation: worker.c:EOHPGetRWDatum Unexecuted instantiation: slot.c:EOHPGetRWDatum Unexecuted instantiation: slotfuncs.c:EOHPGetRWDatum Unexecuted instantiation: syncrep.c:EOHPGetRWDatum Unexecuted instantiation: walreceiver.c:EOHPGetRWDatum Unexecuted instantiation: walsender.c:EOHPGetRWDatum Unexecuted instantiation: rewriteHandler.c:EOHPGetRWDatum Unexecuted instantiation: rowsecurity.c:EOHPGetRWDatum Unexecuted instantiation: basebackup.c:EOHPGetRWDatum Unexecuted instantiation: attribute_stats.c:EOHPGetRWDatum Unexecuted instantiation: extended_stats.c:EOHPGetRWDatum Unexecuted instantiation: extended_stats_funcs.c:EOHPGetRWDatum Unexecuted instantiation: mcv.c:EOHPGetRWDatum Unexecuted instantiation: stat_utils.c:EOHPGetRWDatum Unexecuted instantiation: aio.c:EOHPGetRWDatum Unexecuted instantiation: aio_init.c:EOHPGetRWDatum Unexecuted instantiation: method_worker.c:EOHPGetRWDatum Unexecuted instantiation: localbuf.c:EOHPGetRWDatum Unexecuted instantiation: fd.c:EOHPGetRWDatum Unexecuted instantiation: dsm_impl.c:EOHPGetRWDatum Unexecuted instantiation: ipc.c:EOHPGetRWDatum Unexecuted instantiation: ipci.c:EOHPGetRWDatum Unexecuted instantiation: procsignal.c:EOHPGetRWDatum Unexecuted instantiation: predicate.c:EOHPGetRWDatum Unexecuted instantiation: backend_startup.c:EOHPGetRWDatum Unexecuted instantiation: fastpath.c:EOHPGetRWDatum Unexecuted instantiation: postgres.c:EOHPGetRWDatum Unexecuted instantiation: pquery.c:EOHPGetRWDatum Unexecuted instantiation: utility.c:EOHPGetRWDatum Unexecuted instantiation: dict.c:EOHPGetRWDatum Unexecuted instantiation: dict_ispell.c:EOHPGetRWDatum Unexecuted instantiation: dict_simple.c:EOHPGetRWDatum Unexecuted instantiation: dict_synonym.c:EOHPGetRWDatum Unexecuted instantiation: dict_thesaurus.c:EOHPGetRWDatum Unexecuted instantiation: to_tsany.c:EOHPGetRWDatum Unexecuted instantiation: wparser.c:EOHPGetRWDatum Unexecuted instantiation: wparser_def.c:EOHPGetRWDatum Unexecuted instantiation: backend_status.c:EOHPGetRWDatum Unexecuted instantiation: pgstat.c:EOHPGetRWDatum Unexecuted instantiation: acl.c:EOHPGetRWDatum Unexecuted instantiation: array_expanded.c:EOHPGetRWDatum Unexecuted instantiation: array_selfuncs.c:EOHPGetRWDatum Unexecuted instantiation: array_typanalyze.c:EOHPGetRWDatum Unexecuted instantiation: array_userfuncs.c:EOHPGetRWDatum Unexecuted instantiation: arrayfuncs.c:EOHPGetRWDatum Unexecuted instantiation: arraysubs.c:EOHPGetRWDatum Unexecuted instantiation: arrayutils.c:EOHPGetRWDatum Unexecuted instantiation: bytea.c:EOHPGetRWDatum Unexecuted instantiation: date.c:EOHPGetRWDatum Unexecuted instantiation: datetime.c:EOHPGetRWDatum Unexecuted instantiation: datum.c:EOHPGetRWDatum Unexecuted instantiation: ddlutils.c:EOHPGetRWDatum Unexecuted instantiation: domains.c:EOHPGetRWDatum Unexecuted instantiation: enum.c:EOHPGetRWDatum Unexecuted instantiation: expandeddatum.c:EOHPGetRWDatum Unexecuted instantiation: expandedrecord.c:EOHPGetRWDatum Unexecuted instantiation: float.c:EOHPGetRWDatum Unexecuted instantiation: hbafuncs.c:EOHPGetRWDatum Unexecuted instantiation: int.c:EOHPGetRWDatum Unexecuted instantiation: json.c:EOHPGetRWDatum Unexecuted instantiation: jsonb.c:EOHPGetRWDatum Unexecuted instantiation: jsonb_gin.c:EOHPGetRWDatum Unexecuted instantiation: jsonb_op.c:EOHPGetRWDatum Unexecuted instantiation: jsonb_util.c:EOHPGetRWDatum Unexecuted instantiation: jsonfuncs.c:EOHPGetRWDatum Unexecuted instantiation: jsonbsubs.c:EOHPGetRWDatum Unexecuted instantiation: jsonpath.c:EOHPGetRWDatum Unexecuted instantiation: jsonpath_exec.c:EOHPGetRWDatum Unexecuted instantiation: jsonpath_gram.c:EOHPGetRWDatum Unexecuted instantiation: jsonpath_scan.c:EOHPGetRWDatum Unexecuted instantiation: lockfuncs.c:EOHPGetRWDatum Unexecuted instantiation: mcxtfuncs.c:EOHPGetRWDatum Unexecuted instantiation: misc.c:EOHPGetRWDatum Unexecuted instantiation: multirangetypes.c:EOHPGetRWDatum Unexecuted instantiation: name.c:EOHPGetRWDatum Unexecuted instantiation: network.c:EOHPGetRWDatum Unexecuted instantiation: numeric.c:EOHPGetRWDatum Unexecuted instantiation: oid.c:EOHPGetRWDatum Unexecuted instantiation: orderedsetaggs.c:EOHPGetRWDatum Unexecuted instantiation: pg_locale.c:EOHPGetRWDatum Unexecuted instantiation: pg_upgrade_support.c:EOHPGetRWDatum Unexecuted instantiation: regexp.c:EOHPGetRWDatum Unexecuted instantiation: ri_triggers.c:EOHPGetRWDatum Unexecuted instantiation: ruleutils.c:EOHPGetRWDatum Unexecuted instantiation: selfuncs.c:EOHPGetRWDatum Unexecuted instantiation: timestamp.c:EOHPGetRWDatum Unexecuted instantiation: tsrank.c:EOHPGetRWDatum Unexecuted instantiation: tsvector_op.c:EOHPGetRWDatum Unexecuted instantiation: uuid.c:EOHPGetRWDatum Unexecuted instantiation: varbit.c:EOHPGetRWDatum Unexecuted instantiation: varchar.c:EOHPGetRWDatum Unexecuted instantiation: varlena.c:EOHPGetRWDatum Unexecuted instantiation: waitfuncs.c:EOHPGetRWDatum Unexecuted instantiation: xml.c:EOHPGetRWDatum Unexecuted instantiation: evtcache.c:EOHPGetRWDatum Unexecuted instantiation: lsyscache.c:EOHPGetRWDatum Unexecuted instantiation: plancache.c:EOHPGetRWDatum Unexecuted instantiation: relcache.c:EOHPGetRWDatum Unexecuted instantiation: ts_cache.c:EOHPGetRWDatum Unexecuted instantiation: typcache.c:EOHPGetRWDatum Unexecuted instantiation: csvlog.c:EOHPGetRWDatum Unexecuted instantiation: elog.c:EOHPGetRWDatum Unexecuted instantiation: jsonlog.c:EOHPGetRWDatum Unexecuted instantiation: fmgr.c:EOHPGetRWDatum Unexecuted instantiation: funcapi.c:EOHPGetRWDatum Unexecuted instantiation: miscinit.c:EOHPGetRWDatum Unexecuted instantiation: postinit.c:EOHPGetRWDatum Unexecuted instantiation: usercontext.c:EOHPGetRWDatum Unexecuted instantiation: guc.c:EOHPGetRWDatum Unexecuted instantiation: guc-file.c:EOHPGetRWDatum Unexecuted instantiation: guc_funcs.c:EOHPGetRWDatum Unexecuted instantiation: guc_tables.c:EOHPGetRWDatum Unexecuted instantiation: help_config.c:EOHPGetRWDatum Unexecuted instantiation: ps_status.c:EOHPGetRWDatum Unexecuted instantiation: stack_depth.c:EOHPGetRWDatum Unexecuted instantiation: tzparser.c:EOHPGetRWDatum Unexecuted instantiation: tuplesort.c:EOHPGetRWDatum Unexecuted instantiation: tuplesortvariants.c:EOHPGetRWDatum Unexecuted instantiation: simple_query_fuzzer.c:EOHPGetRWDatum |
143 | | |
144 | | static inline Datum |
145 | | EOHPGetRODatum(const struct ExpandedObjectHeader *eohptr) |
146 | 0 | { |
147 | 0 | return PointerGetDatum(eohptr->eoh_ro_ptr); |
148 | 0 | } Unexecuted instantiation: fuzzer_initialize.c:EOHPGetRODatum Unexecuted instantiation: brin.c:EOHPGetRODatum Unexecuted instantiation: brin_minmax_multi.c:EOHPGetRODatum Unexecuted instantiation: detoast.c:EOHPGetRODatum Unexecuted instantiation: heaptuple.c:EOHPGetRODatum Unexecuted instantiation: reloptions.c:EOHPGetRODatum Unexecuted instantiation: ginarrayproc.c:EOHPGetRODatum Unexecuted instantiation: gininsert.c:EOHPGetRODatum Unexecuted instantiation: nbtpreprocesskeys.c:EOHPGetRODatum Unexecuted instantiation: nbtsort.c:EOHPGetRODatum Unexecuted instantiation: xlogdesc.c:EOHPGetRODatum Unexecuted instantiation: tableamapi.c:EOHPGetRODatum Unexecuted instantiation: clog.c:EOHPGetRODatum Unexecuted instantiation: commit_ts.c:EOHPGetRODatum Unexecuted instantiation: multixact.c:EOHPGetRODatum Unexecuted instantiation: parallel.c:EOHPGetRODatum Unexecuted instantiation: slru.c:EOHPGetRODatum Unexecuted instantiation: subtrans.c:EOHPGetRODatum Unexecuted instantiation: xact.c:EOHPGetRODatum Unexecuted instantiation: xlog.c:EOHPGetRODatum Unexecuted instantiation: xlogprefetcher.c:EOHPGetRODatum Unexecuted instantiation: xlogrecovery.c:EOHPGetRODatum Unexecuted instantiation: bootparse.c:EOHPGetRODatum Unexecuted instantiation: bootscanner.c:EOHPGetRODatum Unexecuted instantiation: bootstrap.c:EOHPGetRODatum Unexecuted instantiation: aclchk.c:EOHPGetRODatum Unexecuted instantiation: catalog.c:EOHPGetRODatum Unexecuted instantiation: dependency.c:EOHPGetRODatum Unexecuted instantiation: heap.c:EOHPGetRODatum Unexecuted instantiation: index.c:EOHPGetRODatum Unexecuted instantiation: namespace.c:EOHPGetRODatum Unexecuted instantiation: objectaddress.c:EOHPGetRODatum Unexecuted instantiation: pg_constraint.c:EOHPGetRODatum Unexecuted instantiation: pg_db_role_setting.c:EOHPGetRODatum Unexecuted instantiation: pg_parameter_acl.c:EOHPGetRODatum Unexecuted instantiation: pg_proc.c:EOHPGetRODatum Unexecuted instantiation: pg_publication.c:EOHPGetRODatum Unexecuted instantiation: pg_shdepend.c:EOHPGetRODatum Unexecuted instantiation: pg_subscription.c:EOHPGetRODatum Unexecuted instantiation: pg_type.c:EOHPGetRODatum Unexecuted instantiation: analyze.c:EOHPGetRODatum Unexecuted instantiation: gram.c:EOHPGetRODatum Unexecuted instantiation: parse_clause.c:EOHPGetRODatum Unexecuted instantiation: parse_type.c:EOHPGetRODatum Unexecuted instantiation: parse_utilcmd.c:EOHPGetRODatum Unexecuted instantiation: aggregatecmds.c:EOHPGetRODatum Unexecuted instantiation: alter.c:EOHPGetRODatum Unexecuted instantiation: amcmds.c:EOHPGetRODatum Unexecuted instantiation: async.c:EOHPGetRODatum Unexecuted instantiation: collationcmds.c:EOHPGetRODatum Unexecuted instantiation: copy.c:EOHPGetRODatum Unexecuted instantiation: copyfrom.c:EOHPGetRODatum Unexecuted instantiation: copyto.c:EOHPGetRODatum Unexecuted instantiation: createas.c:EOHPGetRODatum Unexecuted instantiation: dbcommands.c:EOHPGetRODatum Unexecuted instantiation: define.c:EOHPGetRODatum Unexecuted instantiation: discard.c:EOHPGetRODatum Unexecuted instantiation: dropcmds.c:EOHPGetRODatum Unexecuted instantiation: event_trigger.c:EOHPGetRODatum Unexecuted instantiation: explain.c:EOHPGetRODatum Unexecuted instantiation: explain_state.c:EOHPGetRODatum Unexecuted instantiation: extension.c:EOHPGetRODatum Unexecuted instantiation: foreigncmds.c:EOHPGetRODatum Unexecuted instantiation: functioncmds.c:EOHPGetRODatum Unexecuted instantiation: indexcmds.c:EOHPGetRODatum Unexecuted instantiation: matview.c:EOHPGetRODatum Unexecuted instantiation: opclasscmds.c:EOHPGetRODatum Unexecuted instantiation: operatorcmds.c:EOHPGetRODatum Unexecuted instantiation: policy.c:EOHPGetRODatum Unexecuted instantiation: portalcmds.c:EOHPGetRODatum Unexecuted instantiation: prepare.c:EOHPGetRODatum Unexecuted instantiation: publicationcmds.c:EOHPGetRODatum Unexecuted instantiation: repack.c:EOHPGetRODatum Unexecuted instantiation: repack_worker.c:EOHPGetRODatum Unexecuted instantiation: schemacmds.c:EOHPGetRODatum Unexecuted instantiation: sequence.c:EOHPGetRODatum Unexecuted instantiation: statscmds.c:EOHPGetRODatum Unexecuted instantiation: subscriptioncmds.c:EOHPGetRODatum Unexecuted instantiation: tablecmds.c:EOHPGetRODatum Unexecuted instantiation: tablespace.c:EOHPGetRODatum Unexecuted instantiation: trigger.c:EOHPGetRODatum Unexecuted instantiation: tsearchcmds.c:EOHPGetRODatum Unexecuted instantiation: typecmds.c:EOHPGetRODatum Unexecuted instantiation: user.c:EOHPGetRODatum Unexecuted instantiation: vacuum.c:EOHPGetRODatum Unexecuted instantiation: vacuumparallel.c:EOHPGetRODatum Unexecuted instantiation: variable.c:EOHPGetRODatum Unexecuted instantiation: wait.c:EOHPGetRODatum Unexecuted instantiation: execExpr.c:EOHPGetRODatum Unexecuted instantiation: execExprInterp.c:EOHPGetRODatum Unexecuted instantiation: execMain.c:EOHPGetRODatum Unexecuted instantiation: execParallel.c:EOHPGetRODatum Unexecuted instantiation: execTuples.c:EOHPGetRODatum Unexecuted instantiation: functions.c:EOHPGetRODatum Unexecuted instantiation: instrument.c:EOHPGetRODatum Unexecuted instantiation: nodeAgg.c:EOHPGetRODatum Unexecuted instantiation: nodeIndexscan.c:EOHPGetRODatum Unexecuted instantiation: nodeSubplan.c:EOHPGetRODatum Unexecuted instantiation: nodeTableFuncscan.c:EOHPGetRODatum Unexecuted instantiation: nodeTidscan.c:EOHPGetRODatum Unexecuted instantiation: nodeValuesscan.c:EOHPGetRODatum Unexecuted instantiation: nodeWindowAgg.c:EOHPGetRODatum Unexecuted instantiation: spi.c:EOHPGetRODatum Unexecuted instantiation: foreign.c:EOHPGetRODatum Unexecuted instantiation: auth.c:EOHPGetRODatum Unexecuted instantiation: be-secure-common.c:EOHPGetRODatum Unexecuted instantiation: be-secure.c:EOHPGetRODatum Unexecuted instantiation: hba.c:EOHPGetRODatum Unexecuted instantiation: pqcomm.c:EOHPGetRODatum Unexecuted instantiation: pqmq.c:EOHPGetRODatum Unexecuted instantiation: createplan.c:EOHPGetRODatum Unexecuted instantiation: setrefs.c:EOHPGetRODatum Unexecuted instantiation: clauses.c:EOHPGetRODatum Unexecuted instantiation: plancat.c:EOHPGetRODatum Unexecuted instantiation: predtest.c:EOHPGetRODatum Unexecuted instantiation: partbounds.c:EOHPGetRODatum Unexecuted instantiation: partprune.c:EOHPGetRODatum Unexecuted instantiation: pg_shmem.c:EOHPGetRODatum Unexecuted instantiation: autovacuum.c:EOHPGetRODatum Unexecuted instantiation: bgworker.c:EOHPGetRODatum Unexecuted instantiation: checkpointer.c:EOHPGetRODatum Unexecuted instantiation: datachecksum_state.c:EOHPGetRODatum Unexecuted instantiation: interrupt.c:EOHPGetRODatum Unexecuted instantiation: pgarch.c:EOHPGetRODatum Unexecuted instantiation: postmaster.c:EOHPGetRODatum Unexecuted instantiation: startup.c:EOHPGetRODatum Unexecuted instantiation: syslogger.c:EOHPGetRODatum Unexecuted instantiation: walsummarizer.c:EOHPGetRODatum Unexecuted instantiation: applyparallelworker.c:EOHPGetRODatum Unexecuted instantiation: launcher.c:EOHPGetRODatum Unexecuted instantiation: logical.c:EOHPGetRODatum Unexecuted instantiation: logicalfuncs.c:EOHPGetRODatum Unexecuted instantiation: origin.c:EOHPGetRODatum Unexecuted instantiation: sequencesync.c:EOHPGetRODatum Unexecuted instantiation: slotsync.c:EOHPGetRODatum Unexecuted instantiation: tablesync.c:EOHPGetRODatum Unexecuted instantiation: worker.c:EOHPGetRODatum Unexecuted instantiation: slot.c:EOHPGetRODatum Unexecuted instantiation: slotfuncs.c:EOHPGetRODatum Unexecuted instantiation: syncrep.c:EOHPGetRODatum Unexecuted instantiation: walreceiver.c:EOHPGetRODatum Unexecuted instantiation: walsender.c:EOHPGetRODatum Unexecuted instantiation: rewriteHandler.c:EOHPGetRODatum Unexecuted instantiation: rowsecurity.c:EOHPGetRODatum Unexecuted instantiation: basebackup.c:EOHPGetRODatum Unexecuted instantiation: attribute_stats.c:EOHPGetRODatum Unexecuted instantiation: extended_stats.c:EOHPGetRODatum Unexecuted instantiation: extended_stats_funcs.c:EOHPGetRODatum Unexecuted instantiation: mcv.c:EOHPGetRODatum Unexecuted instantiation: stat_utils.c:EOHPGetRODatum Unexecuted instantiation: aio.c:EOHPGetRODatum Unexecuted instantiation: aio_init.c:EOHPGetRODatum Unexecuted instantiation: method_worker.c:EOHPGetRODatum Unexecuted instantiation: localbuf.c:EOHPGetRODatum Unexecuted instantiation: fd.c:EOHPGetRODatum Unexecuted instantiation: dsm_impl.c:EOHPGetRODatum Unexecuted instantiation: ipc.c:EOHPGetRODatum Unexecuted instantiation: ipci.c:EOHPGetRODatum Unexecuted instantiation: procsignal.c:EOHPGetRODatum Unexecuted instantiation: predicate.c:EOHPGetRODatum Unexecuted instantiation: backend_startup.c:EOHPGetRODatum Unexecuted instantiation: fastpath.c:EOHPGetRODatum Unexecuted instantiation: postgres.c:EOHPGetRODatum Unexecuted instantiation: pquery.c:EOHPGetRODatum Unexecuted instantiation: utility.c:EOHPGetRODatum Unexecuted instantiation: dict.c:EOHPGetRODatum Unexecuted instantiation: dict_ispell.c:EOHPGetRODatum Unexecuted instantiation: dict_simple.c:EOHPGetRODatum Unexecuted instantiation: dict_synonym.c:EOHPGetRODatum Unexecuted instantiation: dict_thesaurus.c:EOHPGetRODatum Unexecuted instantiation: to_tsany.c:EOHPGetRODatum Unexecuted instantiation: wparser.c:EOHPGetRODatum Unexecuted instantiation: wparser_def.c:EOHPGetRODatum Unexecuted instantiation: backend_status.c:EOHPGetRODatum Unexecuted instantiation: pgstat.c:EOHPGetRODatum Unexecuted instantiation: acl.c:EOHPGetRODatum Unexecuted instantiation: array_expanded.c:EOHPGetRODatum Unexecuted instantiation: array_selfuncs.c:EOHPGetRODatum Unexecuted instantiation: array_typanalyze.c:EOHPGetRODatum Unexecuted instantiation: array_userfuncs.c:EOHPGetRODatum Unexecuted instantiation: arrayfuncs.c:EOHPGetRODatum Unexecuted instantiation: arraysubs.c:EOHPGetRODatum Unexecuted instantiation: arrayutils.c:EOHPGetRODatum Unexecuted instantiation: bytea.c:EOHPGetRODatum Unexecuted instantiation: date.c:EOHPGetRODatum Unexecuted instantiation: datetime.c:EOHPGetRODatum Unexecuted instantiation: datum.c:EOHPGetRODatum Unexecuted instantiation: ddlutils.c:EOHPGetRODatum Unexecuted instantiation: domains.c:EOHPGetRODatum Unexecuted instantiation: enum.c:EOHPGetRODatum Unexecuted instantiation: expandeddatum.c:EOHPGetRODatum Unexecuted instantiation: expandedrecord.c:EOHPGetRODatum Unexecuted instantiation: float.c:EOHPGetRODatum Unexecuted instantiation: hbafuncs.c:EOHPGetRODatum Unexecuted instantiation: int.c:EOHPGetRODatum Unexecuted instantiation: json.c:EOHPGetRODatum Unexecuted instantiation: jsonb.c:EOHPGetRODatum Unexecuted instantiation: jsonb_gin.c:EOHPGetRODatum Unexecuted instantiation: jsonb_op.c:EOHPGetRODatum Unexecuted instantiation: jsonb_util.c:EOHPGetRODatum Unexecuted instantiation: jsonfuncs.c:EOHPGetRODatum Unexecuted instantiation: jsonbsubs.c:EOHPGetRODatum Unexecuted instantiation: jsonpath.c:EOHPGetRODatum Unexecuted instantiation: jsonpath_exec.c:EOHPGetRODatum Unexecuted instantiation: jsonpath_gram.c:EOHPGetRODatum Unexecuted instantiation: jsonpath_scan.c:EOHPGetRODatum Unexecuted instantiation: lockfuncs.c:EOHPGetRODatum Unexecuted instantiation: mcxtfuncs.c:EOHPGetRODatum Unexecuted instantiation: misc.c:EOHPGetRODatum Unexecuted instantiation: multirangetypes.c:EOHPGetRODatum Unexecuted instantiation: name.c:EOHPGetRODatum Unexecuted instantiation: network.c:EOHPGetRODatum Unexecuted instantiation: numeric.c:EOHPGetRODatum Unexecuted instantiation: oid.c:EOHPGetRODatum Unexecuted instantiation: orderedsetaggs.c:EOHPGetRODatum Unexecuted instantiation: pg_locale.c:EOHPGetRODatum Unexecuted instantiation: pg_upgrade_support.c:EOHPGetRODatum Unexecuted instantiation: regexp.c:EOHPGetRODatum Unexecuted instantiation: ri_triggers.c:EOHPGetRODatum Unexecuted instantiation: ruleutils.c:EOHPGetRODatum Unexecuted instantiation: selfuncs.c:EOHPGetRODatum Unexecuted instantiation: timestamp.c:EOHPGetRODatum Unexecuted instantiation: tsrank.c:EOHPGetRODatum Unexecuted instantiation: tsvector_op.c:EOHPGetRODatum Unexecuted instantiation: uuid.c:EOHPGetRODatum Unexecuted instantiation: varbit.c:EOHPGetRODatum Unexecuted instantiation: varchar.c:EOHPGetRODatum Unexecuted instantiation: varlena.c:EOHPGetRODatum Unexecuted instantiation: waitfuncs.c:EOHPGetRODatum Unexecuted instantiation: xml.c:EOHPGetRODatum Unexecuted instantiation: evtcache.c:EOHPGetRODatum Unexecuted instantiation: lsyscache.c:EOHPGetRODatum Unexecuted instantiation: plancache.c:EOHPGetRODatum Unexecuted instantiation: relcache.c:EOHPGetRODatum Unexecuted instantiation: ts_cache.c:EOHPGetRODatum Unexecuted instantiation: typcache.c:EOHPGetRODatum Unexecuted instantiation: csvlog.c:EOHPGetRODatum Unexecuted instantiation: elog.c:EOHPGetRODatum Unexecuted instantiation: jsonlog.c:EOHPGetRODatum Unexecuted instantiation: fmgr.c:EOHPGetRODatum Unexecuted instantiation: funcapi.c:EOHPGetRODatum Unexecuted instantiation: miscinit.c:EOHPGetRODatum Unexecuted instantiation: postinit.c:EOHPGetRODatum Unexecuted instantiation: usercontext.c:EOHPGetRODatum Unexecuted instantiation: guc.c:EOHPGetRODatum Unexecuted instantiation: guc-file.c:EOHPGetRODatum Unexecuted instantiation: guc_funcs.c:EOHPGetRODatum Unexecuted instantiation: guc_tables.c:EOHPGetRODatum Unexecuted instantiation: help_config.c:EOHPGetRODatum Unexecuted instantiation: ps_status.c:EOHPGetRODatum Unexecuted instantiation: stack_depth.c:EOHPGetRODatum Unexecuted instantiation: tzparser.c:EOHPGetRODatum Unexecuted instantiation: tuplesort.c:EOHPGetRODatum Unexecuted instantiation: tuplesortvariants.c:EOHPGetRODatum Unexecuted instantiation: simple_query_fuzzer.c:EOHPGetRODatum |
149 | | |
150 | | /* Does the Datum represent a writable expanded object? */ |
151 | | #define DatumIsReadWriteExpandedObject(d, isnull, typlen) \ |
152 | 0 | (((isnull) || (typlen) != -1) ? false : \ |
153 | 0 | VARATT_IS_EXTERNAL_EXPANDED_RW(DatumGetPointer(d))) |
154 | | |
155 | | #define MakeExpandedObjectReadOnly(d, isnull, typlen) \ |
156 | 0 | (((isnull) || (typlen) != -1) ? (d) : \ |
157 | 0 | MakeExpandedObjectReadOnlyInternal(d)) |
158 | | |
159 | | extern ExpandedObjectHeader *DatumGetEOHP(Datum d); |
160 | | extern void EOH_init_header(ExpandedObjectHeader *eohptr, |
161 | | const ExpandedObjectMethods *methods, |
162 | | MemoryContext obj_context); |
163 | | extern Size EOH_get_flat_size(ExpandedObjectHeader *eohptr); |
164 | | extern void EOH_flatten_into(ExpandedObjectHeader *eohptr, |
165 | | void *result, Size allocated_size); |
166 | | extern Datum MakeExpandedObjectReadOnlyInternal(Datum d); |
167 | | extern Datum TransferExpandedObject(Datum d, MemoryContext new_parent); |
168 | | extern void DeleteExpandedObject(Datum d); |
169 | | |
170 | | #endif /* EXPANDEDDATUM_H */ |