mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-16 06:00:32 +02:00
64 lines
2.0 KiB
C
64 lines
2.0 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* datum.h
|
|
* POSTGRES abstract data type datum representation definitions.
|
|
*
|
|
*
|
|
* Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* $Id: datum.h,v 1.9 1999/02/13 23:22:16 momjian Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef DATUM_H
|
|
#define DATUM_H
|
|
|
|
|
|
/*--------------------------------------------------------
|
|
* SOME NOT VERY PORTABLE ROUTINES ???
|
|
*--------------------------------------------------------
|
|
*
|
|
* In the implementation of the next routines we assume the following:
|
|
*
|
|
* A) if a type is "byVal" then all the information is stored in the
|
|
* Datum itself (i.e. no pointers involved!). In this case the
|
|
* length of the type is always greater than zero and less than
|
|
* "sizeof(Datum)"
|
|
* B) if a type is not "byVal" and it has a fixed length, then
|
|
* the "Datum" always contain a pointer to a stream of bytes.
|
|
* The number of significant bytes are always equal to the length of thr
|
|
* type.
|
|
* C) if a type is not "byVal" and is of variable length (i.e. it has
|
|
* length == -1) then "Datum" always points to a "struct varlena".
|
|
* This varlena structure has information about the actual length of this
|
|
* particular instance of the type and about its value.
|
|
*/
|
|
|
|
/*---------------
|
|
* datumGetSize
|
|
* find the "real" length of a datum
|
|
*/
|
|
extern Size datumGetSize(Datum value, Oid type, bool byVal, Size len);
|
|
|
|
/*---------------
|
|
* datumCopy
|
|
* make a copy of a datum.
|
|
*/
|
|
extern Datum datumCopy(Datum value, Oid type, bool byVal, Size len);
|
|
|
|
/*---------------
|
|
* datumFree
|
|
* free space that *might* have been palloced by "datumCopy"
|
|
*/
|
|
extern void datumFree(Datum value, Oid type, bool byVal, Size len);
|
|
|
|
/*---------------
|
|
* datumIsEqual
|
|
* return true if thwo datums are equal, false otherwise.
|
|
* XXX : See comments in the code for restrictions!
|
|
*/
|
|
extern bool datumIsEqual(Datum value1, Datum value2, Oid type,
|
|
bool byVal, Size len);
|
|
|
|
#endif /* DATUM_H */
|