📄 absbase.pas
字号:
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 + -