1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-20 05:03:10 +03:00

Turn HeapKeyTest macro into inline function

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
This commit is contained in:
Peter Eisentraut
2022-11-16 13:25:59 +01:00
parent c0f1e51ac7
commit 4eb3b11200
2 changed files with 39 additions and 50 deletions

View File

@ -719,8 +719,8 @@ heapgettup(HeapScanDesc scan,
snapshot); snapshot);
if (valid && key != NULL) if (valid && key != NULL)
HeapKeyTest(tuple, RelationGetDescr(scan->rs_base.rs_rd), valid = HeapKeyTest(tuple, RelationGetDescr(scan->rs_base.rs_rd),
nkeys, key, valid); nkeys, key);
if (valid) if (valid)
{ {
@ -1035,8 +1035,8 @@ heapgettup_pagemode(HeapScanDesc scan,
{ {
bool valid; bool valid;
HeapKeyTest(tuple, RelationGetDescr(scan->rs_base.rs_rd), valid = HeapKeyTest(tuple, RelationGetDescr(scan->rs_base.rs_rd),
nkeys, key, valid); nkeys, key);
if (valid) if (valid)
{ {
scan->rs_cindex = lineindex; scan->rs_cindex = lineindex;

View File

@ -14,56 +14,45 @@
#ifndef VALID_H #ifndef VALID_H
#define VALID_H #define VALID_H
#include "access/htup.h"
#include "access/htup_details.h"
#include "access/skey.h"
#include "access/tupdesc.h"
/* /*
* HeapKeyTest * HeapKeyTest
* *
* Test a heap tuple to see if it satisfies a scan key. * Test a heap tuple to see if it satisfies a scan key.
*/ */
#define HeapKeyTest(tuple, \ static inline bool
tupdesc, \ HeapKeyTest(HeapTuple tuple, TupleDesc tupdesc, int nkeys, ScanKey keys)
nkeys, \ {
keys, \ int cur_nkeys = nkeys;
result) \ ScanKey cur_key = keys;
do \
{ \ for (; cur_nkeys--; cur_key++)
/* Use underscores to protect the variables passed in as parameters */ \ {
int __cur_nkeys = (nkeys); \ Datum atp;
ScanKey __cur_keys = (keys); \ bool isnull;
\ Datum test;
(result) = true; /* may change */ \
for (; __cur_nkeys--; __cur_keys++) \ if (cur_key->sk_flags & SK_ISNULL)
{ \ return false;
Datum __atp; \
bool __isnull; \ atp = heap_getattr(tuple, cur_key->sk_attno, tupdesc, &isnull);
Datum __test; \
\ if (isnull)
if (__cur_keys->sk_flags & SK_ISNULL) \ return false;
{ \
(result) = false; \ test = FunctionCall2Coll(&cur_key->sk_func,
break; \ cur_key->sk_collation,
} \ atp, cur_key->sk_argument);
\
__atp = heap_getattr((tuple), \ if (!DatumGetBool(test))
__cur_keys->sk_attno, \ return false;
(tupdesc), \ }
&__isnull); \
\ return true;
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)
#endif /* VALID_H */ #endif /* VALID_H */