📄 absdiskengine.hpp
字号:
};
class PASCALIMPLEMENTATION TABSDiskDatabaseData : public Absbaseengine::TABSDatabaseData
{
typedef Absbaseengine::TABSDatabaseData inherited;
private:
TABSSystemDirectory* FSystemDir;
TABSActiveSessionsFile* FActiveSessionsFile;
TABSTableListFile* FTableListFile;
Abssecurity::TABSPassword FPassword;
int FMaxSessionCount;
int FPageSize;
int FPageCountInExtent;
TABSDatabaseTableLockManager* FTableLockManager;
bool FSingleUserConnected;
void __fastcall OpenDatabase(Absbase::TABSBaseSession* Session, bool Exclusive, bool &RepairNeeded);
void __fastcall CloseDatabase(void);
Abssecurity::PABSPassword __fastcall GetPassword(void);
bool __fastcall GetEncrypted(void);
protected:
void __fastcall AddTable(int TableID, AnsiString TableName, int MetadataFilePageNo, int MostUpdatedFilePageNo, int LocksFilePageNo);
void __fastcall RemoveTable(AnsiString TableName);
void __fastcall OpenTable(AnsiString TableName, /* out */ int &TableID, /* out */ int &MetadataFilePageNo, /* out */ int &MostUpdatedFilePageNo, /* out */ int &LocksFilePageNo);
void __fastcall RenameTable(AnsiString TableName, AnsiString NewTableName);
public:
__fastcall TABSDiskDatabaseData(void);
__fastcall virtual ~TABSDiskDatabaseData(void);
virtual Absbaseengine::TABSTableData* __fastcall CreateTableData(Absbase::TABSCursor* Cursor);
virtual void __fastcall CreateDatabase(void);
virtual void __fastcall ConnectSession(Absbase::TABSBaseSession* Session);
virtual void __fastcall DisconnectSession(Absbase::TABSBaseSession* Session);
virtual void __fastcall FreeIfNoSessionsConnected(void);
virtual void __fastcall GetTablesList(Classes::TStrings* List);
void __fastcall TruncateDatabase(void);
int __fastcall GetDBFileConnectionsCount(void);
void __fastcall LockTables(void);
void __fastcall UnlockTables(void);
virtual void __fastcall Commit(int SessionID, bool DoFlushBuffers = true);
virtual void __fastcall Rollback(int SessionID);
virtual void __fastcall FlushBuffers(void);
virtual int __fastcall GetNewObjectId(void);
bool __fastcall GetSuppressDBHeaderErrors(void);
void __fastcall SetSuppressDBHeaderErrors(bool Value);
__property Abssecurity::PABSPassword Password = {read=GetPassword};
__property bool Encrypted = {read=GetEncrypted, nodefault};
__property int MaxSessionCount = {read=FMaxSessionCount, write=FMaxSessionCount, nodefault};
__property int PageSize = {read=FPageSize, write=FPageSize, nodefault};
__property int PageCountInExtent = {read=FPageCountInExtent, write=FPageCountInExtent, nodefault};
};
class DELPHICLASS TABSSmallRecordPage;
class PASCALIMPLEMENTATION TABSSmallRecordPage : public System::TObject
{
typedef System::TObject inherited;
private:
Abspage::TABSPage* LPage;
int FRecordBufferSize;
int FMaxRecordsOnPage;
int FRecordDataOffset;
bool __fastcall FindUnusedRecordSlot(int &SlotNo);
__int64 __fastcall GetRecordCount(void);
public:
__fastcall TABSSmallRecordPage(Abspage::TABSPage* Page, int RecordBufferSize, int MaxRecordsOnPage);
void __fastcall AddRecord(char * RecordBuffer, Abstypes::TABSPageItemID &RecordID);
bool __fastcall UpdateRecord(char * RecordBuffer, const Abstypes::TABSPageItemID &RecordID);
bool __fastcall DeleteRecord(const Abstypes::TABSPageItemID &RecordID);
bool __fastcall GetRecordBuffer(const Abstypes::TABSPageItemID &RecordID, char * RecordBuffer);
void __fastcall GetFirstRecordID(Abstypes::TABSPageItemID &RecordID);
void __fastcall GetLastRecordID(Abstypes::TABSPageItemID &RecordID);
bool __fastcall GetNextRecordID(Abstypes::TABSPageItemID &RecordID);
bool __fastcall GetPriorRecordID(Abstypes::TABSPageItemID &RecordID);
void __fastcall GetRecordID(int RecNoOnPage, Abstypes::TABSPageItemID &RecordID);
void __fastcall GetRecNoOnPage(const Abstypes::TABSPageItemID &RecordID, int &RecNoOnPage);
__property __int64 RecordCount = {read=GetRecordCount};
public:
#pragma option push -w-inl
/* TObject.Destroy */ inline __fastcall virtual ~TABSSmallRecordPage(void) { }
#pragma option pop
};
typedef DynamicArray<__int64 > ABSDiskEngine__4;
class DELPHICLASS TABSDiskRecordManager;
class DELPHICLASS TABSDiskTableData;
class DELPHICLASS TABSDiskBlobManager;
class PASCALIMPLEMENTATION TABSDiskBlobManager : public System::TObject
{
typedef System::TObject inherited;
private:
Abspage::TABSPageManager* LPageManager;
Absbaseengine::TABSBaseFieldManager* LFieldManager;
Absbaseengine::TABSBaseRecordManager* LRecordManager;
Classes::TList* FBlobCacheList;
Absbtree::TABSBTreeBlobPageIndex* FBlobPageIndex;
void __fastcall GetBlobInfo(char * RecordBuffer, int FieldNo, Abstypes::TABSPageItemID &PageItemID, Abstypes::PABSDiskBLOBCache &BlobCache);
void __fastcall SetBlobInfo(char * RecordBuffer, int FieldNo, const Abstypes::TABSPageItemID &PageItemID);
void __fastcall CreateBlobCache(char * RecordBuffer, int FieldNo, Abstypes::PABSDiskBLOBCache &BlobCache);
void __fastcall FreeBlobCache(char * RecordBuffer, int FieldNo, bool ForceClear = false);
void __fastcall StreamToBlobCache(Abscompression::TABSStream* Stream, Abstypes::PABSDiskBLOBCache BlobCache);
void __fastcall BlobCacheToStream(Abstypes::PABSDiskBLOBCache BlobCache, Classes::TStream* Stream);
void __fastcall ReadBlobHeader(int SessionID, const Abstypes::TABSPageItemID &PageItemID, Abstypes::TABSDiskBLOBHeader &BlobHeader, Abstypes::PABSDiskBLOBCache BlobCache);
void __fastcall WriteBlobHeader(int SessionID, const Abstypes::TABSDiskBLOBHeader &BlobHeader, Abstypes::TABSPageItemID &PageItemID);
void __fastcall ReadBlobData(int SessionID, const Abstypes::TABSPageItemID &PageItemID, const Abstypes::TABSDiskBLOBHeader &BlobHeader, Abstypes::TABSIntegerArray* BlobDataPageList, Abstypes::PABSDiskBLOBCache BlobCache);
void __fastcall ReadBlobDataPageList(int SessionID, const Abstypes::TABSPageItemID &PageItemID, const Abstypes::TABSPageListLink &PageListLink, Abstypes::TABSIntegerArray* BlobDataPageList, Abstypes::TABSIntegerArray* BlobDataPageListPages);
void __fastcall ReadLinkToBlobDataPageList(int SessionID, const Abstypes::TABSPageItemID &PageItemID, Abstypes::TABSPageListLink &PageListLink);
void __fastcall ReadMultiPagesBlob(int SessionID, const Abstypes::TABSPageItemID &PageItemID, const Abstypes::TABSDiskBLOBHeader &BlobHeader, Abstypes::PABSDiskBLOBCache BlobCache);
void __fastcall WriteBlobData(int SessionID, Abstypes::PABSDiskBLOBCache BlobCache, const Abstypes::TABSPageItemID &PageItemID, const Abstypes::TABSDiskBLOBHeader &BlobHeader, int &LastPageNo, Word &LastPageOffset, Abstypes::TABSIntegerArray* BlobDataPageList);
void __fastcall WriteBlobDataPageList(int SessionID, const Abstypes::TABSPageItemID &PageItemID, const Abstypes::TABSDiskBLOBHeader &BlobHeader, int LastPageNo, Word LastPageOffset, Abstypes::TABSIntegerArray* BlobDataPageList, Abstypes::TABSPageListLink &PageListLink);
void __fastcall WriteLinkToBlobDataPageList(int SessionID, const Abstypes::TABSPageItemID &PageItemID, const Abstypes::TABSPageListLink &PageListLink);
void __fastcall WriteMultiPagesBlob(int SessionID, Abstypes::PABSDiskBLOBCache BlobCache, Abstypes::TABSPageItemID &PageItemID, const Abstypes::TABSDiskBLOBHeader &BlobHeader);
void __fastcall InternalReadSmallBlob(int SessionID, Abstypes::PABSDiskBLOBCache BlobCache, const Abstypes::TABSPageItemID &PageItemID);
void __fastcall InternalReadLargeBlob(int SessionID, Abstypes::PABSDiskBLOBCache BlobCache, const Abstypes::TABSPageItemID &PageItemID);
bool __fastcall IsProbablyLargeBlob(int SessionID, const Abstypes::TABSPageItemID &PageItemID);
void __fastcall InternalReadBlob(int SessionID, Abstypes::PABSDiskBLOBCache BlobCache, const Abstypes::TABSPageItemID &PageItemID);
void __fastcall InternalWriteSmallBlob(int SessionID, Abstypes::PABSDiskBLOBCache BlobCache, Abstypes::TABSPageItemID &PageItemID);
void __fastcall InternalWriteLargeBlob(int SessionID, Abstypes::PABSDiskBLOBCache BlobCache, Abstypes::TABSPageItemID &PageItemID);
bool __fastcall IsSmallBlob(__int64 BlobSize);
void __fastcall InternalWriteBlob(int SessionID, Abstypes::PABSDiskBLOBCache BlobCache, Abstypes::TABSPageItemID &PageItemID);
void __fastcall InternalDeleteSmallBlob(int SessionID, Abstypes::TABSPageItemID &PageItemID);
void __fastcall InternalDeleteLargeBlob(int SessionID, Abstypes::TABSPageItemID &PageItemID);
void __fastcall InternalDeleteBlob(int SessionID, Abstypes::TABSPageItemID &PageItemID);
public:
__fastcall TABSDiskBlobManager(Abspage::TABSPageManager* PageManager, Absbaseengine::TABSBaseFieldManager* FieldManager, Absbaseengine::TABSBaseRecordManager* RecordManager);
__fastcall virtual ~TABSDiskBlobManager(void);
void __fastcall LoadMetadata(Classes::TStream* Stream);
void __fastcall SaveMetadata(Classes::TStream* Stream);
void __fastcall CreateBlobPageIndex(void);
void __fastcall Empty(int SessionID);
void __fastcall Delete(int SessionID);
void __fastcall ReadBlob(int SessionID, char * RecordBuffer, int FieldNo);
void __fastcall WriteBlob(int SessionID, char * RecordBuffer, int FieldNo);
void __fastcall WriteBlobs(int SessionID, char * RecordBuffer);
void __fastcall DeleteBlob(int SessionID, char * RecordBuffer, int FieldNo);
void __fastcall DeleteBlobs(int SessionID, char * RecordBuffer);
void __fastcall CopyBlobFromRecordBufferToStream(int SessionID, char * RecordBuffer, int FieldNo, Abstypes::TABSBLOBDescriptor &BLOBDescriptor, Classes::TStream* Stream);
void __fastcall CopyBlobFromStreamToRecordBuffer(char * RecordBuffer, int FieldNo, Abscompression::TABSStream* Stream);
void __fastcall ClearBlobInRecordBuffer(char * RecordBuffer, int FieldNo, bool ForceClear = false);
void __fastcall GetDirectBlobInfoFromRecordBuffer(int SessionID, char * RecordBuffer, int FieldNo, Abstypes::TABSPartialTemporaryBLOBDescriptor &BLOBDescriptor, char * &pBlobData);
void __fastcall SetDirectBlobInfoFromRecordBuffer(int SessionID, char * RecordBuffer, int FieldNo, Abstypes::TABSPartialTemporaryBLOBDescriptor &BLOBDescriptor, char * &pBlobData);
};
class PASCALIMPLEMENTATION TABSDiskTableData : public Absbaseengine::TABSTableData
{
typedef Absbaseengine::TABSTableData inherited;
private:
int FTableID;
TABSTableLocksFile* FTableLocksFile;
TABSInternalDBTransactedAccessFile* FTableMetadataFile;
TABSInternalDBTransactedAccessFile* FTableMostUpdatedFile;
TABSDiskBlobManager* FBlobManager;
Abspage::TABSPageManager* FTemporaryPageManager;
bool FExclusive;
bool FIsChangingTableList;
int FLastUsedTableState;
void __fastcall CreateTableFiles(void);
void __fastcall DeleteTableFiles(void);
void __fastcall OpenTableFiles(int MetadataFilePageNo, int MostUpdatedFilePageNo, int LocksFilePageNo);
void __fastcall FreeTableFiles(void);
void __fastcall LoadMetadataFile(int SessionID);
void __fastcall SaveMetadataFile(int SessionID);
void __fastcall SaveMostUpdated(int SessionID);
public:
void __fastcall LoadMostUpdated(int SessionID);
private:
int __fastcall GetDiskRecordBufferSize(void);
void __fastcall RebuildRecordPageIndex(int SessionID);
void __fastcall ValidateAndRepairMostUpdatedAndRecordPageIndex(Absbase::TABSCursor* Cursor);
void __fastcall ValidateRecordPageIndex(Absbase::TABSCursor* Cursor);
protected:
virtual __int64 __fastcall GetBitmapRecordCount(int SessionID);
virtual __int64 __fastcall GetBitmapRecNoByRecordID(const Abstypes::TABSPageItemID &RecordID);
virtual Abstypes::TABSPageItemID __fastcall GetRecordIDByBitmapRecNo(__int64 RecordNo);
virtual void __fastcall CreateRecordManager(void);
void __fastcall CreateBlobManager(void);
virtual void __fastcall CreateFieldManager(Absbase::TABSFieldDefs* FieldDefs);
virtual void __fastcall CreateIndexManager(Absbase::TABSIndexDefs* IndexDefs);
virtual void __fastcall CreateConstraintManager(Absbase::TABSConstraintDefs* ConstraintDefs);
public:
__fastcall TABSDiskTableData(Absbaseengine::TABSDatabaseData* aDatabaseData);
__fastcall virtual ~TABSDiskTableData(void);
void __fastcall FreeIfNoCursorsConnected(void);
virtual void __fastcall ApplyChanges(int SessionID, bool InTransaction);
virtual void __fastcall CancelChanges(int SessionID, bool InTransaction);
virtual void __fastcall CreateTable(Absbase::TABSCursor* Cursor, Absbase::TABSFieldDefs* FieldDefs, Absbase::TABSIndexDefs* IndexDefs, Absbase::TABSConstraintDefs* ConstraintDefs);
virtual void __fastcall DeleteTable(Absbase::TABSCursor* Cursor, bool DesignMode = false);
virtual void __fastcall EmptyTable(Absbase::TABSCursor* Cursor);
virtual void __fastcall RenameTable(AnsiString NewTableName, Absbase::TABSCursor* Cursor);
virtual void __fastcall OpenTable(Absbase::TABSCursor* Cursor);
virtual void __fastcall CloseTable(Absbase::TABSCursor* Cursor);
virtual void __fastcall RenameField(AnsiString FieldName, AnsiString NewFieldName);
virtual void __fastcall AddIndex(Absbase::TABSIndexDef* IndexDef, Absbase::TABSCursor* Cursor);
virtual void __fastcall DeleteIndex(int IndexID, Absbase::TABSCursor* Cursor);
virtual void __fastcall WriteBLOBFieldToRecordBuffer(Absbase::TABSCursor* Cursor, int FieldNo, Abscompression::TABSStream* BLOBStream);
virtual void __fastcall ClearBLOBFieldInRecordBuffer(char * RecordBuffer, int FieldNo);
void __fastcall ClearModifiedBLOBFieldsInRecordBuffer(char * RecordBuffer);
virtual Abscompression::TABSStream* __fastcall InternalCreateBlobStream(Absbase::TABSCursor* Cursor, bool ToInsert, int FieldNo, Abstypes::TABSBLOBOpenMode OpenMode);
virtual void __fastcall GetDirectBlobData(Absbase::TABSCursor* Cursor, int FieldNo, char * RecordBuffer, Abstypes::TABSPartialTemporaryBLOBDescriptor &BLOBDescriptor, char * &pBlobData);
virtual void __fastcall SetDirectBlobData(Absbase::TABSCursor* Cursor, int FieldNo, char * RecordBuffer, Abstypes::TABSPartialTemporaryBLOBDescriptor &BLOBDescriptor, char * &pBlobData);
virtual void __fastcall FreeDirectBlobData(Absbase::TABSCursor* Cursor, int FieldNo, char * RecordBuffer, Abstypes::TABSPartialTemporaryBLOBDescriptor &BLOBDescriptor, char * &pBlobData);
virtual bool __fastcall InsertRecord(Absbase::TABSCursor* &Cursor);
virtual bool __fastcall DeleteRecord(Absbase::TABSCursor* Cursor);
virtual bool __fastcall UpdateRecord(Absbase::TABSCursor* Cursor);
virtual void __fastcall ClearBlobsCacheInRecordBuffer(char * Buffer);
virtual Abstypes::TABSGetRecordResult __fastcall GetRecordBuffer(Absbase::TABSCursor* Cursor, Abstypes::TABSGetRecordMode GetRecordMode);
virtual bool __fastcall Locate(Absbase::TABSCursor* Cursor, Absexpressions::TABSExpression* SearchExpression);
virtual bool __fastcall FindKey(Absbase::TABSCursor* Cursor, Abstypes::TABSSearchCondition SearchCondition);
virtual void __fastcall SetRecNo(Absbase::TABSCursor* Cursor, __int64 RecNo);
virtual __int64 __fastcall GetRecNo(Absbase::TABSCursor* Cursor);
virtual __int64 __fastcall InternalGetRecordCount(Absbase::TABSCursor* Cursor);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -