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-2024, 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  */
24 extern 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  */
31 extern 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  */
38 extern 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  */
46 extern 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  */
55 extern 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  */
64 extern 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  */
70 extern Size datumEstimateSpace(Datum value, bool isnull, bool typByVal,
71  int typLen);
72 extern void datumSerialize(Datum value, bool isnull, bool typByVal,
73  int typLen, char **start_address);
74 extern Datum datumRestore(char **start_address, bool *isnull);
75 
76 #endif /* DATUM_H */
unsigned int uint32
Definition: c.h:506
size_t Size
Definition: c.h:596
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 @160 value
uintptr_t Datum
Definition: postgres.h:64