git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: c0f1e51)
Turn HeapKeyTest macro into inline function
2022年11月16日 12:25:59 +0000 (13:25 +0100)
2022年11月16日 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


diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 807a09d36d7af1957f8ece0a1bed361c3276b0a8..7dad7af4db42bd86eb25c38891903d90b5659537 100644 (file)
--- 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 a5525d0d631d580949f988492d84b487275ff28a..eda7f0e0c922d6de9dd4917ff23847b3c07abdd0 100644 (file)
--- 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 */
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /