📄 myldbbase.pas
字号:
function GetRecNo: Int64; virtual; abstract;
// go to first record
procedure InternalFirst; virtual; abstract;
// go to last record
procedure InternalLast; virtual; abstract;
function SavePosition: Pointer;
procedure RestorePosition(Pos: Pointer);
procedure FreePosition(Pos: Pointer);
//---------------------------------------------------------------------------
// insert, edit, post, delete methods
//---------------------------------------------------------------------------
// insert record
procedure InternalInsert; virtual; abstract;
// edit record
procedure InternalEdit; virtual; abstract;
// cancels updates
procedure InternalCancel(ToInsert: Boolean); virtual; abstract;
// update record
procedure InternalPost(ToInsert: Boolean); virtual; abstract;
// delete record
procedure InternalDelete; virtual; abstract;
//---------------------------------------------------------------------------
// search & filter methods
//---------------------------------------------------------------------------
// disable record bitmap
procedure DisableRecordBitmap;
// set distinct
procedure ApplyDistinct(FieldNamesList, AscDescList, CaseSensitivityList: TStringList); virtual; abstract;
// apply projection
procedure ApplyProjection(FieldNamesList, AliasList: TStringList);
procedure ActivateFilters(
FilterText: String;
CaseInsensitive: Boolean;
PartialKey: Boolean
); virtual; abstract;
procedure DeactivateFilters; virtual; abstract;
function Locate(
const KeyFields: String;
const KeyValues: Variant;
CaseInsensitive: Boolean;
PartialKey: Boolean
): Boolean; virtual; abstract;
function FindKey(SearchCondition: TMYLDBSearchCondition): Boolean; virtual; abstract;
// used by SQL: "where field > all (select ...)"
function IsAnyRecordMatchCondition(const FieldName: string;
const Operator: TMYLDBDataOperator; const Value: TMYLDBVariant): Boolean; virtual; abstract;
function IsIndexApplied: Boolean;
function IsDistinctApplied: Boolean;
function IsFilterApplied: Boolean;
function IsRangeApplied: Boolean;
function IsViewRestricted: Boolean;
procedure ResetRange;
procedure ApplyRange(
StartBuffer, EndBuffer: TMYLDBRecordBuffer;
StartKeyFieldCount: Integer;
EndKeyFieldCount: Integer;
StartExclusive: Boolean;
EndExclusive: Boolean
);
// set SQL Filter
procedure SetSQLFilter(FilterExpr: TObject; ParentQueryAO: TObject; ParentCursor: TMYLDBCursor);
//---------------------------------------------------------------------------
// BLOB methods
//---------------------------------------------------------------------------
function InternalCreateBlobStream(
ToInsert: Boolean;
ToEdit: Boolean;
FieldNo: Integer;
OpenMode: TMYLDBBLOBOpenMode;
CanDoGetRecordBuffer: Boolean
):TMYLDBStream; virtual; abstract;
procedure InternalCloseBLOB(FieldNo: Integer); virtual; abstract;
// clear blob streams
procedure ClearBLOBStreams(WriteOnly: Boolean = False); virtual; abstract;
function LastAutoincValue(FieldNo: Integer): Int64; virtual; abstract;
// batch update methods
procedure BeginBatchUpdate; virtual; abstract;
procedure EndBatchUpdate; virtual; abstract;
procedure CancelBatchUpdate; virtual; abstract;
function CheckConstraints(ToInsert: Boolean): Boolean; virtual; abstract;
public
// for bookmarks
CurrentRecordID: TMYLDBRecordID;
CurrentIndexID: TMYLDBObjectID;
// position for navigation
FirstPosition: Boolean;
LastPosition: Boolean;
FilterRecord: TMYLDBFilterRecord;
Dataset: Pointer;
property RecordBitmap: Pointer read FRecordBitmap write FRecordBitmap;
property IndexPositionCache: TMYLDBIndexPositionCache read FIndexPositionCache;
property DistinctFieldCount: Integer read FDistinctFieldCount write FDistinctFieldCount;
property FilterExpression: Pointer read FFilterExpression write FFilterExpression;
property SQLFilterExpression: Pointer read FSQLFilterExpression write FSQLFilterExpression;
property BLOBStreams: TList read FBLOBStreams;
property ErrorCode: TMYLDBErrorCode read FErrorCode write FErrorCode;
property ErrorMessage: String read FErrorMessage write FErrorMessage;
property IsDesignMode: Boolean read FIsDesignMode write FIsDesignMode;
property TableName: String read FTableName write FTableName;
property IndexName: String read FIndexName write SetIndexName;
property IndexID: TMYLDBObjectID read FIndexID write FIndexID;
property ReadOnly: Boolean read FReadOnly write FReadOnly;
property Exclusive: Boolean read FExclusive write FExclusive;
property InMemory: Boolean read FInMemory write FInMemory;
property Temporary: Boolean read FTemporary write FTemporary;
property Session: TMYLDBBaseSession read FSession write FSession;
property IsOpen: Boolean read FIsOpen write FIsOpen;
property IsRepairing: Boolean read FIsRepairing write FIsRepairing;
property RecordCount: Int64 read GetRecordCount;
property FieldDefs: TMYLDBFieldDefs read FFieldDefs;
property VisibleFieldDefs: TMYLDBFieldDefs read FVisibleFieldDefs;
property IndexDefs: TMYLDBIndexDefs read GetIndexDefs;
property ConstraintDefs: TMYLDBConstraintDefs read FConstraintDefs;
// set it before call CreateTable
property BLOBCompression: TMYLDBCompression read FBLOBCompression
write FBLOBCompression;
// set it before call OpenTable, CreateTable
property Password: TMYLDBPassword read FPassword
write FPassword;
property KeyFieldCount: Integer read FKeyFieldCount write FKeyFieldCount;
property KeyBuffer: TMYLDBRecordBuffer read FKeyBuffer write FKeyBuffer;
property RangeStartBuffer: TMYLDBRecordBuffer read FRangeStartBuffer
write FRangeStartBuffer;
property RangeEndBuffer: TMYLDBRecordBuffer read FRangeEndBuffer
write FRangeEndBuffer;
property RangeStartExclusive: Boolean read FRangeStartExclusive
write FRangeStartExclusive;
property RangeEndExclusive: Boolean read FRangeEndExclusive
write FRangeEndExclusive;
property RangeStartKeyFieldCount: Integer read FRangeStartKeyFieldCount
write FRangeStartKeyFieldCount;
property RangeEndKeyFieldCount: Integer read FRangeEndKeyFieldCount
write FRangeEndKeyFieldCount;
property CurrentRecordBuffer: TMYLDBRecordBuffer read FCurrentRecordBuffer
write FCurrentRecordBuffer;
property DistinctRecordBuffer: TMYLDBRecordBuffer read FDistinctRecordBuffer
write FDistinctRecordBuffer;
property EditRecordBuffer: TMYLDBRecordBuffer read FEditRecordBuffer
write FEditRecordBuffer;
property PhysicalOrder: Boolean read FPhysicalOrder write FPhysicalOrder;
property CurrentRecordPositionInIndex: TMYLDBIndexPosition
read FCurrentRecordPositionInIndex
write FCurrentRecordPositionInIndex;
property TableLockedByCursor: Boolean read FTableLockedByCursor write FTableLockedByCursor;
property InBatchUpdate: Boolean read FBatchUpdate write FBatchUpdate;
end; // TMYLDBCursor
////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBBaseSession
//
////////////////////////////////////////////////////////////////////////////////
// manager for TMYLDBSession
TMYLDBSessionComponentManager = class(TObject)
end;
// Session object base class
TMYLDBSessionNamedObject = class(TObject)
private
FObjectID: TMYLDBObjectID;
FName: TMYLDBObjectName;
public
constructor Create(Name: String); overload;
constructor Create(ObjectID: TMYLDBObjectID); overload;
public
property Name: TMYLDBObjectName read FName write FName;
property ObjectID: TMYLDBObjectID read FObjectID write FObjectID;
end;
// Sequence last value stored in user session
TMYLDBSessionNamedObjectSequenceValue = class(TMYLDBSessionNamedObject)
public
FValue: TMYLDBSequenceValue;
public
constructor Create(ObjectID: TMYLDBObjectID; Value: TMYLDBSequenceValue);
public
property Value: TMYLDBSequenceValue read FValue write FValue;
end;
// for database component
TMYLDBBaseSession = class (TObject)
private
FDatabaseName: string; // name of database
FDatabaseFileName: string; // database file name
FSessionID: TMYLDBSessionID;
FInTransaction: Boolean;
FReadOnly: Boolean;
FExclusive: Boolean;
FInMemory: Boolean;
FLogin: String;
//FPassword: String;
FSessionHandle: TMYLDBSessionComponentManager;
FSessionNamedObjectList: TMYLDBSortedStringPtrArray;
FMaxSessionCount: Integer;
FRepairNeeded: Boolean;
FMultiUser: Boolean;
// 5.12 readonly bugfix
FSessionName: string;
protected
// db connected?
function GetConnected: Boolean; virtual; abstract;
// connect / disconnect
procedure SetConnected(Value: boolean); virtual; abstract;
function GetSuppressDBHeaderErrors: Boolean; virtual; abstract;
procedure SetSuppressDBHeaderErrors(Value: boolean); virtual; abstract;
public
// constructor
constructor Create;
// destructor
destructor Destroy; override;
// create database
procedure CreateDatabase; virtual; abstract;
// delete database
procedure DeleteDatabase; virtual; abstract;
// rename database
procedure RenameDatabase(NewDatabaseFileName: String); virtual; abstract;
procedure GetTablesList(List: TStrings); virtual; abstract;
function TableExists(TableName: String): Boolean; virtual; abstract;
procedure SetObject(Value: TMYLDBSessionNamedObject); virtual;
function GetObjectByName(ObjectName: String): TMYLDBSessionNamedObject; virtual;
function GetObjectByID(id: TMYLDBObjectID): TMYLDBSessionNamedObject; virtual;
procedure DeleteObject(id: TMYLDBObjectID); virtual;
procedure StartTransaction; virtual; abstract;
procedure Commit(DoFlushBuffers: Boolean=True); virtual; abstract;
procedure Rollback; virtual; abstract;
procedure FlushBuffers; virtual; abstract;
property Connected: boolean read GetConnected write SetConnected default false;
property DatabaseFileName: string read FDatabaseFileName write FDatabaseFileName;
property DatabaseName: string read FDatabaseName write FDatabaseName;
property SessionID: TMYLDBSessionID read FSessionID write FSessionID;
property InTransaction: Boolean read FInTransaction write FInTransaction;
property ReadOnly: Boolean read FReadOnly write FReadOnly;
property Exclusive: Boolean read FExclusive write FExclusive;
property InMemory: Boolean read FInMemory write FInMemory;
property Login: String read FLogin write FLogin;
//property Password: String read FPassword write FPassword;
property SessionComponentManager: TMYLDBSessionComponentManager
read FSessionHandle write FSessionHandle;
property MaxSessionCount: Integer read FMaxSessionCount write FMaxSessionCount;
property RepairNeeded: Boolean read FRepairNeeded write FRepairNeeded;
property SuppressDBHeaderErrors: Boolean read GetSuppressDBHeaderErrors write SetSuppressDBHeaderErrors;
property MultiUser: Boolean read FMultiUser write FMultiUser;
property SessionName: string read FSessionName write FSessionName;
end; // TMYLDBBaseSession
implementation
uses
// MYLDBoluteDatabase units
MYLDBRelationalAlgebra,
MYLDBExpressions,
MYLDBBaseEngine;
////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBMetaObjectDef
//
////////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------------
// Create
//------------------------------------------------------------------------------
constructor TMYLDBMetaObjectDef.Create;
begin
FName := '';
FObjectID := OBJECTID_IS_NULL;
FSchemaName := '';
FSchemaID := OBJECTID_IS_NULL;
end;//Create
//------------------------------------------------------------------------------
// Assign
//------------------------------------------------------------------------------
procedure TMYLDBMetaObjectDef.Assign(Source: TMYLDBMetaObjectDef);
begin
FName := Source.FName;
FObjectID := Source.FObjectID;
FSchemaName := Source.FSchemaName;
FSchemaID := Source.FSchemaID;
end;//Assign
//------------------------------------------------------------------------------
// load from stream
//------------------------------------------------------------------------------
procedure TMYLDBMetaObjectDef.LoadFromStream(Stream: TStream);
var Len: Byte;
begin
LoadDataFromStream(Len,sizeof(Len),Stream,10166);
SetLength(FName,Len);
LoadDataFromStream(PChar(@FName[1])^,Len,Stream,10167);
LoadDataFromStream(FObjectID,sizeof(ObjectID),Stream,10169);
end; // LoadFromStream
//------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -