PostgreSQL Source Code git master
datum.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * datum.h
4 * POSTGRES Datum (abstract data type) manipulation routines.
5 *
6 * These routines are driven by the 'typbyval' and 'typlen' information,
7 * which must previously have been obtained by the caller for the datatype
8 * of the Datum. (We do it this way because in most situations the caller
9 * can look up the info just once and use it for many per-datum operations.)
10 *
11 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
12 * Portions Copyright (c) 1994, Regents of the University of California
13 *
14 * src/include/utils/datum.h
15 *
16 *-------------------------------------------------------------------------
17 */
18#ifndef DATUM_H
19#define DATUM_H
20
21/*
22 * datumGetSize - find the "real" length of a datum
23 */
24extern Size datumGetSize(Datum value, bool typByVal, int typLen);
25
26/*
27 * datumCopy - make a copy of a non-NULL datum.
28 *
29 * If the datatype is pass-by-reference, memory is obtained with palloc().
30 */
31extern Datum datumCopy(Datum value, bool typByVal, int typLen);
32
33/*
34 * datumTransfer - transfer a non-NULL datum into the current memory context.
35 *
36 * Differs from datumCopy() in its handling of read-write expanded objects.
37 */
38extern Datum datumTransfer(Datum value, bool typByVal, int typLen);
39
40/*
41 * datumIsEqual
42 * return true if two datums of the same type are equal, false otherwise.
43 *
44 * XXX : See comments in the code for restrictions!
45 */
46extern bool datumIsEqual(Datum value1, Datum value2,
47 bool typByVal, int typLen);
48
49/*
50 * datum_image_eq
51 *
52 * Compares two datums for identical contents, based on byte images. Return
53 * true if the two datums are equal, false otherwise.
54 */
55extern bool datum_image_eq(Datum value1, Datum value2,
56 bool typByVal, int typLen);
57
58/*
59 * datum_image_hash
60 *
61 * Generates hash value for 'value' based on its bits rather than logical
62 * value.
63 */
64extern uint32 datum_image_hash(Datum value, bool typByVal, int typLen);
65
66/*
67 * Serialize and restore datums so that we can transfer them to parallel
68 * workers.
69 */
70extern Size datumEstimateSpace(Datum value, bool isnull, bool typByVal,
71 int typLen);
72extern void datumSerialize(Datum value, bool isnull, bool typByVal,
73 int typLen, char **start_address);
74extern Datum datumRestore(char **start_address, bool *isnull);
75
76#endif /* DATUM_H */
uint32_t uint32
Definition: c.h:488
size_t Size
Definition: c.h:562
Datum datumCopy(Datum value, bool typByVal, int typLen)
Definition: datum.c:132
Datum datumTransfer(Datum value, bool typByVal, int typLen)
Definition: datum.c:194
Size datumGetSize(Datum value, bool typByVal, int typLen)
Definition: datum.c:65
uint32 datum_image_hash(Datum value, bool typByVal, int typLen)
Definition: datum.c:338
Datum datumRestore(char **start_address, bool *isnull)
Definition: datum.c:521
void datumSerialize(Datum value, bool isnull, bool typByVal, int typLen, char **start_address)
Definition: datum.c:459
Size datumEstimateSpace(Datum value, bool isnull, bool typByVal, int typLen)
Definition: datum.c:412
bool datum_image_eq(Datum value1, Datum value2, bool typByVal, int typLen)
Definition: datum.c:266
bool datumIsEqual(Datum value1, Datum value2, bool typByVal, int typLen)
Definition: datum.c:223
static struct @162 value
uintptr_t Datum
Definition: postgres.h:69