Files
secondo/Algebras/FileIndexAlgebra/BPTree/BPTreeOperators.h
2026-01-23 17:03:45 +08:00

170 lines
5.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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