head	1.3;
access;
symbols
	release_4_2:1.3
	aix_ok:1.3;
locks; strict;
comment	@ * @;


1.3
date	91.04.24.19.11.31;	author mao;	state Exp;
branches;
next	1.2;

1.2
date	91.04.21.14.33.05;	author mao;	state Exp;
branches;
next	1.1;

1.1
date	91.04.20.16.02.43;	author mao;	state Exp;
branches;
next	;


desc
@strategy map and management routines for btree access method
@


1.3
log
@don't use the header file in mao's private tree.
@
text
@/*
 *  btstrat.c -- Srategy map entries for the btree indexed access method
 */

#include "tmp/c.h"
#include "tmp/postgres.h"

#include "storage/page.h"
#include "storage/bufpage.h"

#include "utils/log.h"
#include "utils/rel.h"
#include "utils/excid.h"

#include "access/genam.h"
#include "access/isop.h"
#include "access/nbtree.h"

RcsId("$Header: RCS/nbtstrat.c,v 1.2 91/04/21 14:33:05 mao Exp Locker: mao $");

/*
 * Note:
 *	StrategyNegate, StrategyCommute, and StrategyNegateCommute
 *	assume <, <=, ==, >=, > ordering.
 */
static StrategyNumber	BTNegate[5] = {
    BTGreaterEqualStrategyNumber,
    BTGreaterStrategyNumber,
    InvalidStrategy,
    BTLessStrategyNumber,
    BTLessEqualStrategyNumber
};

static StrategyNumber	BTCommute[5] = {
    BTGreaterStrategyNumber,
    BTGreaterEqualStrategyNumber,
    InvalidStrategy,
    BTLessEqualStrategyNumber,
    BTLessStrategyNumber
};

static StrategyNumber	BTNegateCommute[5] = {
    BTLessEqualStrategyNumber,
    BTLessStrategyNumber,
    InvalidStrategy,
    BTGreaterStrategyNumber,
    BTGreaterEqualStrategyNumber
};

static uint16	BTLessTermData[] = {		/* XXX type clash */
    2,
    BTLessStrategyNumber,
    NegateResult,
    BTLessStrategyNumber,
    NegateResult | CommuteArguments
};

static uint16	BTLessEqualTermData[] = {	/* XXX type clash */
    2,
    BTLessEqualStrategyNumber,
    0x0,
    BTLessEqualStrategyNumber,
    CommuteArguments
};

static uint16	BTGreaterEqualTermData[] = {	/* XXX type clash */
    2,
    BTGreaterEqualStrategyNumber,
    0x0,
    BTGreaterEqualStrategyNumber,
    CommuteArguments
};

static uint16	BTGreaterTermData[] = {		/* XXX type clash */
    2,
    BTGreaterStrategyNumber,
    NegateResult,
    BTGreaterStrategyNumber,
    NegateResult | CommuteArguments
};

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 */

    NULL, NULL, (StrategyExpression)BTEqualExpressionData, NULL, NULL
	    /* XXX */
};

/* ----------------------------------------------------------------
 *	RelationGetBTStrategy
 * ----------------------------------------------------------------
 */

StrategyNumber
_bt_getstrat(rel, attno, proc)
    Relation	rel;
    AttributeNumber	attno;
    RegProcedure	proc;
{
    StrategyNumber	strat;

    strat = RelationGetStrategy(rel, attno, &BTEvaluationData, proc);

    Assert(StrategyNumberIsValid(strat));

    return (strat);
}

bool
_bt_invokestrat(rel, attno, strat, left, right)
    Relation rel;
    AttributeNumber attno;
    StrategyNumber strat;
    Datum left;
    Datum right;
{
    return (RelationInvokeStrategy(rel, &BTEvaluationData, attno, strat, 
				   left, right));
}
@


1.2
log
@added a routine to invoke a particular btree strategy by strategy number.
@
text
@d17 1
d19 1
a19 3
#include "/n/eden/users/mao/postgres/src/access/nbtree/nbtree.h"

RcsId("$Header: RCS/nbtstrat.c,v 1.1 91/04/20 16:02:43 mao Exp Locker: mao $");
@


1.1
log
@single-page indices appear to work
@
text
@d20 1
a20 1
RcsId("$Header$");
d121 12
@
