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

📄 myldbbase.pas

📁 一个本地database引擎,支持中文T_Sql查询,兼容DELPHI标准数据库控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    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 + -