PostgreSQL Source Code  git master
valid.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * valid.h
4  * POSTGRES tuple qualification validity definitions.
5  *
6  *
7  * Portions Copyright (c) 1996-2017, 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 */