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-2021, 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  * Serialize and restore datums so that we can transfer them to parallel
60  * workers.
61  */
62 extern Size datumEstimateSpace(Datum value, bool isnull, bool typByVal,
63 							   int typLen);
64 extern void datumSerialize(Datum value, bool isnull, bool typByVal,
65 						   int typLen, char **start_address);
66 extern Datum datumRestore(char **start_address, bool *isnull);
67 
68 #endif							/* DATUM_H */
69