summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut2022-11-16 12:25:59 +0000
committerPeter Eisentraut2022-11-16 12:26:48 +0000
commit4eb3b11200010bf1342e51ff0f2622bba0e05c0c (patch)
tree5174032302b447c34a16bc3ef2bf6a7a20e826f7
parentc0f1e51ac79efd4d8c07374405d9035356b30621 (diff)
Turn HeapKeyTest macro into inline function
It is easier to read as a function. Author: Melanie Plageman <[email protected]> Reviewed-by: Andres Freund <[email protected]> Discussion: https://www.postgresql.org/message-id/flat/CAAKRu_YSOnhKsDyFcqJsKtBSrd32DP-jjXmv7hL0BPD-z0TGXQ@mail.gmail.com
-rw-r--r--src/backend/access/heap/heapam.c8
-rw-r--r--src/include/access/valid.h81
2 files changed, 39 insertions, 50 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 807a09d36d7..7dad7af4db4 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -719,8 +719,8 @@ heapgettup(HeapScanDesc scan,
snapshot);
if (valid && key != NULL)
- HeapKeyTest(tuple, RelationGetDescr(scan->rs_base.rs_rd),
- nkeys, key, valid);
+ valid = HeapKeyTest(tuple, RelationGetDescr(scan->rs_base.rs_rd),
+ nkeys, key);
if (valid)
{
@@ -1035,8 +1035,8 @@ heapgettup_pagemode(HeapScanDesc scan,
{
bool valid;
- HeapKeyTest(tuple, RelationGetDescr(scan->rs_base.rs_rd),
- nkeys, key, valid);
+ valid = HeapKeyTest(tuple, RelationGetDescr(scan->rs_base.rs_rd),
+ nkeys, key);
if (valid)
{
scan->rs_cindex = lineindex;
diff --git a/src/include/access/valid.h b/src/include/access/valid.h
index a5525d0d631..eda7f0e0c92 100644
--- a/src/include/access/valid.h
+++ b/src/include/access/valid.h
@@ -14,56 +14,45 @@
#ifndef VALID_H
#define VALID_H
+#include "access/htup.h"
+#include "access/htup_details.h"
+#include "access/skey.h"
+#include "access/tupdesc.h"
+
/*
* HeapKeyTest
*
* Test a heap tuple to see if it satisfies a scan key.
*/
-#define HeapKeyTest(tuple, \
- tupdesc, \
- nkeys, \
- keys, \
- result) \
-do \
-{ \
- /* Use underscores to protect the variables passed in as parameters */ \
- int __cur_nkeys = (nkeys); \
- ScanKey __cur_keys = (keys); \
- \
- (result) = true; /* may change */ \
- for (; __cur_nkeys--; __cur_keys++) \
- { \
- Datum __atp; \
- bool __isnull; \
- Datum __test; \
- \
- if (__cur_keys->sk_flags & SK_ISNULL) \
- { \
- (result) = false; \
- break; \
- } \
- \
- __atp = heap_getattr((tuple), \
- __cur_keys->sk_attno, \
- (tupdesc), \
- &__isnull); \
- \
- if (__isnull) \
- { \
- (result) = false; \
- break; \
- } \
- \
- __test = FunctionCall2Coll(&__cur_keys->sk_func, \
- __cur_keys->sk_collation, \
- __atp, __cur_keys->sk_argument); \
- \
- if (!DatumGetBool(__test)) \
- { \
- (result) = false; \
- break; \
- } \
- } \
-} while (0)
+static inline bool
+HeapKeyTest(HeapTuple tuple, TupleDesc tupdesc, int nkeys, ScanKey keys)
+{
+ int cur_nkeys = nkeys;
+ ScanKey cur_key = keys;
+
+ for (; cur_nkeys--; cur_key++)
+ {
+ Datum atp;
+ bool isnull;
+ Datum test;
+
+ if (cur_key->sk_flags & SK_ISNULL)
+ return false;
+
+ atp = heap_getattr(tuple, cur_key->sk_attno, tupdesc, &isnull);
+
+ if (isnull)
+ return false;
+
+ test = FunctionCall2Coll(&cur_key->sk_func,
+ cur_key->sk_collation,
+ atp, cur_key->sk_argument);
+
+ if (!DatumGetBool(test))
+ return false;
+ }
+
+ return true;
+}
#endif /* VALID_H */