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) \
27do \
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