]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Turn HeapKeyTest macro into inline function
authorPeter Eisentraut <peter@eisentraut.org>
Wed, 16 Nov 2022 12:25:59 +0000 (13:25 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Wed, 16 Nov 2022 12:26:48 +0000 (13:26 +0100)
It is easier to read as a function.

Author: Melanie Plageman <melanieplageman@gmail.com>
Reviewed-by: Andres Freund <andres@anarazel.de>
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 */