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