unit ABSConst;

interface

{$I ABSVer.inc}

uses  SysUtils, ABSSecurity;

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

const ABSVersion = 7.93;
      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 = 200;
 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 AnsiString 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 : AnsiChar = #1;
 const BTreeKeyIsNotNull : AnsiChar = #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
   ,rwSCHEMA
   ,rwSCROLL
   ,rwSECOND
   ,rwSECTION
   ,rwSELECT
   ,rwSESSION
   ,rwSESSION_USER
   ,rwSET
   ,rwSIZE
   ,rwSMALLINT
   ,rwSOME
   ,rwSPACE
   ,rwSQL
   ,rwSQLCODE
   ,rwSQLERROR
   ,rwSQLSTATE
   ,rwSUBSTRING
   ,rwSUM
   ,rwSYSTEM_USER
   ,rwTABLE
   ,rwTEMPORARY
   ,rwTHEN
   ,rwTIME
   ,rwTIMESTAMP
   ,rwTIMEZONE_HOUR
   ,rwTIMEZONE_MINUTE
   ,rwTO
   ,rwTOP
   ,rwTRAILING
   ,rwTRANSACTION
   ,rwTRANSLATE
   ,rwTRANSLATION
   ,rwTRIM
   ,rwTRUE
   ,rwUNION
   ,rwUNIQUE
   ,rwUNKNOWN
   ,rwUPDATE
   ,rwUPPER
   ,rwUSAGE
   ,rwUSER
   ,rwUSING
   ,rwVALUE
   ,rwVALUES
   ,rwVARCHAR
   ,rwVARYING
   ,rwVIEW
   ,rwWHEN
   ,rwWHENEVER
   ,rwWHERE
   ,rwWITH
   ,rwWORK
   ,rwWRITE
   ,rwYEAR
   ,rwZONE
   ,rwPASSWORD                // for DDL commands
   ,rwBLOBBLOCKSIZE           // for DDL commands
   ,rwBLOBCOMPRESSIONMODE     // for DDL commands
   ,rwBLOBCOMPRESSIONALGORITHM// for DDL commands
   ,rwLAST_AUTOINC            // for DDL commands
   ,rwMODIFY                  // alter table blablabla modify ...
   ,rwNEW                     // for NEW PASSWORD in ALTER TABLE
   ,rwINDEX                   // for CREATE INDEX ...
   ,rwNOCASE                  // for CREATE INDEX ... NOCASE
   ,rwLTRIM
   ,rwRTRIM
   ,rwPOS
   ,rwLENGTH
   ,rwSYSDATE
   ,rwNOW
   ,rwTODATE
   ,rwTOSTRING
   ,rwAUTOINDEXES
   ,rwNOAUTOINDEXES
   ,rwINCREMENT
   ,rwLASTVALUE
   ,rwMAXVALUE
   ,rwMINVALUE
   ,rwCYCLED
   ,rwNOMAXVALUE
   ,rwNOMINVALUE
   ,rwNOCYCLED
   ,rwINITIALVALUE
   ,rwSTARTVALUE
   ,rwRENAME
   ,rwSTART
   ,rwFLUSH
   ,rwAUTOINC
   ,rwMIMETOBIN
   ,rwROWNUM
   ,rwIF
   ,rwTRUNCATE
   ,rwABS
   ,rwACOS
   ,rwASIN
   ,rwATAN
   ,rwCEIL
   ,rwCOS
   ,rwEXP
   ,rwFLOOR
   ,rwLOG
   ,rwPOWER
   ,rwRAND
   ,rwROUND
   ,rwSIGN
   ,rwSIN
   ,rwSQR
   ,rwSQRT
   ,rwHALFEVEN
   ,rwHALFPOS
   ,rwHALFNEG
   ,rwHALFDOWN
   ,rwHALFUP
   ,rwRNDNEG
   ,rwRNDPOS
   ,rwRNDDOWN
   ,rwRNDUP
   ,rwNone
  );

