GlobalObjects
|
Ist die Indexverwalterklasse für ein Schema bzw. eine Datenbank. Mehr ...
#include <GloIndexPool.h>
Öffentliche Methoden | |
SchemaIndex (const SchemaIndex &rT) | |
SchemaIndex (const std::string &rstrName) | |
~SchemaIndex () | |
int | getFreeObjIDPos (std::streampos &rPos, unsigned long ulClassID) const |
int | getObjectStrIndex (ObjectStrIndex *&prRetVal, unsigned long ulClassID, const std::string &rsIndexName) |
int | getObjectStrIndexIterator (ObjectStrIndexIterator *&prObjectStrIndexIterators, unsigned long ulClassID, const std::string &rsIndexName) const |
const std::multimap< unsigned long, IndexPool::ObjectStrIndex *, std::less< unsigned long > > & | getObjectStrIndexMapRef () const |
int | getObjIdPosTuple (ObjIdPosTuple *&prRetVal, unsigned long ulClassID, const ObjID &rObjID) const |
std::string | getSchemaName () const |
int | getTableObjIdIndex (TableObjIdIndex *&prRetVal, unsigned long ulClassID) const |
int | getTableObjIdIndexIterator (TableObjIdIndexIterator *&prTableIterators, unsigned long ulClassID) const |
const std::map< unsigned long, IndexPool::TableObjIdIndex *, std::less< unsigned long > > & | getTableObjIdIndexMapRef () const |
int | insertDeletedObjID (const ObjID &rDeletedObjId) |
int | insertFreeObjIDPos (unsigned long ulClassID, std::streampos Pos) |
int | insertObjIdPosTuple (unsigned long ulClassID, const ObjIdPosTuple &rIndexTuple) |
int | insertObjStrIdTuple (unsigned long ulClassID, const std::string &rsIndexName, const ObjStrIdTuple &rIndexTuple) |
int | insertTransactionDeletedObjID (const ObjID &rDeletedObjId) |
int | isIndexFree (unsigned long ulClassID, const ObjID &rObjID, const std::string &rsIndexName, const std::string &rsIndex) const |
bool | isObjIdDeleted (const ObjID &rObjID) const |
int | isObjIdFree (unsigned long ulClassID, const ObjID &rObjID) const |
int | makeObjectStrIndex (const std::string &rsPathName, unsigned long ulClassID, const std::string &rsIndexName, bool bUnique) |
int | makeTableObjIdIndex (const std::string &rsPathName, unsigned long ulClassID) |
IndexPool::SchemaIndex & | operator= (const SchemaIndex &rT) |
int | releaseObjStrIdTuple (unsigned long ulClassID, const std::string &rsIndexName, const NUM_PTR ipReservingComunicatorTrx) |
int | removeFreeObjIDPos (unsigned long ulClassID, std::streampos Pos) |
int | removeObjectStrIndex (unsigned long ulClassID, const std::string &rsIndexName) |
int | removeObjId (unsigned long ulClassID, const ObjID &rObjID) |
int | removeObjStrIdTuple (unsigned long ulClassID, const std::string &rsIndexName, const ObjID &rObjID, NUM_PTR ipReservingComunicatorTrx=0) |
int | removeTableObjIdIndex (unsigned long ulClassID) |
int | removeTransactionDeletedObjID (const ObjID &rDeletedObjId) |
int | reserveObjStrIdTuple (unsigned long ulClassID, const std::string &rsIndexName, const ObjStrIdTuple &rIndexTuple) |
Geschützte Methoden | |
SchemaIndex () | |
void | copyMapsFrom (const SchemaIndex &rT) |
void | deleteAllTableIndexValues () |
Private Attribute | |
std::map< ObjID, ObjID *, std::less< ObjID > > | m_DeletedObjIdMap |
std::multimap< unsigned long, ObjectStrIndex *, std::less< unsigned long > > | m_ObjectStrIndexMap |
std::string | m_sSchemaName |
std::map< unsigned long, TableObjIdIndex *, std::less< unsigned long > > | m_TableObjIdIndexMap |
std::map< ObjID, DeletedObjIdTuple *, std::less< ObjID > > | m_TransactionDeletedObjIdMap |
Ist die Indexverwalterklasse für ein Schema bzw. eine Datenbank.
|
protected |
Der Standard-Konstruktor steht nicht zur Verfügung.
glo::IndexPool::SchemaIndex::SchemaIndex | ( | const std::string & | rstrName | ) |
Konstruktor mit Parameterübergabe.
[in] | rstrName | Die Schemabezeichnung (z.B. "MyGloBase"). |
glo::IndexPool::SchemaIndex::SchemaIndex | ( | const SchemaIndex & | rT | ) |
Copy-Konstruktor.
[in] | rT | Von diesem Objekt werden die Daten übernommen. |
eut::ErrorNException | Bei einem Fehler wird eine Exception geworfen. |
glo::IndexPool::SchemaIndex::~SchemaIndex | ( | ) |
Destruktor.
|
protected |
Entfernt alle Elemente aus seinen Maps. Dann werden alle Elemente der gleichen Maps des übergebenen SchemaIndex kopiert.
[in] | rT | Der SchemaIndex, dessen Elemente aus den Maps kopiert werden sollen. |
|
protected |
Entfernt alle Elemente aus seinen Maps und aus dem Speicher.
int glo::IndexPool::SchemaIndex::getFreeObjIDPos | ( | std::streampos & | rPos, |
unsigned long | ulClassID ) const |
Liefert eine freie Tabellen-Position in einer Tabelle.
[in,out] | rPos | Die freie Tabellen-Position, wenn eine vorhanden ist. |
[in] | ulClassID | Die Klassen-ID, um den TableObjIdIndex zu identifizieren. |
int glo::IndexPool::SchemaIndex::getObjectStrIndex | ( | ObjectStrIndex *& | prRetVal, |
unsigned long | ulClassID, | ||
const std::string & | rsIndexName ) |
Liefert einen ObjectStrIndex einer bestimmten Klasse mit einer bestimmten Bezeichnung.
[in,out] | prRetVal | Der ObjectStrIndex, wenn vorhanden. |
[in] | ulClassID | Die Klassen-ID. |
[in] | rsIndexName | Die Indexbezeichnung. Wenn z.B. im Schema "[MyClassName.Index.IDX_MyIndexName]", dann "IDX_MyIndexName". |
int glo::IndexPool::SchemaIndex::getObjectStrIndexIterator | ( | ObjectStrIndexIterator *& | prObjectStrIndexIterators, |
unsigned long | ulClassID, | ||
const std::string & | rsIndexName ) const |
Liefert einen Iterator auf einen TableObjIdIndex einer bestimmten Klasse.
[in,out] | prObjectStrIndexIterators | Der Iterator. |
[in] | ulClassID | Die Klassen-ID. |
[in] | rsIndexName | Die Indexbezeichnung. Wenn z.B. im Schema "[MyClassName.Index.IDX_MyIndexName]", dann "IDX_MyIndexName". indiziert ist. |
const std::multimap< unsigned long, IndexPool::ObjectStrIndex *, std::less< unsigned long > > & glo::IndexPool::SchemaIndex::getObjectStrIndexMapRef | ( | ) | const |
Liefert eine Referenz auf m_ObjectStrIndexMap.
int glo::IndexPool::SchemaIndex::getObjIdPosTuple | ( | ObjIdPosTuple *& | prRetVal, |
unsigned long | ulClassID, | ||
const ObjID & | rObjID ) const |
Liefert ein ObjIdPosTuple mit der übergebenen Objekt-ID.
[in,out] | prRetVal | Wenn vorhanden, ein Zeiger auf eine Kopie der Objekt-ID mit der Tabellen-Position. |
[in] | ulClassID | Die Klassen-ID, um den TableObjIdIndex zu identifizieren. |
[in] | rObjID | Die Objekt-ID des zu liefernden Eintrags. |
std::string glo::IndexPool::SchemaIndex::getSchemaName | ( | ) | const |
Liefert die Schemabezeichnung.
int glo::IndexPool::SchemaIndex::getTableObjIdIndex | ( | TableObjIdIndex *& | prRetVal, |
unsigned long | ulClassID ) const |
Liefert einen TableObjIdIndex einer bestimmten Klasse.
[in,out] | prRetVal | Der TableObjIdIndex, wenn vorhanden. |
[in] | ulClassID | Die Klassen-ID. |
int glo::IndexPool::SchemaIndex::getTableObjIdIndexIterator | ( | TableObjIdIndexIterator *& | prTableIterators, |
unsigned long | ulClassID ) const |
Liefert einen Iterator auf einen TableObjIdIndex einer bestimmten Klasse.
[in,out] | prTableIterators | Der Iterator. |
[in] | ulClassID | Die Klassen-ID. |
const std::map< unsigned long, IndexPool::TableObjIdIndex *, std::less< unsigned long > > & glo::IndexPool::SchemaIndex::getTableObjIdIndexMapRef | ( | ) | const |
Liefert eine Referenz auf m_TableObjIdIndexMap.
int glo::IndexPool::SchemaIndex::insertDeletedObjID | ( | const ObjID & | rDeletedObjId | ) |
Registriert übergeben Objekt-ID für diese Datenbank als gelöscht.
[in] | rDeletedObjId | Die als gelöscht zu registrierende Objekt-ID. |
int glo::IndexPool::SchemaIndex::insertFreeObjIDPos | ( | unsigned long | ulClassID, |
std::streampos | Pos ) |
Registriert eine freie Tabellen-Position in einer Tabelle.
[in] | ulClassID | Die Klassen-ID, um den TableObjIdIndex zu identifizieren. |
[in] | Pos | Die als 'frei' zu registrierende Tabellen-Position. |
int glo::IndexPool::SchemaIndex::insertObjIdPosTuple | ( | unsigned long | ulClassID, |
const ObjIdPosTuple & | rIndexTuple ) |
Fügt eine Objekt-ID mit der Tabellen-Position,wo der korrespondierende Datensatzes gespeichert ist, in den TableObjIdIndex mit übergebener Klassen-ID ein.
[in] | ulClassID | Die Klassen-ID, um den TableObjIdIndex zu identifizieren. |
[in] | rIndexTuple | Die einzufügende Objekt-ID mit der Tabellen-Position. |
int glo::IndexPool::SchemaIndex::insertObjStrIdTuple | ( | unsigned long | ulClassID, |
const std::string & | rsIndexName, | ||
const ObjStrIdTuple & | rIndexTuple ) |
Fügt einen StringIndex in einen ObjectStrIndex ein.
[in] | ulClassID | Die Klassen-ID, um den ObjectStrIndex zu identifizieren. |
[in] | rsIndexName | Die Bezeichnung des ObjectStrIndex. Wenn z.B. im Schema "[MyClassName.Index.IDX_MyIndexName]", dann "IDX_MyIndexName". |
[in] | rIndexTuple | Der einzufügende StringIndex. |
int glo::IndexPool::SchemaIndex::insertTransactionDeletedObjID | ( | const ObjID & | rDeletedObjId | ) |
Registriert übergeben Objekt-ID für die aktuelle Transaktion als gelöscht (inkrementiert den Löschzähler, siehe auch DeletedObjIdTuple::m_iDelCounter).
[in] | rDeletedObjId | Die als gelöscht zu registrierende Objekt-ID. |
int glo::IndexPool::SchemaIndex::isIndexFree | ( | unsigned long | ulClassID, |
const ObjID & | rObjID, | ||
const std::string & | rsIndexName, | ||
const std::string & | rsIndex ) const |
Prüft ob ein IndexString noch frei ist.
[in] | ulClassID | Die Klassen-ID, um den ObjectStrIndex zu identifizieren. |
[in] | rObjID | Die Objekt-ID, um den Eintrag zu identifizieren. |
[in] | rsIndexName | Die Bezeichnung des zu prüfenden Index. Wenn z.B. im Schema "[MyClassName.Index.IDX_MyIndexName]", dann "IDX_MyIndexName". |
[in] | rsIndex | Der zu überprüfende Index. |
bool glo::IndexPool::SchemaIndex::isObjIdDeleted | ( | const ObjID & | rObjID | ) | const |
Prüft ob eine Objekt-ID als gelöscht geführt wird. Schaut nicht nur in der m_DeletedObjIdMap nach, sonder auch in der m_TransactionDeletedObjIdMap.
[in] | rObjID | Die zu prüfende Objekt-ID. |
int glo::IndexPool::SchemaIndex::isObjIdFree | ( | unsigned long | ulClassID, |
const ObjID & | rObjID ) const |
Prüft eine Objekt-ID, ob diese schon verwaltet wird.
[in] | ulClassID | Die Klassen-ID, um den TableObjIdIndex zu identifizieren. |
[in] | rObjID | Die zu prüfende Objekt-ID. |
int glo::IndexPool::SchemaIndex::makeObjectStrIndex | ( | const std::string & | rsPathName, |
unsigned long | ulClassID, | ||
const std::string & | rsIndexName, | ||
bool | bUnique ) |
Fügt einen neuen ObjectStrIndex in seine m_ObjectStrIndexMap ein.
[in] | rsPathName | Die vollständige Verzeichnisbezeichnung, in dem die Tabellen zu finden sind wie z.B. "C:/Pfad/Data/". |
[in] | ulClassID | Die Klassen-ID der verwalteten Indexe. |
[in] | rsIndexName | Die Indexbezeichnung. Wenn z.B. im Schema "[MyClassName.Index.IDX_MyIndexName]", dann "IDX_MyIndexName". |
[in] | bUnique | Wenn true, dann handelt es sich um einen eindeutigen Index (jeder Eintrag kann nur einmal vorhanden sein), ansonsten sind mehrere gleiche Einträge möglich. |
int glo::IndexPool::SchemaIndex::makeTableObjIdIndex | ( | const std::string & | rsPathName, |
unsigned long | ulClassID ) |
Fügt einen neuen TableObjIdIndex in seine m_TableObjIdIndexMap ein.
[in] | rsPathName | Die vollständige Verzeichnisbezeichnung, in dem die Tabellen zu finden sind wie z.B. "C:/Pfad/Data/". |
[in] | ulClassID | Die Klassen-ID der verwalteten Indexe. |
IndexPool::SchemaIndex & glo::IndexPool::SchemaIndex::operator= | ( | const SchemaIndex & | rT | ) |
Zuweisungsoperator.
[in] | rT | Von diesem Objekt werden die Daten übernommen. |
int glo::IndexPool::SchemaIndex::releaseObjStrIdTuple | ( | unsigned long | ulClassID, |
const std::string & | rsIndexName, | ||
const NUM_PTR | ipReservingComunicatorTrx ) |
Gibt einen StringIndex in einen ObjectStrIndex, wenn dieser ein Unique-Index ist, wieder frei.
[in] | ulClassID | Die Klassen-ID, um den ObjectStrIndex zu identifizieren. |
[in] | rsIndexName | Die Bezeichnung des ObjectStrIndex. Wenn z.B. im Schema "[MyClassName.Index.IDX_MyIndexName]", dann "IDX_MyIndexName". |
[in] | ipReservingComunicatorTrx | Der Transaktionsschritt, für den die Reservierung angefordert wurde. |
eut::ErrorNException | Wenn ulReservingComunicatorTrx == 0 ist, wird eine Exception geworfen. |
int glo::IndexPool::SchemaIndex::removeFreeObjIDPos | ( | unsigned long | ulClassID, |
std::streampos | Pos ) |
Entfernt eine freie Tabellen-Position aus dem, mit der übergebenen Klassen-ID korrespondierenden TableObjIdIndex.
[in] | ulClassID | Die Klassen-ID, um den TableObjIdIndex zu identifizieren. |
[in] | Pos | Die zu entfernendde Tabellen-Position. |
int glo::IndexPool::SchemaIndex::removeObjectStrIndex | ( | unsigned long | ulClassID, |
const std::string & | rsIndexName ) |
Löscht den ObjectStrIndex mit übergebenen ClassID und der übergebenen Bezeichnung, wenn vorhanden aus m_ObjectStrIndexMap und aus dem Speicher.
[in] | ulClassID | Die Klassen-ID des zu entfernenden Index. |
[in] | rsIndexName | Die Bezeichnung des zu entfernenden Index. Wenn z.B. im Schema "[MyClassName.Index.IDX_MyIndexName]", dann "IDX_MyIndexName". |
int glo::IndexPool::SchemaIndex::removeObjId | ( | unsigned long | ulClassID, |
const ObjID & | rObjID ) |
Entfernt den Eintrag mit übergebener Objekt-ID aus der Map, welche die gespeicherten Objekt-IDs und die Tabellen-Position verwalteten, aus dem TableObjIdIndex mit übergebener Klassen-ID.
[in] | ulClassID | Die Klassen-ID, um den TableObjIdIndex zu identifizieren. |
[in] | rObjID | Die zu entfernende Objekt-ID. |
int glo::IndexPool::SchemaIndex::removeObjStrIdTuple | ( | unsigned long | ulClassID, |
const std::string & | rsIndexName, | ||
const ObjID & | rObjID, | ||
NUM_PTR | ipReservingComunicatorTrx = 0 ) |
Entfernt den String-Index aus der Map bzw. MultiMap der Indiezes eines ObjectStrIndex.
[in] | ulClassID | Die Klassen-ID, um den ObjectStrIndex zu identifizieren. |
[in] | rsIndexName | Die Bezeichnung des ObjectStrIndex. Wenn z.B. im Schema "[MyClassName.Index.IDX_MyIndexName]", dann "IDX_MyIndexName". |
[in] | rObjID | Die Objekt-ID des zu entfernenden Indexes. |
[in] | ipReservingComunicatorTrx | Die auf NUM_PTR gecastete Adresse eines Communicator's, in dessen Transaktion der Index ggf. reserviert wurde. Wenn diese gesetzt, wird nur ein reservierter Index gelöscht. |
int glo::IndexPool::SchemaIndex::removeTableObjIdIndex | ( | unsigned long | ulClassID | ) |
Löscht den TableObjIdIndex mit übergebenen ClassID, wenn vorhanden aus seiner m_TableObjIdIndexMap und aus dem Speicher.
[in] | ulClassID | Die Klassen-ID des zu entfernenden Indexes. |
int glo::IndexPool::SchemaIndex::removeTransactionDeletedObjID | ( | const ObjID & | rDeletedObjId | ) |
Deregistriert übergebene Objekt-ID für die aktuelle Transaktion als gelöscht. Es wird die gelöschte Objekt-ID mit höchsten Löschzähler gesucht und entfernt (dekrementiert den Löschzähler, siehe auch: DeletedObjIdTuple::m_iDelCounter).
[in] | rDeletedObjId | Die als gelöscht zu deregistrierende Objekt-ID. |
int glo::IndexPool::SchemaIndex::reserveObjStrIdTuple | ( | unsigned long | ulClassID, |
const std::string & | rsIndexName, | ||
const ObjStrIdTuple & | rIndexTuple ) |
Reserviert einen StringIndex in einen ObjectStrIndex, wenn dieser ein Unique-Index ist.
[in] | ulClassID | Die Klassen-ID, um den ObjectStrIndex zu identifizieren. |
[in] | rsIndexName | Die Bezeichnung des ObjectStrIndex. Wenn z.B. im Schema "[MyClassName.Index.IDX_MyIndexName]", dann "IDX_MyIndexName". |
[in] | rIndexTuple | Der zu reservierende Index. |
eut::ErrorNException | Wenn ObjStrIdTuple::m_ipReservingComunicatorTrx im Parameter rIndexTuple nicht gesetzt ist, wird eine Exception geworfen. |
|
private |
Die einzelnen Objekt-IDs der Objekte, welche seit dem letzten Laden der Indexe gelöscht wurden. Diese Objekt-IDs dürfen nicht mehr gespeichert werden.
|
private |
Die einzelnen Objekte vom Typ ObjectStrIndex für die Klassen dieses Schemas bzw. dieser Datenbank.
Index ist die Klassen-ID.
|
private |
Die Schemabezeichnung (z.B. "MyGloBase").
|
private |
Die einzelnen Objekte vom Typ TableObjIdIndex für jede Klassen dieses Schemas bzw. dieser Datenbank.
Index ist die Klassen-ID.
|
private |
Die einzelnen Objekt-IDs der Objekte, welche in einer Transaktion gelöscht wurden. Es werden die Objekt-IDs mit einem Löschzähler geführt.
Das ist notwendig, weil das mehrfache Löschen eines Objektes aus der Datenbank kein Fehler darstellt und wenn in einer Transaktion verschachtelt ein Objekt mehrfach gelöscht wird und einzelne Unter-Transaktionen abgebrochen werden, muss gewährleistet sein, das der aktuelle Löschstatus durch den Löschzähler bekannt ist.