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