PostgreSQL Source Code  git master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
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-2017, 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  * Serialize and restore datums so that we can transfer them to parallel
51  * workers.
52  */
53 extern Size datumEstimateSpace(Datum value, bool isnull, bool typByVal,
54  int typLen);
55 extern void datumSerialize(Datum value, bool isnull, bool typByVal,
56  int typLen, char **start_address);
57 extern Datum datumRestore(char **start_address, bool *isnull);
58 
59 #endif /* DATUM_H */
void datumSerialize(Datum value, bool isnull, bool typByVal, int typLen, char **start_address)
Definition: datum.c:302
Datum datumRestore(char **start_address, bool *isnull)
Definition: datum.c:352
Size datumEstimateSpace(Datum value, bool isnull, bool typByVal, int typLen)
Definition: datum.c:262
Datum datumCopy(Datum value, bool typByVal, int typLen)
Definition: datum.c:128
uintptr_t Datum
Definition: postgres.h:372
size_t Size
Definition: c.h:356
bool datumIsEqual(Datum value1, Datum value2, bool typByVal, int typLen)
Definition: datum.c:219
static struct @121 value
Datum datumTransfer(Datum value, bool typByVal, int typLen)
Definition: datum.c:190
Size datumGetSize(Datum value, bool typByVal, int typLen)
Definition: datum.c:61