mirror of
https://github.com/postgres/postgres.git
synced 2025-11-10 17:42:29 +03:00
Postgres95 1.01 Distribution - Virgin Sources
This commit is contained in:
84
src/backend/access/common/indexvalid.c
Normal file
84
src/backend/access/common/indexvalid.c
Normal file
@@ -0,0 +1,84 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* indexvalid.c--
|
||||
* index tuple qualification validity checking code
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/common/Attic/indexvalid.c,v 1.1.1.1 1996/07/09 06:21:09 scrappy Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#include "postgres.h"
|
||||
|
||||
#include "executor/execdebug.h"
|
||||
#include "access/genam.h"
|
||||
#include "access/iqual.h" /* where the declarations go */
|
||||
#include "access/itup.h"
|
||||
#include "access/skey.h"
|
||||
|
||||
#include "storage/buf.h"
|
||||
#include "storage/bufpage.h"
|
||||
#include "storage/itemid.h"
|
||||
#include "utils/rel.h"
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
* index scan key qualification code
|
||||
* ----------------------------------------------------------------
|
||||
*/
|
||||
int NIndexTupleProcessed;
|
||||
|
||||
/* ----------------
|
||||
* index_keytest
|
||||
*
|
||||
* old comments
|
||||
* May eventually combine with other tests (like timeranges)?
|
||||
* Should have Buffer buffer; as an argument and pass it to amgetattr.
|
||||
* ----------------
|
||||
*/
|
||||
bool
|
||||
index_keytest(IndexTuple tuple,
|
||||
TupleDesc tupdesc,
|
||||
int scanKeySize,
|
||||
ScanKey key)
|
||||
{
|
||||
bool isNull;
|
||||
Datum datum;
|
||||
int test;
|
||||
|
||||
IncrIndexProcessed();
|
||||
|
||||
while (scanKeySize > 0) {
|
||||
datum = index_getattr(tuple,
|
||||
1,
|
||||
tupdesc,
|
||||
&isNull);
|
||||
|
||||
if (isNull) {
|
||||
/* XXX eventually should check if SK_ISNULL */
|
||||
return (false);
|
||||
}
|
||||
|
||||
if (key[0].sk_flags & SK_COMMUTE) {
|
||||
test = (int) (*(key[0].sk_func))
|
||||
(DatumGetPointer(key[0].sk_argument),
|
||||
datum);
|
||||
} else {
|
||||
test = (int) (*(key[0].sk_func))
|
||||
(datum,
|
||||
DatumGetPointer(key[0].sk_argument));
|
||||
}
|
||||
|
||||
if (!test == !(key[0].sk_flags & SK_NEGATE)) {
|
||||
return (false);
|
||||
}
|
||||
|
||||
scanKeySize -= 1;
|
||||
key++;
|
||||
}
|
||||
|
||||
return (true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user