Turn HeapKeyTest macro into inline function
authorPeter Eisentraut <[email protected]>
Wed, 16 Nov 2022 12:25:59 +0000 (13:25 +0100)
committerPeter Eisentraut <[email protected]>
Wed, 16 Nov 2022 12:26:48 +0000 (13:26 +0100)
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

src/backend/access/heap/heapam.c
src/include/access/valid.h

index 807a09d36d7af1957f8ece0a1bed361c3276b0a8..7dad7af4db42bd86eb25c38891903d90b5659537 100644 (file)
@@ -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;
index a5525d0d631d580949f988492d84b487275ff28a..eda7f0e0c922d6de9dd4917ff23847b3c07abdd0 100644 (file)
 #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 */