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


1.6
date	91.06.26.19.12.14;	author mao;	state Exp;
branches;
next	1.5;

1.5
date	91.06.12.08.57.36;	author mao;	state Exp;
branches;
next	1.4;

1.4
date	91.06.12.03.56.58;	author mao;	state Exp;
branches;
next	1.3;

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

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

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


desc
@no-overwrite btree strategy management routines
@


1.6
log
@compile-time switch for including nobtree code
@
text
@/*
 *  btstrat.c -- Srategy map entries for the btree indexed access method
 */

#include "tmp/c.h"

#ifdef NOBTREE
#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/nobtree.h"

RcsId("$Header: /users/mao/nobtree/RCS/nobtstrat.c,v 1.5 1991/06/12 08:57:36 mao Exp $");

/*
 * Note:
 *	StrategyNegate, StrategyCommute, and StrategyNegateCommute
 *	assume <, <=, ==, >=, > ordering.
 */
static StrategyNumber	BTNegate[5] = {
    NOBTGreaterEqualStrategyNumber,
    NOBTGreaterStrategyNumber,
    InvalidStrategy,
    NOBTLessStrategyNumber,
    NOBTLessEqualStrategyNumber
};

static StrategyNumber	BTCommute[5] = {
    NOBTGreaterStrategyNumber,
    NOBTGreaterEqualStrategyNumber,
    InvalidStrategy,
    NOBTLessEqualStrategyNumber,
    NOBTLessStrategyNumber
};

static StrategyNumber	BTNegateCommute[5] = {
    NOBTLessEqualStrategyNumber,
    NOBTLessStrategyNumber,
    InvalidStrategy,
    NOBTGreaterStrategyNumber,
    NOBTGreaterEqualStrategyNumber
};

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

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

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

static uint16	BTGreaterTermData[] = {		/* XXX type clash */
    2,
    NOBTGreaterStrategyNumber,
    NegateResult,
    NOBTGreaterStrategyNumber,
    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 */

    NOBTMaxStrategyNumber,
    (StrategyTransformMap)BTNegate,	/* XXX */
    (StrategyTransformMap)BTCommute,	/* XXX */
    (StrategyTransformMap)BTNegateCommute,	/* XXX */

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

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

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

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

    Assert(StrategyNumberIsValid(strat));

    return (strat);
}

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

#endif /* NOBTREE */
@


1.5
log
@all three implementations work correctly, need to collect timings
@
text
@d6 2
d21 1
a21 1
RcsId("$Header: /users/mao/nobtree/RCS/nobtstrat.c,v 1.4 1991/06/12 03:56:58 mao Exp mao $");
d135 2
@


1.4
log
@#defines for normal, shadow implemenentation; both impls work
@
text
@d19 1
a19 1
RcsId("$Header: /users/mao/nobtree/RCS/nobtstrat.c,v 1.3 1991/06/11 07:41:44 mao Exp mao $");
@


1.3
log
@works with minimal per-tuple, per-page overhead
@
text
@d19 1
a19 1
RcsId("$Header: /users/mao/nobtree/RCS/nobtstrat.c,v 1.2 1991/06/10 21:05:53 mao Exp mao $");
@


1.2
log
@structures are too big, but the code works
@
text
@d19 1
a19 1
RcsId("$Header: RCS/nobtstrat.c,v 1.1 91/05/28 14:34:23 mao Exp Locker: mao $");
@


1.1
log
@Initial revision
@
text
@d17 1
a17 1
#include "access/nbtree.h"
d19 1
a19 1
RcsId("$Header: RCS/nbtstrat.c,v 1.3 91/04/24 19:11:31 mao Exp $");
@
