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

📄 absconst.pas

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

interface

{$I ABSVer.inc}

uses  SysUtils, ABSSecurity;

{$I ABSErrorL.inc}
{$I ABSErrorA.inc}
{$I ABSErrorG.inc}

const ABSVersion = 5.18;
      ABSVersionText = '';
      ABSSignature = 'ABS1';

      ABSDiskSignature2 = 'DATABASE'; // 8 chars
      ABSDiskSignature1 = 'ABS0LUTE'; // 8 chars

      ABSDiskPageSignature = 'ABSP';
      ABSMemoryDatabaseName = 'MEMORY';
      ABSTemporaryDatabaseName = 'TEMP';
      ABSTemporaryIndexName = 'TEMPORARY_INDEX_';
      ABSTemporaryTableName = 'TEMPORARY_TABLE_';
      ABSExpressionFieldName = 'Expr';
      ABSDatabaseFileExtension = '.abs';

const
      SOnNeedRepair = 'Database file was not correctly closed last time. Do you want to repair it?';
      SOnNeedConvert = 'Database file you are opening is of old format. It will be converted to the current Absolute Database format now. It is recommended to make a backup of the database before continuing.';

      SRepairDialogMessage = 'Repairing Database...';
      SCompactingDialogMessage = 'Compacting Database...';
      SChangePasswordDialogMessage = 'Changing Database Password...';
      SChangeDatabaseSettingsDialogMessage = 'Changing Database Settings...';
      SCopyTableDialogMessage = 'Copy Table...';
      SImportTableDialogMessage = 'Import Table...';
      SExportTableDialogMessage = 'Export Table...';
      SRestructureTableDialogMessage = 'Restructure Table...';
      SBatchMoveDialogMessage = 'Batch Moving...';
      SAborted = 'Terminated by User.';
      SBatchMove = 'Batch Move...';
      SABSFuncStart = '%s start';
      SABSFuncEnd = '%s end';

//------------------------------------------------------------------------------
// disk consts
//------------------------------------------------------------------------------

 const DefaultPageSize = 4096;
 const DefaultExtentPageCount = 8;
 const DefaultCryptoAgorithm = craRijndael_128;

 const DefaultMaxSessionCount = 500;

 //const DefaultDBHeaderReserved = 0;
 //const DefaultLockedBytesReserved = 0;
 //const DefaultLockedBytesCount = 2;
 const DefaultRetryCount = 20;
 const DefaultDelayMS = 50;
 const OffsetToFreeSpaceManagerLockByte = 2;
 const OffsetToTablesLockByte = 3;
 const OffsetToDBHeaderLockByte = 4;

 const WriteChangesStarted = 1;
 const WriteChangesFinished = 2;
 // Maximum number of LockTypes
 const ABSMaxLockTypes = 6;

 // locking retries, delays
 const LockTablesRetries = 4500;
 const LockTablesDelay = 20;
 const DBHeaderLockRetries = 4500;
 const DBHeaderLockDelay = 20;
 const LockLastObjectIDRetries = 4500;
 const LockLastObjectIDDelay = 20;
 const ConnectSessionLockRetries = 4500;
 const ConnectSessionLockDelay = 20;
 const DisconnectSessionLockRetries = 4500;
 const DisconnectSessionLockDelay = 20;
 const OpenTableLockRetries = 50;
 const OpenTableLockDelay = 100;
 const RecordLockRetries = 15;
 const RecordLockDelay = 100;
 const EditRecordTableLockRetries = 900;
 const EditRecordTableLockDelay = 100;
 const DeleteRecordTableLockRetries = 900;
 const DeleteRecordTableLockDelay = 100;
 const PostRecordTableLockRetries = 2250;
 const PostRecordTableLockDelay = 40;
 const GetRecordTableLockRetries = 2250;
 const GetRecordTableLockDelay = 40;
 const CreateBlobStreamTableLockRetries = 2250;
 const CreateBlobStreamTableLockDelay = 40;
 const SearchTableLockRetries = 2250;
 const SearchTableLockDelay = 40;
 const BatchUpdateTableLockRetries = 1125;
 const BatchUpdateTableLockDelay = 80;
 const BatchUpdateTableIfFailedRetries = 15;
 const BatchUpdateTableIfFailedDelay = 100;
 const SelectTrialTableLockRetries = 2;
 const SelectTrialTableLockDelay = 20;
 const SelectTablesLockRetries = 900;
 const SelectTablesLockDelay = 100;
 const CommitTablesLockRetries = 900;
 const CommitTablesLockDelay = 100;
 const RangeTablesLockRetries = 900;
 const RangeTablesLockDelay = 100;

 // unlocking retries, delays
 const TableUnlockRetries = 4500;
 const TableUnlockDelay = 20;
 const RecordUnlockRetries = 4500;
 const RecordUnlockDelay = 20;

 // reopen file on lost connection retries, delays
 const ReopenDatabaseFileRetries = 3;
 const ReopenDatabaseFileDelay = 1000;

 // System First Pages
 const
        //ABSFirstPageNoEAM = 0;
        //ABSFirstPageNoPFS = 1;
        ABSFirstPageNoSystemDirectory = 2; 

 // Page Types
 const
        ptUnknown =              0;
        ptEmpty =                1;
        ptEAM =                  2;
        ptPFS =                  3;
        ptFileSystemDirectory =  4;
        ptActiveSessionList =    5;
        ptTableList =            6;
        ptTableLocksFile =       7;
        ptTableMetaDataFile =    8;
        ptTableMostUpdatedFile = 9;
        ptTableRecord =          10;
        ptTableBlob =            11;
        ptTableIndex =           12;

        ptLastType =             12;
        ptAnyPage =              $FF;

 ABSPageTypeNames: array [0..ptLastType] of String = (
        'Unknown Page',
        'Empty Page',
        'EAM Page',
        'PFS Page',
        'FileSystemDirectory Page',
        'ActiveSessionList Page',
        'TableList Page',
        'TableLocks Page',
        'TableMetaData Page',
        'TableMostUpdated Page',
        'TableRecord Page',
        'TableBlob Page',
        'TableIndex Page'
        );

 ABS_PAGE_IS_FREE = 0;
 ABS_PAGE_IS_FULL = 1;

 ABS_EXTENT_IS_FREE = 0;          // 00
 ABS_EXTENT_IS_PARTIAL_USED = 1;  // 01
 ABS_EXTENT_IS_FULL = 3;          // 11


 // Invalid ID - returned by find methods in case if object was not found
 const MAX_NAME_LENGTH = 255;
 const INVALID_ID8 = Int64(-1);
 const INVALID_ID4 = Integer(-1);
 const OBJECTID_IS_NULL = Integer(-1);
 const INVALID_PAGE_NO = Integer(-1);
 const INVALID_OBJECT_ID = INVALID_ID4;
 const INVALID_PAGE_RECORD_NO = $FFFF;
 const INVALID_PAGE_ITEM_NO = $FFFF;

 // DateTime Const                
 const TIME_IS_NULL = 0;//MaxInt;
{$WARNINGS OFF}
 const DATE_IS_NULL: Integer = $80000000;
{$WARNINGS ON}
 const MILSECS_IN_DAY = 24*60*60*1000;

 // indexed only first 20 chars in string fields
 DEFAULT_MAX_INDEXED_SIZE = 20;
 DEFAULT_BLOB_TO_STRING_FIELD_SIZE = 4096;
 DEFAULT_TABLE_MEMORY_BLOB_FILE_SIZE = 1024*1024;


 // BTree
 const BTreeNullFlagSize = 1;
 const BTreeKeyIsNull    = #1;
 const BTreeKeyIsNotNull = #0;

 const INVALID_SESSION_ID = Integer(-1);
 const SYSTEM_SESSION_ID = Integer(-2);
 const MIN_SESSION_ID = Integer(-2);

 // error codes

 const ABS_ERR_OK = 0;
 const ABS_ERR_INSERT_RECORD = -1;
 const ABS_ERR_UPDATE_RECORD = -2;
 const ABS_ERR_DELETE_RECORD = -3;
 const ABS_ERR_UPDATE_RECORD_MODIFIED = -4;
 const ABS_ERR_DELETE_RECORD_MODIFIED = -5;
 const ABS_ERR_UPDATE_RECORD_DELETED = -6;
 const ABS_ERR_DELETE_RECORD_DELETED = -7;

 const ABS_ERR_CONSTRAINT_VIOLATED = -8;
 const ABS_ERR_UPDATE_RECORD_PROHIBITED = -9;
 const ABS_ERR_DELETE_RECORD_PROHIBITED = -10;
 const ABS_ERR_CANCEL_PROHIBITED = -11;

 const ABS_ERR_RECORD_LOCKED = -12;
 const ABS_ERR_TABLE_LOCKED = -13;


 // ASC, DESC, CASE INSENSITIVITY constants
 const ABS_ASC = 'ASC';
       ABS_DESC = 'DESC';
       ABS_NO_CASE = 'NO_CASE';
       ABS_CASE = 'CASE';

 // Auto generation object names
 const
       AutoNameSymbol = '$';
       AutoNameSequenceAutoIncPrefix = 'Autoinc';
       AutoNameConstraintNotNullPrefix = 'C_NotNull';
       AutoNameConstraintCheckPrefix = 'C_Check';
       AutoNameConstraintPKPreffix = 'C_PK';
       AutoNameConstraintUniquePreffix = 'C_Unique';

 // encryption
 const ABS_CONTROL_BLOCK_SIZE = 256;

 // page.state
 const DELETED_PAGE_STATE = MaxInt;
 const INVALID_PAGE_STATE = MaxInt-1;
 const LAST_VALID_PAGE_STATE = MaxInt-2;


