📄 container.cpp
字号:
//-< CONTAINER.CPP >---------------------------------------------------*--------*
// GigaBASE Version 1.0 (c) 1999 GARRET * ? *
// (Main Memory Database Management System) * /\| *
// * / \ *
// Created: 05-Nov-2002 K.A. Knizhnik * / [] \ *
// Last update: 05-Nov-2002 K.A. Knizhnik * GARRET *
//-------------------------------------------------------------------*--------*
// T-Tree object container
//-------------------------------------------------------------------*--------*
#define INSIDE_FASTDB
#include "fastdb.h"
#include "compiler.h"
#include "ttree.h"
#include "symtab.h"
void dbAnyContainer::create(dbDatabase* db)
{
db->beginTransaction(dbDatabase::dbExclusiveLock);
oid = dbTtree::allocate(db);
}
void dbAnyContainer::add(dbDatabase* db, dbAnyReference const& ref)
{
db->beginTransaction(dbDatabase::dbExclusiveLock);
dbTtree::insert(db, oid, ref.getOid(), fd->type, fd->dbsSize, fd->comparator, fd->dbsOffs);
}
void dbAnyContainer::remove(dbDatabase* db, dbAnyReference const& ref)
{
db->beginTransaction(dbDatabase::dbExclusiveLock);
dbTtree::insert(db, oid, ref.getOid(), fd->type, fd->dbsSize, fd->comparator, fd->dbsOffs);
}
void dbAnyContainer::purge(dbDatabase* db)
{
db->beginTransaction(dbDatabase::dbExclusiveLock);
dbTtree::purge(db, oid);
}
void dbAnyContainer::free(dbDatabase* db)
{
db->beginTransaction(dbDatabase::dbExclusiveLock);
dbTtree::drop(db, oid);
}
int dbAnyContainer::prefixSearch(dbAnyCursor& cursor, char const* key)
{
dbDatabase* db = cursor.table->db;
db->beginTransaction(cursor.type == dbCursorForUpdate ? dbDatabase::dbExclusiveLock : dbDatabase::dbSharedLock);
dbDatabaseThreadContext* ctx = db->threadContext.get();
ctx->cursors.link(&cursor);
cursor.reset();
dbSearchContext sc;
sc.db = db;
sc.condition = NULL;
sc.firstKey = (char*)key;
sc.firstKeyInclusion = 1;
sc.lastKey = (char*)key;
sc.lastKeyInclusion = 1;
sc.type = dbField::tpString;
sc.offs = fd->dbsOffs;
sc.cursor = &cursor;
sc.sizeofType = fd->dbsSize;
dbTtree::prefixSearch(db, oid, sc);
return cursor.getNumberOfRecords();
}
int dbAnyContainer::search(dbAnyCursor& cursor, void const* from, void const* till)
{
dbDatabase* db = cursor.table->db;
db->beginTransaction(cursor.type == dbCursorForUpdate ? dbDatabase::dbExclusiveLock : dbDatabase::dbSharedLock);
dbDatabaseThreadContext* ctx = db->threadContext.get();
ctx->cursors.link(&cursor);
cursor.reset();
if (from == NULL && till == NULL) {
dbTtree::traverseForward(db, oid, &cursor);
} else {
dbSearchContext sc;
sc.db = db;
sc.condition = NULL;
sc.firstKey = (char*)from;
sc.firstKeyInclusion = 1;
sc.lastKey = (char*)till;
sc.lastKeyInclusion = 1;
sc.comparator = fd->comparator;
sc.type = fd->type;
sc.offs = fd->dbsOffs;
sc.cursor = &cursor;
sc.sizeofType = fd->dbsSize;
dbTtree::find(db, oid, sc);
}
return cursor.getNumberOfRecords();
}
dbAnyContainer::dbAnyContainer(char const* name, dbTableDescriptor& desc)
{
fd = desc.find(name);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -