1996-07-09 08:22:35 +02:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
*
|
|
|
|
* btstrat.c--
|
1997-09-07 07:04:48 +02:00
|
|
|
* Srategy map entries for the btree indexed access method
|
1996-07-09 08:22:35 +02:00
|
|
|
*
|
|
|
|
* Copyright (c) 1994, Regents of the University of California
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* IDENTIFICATION
|
1997-09-07 07:04:48 +02:00
|
|
|
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/Attic/nbtstrat.c,v 1.5 1997/09/07 04:39:04 momjian Exp $
|
1996-07-09 08:22:35 +02:00
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
1996-11-05 11:35:38 +01:00
|
|
|
#include <postgres.h>
|
1996-07-09 08:22:35 +02:00
|
|
|
|
1996-11-05 11:35:38 +01:00
|
|
|
#include <access/istrat.h>
|
|
|
|
#include <storage/bufpage.h>
|
|
|
|
#include <access/nbtree.h>
|
1996-07-09 08:22:35 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Note:
|
1997-09-07 07:04:48 +02:00
|
|
|
* StrategyNegate, StrategyCommute, and StrategyNegateCommute
|
|
|
|
* assume <, <=, ==, >=, > ordering.
|
1996-07-09 08:22:35 +02:00
|
|
|
*/
|
1997-09-07 07:04:48 +02:00
|
|
|
static StrategyNumber BTNegate[5] = {
|
|
|
|
BTGreaterEqualStrategyNumber,
|
|
|
|
BTGreaterStrategyNumber,
|
|
|
|
InvalidStrategy,
|
|
|
|
BTLessStrategyNumber,
|
|
|
|
BTLessEqualStrategyNumber
|
1996-07-09 08:22:35 +02:00
|
|
|
};
|
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
static StrategyNumber BTCommute[5] = {
|
|
|
|
BTGreaterStrategyNumber,
|
|
|
|
BTGreaterEqualStrategyNumber,
|
|
|
|
InvalidStrategy,
|
|
|
|
BTLessEqualStrategyNumber,
|
|
|
|
BTLessStrategyNumber
|
1996-07-09 08:22:35 +02:00
|
|
|
};
|
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
static StrategyNumber BTNegateCommute[5] = {
|
|
|
|
BTLessEqualStrategyNumber,
|
|
|
|
BTLessStrategyNumber,
|
|
|
|
InvalidStrategy,
|
|
|
|
BTGreaterStrategyNumber,
|
|
|
|
BTGreaterEqualStrategyNumber
|
1996-07-09 08:22:35 +02:00
|
|
|
};
|
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
static uint16 BTLessTermData[] = { /* XXX type clash */
|
|
|
|
2,
|
|
|
|
BTLessStrategyNumber,
|
|
|
|
SK_NEGATE,
|
|
|
|
BTLessStrategyNumber,
|
|
|
|
SK_NEGATE | SK_COMMUTE
|
1996-07-09 08:22:35 +02:00
|
|
|
};
|
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
static uint16 BTLessEqualTermData[] = { /* XXX type clash */
|
|
|
|
2,
|
|
|
|
BTLessEqualStrategyNumber,
|
|
|
|
0x0,
|
|
|
|
BTLessEqualStrategyNumber,
|
|
|
|
SK_COMMUTE
|
1996-07-09 08:22:35 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
static uint16 BTGreaterEqualTermData[] = { /* XXX type clash */
|
1997-09-07 07:04:48 +02:00
|
|
|
2,
|
|
|
|
BTGreaterEqualStrategyNumber,
|
|
|
|
0x0,
|
|
|
|
BTGreaterEqualStrategyNumber,
|
|
|
|
SK_COMMUTE
|
1996-07-09 08:22:35 +02:00
|
|
|
};
|
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
static uint16 BTGreaterTermData[] = { /* XXX type clash */
|
|
|
|
2,
|
|
|
|
BTGreaterStrategyNumber,
|
|
|
|
SK_NEGATE,
|
|
|
|
BTGreaterStrategyNumber,
|
|
|
|
SK_NEGATE | SK_COMMUTE
|
1996-07-09 08:22:35 +02:00
|
|
|
};
|
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
static StrategyTerm BTEqualExpressionData[] = {
|
|
|
|
(StrategyTerm) BTLessTermData, /* XXX */
|
|
|
|
(StrategyTerm) BTLessEqualTermData, /* XXX */
|
|
|
|
(StrategyTerm) BTGreaterEqualTermData, /* XXX */
|
|
|
|
(StrategyTerm) BTGreaterTermData, /* XXX */
|
|
|
|
NULL
|
|
|
|
};
|
|
|
|
|
|
|
|
static StrategyEvaluationData BTEvaluationData = {
|
|
|
|
/* XXX static for simplicity */
|
|
|
|
|
|
|
|
BTMaxStrategyNumber,
|
|
|
|
(StrategyTransformMap) BTNegate, /* XXX */
|
|
|
|
(StrategyTransformMap) BTCommute, /* XXX */
|
|
|
|
(StrategyTransformMap) BTNegateCommute, /* XXX */
|
1996-07-09 08:22:35 +02:00
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
{NULL, NULL, (StrategyExpression) BTEqualExpressionData, NULL, NULL,
|
|
|
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL}
|
1996-07-09 08:22:35 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------
|
1997-09-07 07:04:48 +02:00
|
|
|
* RelationGetBTStrategy
|
1996-07-09 08:22:35 +02:00
|
|
|
* ----------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
StrategyNumber
|
|
|
|
_bt_getstrat(Relation rel,
|
1997-09-07 07:04:48 +02:00
|
|
|
AttrNumber attno,
|
|
|
|
RegProcedure proc)
|
1996-07-09 08:22:35 +02:00
|
|
|
{
|
1997-09-07 07:04:48 +02:00
|
|
|
StrategyNumber strat;
|
|
|
|
|
|
|
|
strat = RelationGetStrategy(rel, attno, &BTEvaluationData, proc);
|
|
|
|
|
|
|
|
Assert(StrategyNumberIsValid(strat));
|
|
|
|
|
|
|
|
return (strat);
|
1996-07-09 08:22:35 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
_bt_invokestrat(Relation rel,
|
1997-09-07 07:04:48 +02:00
|
|
|
AttrNumber attno,
|
|
|
|
StrategyNumber strat,
|
|
|
|
Datum left,
|
|
|
|
Datum right)
|
1996-07-09 08:22:35 +02:00
|
|
|
{
|
1997-09-07 07:04:48 +02:00
|
|
|
return (RelationInvokeStrategy(rel, &BTEvaluationData, attno, strat,
|
|
|
|
left, right));
|
1996-07-09 08:22:35 +02:00
|
|
|
}
|