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

📄 absbase.pas

📁 Absolute Database 是来替代BDE[Borland数据库引擎]的用于Delphi 和 C++ Builder 开发用的数据库引擎. 它小巧, 高速, 健壮, 易于使用. 它能直接编译进
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit ABSBase;

interface

uses SysUtils, Classes,

// AbsoluteDatabase units
{$I ABSVer.inc}

     {$IFDEF DEBUG_LOG}
     ABSDebug,
     {$ENDIF}
     ABSMemory,
     ABSCompression,
     ABSSecurity,
     ABSTypes,
     ABSConverts,
     ABSTypesRoutines,
     ABSVariant,
     ABSLexer,
     ABSExcept,
     ABSConst;

type
 // Events
 TABSFilterRecord = Pointer;


type

  TABSBaseSession = class;
  TABSCursor = class;
  TABSIndexDef = class;
  TABSFieldDef = class;

  TABSFieldDefs = class;
  TABSIndexDefs = class;

  TABSCursorPos = record
   FirstPosition: Boolean;
   LastPosition:  Boolean;
   RecordID:      TABSRecordID;
  end;
  PABSCursorPos = ^TABSCursorPos;

////////////////////////////////////////////////////////////////////////////////
//
// TABSMetaObjectDef
//
////////////////////////////////////////////////////////////////////////////////


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



////////////////////////////////////////////////////////////////////////////////
//
// TABSFieldDef
//
////////////////////////////////////////////////////////////////////////////////


  TABSFieldDef = class (TABSMetaObjectDef)
   private
    FBaseFieldType:             TABSBaseFieldType;
    FAdvancedFieldType:         TABSAdvancedFieldType;
    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:              TABSVariant;
    FDefaultValueExpr:          TObject;

    // Blob data
    FBLOBCompressionAlgorithm:  TABSCompressionAlgorithm;
    FBLOBCompressionMode:       TABSCompressionMode;
    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: TABSMetaObjectDef); override;
    procedure SetFieldDefDataType(
                                  AdvancedFieldType: TABSAdvancedFieldType;
                                  FieldSize:        Integer = 0
                                 ); overload;
    procedure SetFieldDefDataType(
                                  BaseFieldType: TABSBaseFieldType;
                                  FieldSize:        Integer = 0
                                 ); overload;

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

   public
    property BaseFieldType: TABSBaseFieldType read FBaseFieldType write FBaseFieldType;
    property AdvancedFieldType: TABSAdvancedFieldType 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: TABSDefaultValueType read FDefaultValueType write FDefaultValueType;
    property DefaultValue: TABSVariant 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: TABSCompressionAlgorithm read FBLOBCompressionAlgorithm write FBLOBCompressionAlgorithm;
    property BLOBCompressionMode: TABSCompressionMode read FBLOBCompressionMode write FBLOBCompressionMode;
    property BLOBBlockSize: Integer read FBLOBBlockSize write FBLOBBlockSize;
  end; // TABSFieldDef


////////////////////////////////////////////////////////////////////////////////
//
// TABSIndexDef
//
////////////////////////////////////////////////////////////////////////////////


  TABSIndexType = (itBTree,itAnotherOne);

  TABSIndexColumn = 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;


////////////////////////////////////////////////////////////////////////////////
//
// TABSIndexDef
//
////////////////////////////////////////////////////////////////////////////////

  TABSIndexDef = class (TABSMetaObjectDef)
   private
    FIndexType:           TABSIndexType; // BTree or other
    FIndexColumns:        array of TABSIndexColumn;
    FUnique:              ByteBool;
    FPrimary:             ByteBool;
    FRootPageNo:          TABSPageNo;
    FTemporary:           ByteBool;
    FSessionID:           TABSSessionID; // for temp index
    FTableState:          Integer;       // for temp index
    FNeedRebuild:         ByteBool;      // for temp index

    function GetIndexColumn(Index: Integer): TABSIndexColumn;
    function GetColumnCount: Integer;
    procedure SetColumnCount(Value: Integer);
   public
    constructor Create;
    destructor Destroy; override;
    procedure Assign(Source: TABSMetaObjectDef); override;
    procedure AssignByNames(FieldNames, AscDescList, CaseSensitivityList: TStringList);
    procedure LoadFromStream(Stream: TStream); override;
    procedure SaveToStream(Stream: TStream); override;
   public
    property IndexType: TABSIndexType read FIndexType write FIndexType;
    property Columns[Index: Integer]: TABSIndexColumn 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: TABSPageNo read FRootPageNo write FRootPageNo;
    property Temporary: ByteBool read FTemporary write FTemporary;
    property SessionID: TABSSessionID read FSessionID write FSessionID;
    property TableState: Integer read FTableState write FTableState;
    property NeedRebuild: ByteBool read FNeedRebuild write FNeedRebuild;
  end; // TABSIndexDef


////////////////////////////////////////////////////////////////////////////////
//
// TABSConstraintDef
//
////////////////////////////////////////////////////////////////////////////////


  TABSConstraintDef = class (TABSMetaObjectDef)
   private
    FConstraintType:  TABSConstraintType;
   public
    procedure Assign(Source: TABSMetaObjectDef); override;
   public
    property ConstraintType: TABSConstraintType read FConstraintType write FConstraintType;
  end;


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


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


  TABSConstraintColumn = record
    ColumnName:          TABSObjectName;  // Column
    ColumnObjectID:      TABSObjectID;
  end;


  TABSConstraintDefUnique = class (TABSConstraintDef)
   private
    FTableSchemaName:          TABSObjectName;  // Shema
    FTableSchemaObjectID:      TABSObjectID;
    FTableName:                TABSObjectName;  // Table
    FTableObjectID:            TABSObjectID;
    FIndexName:                TABSObjectName;  // Index ID
    FIndexObjectID:            TABSObjectID;
   public
    Columns: array of TABSConstraintColumn; // Columns
   public
    constructor Create;
    destructor Destroy; override;
    procedure Assign(Source: TABSMetaObjectDef); override;
    procedure LoadFromStream(Stream: TStream); override;
    procedure SaveToStream(Stream: TStream); override;
   public
    property TableSchemaName: TABSObjectName read FTableSchemaName write FTableSchemaName;
    property TableSchemaObjectID: TABSObjectID read FTableSchemaObjectID write FTableSchemaObjectID;
    property TableName: TABSObjectName read FTableName write FTableName;
    property TableObjectID: TABSObjectID read FTableObjectID write FTableObjectID;
    property IndexName: TABSObjectName read FIndexName write FIndexName;
    property IndexObjectID: TABSObjectID read FIndexObjectID write FIndexObjectID;
  end;//TABSConstraintDefUnique


⌨️ 快捷键说明

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