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

📄 myldbbase.pas

📁 一个本地database引擎,支持中文T_Sql查询,兼容DELPHI标准数据库控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit MYLDBBase;

interface

uses SysUtils, Classes,

// MYLDBoluteDatabase units
{$I MYLDBVer.inc}

     {$IFDEF DEBUG_LOG}
     MYLDBDebug,
     {$ENDIF}
     MYLDBMemory,
     MYLDBCompression,
     MYLDBSecurity,
     MYLDBTypes,
     MYLDBConverts,
     MYLDBTypesRoutines,
     MYLDBVariant,
     MYLDBLexer,
     MYLDBExcept,
     MYLDBConst;

type
 // Events
 TMYLDBFilterRecord = Pointer;


type

  TMYLDBBaseSession = class;
  TMYLDBCursor = class;
  TMYLDBIndexDef = class;
  TMYLDBFieldDef = class;

  TMYLDBFieldDefs = class;
  TMYLDBIndexDefs = class;

  TMYLDBCursorPos = record
   FirstPosition: Boolean;
   LastPosition:  Boolean;
   RecordID:      TMYLDBRecordID;
  end;
  PMYLDBCursorPos = ^TMYLDBCursorPos;

////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBMetaObjectDef
//
////////////////////////////////////////////////////////////////////////////////


  TMYLDBMetaObjectDef = class (TObject)
   private
    FName:       TMYLDBObjectName;
    FObjectID:   TMYLDBObjectID;
    FSchemaName: String;
    FSchemaID:   TMYLDBObjectID;
   public
    constructor Create;
    procedure Assign(Source: TMYLDBMetaObjectDef); virtual;
    procedure LoadFromStream(Stream: TStream); virtual;
    procedure SaveToStream(Stream: TStream); virtual;
   public
    property Name: TMYLDBObjectName read FName write FName;
    property ObjectID: TMYLDBObjectID read FObjectID write FObjectID;
    property SchemaName: String read FSchemaName write FSchemaName;
    property SchemaID: TMYLDBObjectID read FSchemaID write FSchemaID;
  end; // TMYLDBMetaObjectDef



////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBFieldDef
//
////////////////////////////////////////////////////////////////////////////////


  TMYLDBFieldDef = class (TMYLDBMetaObjectDef)
   private
    FBaseFieldType:             TMYLDBBaseFieldType;
    FAdvancedFieldType:         TMYLDBAdvancedFieldType;
    FFieldSize:                 Integer;
    FDiskDataSize:              Integer; // size of binary data in disk page or table file
    FMemoryDataSize:            Integer; // size of binary data in record buffer
    FDiskOffset:                Integer; // offset to binary data in disk page or table file
    FMemoryOffset:              Integer; // offset to binary data in record buffer
    FFieldNoReference:          Integer; // index of this field in TableData.FieldManager.FieldDefs

    // Default Value
    FDefaultValue:              TMYLDBVariant;
    FDefaultValueExpr:          TObject;

    // Blob data
    FBLOBCompressionAlgorithm:  TMYLDBCompressionAlgorithm;
    FBLOBCompressionMode:       TMYLDBCompressionMode;
    FBLOBBlockSize:             Integer;

    // Autoinc settings
    FAutoincIncrement:    Int64;
    FAutoincInitialValue: Int64;
    FAutoincMinValue:     Int64;
    FAutoincMaxValue:     Int64;
    FAutoincCycled:       ByteBool;

   private
    procedure RecalcInternalSizes;
    procedure CreateDefaultValueExprIfNeeded;
   public
    constructor Create;
    destructor Destroy; override;
    procedure Assign(Source: TMYLDBMetaObjectDef); override;
    procedure SetFieldDefDataType(
                                  AdvancedFieldType: TMYLDBAdvancedFieldType;
                                  FieldSize:        Integer = 0
                                 ); overload;
    procedure SetFieldDefDataType(
                                  BaseFieldType: TMYLDBBaseFieldType;
                                  FieldSize:        Integer = 0
                                 ); overload;

    procedure LoadFromStream(Stream: TStream); override;
    procedure SaveToStream(Stream: TStream); override;

   public
    property BaseFieldType: TMYLDBBaseFieldType read FBaseFieldType write FBaseFieldType;
    property AdvancedFieldType: TMYLDBAdvancedFieldType read FAdvancedFieldType write FAdvancedFieldType;
    property FieldSize: Integer read FFieldSize write FFieldSize;
    property DiskOffset: Integer read FDiskOffset write FDiskOffset;
    property MemoryOffset: Integer read FMemoryOffset write FMemoryOffset;
    property DiskDataSize: Integer read FDiskDataSize write FDiskDataSize;
    property MemoryDataSize: Integer read FMemoryDataSize write FMemoryDataSize;
    property FieldNoReference: Integer read FFieldNoReference write FFieldNoReference;

    //property DefaultValueType: TMYLDBDefaultValueType read FDefaultValueType write FDefaultValueType;
    property DefaultValue: TMYLDBVariant read FDefaultValue write FDefaultValue;
    property DefaultValueExpr: TObject read FDefaultValueExpr;

    property AutoincIncrement: Int64    read FAutoincIncrement  write   FAutoincIncrement;
    property AutoincInitialValue: Int64 read FAutoincInitialValue write FAutoincInitialValue;
    property AutoincMinValue:  Int64    read FAutoincMinValue   write   FAutoincMinValue;
    property AutoincMaxValue:  Int64    read FAutoincMaxValue   write   FAutoincMaxValue;
    property AutoincCycled:    ByteBool read FAutoincCycled     write   FAutoincCycled;

    property BLOBCompressionAlgorithm: TMYLDBCompressionAlgorithm read FBLOBCompressionAlgorithm write FBLOBCompressionAlgorithm;
    property BLOBCompressionMode: TMYLDBCompressionMode read FBLOBCompressionMode write FBLOBCompressionMode;
    property BLOBBlockSize: Integer read FBLOBBlockSize write FBLOBBlockSize;
  end; // TMYLDBFieldDef


////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBIndexDef
//
////////////////////////////////////////////////////////////////////////////////


  TMYLDBIndexType = (itBTree,itAnotherOne);

  TMYLDBIndexColumn = class (TObject)
   private
    FFieldName:        String;
    FDescending:       ByteBool;
    FCaseInsensitive:  ByteBool;
    FMaxIndexedSize:   Integer;
   public
    procedure LoadFromStream(Stream: TStream);
    procedure SaveToStream(Stream: TStream);
   public
    property FieldName: String read FFieldName write FFieldName;
    property Descending: ByteBool read FDescending write FDescending;
    property CaseInsensitive: ByteBool read FCaseInsensitive write FCaseInsensitive;
    property MaxIndexedSize: Integer read FMaxIndexedSize write FMaxIndexedSize;
  end;


////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBIndexDef
//
////////////////////////////////////////////////////////////////////////////////

  TMYLDBIndexDef = class (TMYLDBMetaObjectDef)
   private
    FIndexType:           TMYLDBIndexType; // BTree or other
    FIndexColumns:        array of TMYLDBIndexColumn;
    FUnique:              ByteBool;
    FPrimary:             ByteBool;
    FRootPageNo:          TMYLDBPageNo;
    FTemporary:           ByteBool;
    FSessionID:           TMYLDBSessionID; // for temp index
    FTableState:          Integer;       // for temp index
    FNeedRebuild:         ByteBool;      // for temp index

    function GetIndexColumn(Index: Integer): TMYLDBIndexColumn;
    function GetColumnCount: Integer;
    procedure SetColumnCount(Value: Integer);
   public
    constructor Create;
    destructor Destroy; override;
    procedure Assign(Source: TMYLDBMetaObjectDef); override;
    procedure AssignByNames(FieldNames, AscDescList, CaseSensitivityList: TStringList);
    procedure LoadFromStream(Stream: TStream); override;
    procedure SaveToStream(Stream: TStream); override;
   public
    property IndexType: TMYLDBIndexType read FIndexType write FIndexType;
    property Columns[Index: Integer]: TMYLDBIndexColumn read GetIndexColumn;
    property ColumnCount: Integer read GetColumnCount write SetColumnCount;
    property Unique: ByteBool read FUnique write FUnique;
    property Primary: ByteBool read FPrimary write FPrimary;
    property RootPageNo: TMYLDBPageNo read FRootPageNo write FRootPageNo;
    property Temporary: ByteBool read FTemporary write FTemporary;
    property SessionID: TMYLDBSessionID read FSessionID write FSessionID;
    property TableState: Integer read FTableState write FTableState;
    property NeedRebuild: ByteBool read FNeedRebuild write FNeedRebuild;
  end; // TMYLDBIndexDef


