Line data Source code
1 : /*------------------------------------------------------------------------- 2 : * 3 : * valid.h 4 : * POSTGRES tuple qualification validity definitions. 5 : * 6 : * 7 : * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group 8 : * Portions Copyright (c) 1994, Regents of the University of California 9 : * 10 : * src/include/access/valid.h 11 : * 12 : *------------------------------------------------------------------------- 13 : */ 14 : #ifndef VALID_H 15 : #define VALID_H 16 : 17 : #include "access/htup.h" 18 : #include "access/htup_details.h" 19 : #include "access/skey.h" 20 : #include "access/tupdesc.h" 21 : 22 : /* 23 : * HeapKeyTest 24 : * 25 : * Test a heap tuple to see if it satisfies a scan key. 26 : */ 27 : static inline bool 28 80380414 : HeapKeyTest(HeapTuple tuple, TupleDesc tupdesc, int nkeys, ScanKey keys) 29 : { 30 80380414 : int cur_nkeys = nkeys; 31 80380414 : ScanKey cur_key = keys; 32 : 33 81424762 : for (; cur_nkeys--; cur_key++) 34 : { 35 : Datum atp; 36 : bool isnull; 37 : Datum test; 38 : 39 80833460 : if (cur_key->sk_flags & SK_ISNULL) 40 79789112 : return false; 41 : 42 80833460 : atp = heap_getattr(tuple, cur_key->sk_attno, tupdesc, &isnull); 43 : 44 80833460 : if (isnull) 45 0 : return false; 46 : 47 80833460 : test = FunctionCall2Coll(&cur_key->sk_func, 48 : cur_key->sk_collation, 49 : atp, cur_key->sk_argument); 50 : 51 80833460 : if (!DatumGetBool(test)) 52 79789112 : return false; 53 : } 54 : 55 591302 : return true; 56 : } 57 : 58 : #endif /* VALID_H */