170 lines
5.5 KiB
C
170 lines
5.5 KiB
C
|
|
/*
|
|||
|
|
----
|
|||
|
|
This file is part of SECONDO.
|
|||
|
|
|
|||
|
|
Copyright (C) 2004, University in Hagen, Department of Computer Science,
|
|||
|
|
Database Systems for New Applications.
|
|||
|
|
|
|||
|
|
SECONDO is free software; you can redistribute it and/or modify
|
|||
|
|
it under the terms of the GNU General Public License as published by
|
|||
|
|
the Free Software Foundation; either version 2 of the License, or
|
|||
|
|
(at your option) any later version.
|
|||
|
|
|
|||
|
|
SECONDO is distributed in the hope that it will be useful,
|
|||
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|||
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|||
|
|
GNU General Public License for more details.
|
|||
|
|
|
|||
|
|
You should have received a copy of the GNU General Public License
|
|||
|
|
along with SECONDO; if not, write to the Free Software
|
|||
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||
|
|
----
|
|||
|
|
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
#ifndef BPTREEOPERATORS_H
|
|||
|
|
#define BPTREEOPERATORS_H
|
|||
|
|
|
|||
|
|
#include "NestedList.h"
|
|||
|
|
#include "Operator.h"
|
|||
|
|
#include "BPTree.h"
|
|||
|
|
|
|||
|
|
namespace fialgebra {
|
|||
|
|
class BPTreeOperators
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
static Operator& GetCreatefbtreeOperator();
|
|||
|
|
static Operator& GetInsertfbtreeOperator();
|
|||
|
|
static Operator& GetDeletefbtreeOperator();
|
|||
|
|
static Operator& GetRebuildfbtreeOperator();
|
|||
|
|
static Operator& GetBulkloadfbtreeOperator();
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
// David
|
|||
|
|
//
|
|||
|
|
// Mit Hilfe dieses Operators werden alle Tupel-IDs aus dem Baum
|
|||
|
|
// extrahiert, deren dazugehoerige Keys im angegebenen Intervall
|
|||
|
|
// liegen.
|
|||
|
|
// frange: {text , string} × T × T -> stream(tid)
|
|||
|
|
// query "strassen_name_btree.bin" frange["A","B"]
|
|||
|
|
// strassen gettuples consume
|
|||
|
|
static Operator& GetFrangeOperator();
|
|||
|
|
//
|
|||
|
|
// Auch dieser Operator beschreibt eine Intervallsuche, wobei in
|
|||
|
|
// dieser Variante lediglich das rechte Intervallende angegeben wird.
|
|||
|
|
// fleftrange: {text , string} × T -> stream(tid)
|
|||
|
|
// query "strassen_name_btree.bin" fleftrange["Syringenweg"]
|
|||
|
|
// strassen gettuples consume
|
|||
|
|
static Operator& GetFleftrangeOperator();
|
|||
|
|
//
|
|||
|
|
// In dieser Variante der Bereichssuche werden alle Tupel-IDs ausgegeben,
|
|||
|
|
// bei denen die dazugehoerigen Objekte groesser oder gleich dem
|
|||
|
|
// uebergebenen Element sind.
|
|||
|
|
// frightrange: {text , string} × T -> stream(tid)
|
|||
|
|
// query "strassen_name_btree.bin" frightrange["Syringenweg"]
|
|||
|
|
// strassen gettuples consume
|
|||
|
|
static Operator& GetFrightrangeOperator();
|
|||
|
|
//
|
|||
|
|
// Das Ergebnis dieses Operators entspricht einer Intervallsuche, bei
|
|||
|
|
// der das linke und rechte Intervallende gleich sind. Es werden also
|
|||
|
|
// genau diejenigen Elemente ausgewaehlt, bei denen der gespeicherte
|
|||
|
|
// Attributwert dem Suchwert entspricht. Da die gespeicherten Werte
|
|||
|
|
// nicht eindeutig sind, sind auch bei diesem Operator mehrere Ergebnisse
|
|||
|
|
// moeglich, so dass das Ergebnis ebenfalls ein Strom von Tupel-IDs ist.
|
|||
|
|
// fexactmatch: {text , string} × T -> stream(tid)
|
|||
|
|
// query "strassen_name_btree.bin" fexactmatch["Syringenweg"]
|
|||
|
|
// strassen gettuples consume
|
|||
|
|
static Operator& GetFexactmatchOperator();
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
// Used as local during Create, Insert and Delete
|
|||
|
|
struct OperatorContext{
|
|||
|
|
BPTree* tree;
|
|||
|
|
size_t skipped;
|
|||
|
|
|
|||
|
|
OperatorContext(BPTree* tree, size_t skipped);
|
|||
|
|
virtual ~OperatorContext();
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// Used as local during Bulkload
|
|||
|
|
struct BulkloadContext : OperatorContext{
|
|||
|
|
Attribute* prevAttr;
|
|||
|
|
|
|||
|
|
BulkloadContext(BPTree* tree, Attribute* prevAttr, size_t skipped);
|
|||
|
|
virtual ~BulkloadContext();
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
static OperatorSpec
|
|||
|
|
// David
|
|||
|
|
frangeOperatorSpec,
|
|||
|
|
fleftrangeOperatorSpec,
|
|||
|
|
frightrangeOperatorSpec,
|
|||
|
|
fexactmatchOperatorSpec;
|
|||
|
|
|
|||
|
|
static Operator createfbtreeOp,
|
|||
|
|
insertfbtreeOp,
|
|||
|
|
deletefbtreeOp,
|
|||
|
|
rebuildfbtreeOp,
|
|||
|
|
bulkloadfbtreeOp,
|
|||
|
|
// David
|
|||
|
|
frangeOp,
|
|||
|
|
fleftrangeOp,
|
|||
|
|
frightrangeOp,
|
|||
|
|
fexactmatchOp;
|
|||
|
|
|
|||
|
|
static Operator CreateCreatefbtreeOp();
|
|||
|
|
static Operator CreateInsertfbtreeOp();
|
|||
|
|
static Operator CreateDeletefbtreeOp();
|
|||
|
|
static Operator CreateRebuildfbtreeOp();
|
|||
|
|
static Operator CreateBulkloadfbtreeOp();
|
|||
|
|
|
|||
|
|
static ListExpr CreatefbtreeTM(ListExpr args);
|
|||
|
|
static ListExpr InsertfbtreeTM(ListExpr args);
|
|||
|
|
static ListExpr DeletefbtreeTM(ListExpr args);
|
|||
|
|
static ListExpr RebuildfbtreeTM(ListExpr args);
|
|||
|
|
|
|||
|
|
static int CreatefbtreeVM (Word* args, Word& result, int message,
|
|||
|
|
Word& local, Supplier s);
|
|||
|
|
static int InsertfbtreeVM (Word* args, Word& result, int message,
|
|||
|
|
Word& local, Supplier s);
|
|||
|
|
static int DeletefbtreeVM (Word* args, Word& result, int message,
|
|||
|
|
Word& local, Supplier s);
|
|||
|
|
static int RebuildfbtreeVM (Word* args, Word& result, int message,
|
|||
|
|
Word& local, Supplier s);
|
|||
|
|
static int BulkloadfbtreeVM (Word* args, Word& result, int message,
|
|||
|
|
Word& local, Supplier s);
|
|||
|
|
|
|||
|
|
// Standard Cache-Groesse in Seiten
|
|||
|
|
static size_t defaultCacheSize;
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
// David
|
|||
|
|
//
|
|||
|
|
// frange Type Mapping
|
|||
|
|
static ListExpr FrangeTM( ListExpr args );
|
|||
|
|
// fleftrange Type Mapping
|
|||
|
|
static ListExpr FleftrangeTM( ListExpr args );
|
|||
|
|
// frightrange Type Mapping
|
|||
|
|
static ListExpr FrightrangeTM( ListExpr args );
|
|||
|
|
// fexactmatch Type Mapping
|
|||
|
|
static ListExpr FexactmatchTM( ListExpr args );
|
|||
|
|
// Generic f*[range|exactmatch] Type Mapping
|
|||
|
|
static ListExpr GenericFSearchTM( int searchType, ListExpr args );
|
|||
|
|
//
|
|||
|
|
// Value Mapping
|
|||
|
|
static int FrangeVM( Word* args, Word& result, int message,
|
|||
|
|
Word& local, Supplier s );
|
|||
|
|
};
|
|||
|
|
} // namespace fialgebra
|
|||
|
|
|
|||
|
|
#endif // BPTREEOPERATORS_H
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|