////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBConstraintDef
//
////////////////////////////////////////////////////////////////////////////////


  TMYLDBConstraintDef = class (TMYLDBMetaObjectDef)
   private
    FConstraintType:  TMYLDBConstraintType;
   public
    procedure Assign(Source: TMYLDBMetaObjectDef); override;
   public
    property ConstraintType: TMYLDBConstraintType read FConstraintType write FConstraintType;
  end;


  TMYLDBConstraintDefNotNull = class (TMYLDBConstraintDef)
   private
    FTableSchemaName:          TMYLDBObjectName;  // Shema
    FTableSchemaObjectID:      TMYLDBObjectID;
    FTableName:                TMYLDBObjectName;  // Table
    FTableObjectID:            TMYLDBObjectID;
    FColumnName:               TMYLDBObjectName;  // Column
    FColumnObjectID:           TMYLDBObjectID;
   public
    constructor Create;
    procedure Assign(Source: TMYLDBMetaObjectDef); override;
    procedure SetNames(
                        ColumnName: String;
                        TableName: String = '';
                        SchemaName: String = ''
                       );
    procedure LoadFromStream(Stream: TStream); override;
    procedure SaveToStream(Stream: TStream); override;
   public
    property TableSchemaName: TMYLDBObjectName read FTableSchemaName write FTableSchemaName;
    property TableSchemaObjectID: TMYLDBObjectID read FTableSchemaObjectID write FTableSchemaObjectID;
    property TableName: TMYLDBObjectName read FTableName write FTableName;
    property TableObjectID: TMYLDBObjectID read FTableObjectID write FTableObjectID;
    property ColumnName: TMYLDBObjectName read FColumnName write FColumnName;
    property ColumnObjectID: TMYLDBObjectID read FColumnObjectID write FColumnObjectID;
  end;// TMYLDBConstraintDef


  TMYLDBConstraintDefCheck = class (TMYLDBConstraintDef)
   private
    FTableSchemaName:     TMYLDBObjectName;  // Shema
    FTableSchemaObjectID: TMYLDBObjectID;
    FTableName:           TMYLDBObjectName;  // Table
    FTableObjectID:       TMYLDBObjectID;
    FColumnName:          TMYLDBObjectName;  // Column
    FColumnObjectID:      TMYLDBObjectID;
    FMinValue:            TMYLDBVariant;
    FMaxValue:            TMYLDBVariant;
   public
    constructor Create;
    destructor Destroy; override;
    procedure Assign(Source: TMYLDBMetaObjectDef); override;
    procedure SetNames(
                        ColumnName: String;
                        TableName: String = '';
                        SchemaName: String = ''
                       );
    procedure LoadFromStream(Stream: TStream); override;
    procedure SaveToStream(Stream: TStream); override;
   public
    property MinValue: TMYLDBVariant read FMinValue;
    property MaxValue: TMYLDBVariant read FMaxValue;
    property TableSchemaName: TMYLDBObjectName read FTableSchemaName write FTableSchemaName;
    property TableSchemaObjectID: TMYLDBObjectID read FTableSchemaObjectID write FTableSchemaObjectID;
    property TableName: TMYLDBObjectName read FTableName write FTableName;
    property TableObjectID: TMYLDBObjectID read FTableObjectID write FTableObjectID;
    property ColumnName: TMYLDBObjectName read FColumnName write FColumnName;
    property ColumnObjectID: TMYLDBObjectID read FColumnObjectID write FColumnObjectID;
  end;//TMYLDBConstraintDefCheck


  TMYLDBConstraintColumn = record
    ColumnName:          TMYLDBObjectName;  // Column
    ColumnObjectID:      TMYLDBObjectID;
  end;


  TMYLDBConstraintDefUnique = class (TMYLDBConstraintDef)
   private
    FTableSchemaName:          TMYLDBObjectName;  // Shema
    FTableSchemaObjectID:      TMYLDBObjectID;
    FTableName:                TMYLDBObjectName;  // Table
    FTableObjectID:            TMYLDBObjectID;
    FIndexName:                TMYLDBObjectName;  // Index ID
    FIndexObjectID:            TMYLDBObjectID;
   public
    Columns: array of TMYLDBConstraintColumn; // Columns
   public
    constructor Create;
    destructor Destroy; override;
    procedure Assign(Source: TMYLDBMetaObjectDef); override;
    procedure LoadFromStream(Stream: TStream); override;
    procedure SaveToStream(Stream: TStream); override;
   public
    property TableSchemaName: TMYLDBObjectName read FTableSchemaName write FTableSchemaName;
    property TableSchemaObjectID: TMYLDBObjectID read FTableSchemaObjectID write FTableSchemaObjectID;
    property TableName: TMYLDBObjectName read FTableName write FTableName;
    property TableObjectID: TMYLDBObjectID read FTableObjectID write FTableObjectID;
    property IndexName: TMYLDBObjectName read FIndexName write FIndexName;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -