📄 absbaseengine.hpp
字号:
void __fastcall Unlock(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) = 0 ;
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);
void __fastcall EmptyIndex(int IndexID, int SessionID);
void __fastcall DeleteAllIndexes(Absbase::TABSCursor* Cursor);
void __fastcall EmptyAllIndexes(int SessionID);
AnsiString __fastcall FindOrCreateIndex(Absbase::TABSCursor* Cursor, Classes::TStringList* FieldNamesList, Classes::TStringList* AscDescList, Classes::TStringList* CaseSensitivityList, bool &IsCreated);
bool __fastcall IndexExists(Absbase::TABSCursor* Cursor, Classes::TStringList* FieldNamesList, Classes::TStringList* AscDescList, Classes::TStringList* CaseSensitivityList);
bool __fastcall IsUniqueConstraintFailed(int SessionID, int IndexID, char * NewRecordBuffer, char * OldRecordBuffer, bool ToInsert, const Abstypes::TABSPageItemID &CurrentRecordID);
protected:
void __fastcall InitRecordBitmap(TABSRecordBitmap* RecordBitmap, int IndexID);
void __fastcall RefreshCursorRecordBitmap(Absbase::TABSCursor* Cursor);
void __fastcall BuildCursorRecordBitmap(Absbase::TABSCursor* Cursor);
virtual __int64 __fastcall GetBitmapRecordCount(int SessionID) = 0 ;
virtual __int64 __fastcall GetBitmapRecNoByRecordID(const Abstypes::TABSPageItemID &RecordID) = 0 ;
virtual Abstypes::TABSPageItemID __fastcall GetRecordIDByBitmapRecNo(__int64 RecordNo) = 0 ;
__int64 __fastcall GetBitmapRecNoByIndexPosition(int IndexID, System::TObject* IndexPos);
void __fastcall GetIndexPositionByBitmapRecNo(int IndexID, __int64 RecordNo, System::TObject* IndexPos);
bool __fastcall GetIndexPositionByRecordID(int SessionID, int IndexID, const Abstypes::TABSPageItemID &RecordID, System::TObject* IndexPos);
void __fastcall GetRecordIDByIndexPosition(int SessionID, int IndexID, System::TObject* IndexPos, Abstypes::TABSPageItemID &RecordID);
bool __fastcall IsRecordInRange(Absbase::TABSCursor* Cursor);
bool __fastcall IsRecordInDistinct(Absbase::TABSCursor* Cursor);
bool __fastcall IsRecordVisible(Absbase::TABSCursor* Cursor);
void __fastcall MergeAndCheckSearchConditionsCompatibility(Abstypes::TABSScanSearchCondition* &Condition1, Abstypes::TABSScanSearchCondition* &Condition2, /* out */ bool &Incompatible, /* out */ bool &HaveBeenMerged);
bool __fastcall IsEqualConditions(Abstypes::TABSScanSearchCondition* &Condition1, Abstypes::TABSScanSearchCondition* &Condition2);
void __fastcall RemoveDuplicateConditions(Abstypes::TABSScanSearchConditionArray* Conditions);
void __fastcall OptimizeSearchConditions(Abstypes::TABSScanSearchConditionArray* &Conditions, /* out */ bool &NonCompatibleConditions);
void __fastcall PrepareConditions(Absbase::TABSCursor* Cursor, Abstypes::TABSScanSearchConditionArray* Conditions, Abstypes::TABSScanSearchCondition* KeyCondition, Absexpressions::TABSExpression* SearchExpression, bool GoForward);
bool __fastcall ChooseScanConditionsWithMinScanCost(int SessionID, Abstypes::TABSScanSearchConditionArray* Conditions, int CurrentIndexID, const Abstypes::TABSPageItemID &CurrentRecordID, void * FilterRecordPtr, int &ScanConditionNo, int &ScanEndConditionNo);
bool __fastcall IsIndexUnique(int IndexID);
bool __fastcall ChooseScanConditionsByHeuristsics(Abstypes::TABSScanSearchConditionArray* Conditions, int CurrentIndexID, int &ScanConditionNo, int &ScanEndConditionNo);
void __fastcall ChooseScanConditions(int SessionID, Abstypes::TABSScanSearchConditionArray* Conditions, int CurrentIndexID, const Abstypes::TABSPageItemID &CurrentRecordID, bool GoForward, void * FilterRecordPtr, int &ScanConditionNo, int &ScanEndConditionNo);
bool __fastcall FindRecordByBitmapScan(int SessionID, bool Restart, bool GoForward, const Abstypes::TABSPageItemID &CurrentRecordID, Abstypes::TABSPageItemID &ResultRecordID, TABSRecordBitmap* RecordBitmap, int IndexID);
bool __fastcall FindRecord(Absbase::TABSCursor* Cursor, Absexpressions::TABSExpression* SearchExpression, Abstypes::TABSScanSearchCondition* KeyCondition, bool Restart, bool GoForward, Abstypes::PABSRecordID ResultRecordID, TABSRecordBitmap* RecordBitmap, bool ForceFillWholeBitmap = false);
bool __fastcall IsRecordMatchCondition(Abstypes::TABSScanSearchCondition* &Condition, char * RecordBuffer);
bool __fastcall NeedToCheckOtherConditions(Abstypes::TABSScanSearchConditionArray* Conditions, int ExcludedConditionNo, int ExcludedConditionNo2, void * FilterRecordPtr);
bool __fastcall IsRecordMatchConditions(Abstypes::TABSScanSearchConditionArray* Conditions, int ExcludedConditionNo, int ExcludedConditionNo2, void * FilterRecordPtr, void * Dataset, char * RecordBuffer, const Abstypes::TABSPageItemID &RecordID);
bool __fastcall FindRecordByScanWithoutCondition(int SessionID, Abstypes::TABSScanSearchConditionArray* Conditions, int ScanConditionNo, int ScanEndConditionNo, int CurrentIndexID, void * FilterRecordPtr, void * Dataset, const Abstypes::TABSPageItemID &CurrentRecordID, bool Restart, bool GoForward, Abstypes::PABSRecordID ResultRecordID, TABSRecordBitmap* RecordBitmap, bool ForceFillWholeBitmap);
bool __fastcall FindRecordByScanWithConditionAndConditionIndex(int SessionID, Abstypes::TABSScanSearchConditionArray* Conditions, int ScanConditionNo, int ScanEndConditionNo, int CurrentIndexID, void * FilterRecordPtr, void * Dataset, const Abstypes::TABSPageItemID &CurrentRecordID, bool Restart, bool GoForward, Abstypes::PABSRecordID ResultRecordID, TABSRecordBitmap* RecordBitmap, bool ForceFillWholeBitmap);
bool __fastcall FindRecordByScanWithConditionAndWihtoutCurrentIndex(int SessionID, Abstypes::TABSScanSearchConditionArray* Conditions, int ScanConditionNo, int ScanEndConditionNo, int CurrentIndexID, void * FilterRecordPtr, void * Dataset, const Abstypes::TABSPageItemID &CurrentRecordID, bool Restart, bool GoForward, Abstypes::PABSRecordID ResultRecordID, TABSRecordBitmap* RecordBitmap, bool ForceFillWholeBitmap);
bool __fastcall FindRecordByScanWithConditionAndNonConditionIndex(int SessionID, Abstypes::TABSScanSearchConditionArray* Conditions, int ScanConditionNo, int ScanEndConditionNo, int CurrentIndexID, void * FilterRecordPtr, void * Dataset, const Abstypes::TABSPageItemID &CurrentRecordID, bool Restart, bool GoForward, Abstypes::PABSRecordID ResultRecordID, TABSRecordBitmap* RecordBitmap, bool ForceFillWholeBitmap);
bool __fastcall FindRecordByScan(int SessionID, Abstypes::TABSScanSearchConditionArray* Conditions, int ScanConditionNo, int ScanEndConditionNo, int CurrentIndexID, void * FilterRecordPtr, void * Dataset, const Abstypes::TABSPageItemID &CurrentRecordID, bool Restart, bool GoForward, Abstypes::PABSRecordID ResultRecordID, TABSRecordBitmap* RecordBitmap, bool ForceFillWholeBitmap);
Abstypes::TABSGetRecordResult __fastcall InternalFindOrGetRecordBuffer(Absbase::TABSCursor* Cursor, Abstypes::TABSGetRecordMode GetRecordMode, bool ForceFillWholeBitmap = false);
void __fastcall InternalGetRecordBuffer(int SessionID, Abstypes::TABSNavigationInfo &NavigationInfo, Abstypes::TABSIndexPositionCache* IndexPositionCache, int TableState);
public:
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 WriteBLOBFieldToRecordBuffer(Absbase::TABSCursor* Cursor, int FieldNo, Abscompression::TABSStream* BLOBStream) = 0 ;
virtual void __fastcall ClearBLOBFieldInRecordBuffer(char * RecordBuffer, int FieldNo);
virtual void __fastcall ClearBLOBFieldsInRecordBuffer(char * RecordBuffer);
virtual Abscompression::TABSStream* __fastcall InternalCreateBlobStream(Absbase::TABSCursor* Cursor, bool ToInsert, int FieldNo, Abstypes::TABSBLOBOpenMode OpenMode) = 0 ;
virtual void __fastcall GetDirectBlobData(Absbase::TABSCursor* Cursor, int FieldNo, char * RecordBuffer, Abstypes::TABSPartialTemporaryBLOBDescriptor &BLOBDescriptor, char * &pBlobData) = 0 ;
virtual void __fastcall SetDirectBlobData(Absbase::TABSCursor* Cursor, int FieldNo, char * RecordBuffer, Abstypes::TABSPartialTemporaryBLOBDescriptor &BLOBDescriptor, char * &pBlobData) = 0 ;
virtual void __fastcall FreeDirectBlobData(Absbase::TABSCursor* Cursor, int FieldNo, char * RecordBuffer, Abstypes::TABSPartialTemporaryBLOBDescriptor &BLOBDescriptor, char * &pBlobData) = 0 ;
virtual bool __fastcall InsertRecord(Absbase::TABSCursor* &Cursor) = 0 ;
virtual bool __fastcall DeleteRecord(Absbase::TABSCursor* Cursor) = 0 ;
virtual bool __fastcall UpdateRecord(Absbase::TABSCursor* Cursor) = 0 ;
__int64 __fastcall GetRecordCount(Absbase::TABSCursor* Cursor);
virtual void __fastcall SetRecNo(Absbase::TABSCursor* Cursor, __int64 RecNo);
virtual __int64 __fastcall GetRecNo(Absbase::TABSCursor* Cursor);
virtual void __fastcall InternalSetRecNo(Absbase::TABSCursor* Cursor, __int64 RecNo) = 0 ;
virtual __int64 __fastcall InternalGetRecNo(Absbase::TABSCursor* Cursor) = 0 ;
virtual __int64 __fastcall InternalGetRecordCount(Absbase::TABSCursor* Cursor) = 0 ;
virtual __int64 __fastcall LastAutoincValue(int FieldNo, Absbase::TABSBaseSession* Session);
virtual void __fastcall Rollback(int SessionID);
void __fastcall RebuildTemporaryIndexes(int SessionID);
__property AnsiString TableName = {read=FTableName, write=FTableName};
__property TABSDatabaseData* DatabaseData = {read=FDatabaseData};
__property TABSBaseFieldManager* FieldManager = {read=FFieldManager};
__property TABSBaseRecordManager* RecordManager = {read=FRecordManager};
__property TABSBaseConstraintManager* ConstraintManager = {read=FConstraintManager};
__property TABSBaseIndexManager* IndexManager = {read=FIndexManager};
__property Abspage::TABSPageManager* PageManager = {read=FPageManager};
__property Classes::TList* CursorList = {read=FCursorList};
__property bool IsRepairing = {read=FIsRepairing, write=FIsRepairing, nodefault};
};
class PASCALIMPLEMENTATION TABSBaseFieldManager : public System::TObject
{
typedef System::TObject inherited;
private:
Absbase::TABSFieldDefs* FFieldDefs;
TABSTableData* FTableData;
protected:
DynamicArray<__int64 > FLastAutoIncValues;
virtual __int64 __fastcall GetNextAutoincVal(int FieldNo);
public:
__fastcall TABSBaseFieldManager(TABSTableData* TableData);
__fastcall virtual ~TABSBaseFieldManager(void);
void __fastcall LoadMetadata(Classes::TStream* Stream);
void __fastcall SaveMetadata(Classes::TStream* Stream);
void __fastcall LoadMostUpdated(char * Buf, int &Offset);
void __fastcall SaveMostUpdated(char * Buf, int &Offset);
void __fastcall RecalcFieldOffsets(void);
void __fastcall InitLastAutoIncValues(void);
void __fastcall DiskRecordBufferToMemRecordBuffer(char * DiskRecordBuffer, char * MemRecordBuffer);
void __fastcall MemRecordBufferToDiskRecordBuffer(char * MemRecordBuffer, char * DiskRecordBuffer);
bool __fastcall CompareRecordBuffers(char * RecordBuffer1, char * RecordBuffer2);
bool __fastcall BlobFieldsPresent(void);
virtual void __fastcall ApplyDefaultValuesToRecordBuffer(Absbase::TABSBaseSession* Session, char * RecordBuffer);
virtual void __fastcall ApplyAutoincsToRecordBuffer(Absbase::TABSBaseSession* Session, char * RecordBuffer);
virtual __int64 __fastcall GetNextAutoinc(Absbase::TABSBaseSession* Session, int FieldNo);
virtual __int64 __fastcall GetLastAutoinc(Absbase::TABSBaseSession* Session, int FieldNo);
void __fastcall UpdateLastAutoinc(Absbase::TABSBaseSession* Session, int FieldNo, __int64 InsertedValue);
__property Absbase::TABSFieldDefs* FieldDefs = {read=FFieldDefs};
};
class PASCALIMPLEMENTATION TABSIndex : public System::TObject
{
typedef System::TObject inherited;
protected:
Absbase::TABSIndexDef* FIndexDef;
TABSBaseIndexManager* FIndexManager;
public:
__fastcall TABSIndex(TABSBaseIndexManager* aIndexManager);
__fastcall virtual ~TABSIndex(void);
virtual void __fastcall CreateIndex(Absbase::TABSCursor* Cursor, Absbase::TABSIndexDef* aIndexDef);
virtual void __fastcall DropIndex(int SessionID) = 0 ;
virtual void __fastcall EmptyIndex(int SessionID) = 0 ;
virtual void __fastcall OpenIndex(Absbase::TABSIndexDef* aIndexDef);
virtual void __fastcall RebuildTemporaryIndex(Absbase::TABSCursor* Cursor) = 0 ;
virtual void __fastcall GetRecordBuffer(int SessionID, Abstypes::TABSNavigationInfo &NavigationInfo, Abstypes::TABSIndexPositionCache* IndexPositionCache, int TableState) = 0 ;
virtual void __fastcall GetClosestRecordBuffer(int SessionID, Abstypes::TABSNavigationInfo &NavigationInfo, Abstypes::TABSIndexPositionCache* IndexPositionCache, int TableState) = 0 ;
virtual System::TObject* __fastcall CreateIndexPosition(void) = 0 ;
virtual void __fastcall FreeIndexPosition(System::TObject* &IndexPosition) = 0 ;
virtual bool __fastcall GetIndexPosition(int SessionID, const Abstypes::TABSPageItemID &RecordID, char * RecordBuffer, System::TObject* IndexPosition) = 0 ;
virtual int __fastcall CompareRecordPositionsInIndex(System::TObject* RecordPosition1, System::TObject* RecordPosition2) = 0 ;
virtual __int64 __fastcall GetRecNoByRecordID(int SessionID, const Abstypes::TABSPageItemID &RecordID, char * RecordBuffer) = 0 ;
virtual Abstypes::TABSPageItemID __fastcall GetRecordIDByRecNo(int SessionID, __int64 RecNo) = 0 ;
virtual void __fastcall ApplyDistinctToRecordBitmap(int SessionID, TABSRecordBitmap* Bitmap, int DistinctFieldCount) = 0 ;
virtual void * __fastcall CreateSearchInfo(void) = 0 ;
virtual void __fastcall FreeSearchInfo(void * SearchInfo) = 0 ;
virtual bool __fastcall FindRecord(int SessionID, bool Restart, bool GoForward, Abstypes::TABSScanSearchCondition* StartScanCondition, Abstypes::TABSScanSearchCondition* EndScanCondition, char * RecordBuffer, Abstypes::TABSPageItemID &RecordID, void * SearchInfo) = 0 ;
virtual int __fastcall CompareRecordBuffersByIndex(char * Buffer1, char * Buffer2, int IndexFieldCount) = 0 ;
virtual int __fastcall CompareConditions(Abstypes::TABSScanSearchCondition* Condition1, Abstypes::TABSScanSearchCondition* Condition2) = 0 ;
virtual __int64 __fastcall GetApproxRangeRecordCount(int SessionID, __int64 TableRecordCount, Abstypes::TABSScanSearchCondition* RangeCondition1, Abstypes::TABSScanSearchCondition* RangeCondition2) = 0 ;
virtual bool __fastcall CanInsertRecord(int SessionID, char * RecordBuffer) = 0 ;
virtual bool __fastcall CanUpdateRecord(int SessionID, char * OldRecordBuffer, char * NewRecordBuffer) = 0 ;
virtual void __fastcall InsertRecord(Absbase::TABSCursor* Cursor) = 0 ;
virtual void __fastcall DeleteRecord(Absbase::TABSCursor* Cursor) = 0 ;
virtual void __fastcall UpdateRecord(Absbase::TABSCursor* Cursor, bool BeforeNewRecordIsStored) = 0 ;
virtual int __fastcall GetMaxEntriesPerPage(void) = 0 ;
virtual void __fastcall GetRecordIDByIndexPosition(int SessionID, System::TObject* IndexPos, Abstypes::TABSPageItemID &RecordID) = 0 ;
__property Absbase::TABSIndexDef* IndexDef = {read=FIndexDef};
__property TABSBaseIndexManager* IndexManager = {read=FIndexManager};
};
class PASCALIMPLEMENTATION TABSRecordBitmap : public System::TObject
{
typedef System::TObject inherited;
private:
Abstypes::TABSBitsArray* FBitmap;
TABSTableData* FTableData;
bool FActive;
bool FIndexBased;
int FTableState;
protected:
__int64 __fastcall GetSize(void);
void __fastcall SetSize(__int64 NewSize);
bool __fastcall GetOutdated(void);
public:
__fastcall TABSRecordBitmap(TABSTableData* aTableData);
__fastcall virtual ~TABSRecordBitmap(void);
__int64 __fastcall GetRecordCount(void);
__int64 __fastcall GetRecNoByRecordID(const Abstypes::TABSPageItemID &RecordID);
__int64 __fastcall GetRecNoByIndexPos(int IndexID, System::TObject* IndexPos);
Abstypes::TABSPageItemID __fastcall GetRecordIDByRecNo(__int64 RecNo);
void __fastcall GetIndexPosByRecNo(int IndexID, __int64 RecNo, System::TObject* IndexPos);
bool __fastcall IsRecordVisible(const Abstypes::TABSPageItemID &RecordID)/* overload */;
bool __fastcall IsRecordVisible(int IndexID, System::TObject* IndexPos)/* overload */;
void __fastcall ShowRecord(const Abstypes::TABSPageItemID &RecordID)/* overload */;
void __fastcall ShowRecord(int IndexID, System::TObject* IndexPos)/* overload */;
void __fastcall HideRecord(const Abstypes::TABSPageItemID &RecordID)/* overload */;
void __fastcall HideRecord(int IndexID, System::TObject* IndexPos)/* overload */;
void __fastcall SetAllBits(void);
void __fastcall Clear(void);
bool __fastcall FindRecord(bool Restart, bool GoForward, const Abstypes::TABSPageItemID &CurRecordID, Abstypes::TABSPageItemID &FoundRecordID)/* overload */;
bool __fastcall FindRecord(bool Restart, bool GoForward, System::TObject* CurIndexPos, System::TObject* FoundRecordIndexPos, int IndexID)/* overload */;
__property bool Active = {read=FActive, write=FActive, nodefault};
__property __int64 Size = {read=GetSize, write=SetSize};
__property bool Outdated = {read=GetOutdated, nodefault};
__property bool IndexBased = {read=FIndexBased, write=FIndexBased, nodefault};
__property int TableState = {read=FTableState, write=FTableState, nodefault};
};
//-- var, const, procedure ---------------------------------------------------
extern PACKAGE bool IsDesignMode;
extern PACKAGE void __fastcall ShowErrorMessage(AnsiString ErrorMessage);
extern PACKAGE void __fastcall ShowWarningMessage(AnsiString WarningMessage);
extern PACKAGE bool __fastcall GetFieldData(int FieldNo, Absbase::TABSFieldDefs* FieldDefs, void * Buffer, char * RecordBuffer);
extern PACKAGE void __fastcall SetFieldData(int FieldNo, Absbase::TABSFieldDefs* FieldDefs, void * Buffer, char * RecordBuffer);
extern PACKAGE bool __fastcall CompareRecordBuffers(char * RecordBuffer1, char * RecordBuffer2, int RecordBufferSize);
} /* namespace Absbaseengine */
using namespace Absbaseengine;
#pragma pack(pop)
#pragma option pop
#pragma delphiheader end.
//-- end unit ----------------------------------------------------------------
#endif // Absbaseengine
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -