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