const
  ABSMaxSQLReservedWords = 291;
  ABSSQLReservedWords: array[0..ABSMaxSQLReservedWords] of string =
  (
   'ABSOLUTE'
   ,'ACTION'
   ,'ADD'
   ,'ALL'
   ,'ALLOCATE'
   ,'ALTER'
   ,'AND'
   ,'ANY'
   ,'ARE'
   ,'AS'
   ,'ASC'
   ,'ASSERTION'
   ,'AT'
   ,'AUTHORIZATION'
   ,'AVG'
   ,'BEGIN'
   ,'BETWEEN'
   ,'BIT'
   ,'BIT_LENGTH'
   ,'BOTH'
   ,'BY'
   ,'CASCADE'
   ,'CASCADED'
   ,'CASE'
   ,'CAST'
   ,'CATALOG'
   ,'CHAR'
   ,'CHARACTER'
   ,'CHAR_LENGTH'
   ,'CHARACTER_LENGTH'
   ,'CHECK'
   ,'CLOSE'
   ,'COALESCE'
   ,'COLLATE'
   ,'COLLATION'
   ,'COLUMN'
   ,'COMMIT'
   ,'CONNECT'
   ,'CONNECTION'
   ,'CONSTRAINT'
   ,'CONSTRAINTS'
   ,'CONTINUE'
   ,'CONVERT'
   ,'CORRESPONDING'
   ,'COUNT'
   ,'CREATE'
   ,'CROSS'
   ,'CURRENT'
   ,'CURRENT_DATE'
   ,'CURRENT_TIME'
   ,'CURRENT_TIMESTAMP'
   ,'CURRENT_USER'
   ,'CURSOR'
   ,'DATE'
   ,'DAY'
   ,'DEALLOCATE'
   ,'DEC'
   ,'DECIMAL'
   ,'DECLARE'
   ,'DEFAULT'
   ,'DEFERRABLE'
   ,'DEFERRED'
   ,'DELETE'
   ,'DESC'
   ,'DESCRIBE'
   ,'DESCRIPTOR'
   ,'DIAGNOSTICS'
   ,'DISCONNECT'
   ,'DISTINCT'
   ,'DOMAIN'
   ,'DOUBLE'
   ,'DROP'
   ,'ELSE'
   ,'END'
   ,'END-EXEC'
   ,'ESCAPE'
   ,'EXCEPT'
   ,'EXCEPTION'
   ,'EXEC'
   ,'EXECUTE'
   ,'EXISTS'
   ,'EXTERNAL'
   ,'EXTRACT'
   ,'FALSE'
   ,'FETCH'
   ,'FIRST'
   ,'FLOAT'
   ,'FOR'
   ,'FOREIGN'
   ,'FOUND'
   ,'FROM'
   ,'FULL'
   ,'GET'
   ,'GLOBAL'
   ,'GO'
   ,'GOTO'
   ,'GRANT'
   ,'GROUP'
   ,'HAVING'
   ,'HOUR'
   ,'IDENTITY'
   ,'IMMEDIATE'
   ,'IN'
   ,'INDICATOR'
   ,'INITIALLY'
   ,'INNER'
   ,'INPUT'
   ,'INSENSITIVE'
   ,'INSERT'
   ,'INT'
   ,'INTEGER'
   ,'INTERSECT'
   ,'INTERVAL'
   ,'INTO'
   ,'IS'
   ,'ISOLATION'
   ,'JOIN'
   ,'KEY'
   ,'LANGUAGE'
   ,'LAST'
   ,'LEADING'
   ,'LEFT'
   ,'LEVEL'
   ,'LIKE'
   ,'LOCAL'
   ,'LOWER'
   ,'MATCH'
   ,'MAX'
   ,'MEMORY'
   ,'MIN'
   ,'MINUS'
   ,'MINUTE'
   ,'MODULE'
   ,'MONTH'
   ,'NAMES'
   ,'NATIONAL'
   ,'NATURAL'
   ,'NCHAR'
   ,'NEXT'
   ,'NO'
   ,'NOT'
   ,'NULL'
   ,'NULLIF'
   ,'NUMERIC'
   ,'OCTET_LENGTH'
   ,'OF'
   ,'ON'
   ,'ONLY'
   ,'OPEN'
   ,'OPTION'
   ,'OR'
   ,'ORDER'
   ,'OUTER'
   ,'OUTPUT'
   ,'OVERLAPS'
   ,'PAD'
   ,'PARTIAL'
   ,'POSITION'
   ,'PRECISION'
   ,'PREPARE'
   ,'PRESERVE'
   ,'PRIMARY'
   ,'PRIOR'
   ,'PRIVILEGES'
   ,'PROCEDURE'
   ,'PUBLIC'
   ,'READ'
   ,'REAL'
   ,'REFERENCES'
   ,'RELATIVE'
   ,'RESTRICT'
   ,'REVOKE'
   ,'RIGHT'
   ,'ROLLBACK'
   ,'ROWS'
   ,'SCHEMA'
   ,'SCROLL'
   ,'SECOND'
   ,'SECTION'
   ,'SELECT'
   ,'SESSION'
   ,'SESSION_USER'
   ,'SET'
   ,'SIZE'
   ,'SMALLINT'
   ,'SOME'
   ,'SPACE'
   ,'SQL'
   ,'SQLCODE'
   ,'SQLERROR'
   ,'SQLSTATE'
   ,'SUBSTRING'
   ,'SUM'
   ,'SYSTEM_USER'
   ,'TABLE'
   ,'TEMPORARY'
   ,'THEN'
   ,'TIME'
   ,'TIMESTAMP'
   ,'TIMEZONE_HOUR'
   ,'TIMEZONE_MINUTE'
   ,'TO'
   ,'TOP'
   ,'TRAILING'
   ,'TRANSACTION'
   ,'TRANSLATE'
   ,'TRANSLATION'
   ,'TRIM'
   ,'TRUE'
   ,'UNION'
   ,'UNIQUE'
   ,'UNKNOWN'
   ,'UPDATE'
   ,'UPPER'
   ,'USAGE'
   ,'USER'
   ,'USING'
   ,'VALUE'
   ,'VALUES'
   ,'VARCHAR'
   ,'VARYING'
   ,'VIEW'
   ,'WHEN'
   ,'WHENEVER'
   ,'WHERE'
   ,'WITH'
   ,'WORK'
   ,'WRITE'
   ,'YEAR'
   ,'ZONE'
   ,'PASSWORD'              // for DDL commands
   ,'BLOBBLOCKSIZE'         // for DDL commands
   ,'BLOBCOMPRESSIONMODE'   // for DDL commands
   ,'BLOBCOMPRESSIONALGORITHM'// for DDL commands
   ,'LASTAUTOINC'           // for DDL commands
   ,'MODIFY'                // alter table blablabla modify ...
   ,'NEW'                   // for NEW PASSWORD in ALTER TABLE
   ,'INDEX'                 // for CREATE INDEX ...
   ,'NOCASE'                // for CREATE INDEX ... NOCASE ..
   ,'LTRIM'
   ,'RTRIM'
   ,'POS'
   ,'LENGTH'
   ,'SYSDATE'               // DateTime function
   ,'NOW'
   ,'TODATE'                // DateTime function
   ,'TOSTRING'                // DateTime function
   ,'AUTOINDEXES'           // for DDL AutoIndexes
   ,'NOAUTOINDEXES'         // for DDL AutoIndexes
   ,'INCREMENT'
   ,'LASTVALUE'
   ,'MAXVALUE'
   ,'MINVALUE'
   ,'CYCLED'
   ,'NOMAXVALUE'
   ,'NOMINVALUE'
   ,'NOCYCLED'
   ,'INITIALVALUE'
   ,'STARTVALUE'
   ,'RENAME'
   ,'START'
   ,'FLUSH'
   ,'AUTOINC'
   ,'MIMETOBIN'
   ,'ROWNUM'
   ,'IF'
   ,'TRUNCATE'
   ,'ABS'
   ,'ACOS'
   ,'ASIN'
   ,'ATAN'
   ,'CEIL'
   ,'COS'
   ,'EXP'
   ,'FLOOR'
   ,'LOG'
   ,'POWER'
   ,'RAND'
   ,'ROUND'
   ,'SIGN'
   ,'SIN'
   ,'SQR'
   ,'SQRT'
   ,'HALFEVEN'
   ,'HALFPOS'
   ,'HALFNEG'
   ,'HALFDOWN'
   ,'HALFUP'
   ,'RNDNEG'
   ,'RNDPOS'
   ,'RNDDOWN'
   ,'RNDUP'
  );

implementation

end.
