1 | /*------------------------------------------------------------------------- |
2 | * |
3 | * valid.h |
4 | * POSTGRES tuple qualification validity definitions. |
5 | * |
6 | * |
7 | * Portions Copyright (c) 1996-2019, 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 | |