]> granicus.if.org Git - postgresql/blob - src/include/utils/datum.h
Improve performance of numeric sum(), avg(), stddev(), variance(), etc.
[postgresql] / src / include / utils / datum.h
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-2013, 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 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  * datumFree - free a datum previously allocated by datumCopy, if any.
35  *
36  * Does nothing if datatype is pass-by-value.
37  */
38 extern void datumFree(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 #endif   /* DATUM_H */