valid.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*-------------------------------------------------------------------------
  2. *
  3. * valid.h
  4. * POSTGRES tuple qualification validity definitions.
  5. *
  6. *
  7. * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
  8. * Portions Copyright (c) 1994, Regents of the University of California
  9. *
  10. * src/include/access/valid.h
  11. *
  12. *-------------------------------------------------------------------------
  13. */
  14. #ifndef VALID_H
  15. #define VALID_H
  16. /*
  17. * HeapKeyTest
  18. *
  19. * Test a heap tuple to see if it satisfies a scan key.
  20. */
  21. #define HeapKeyTest(tuple, \
  22. tupdesc, \
  23. nkeys, \
  24. keys, \
  25. result) \
  26. do \
  27. { \
  28. /* Use underscores to protect the variables passed in as parameters */ \
  29. int __cur_nkeys = (nkeys); \
  30. ScanKey __cur_keys = (keys); \
  31. \
  32. (result) = true; /* may change */ \
  33. for (; __cur_nkeys--; __cur_keys++) \
  34. { \
  35. Datum __atp; \
  36. bool __isnull; \
  37. Datum __test; \
  38. \
  39. if (__cur_keys->sk_flags & SK_ISNULL) \
  40. { \
  41. (result) = false; \
  42. break; \
  43. } \
  44. \
  45. __atp = heap_getattr((tuple), \
  46. __cur_keys->sk_attno, \
  47. (tupdesc), \
  48. &__isnull); \
  49. \
  50. if (__isnull) \
  51. { \
  52. (result) = false; \
  53. break; \
  54. } \
  55. \
  56. __test = FunctionCall2Coll(&__cur_keys->sk_func, \
  57. __cur_keys->sk_collation, \
  58. __atp, __cur_keys->sk_argument); \
  59. \
  60. if (!DatumGetBool(__test)) \
  61. { \
  62. (result) = false; \
  63. break; \
  64. } \
  65. } \
  66. } while (0)
  67. #endif /* VALID_H */