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:
@ -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;
|
||||
|
@ -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 */
|
||||
|
Reference in New Issue
Block a user