datum.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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-2016, 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. * datumGetSize - find the "real" length of a datum
  22. */
  23. extern Size datumGetSize(Datum value, bool typByVal, int typLen);
  24. /*
  25. * datumCopy - make a copy of a non-NULL datum.
  26. *
  27. * If the datatype is pass-by-reference, memory is obtained with palloc().
  28. */
  29. extern Datum datumCopy(Datum value, bool typByVal, int typLen);
  30. /*
  31. * datumTransfer - transfer a non-NULL datum into the current memory context.
  32. *
  33. * Differs from datumCopy() in its handling of read-write expanded objects.
  34. */
  35. extern Datum datumTransfer(Datum value, bool typByVal, int typLen);
  36. /*
  37. * datumIsEqual
  38. * return true if two datums of the same type are equal, false otherwise.
  39. *
  40. * XXX : See comments in the code for restrictions!
  41. */
  42. extern bool datumIsEqual(Datum value1, Datum value2,
  43. bool typByVal, int typLen);
  44. /*
  45. * Serialize and restore datums so that we can transfer them to parallel
  46. * workers.
  47. */
  48. extern Size datumEstimateSpace(Datum value, bool isnull, bool typByVal,
  49. int typLen);
  50. extern void datumSerialize(Datum value, bool isnull, bool typByVal,
  51. int typLen, char **start_address);
  52. extern Datum datumRestore(char **start_address, bool *isnull);
  53. #endif /* DATUM_H */