datum.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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-2022, 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. * datum_image_eq
  46. *
  47. * Compares two datums for identical contents, based on byte images. Return
  48. * true if the two datums are equal, false otherwise.
  49. */
  50. extern bool datum_image_eq(Datum value1, Datum value2,
  51. bool typByVal, int typLen);
  52. /*
  53. * datum_image_hash
  54. *
  55. * Generates hash value for 'value' based on its bits rather than logical
  56. * value.
  57. */
  58. extern uint32 datum_image_hash(Datum value, bool typByVal, int typLen);
  59. /*
  60. * Serialize and restore datums so that we can transfer them to parallel
  61. * workers.
  62. */
  63. extern Size datumEstimateSpace(Datum value, bool isnull, bool typByVal,
  64. int typLen);
  65. extern void datumSerialize(Datum value, bool isnull, bool typByVal,
  66. int typLen, char **start_address);
  67. extern Datum datumRestore(char **start_address, bool *isnull);
  68. #endif /* DATUM_H */