type
  TReservedWord =
  (
   rwABSOLUTE
   ,rwACTION
   ,rwADD
   ,rwALL
   ,rwALLOCATE
   ,rwALTER
   ,rwAND
   ,rwANY
   ,rwARE
   ,rwAS
   ,rwASC
   ,rwASSERTION
   ,rwAT
   ,rwAUTHORIZATION
   ,rwAVG
   ,rwBEGIN
   ,rwBETWEEN
   ,rwBIT
   ,rwBIT_LENGTH
   ,rwBOTH
   ,rwBY
   ,rwCASCADE
   ,rwCASCADED
   ,rwCASE
   ,rwCAST
   ,rwCATALOG
   ,rwCHAR
   ,rwCHARACTER
   ,rwCHAR_LENGTH
   ,rwCHARACTER_LENGTH
   ,rwCHECK
   ,rwCLOSE
   ,rwCOALESCE
   ,rwCOLLATE
   ,rwCOLLATION
   ,rwCOLUMN
   ,rwCOMMIT
   ,rwCONNECT
   ,rwCONNECTION
   ,rwCONSTRAINT
   ,rwCONSTRAINTS
   ,rwCONTINUE
   ,rwCONVERT
   ,rwCORRESPONDING
   ,rwCOUNT
   ,rwCREATE
   ,rwCROSS
   ,rwCURRENT
   ,rwCURRENT_DATE
   ,rwCURRENT_TIME
   ,rwCURRENT_TIMESTAMP
   ,rwCURRENT_USER
   ,rwCURSOR
   ,rwDATE
   ,rwDAY
   ,rwDEALLOCATE
   ,rwDEC
   ,rwDECIMAL
   ,rwDECLARE
   ,rwDEFAULT
   ,rwDEFERRABLE
   ,rwDEFERRED
   ,rwDELETE
   ,rwDESC
   ,rwDESCRIBE
   ,rwDESCRIPTOR
   ,rwDIAGNOSTICS
   ,rwDISCONNECT
   ,rwDISTINCT
   ,rwDOMAIN
   ,rwDOUBLE
   ,rwDROP
   ,rwELSE
   ,rwEND
   ,rwEND_EXEC
   ,rwESCAPE
   ,rwEXCEPT
   ,rwEXCEPTION
   ,rwEXEC
   ,rwEXECUTE
   ,rwEXISTS
   ,rwEXTERNAL
   ,rwEXTRACT
   ,rwFALSE
   ,rwFETCH
   ,rwFIRST
   ,rwFLOAT
   ,rwFOR
   ,rwFOREIGN
   ,rwFOUND
   ,rwFROM
   ,rwFULL
   ,rwGET
   ,rwGLOBAL
   ,rwGO
   ,rwGOTO
   ,rwGRANT
   ,rwGROUP
   ,rwHAVING
   ,rwHOUR
   ,rwIDENTITY
   ,rwIMMEDIATE
   ,rwIN
   ,rwINDICATOR
   ,rwINITIALLY
   ,rwINNER
   ,rwINPUT
   ,rwINSENSITIVE
   ,rwINSERT
   ,rwINT
   ,rwINTEGER
   ,rwINTERSECT
   ,rwINTERVAL
   ,rwINTO
   ,rwIS
   ,rwISOLATION
   ,rwJOIN
   ,rwKEY
   ,rwLANGUAGE
   ,rwLAST
   ,rwLEADING
   ,rwLEFT
   ,rwLEVEL
   ,rwLIKE
   ,rwLOCAL
   ,rwLOWER
   ,rwMATCH
   ,rwMAX
   ,rwMEMORY
   ,rwMIN
   ,rwMINUS
   ,rwMINUTE
   ,rwMODULE
   ,rwMONTH
   ,rwNAMES
   ,rwNATIONAL
   ,rwNATURAL
   ,rwNCHAR
   ,rwNEXT
   ,rwNO
   ,rwNOT
   ,rwNULL
   ,rwNULLIF
   ,rwNUMERIC
   ,rwOCTET_LENGTH
   ,rwOF
   ,rwON
   ,rwONLY
   ,rwOPEN
   ,rwOPTION
   ,rwOR
   ,rwORDER
   ,rwOUTER
   ,rwOUTPUT
   ,rwOVERLAPS
   ,rwPAD
   ,rwPARTIAL
   ,rwPOSITION
   ,rwPRECISION
   ,rwPREPARE
   ,rwPRESERVE
   ,rwPRIMARY
   ,rwPRIOR
   ,rwPRIVILEGES
   ,rwPROCEDURE
   ,rwPUBLIC
   ,rwREAD
   ,rwREAL
   ,rwREFERENCES
   ,rwRELATIVE
   ,rwRESTRICT
   ,rwREVOKE
   ,rwRIGHT
   ,rwROLLBACK
   ,rwROWS

⌨️ 快捷键说明

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