⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 absdiskengine.hpp

📁 Absolute Database 5.12 src. Absolute Database lets you forget the Borland Database Engine (BDE). Th
💻 HPP
📖 第 1 页 / 共 4 页
字号:
};


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 + -