unit uDAElevateDBInterfaces; {----------------------------------------------------------------------------} { Data Abstract Library - Core Library } { } { compiler: Delphi 6 and up, Kylix 3 and up } { platform: Win32, Linux } { } { (c)opyright RemObjects Software. all rights reserved. } { } { Using this code requires a valid license of the Data Abstract } { which can be obtained at http://www.remobjects.com. } {----------------------------------------------------------------------------} {$I DataAbstract.inc} interface uses uROClasses, uDAInterfaces, uDAEngine; type IDAElevateConnection = interface(IDAConnection) ['{30A997EA-0EBE-41D0-AD13-521DEFCDFE0D}'] end; TDAElevateDBDriver = class(TDAEDriver) protected function GetDefaultConnectionType(const AuxDriver: string): string; override; {$IFNDEF FPC_SAFECALL_BUG}safecall;{$ENDIF} end; TDAElevateDBConnection = class(TDAEConnection, IDAConnection, IDAElevateConnection, IDADirectoryBasedDatabase) protected Procedure CheckConnected; virtual; procedure DoGetTableNames(out List: IROStrings); override; procedure DoGetViewNames(out List: IROStrings); override; procedure DoGetStoredProcedureNames(out List: IROStrings); override; procedure DoGetForeignKeys(out ForeignKeys: TDADriverForeignKeyCollection); override; procedure DoGetTableFields(const aTableName: string; out Fields: TDAFieldCollection); override; function GetSPSelectSyntax(HasArguments: Boolean): string; override; {$IFNDEF FPC_SAFECALL_BUG}safecall;{$ENDIF} function IdentifierNeedsQuoting(const iIdentifier: string): boolean; override; safecall; end; const ElevateDB_DriverType = 'ElevateDB'; ElevateDB_ConfigDBName = 'Configuration'; procedure ElevateDB_RegisterDatabase(Query: IDADataset; ADataBaseName: string;aPath: String); procedure ElevateDB_DoGetNames(Query: IDADataset; AList: IROStrings; AObjectType: TDAObjecttype); procedure ElevateDB_DoGetForeignKeys(Query: IDADataset; ForeignKeys: TDADriverForeignKeyCollection); procedure ElevateDB_DoGetTableFields(const aTableName: string; Query: IDADataset; out Fields: TDAFieldCollection); function ElevateDB_GetSPSelectSyntax(HasArguments: Boolean): String; function ElevateDB_IdentifierNeedsQuoting(const iIdentifier: string): boolean; implementation uses Classes,SysUtils; var ElevateDB_reservedwords: array of string; procedure ElevateDB_RegisterDatabase(Query: IDADataset; ADataBaseName: string;aPath: String); const s_SQL = 'Select Count(*) from Databases Where name = ''%s'''; s_DropDataBaseSQL = 'DROP DATABASE "%s" KEEP CONTENTS'; s_CreateDataBaseSQL = 'CREATE DATABASE "%s" PATH ''%s'''; begin try Query.SQL := Format(s_SQL, [aDataBaseName]); Query.Open; if Query.Fields[0].AsInteger =0 then begin Query.Close; Query.SQL := Format(s_CreateDataBaseSQL, [aDataBaseName, aPath]); Query.Execute; end; finally Query := nil; end; end; procedure ElevateDB_DoGetNames(Query: IDADataset; AList: IROStrings; AObjectType: TDAObjecttype); const sDoGetTableNames = 'SELECT Name FROM Information.Tables'; sDoGetViewNames = 'SELECT Name FROM Information.Views'; sDoGetProcedures = 'SELECT Name FROM Information.Procedures'; begin try case AObjectType of dotTable: Query.SQL := sDoGetTableNames; dotView: Query.SQL := sDoGetViewNames; dotProcedure: Query.SQL := sDoGetProcedures; end; Query.Open; while not Query.Eof do begin Alist.Add(Query.Fields[0].AsString); Query.Next; end; finally Query := nil; end; end; procedure ElevateDB_DoGetForeignKeys(Query: IDADataset; ForeignKeys: TDADriverForeignKeyCollection); const sFK_SQL = 'Select c.tablename,c.name, c.targettable, cc.columnname '+ 'from Information.Constraints as c '+ 'join Information.ConstraintColumns as cc on ((c.tablename = cc.tablename) and (cc.constraintname = c.EnforcingIndex)) '+ 'where c.type = ''foreign key'''; sPK_SQL = 'Select c.tablename,c.name, c.targettable, cc.columnname '+ 'from Information.Constraints as c '+ 'join Information.ConstraintColumns as cc on ((c.Targettable = cc.tablename) and (cc.constraintname = c.TargetTableConstraint)) '+ 'where c.type = ''foreign key'''; var lCurrConstraint : string; lCurrFK : TDADriverForeignKey; lList: TStringList; i: integer; begin lList:=TstringList.Create; try Query.SQL := sFK_SQL; Query.Open; lCurrConstraint := ''; lCurrFK := nil; ForeignKeys.Clear; while (not Query.EOF) do begin if lCurrConstraint <> Query.Fields[0].AsString + '.' + Query.Fields[1].AsString then begin lCurrConstraint := Query.Fields[0].AsString + '.' + Query.Fields[1].AsString; lCurrFK := ForeignKeys.Add(); lList.AddObject(lCurrConstraint,lCurrFK); with lCurrFK do begin Name:=lCurrConstraint; PKTable := TrimRight(Query.Fields[2].AsString); FKTable := TrimRight(Query.Fields[0].AsString); // PKField := TrimRight(Query.Fields[2].AsString); FKField := TrimRight(Query.Fields[3].AsString); end; end else begin with lCurrFK do begin // PKField := PKField + ';' + TrimRight(Query.Fields[2].AsString); FKField := FKField + ';' + TrimRight(Query.Fields[3].AsString); end; end; Query.Next; end; Llist.Sorted:=True; Query.close; Query.SQL := sPK_SQL; Query.Open; while (not Query.EOF) do begin lCurrConstraint := Query.Fields[0].AsString + '.' + Query.Fields[1].AsString; i:= lList.IndexOf(lCurrConstraint); if i <> -1 then begin lCurrFK:= TDADriverForeignKey(lList.Objects[i]); if lCurrFK.PKField = '' then lCurrFK.PKField := TrimRight(Query.Fields[3].AsString) else lCurrFK.PKField := lCurrFK.PKField + ';' +TrimRight(Query.Fields[3].AsString); end; Query.Next; end; finally Query := nil; LList.Free; end; end; procedure ElevateDB_DoGetTableFields(const aTableName: string; Query: IDADataset; out Fields: TDAFieldCollection); const s_sql = 'SELECT tc.Name, tc.Nullable, tc.Identity, cc.ColumnName, tc.scale FROM Information.TableColumns as tc '+ 'LEFT JOIN Information.Constraints AS c ON ((c.TableName = tc.TableName) and (c.Type = ''Primary Key'')) '+ 'LEFT JOIN Information.ConstraintColumns as cc on ((c.tablename = cc.tablename) and (cc.constraintname = c.EnforcingIndex) and (cc.ColumnName = tc.Name)) '+ 'WHERE tc.TableName = '; var fld: TDAField; begin Fields := TDAFieldCollection.Create(nil); try Query.SQL := 'SELECT * FROM ' + aTableName +' WHERE 1=0'; Query.Open; Fields.Assign(Query.Fields); Query.Close; Query.SQL := s_SQL+ '''' + aTableName+''''; Query.Open; While not Query.Eof do begin fld := Fields.FindField(Trim(Query.Fields[0].AsString)); if Fld <> nil then begin Fld.Required:=Query.Fields[1].AsBoolean; if not Query.Fields[2].IsNull and Query.Fields[2].AsBoolean then begin if fld.DataType = datInteger then fld.DataType := datAutoInc; if fld.DataType = datLargeInt then fld.DataType := datLargeAutoInc; end; if not Query.Fields[3].IsNull then fld.InPrimaryKey:=True; if fld.DataType = datDecimal then begin fld.DecimalPrecision:=20; fld.DecimalScale:=Query.Fields[4].AsInteger; end; end; Query.Next; end; finally Query:=nil; end; end; function ElevateDB_GetSPSelectSyntax(HasArguments: Boolean): String; begin if HasArguments then Result:='CALL {0} ({1})' else Result:='CALL {0} ()'; end; function ElevateDB_IdentifierNeedsQuoting(const iIdentifier: string): boolean; begin Result := TestIdentifier(iIdentifier, ElevateDB_reservedwords); end; { TDAElevateDBDriver } function TDAElevateDBDriver.GetDefaultConnectionType( const AuxDriver: string): string; begin Result:= ElevateDB_DriverType; end; { TDAElevateDBConnection } procedure TDAElevateDBConnection.CheckConnected; begin if not GetConnected then SetConnected(True); end; procedure TDAElevateDBConnection.DoGetForeignKeys( out ForeignKeys: TDADriverForeignKeyCollection); begin CheckConnected; inherited; ElevateDB_DoGetForeignKeys(GetDatasetClass.Create(Self),ForeignKeys); end; procedure TDAElevateDBConnection.DoGetStoredProcedureNames( out List: IROStrings); begin CheckConnected; inherited; ElevateDB_DoGetNames(GetDatasetClass.Create(Self),List,dotProcedure); end; procedure TDAElevateDBConnection.DoGetTableFields(const aTableName: string; out Fields: TDAFieldCollection); begin CheckConnected; ElevateDB_DoGetTableFields(QuoteIdentifierIfNeeded(aTableName),GetDatasetClass.Create(Self),Fields); end; procedure TDAElevateDBConnection.DoGetTableNames(out List: IROStrings); begin CheckConnected; inherited; ElevateDB_DoGetNames(GetDatasetClass.Create(Self),List,dotTable); end; procedure TDAElevateDBConnection.DoGetViewNames(out List: IROStrings); begin CheckConnected; inherited; ElevateDB_DoGetNames(GetDatasetClass.Create(Self),List,dotView); end; function TDAElevateDBConnection.GetSPSelectSyntax( HasArguments: Boolean): string; begin Result := ElevateDB_GetSPSelectSyntax(HasArguments); end; procedure ElevateDB_InitializeReservedWords; begin SetLength(ElevateDB_reservedwords, 335); // sorted with TStringList.Sort (bds2007) ElevateDB_reservedwords[0] := 'ABS'; ElevateDB_reservedwords[1] := 'ABSOLUTE'; ElevateDB_reservedwords[2] := 'ACOS'; ElevateDB_reservedwords[3] := 'ACTION'; ElevateDB_reservedwords[4] := 'ADD'; ElevateDB_reservedwords[5] := 'AFTER'; ElevateDB_reservedwords[6] := 'ALL'; ElevateDB_reservedwords[7] := 'ALLTRIM'; ElevateDB_reservedwords[8] := 'ALTER'; ElevateDB_reservedwords[9] := 'ALWAYS'; ElevateDB_reservedwords[10] := 'AM'; ElevateDB_reservedwords[11] := 'AND'; ElevateDB_reservedwords[12] := 'AS'; ElevateDB_reservedwords[13] := 'ASC'; ElevateDB_reservedwords[14] := 'ASCENDING'; ElevateDB_reservedwords[15] := 'ASENSITIVE'; ElevateDB_reservedwords[16] := 'ASIN'; ElevateDB_reservedwords[17] := 'AT'; ElevateDB_reservedwords[18] := 'ATAN'; ElevateDB_reservedwords[19] := 'ATAN2'; ElevateDB_reservedwords[20] := 'AVG'; ElevateDB_reservedwords[21] := 'BACKUP'; ElevateDB_reservedwords[22] := 'BACKUPS'; ElevateDB_reservedwords[23] := 'BEFORE'; ElevateDB_reservedwords[24] := 'BEGIN'; ElevateDB_reservedwords[25] := 'BETWEEN'; ElevateDB_reservedwords[26] := 'BIGINT'; ElevateDB_reservedwords[27] := 'BINARY'; ElevateDB_reservedwords[28] := 'BLOB'; ElevateDB_reservedwords[29] := 'BLOCK'; ElevateDB_reservedwords[30] := 'BOF'; ElevateDB_reservedwords[31] := 'BOOL'; ElevateDB_reservedwords[32] := 'BOOLEAN'; ElevateDB_reservedwords[33] := 'BOTH'; ElevateDB_reservedwords[34] := 'BUFFER'; ElevateDB_reservedwords[35] := 'BY'; ElevateDB_reservedwords[36] := 'BYTE'; ElevateDB_reservedwords[37] := 'CALL'; ElevateDB_reservedwords[38] := 'CASCADE'; ElevateDB_reservedwords[39] := 'CASE'; ElevateDB_reservedwords[40] := 'CAST'; ElevateDB_reservedwords[41] := 'CATALOG'; ElevateDB_reservedwords[42] := 'CATEGORY'; ElevateDB_reservedwords[43] := 'CEIL'; ElevateDB_reservedwords[44] := 'CEILING'; ElevateDB_reservedwords[45] := 'CHAR'; ElevateDB_reservedwords[46] := 'CHAR_LENGTH'; ElevateDB_reservedwords[47] := 'CHARACTER'; ElevateDB_reservedwords[48] := 'CHARACTER_LENGTH'; ElevateDB_reservedwords[49] := 'CHECK'; ElevateDB_reservedwords[50] := 'CLOB'; ElevateDB_reservedwords[51] := 'CLOSE'; ElevateDB_reservedwords[52] := 'COALESCE'; ElevateDB_reservedwords[53] := 'CODE'; ElevateDB_reservedwords[54] := 'COLLATE'; ElevateDB_reservedwords[55] := 'COLUMN'; ElevateDB_reservedwords[56] := 'COLUMNS'; ElevateDB_reservedwords[57] := 'COMMIT'; ElevateDB_reservedwords[58] := 'COMPRESSION'; ElevateDB_reservedwords[59] := 'COMPUTED'; ElevateDB_reservedwords[60] := 'CONCAT'; ElevateDB_reservedwords[61] := 'CONSTRAINT'; ElevateDB_reservedwords[62] := 'CONSTRAINTS'; ElevateDB_reservedwords[63] := 'CONTAIN'; ElevateDB_reservedwords[64] := 'CONTAINS'; ElevateDB_reservedwords[65] := 'CONTENTS'; ElevateDB_reservedwords[66] := 'COS'; ElevateDB_reservedwords[67] := 'COT'; ElevateDB_reservedwords[68] := 'COUNT'; ElevateDB_reservedwords[69] := 'CREATE'; ElevateDB_reservedwords[70] := 'CURRENT'; ElevateDB_reservedwords[71] := 'CURRENT_DATE'; ElevateDB_reservedwords[72] := 'CURRENT_GUID'; ElevateDB_reservedwords[73] := 'CURRENT_TIME'; ElevateDB_reservedwords[74] := 'CURRENT_TIMESTAMP'; ElevateDB_reservedwords[75] := 'CURRENT_USER'; ElevateDB_reservedwords[76] := 'CURSOR'; ElevateDB_reservedwords[77] := 'CURSOR_SENSITIVITY'; ElevateDB_reservedwords[78] := 'DAILY'; ElevateDB_reservedwords[79] := 'DATA'; ElevateDB_reservedwords[80] := 'DATABASE'; ElevateDB_reservedwords[81] := 'DATE'; ElevateDB_reservedwords[82] := 'DAY'; ElevateDB_reservedwords[83] := 'DAYOFWEEK'; ElevateDB_reservedwords[84] := 'DAYOFYEAR'; ElevateDB_reservedwords[85] := 'DAYS'; ElevateDB_reservedwords[86] := 'DECIMAL'; ElevateDB_reservedwords[87] := 'DECLARE'; ElevateDB_reservedwords[88] := 'DEFAULT'; ElevateDB_reservedwords[89] := 'DEFAULTS'; ElevateDB_reservedwords[90] := 'DEGREES'; ElevateDB_reservedwords[91] := 'DELETE'; ElevateDB_reservedwords[92] := 'DELIMITER'; ElevateDB_reservedwords[93] := 'DESC'; ElevateDB_reservedwords[94] := 'DESCENDING'; ElevateDB_reservedwords[95] := 'DESCRIPTION'; ElevateDB_reservedwords[96] := 'DISCONNECT'; ElevateDB_reservedwords[97] := 'DISTINCT'; ElevateDB_reservedwords[98] := 'DO'; ElevateDB_reservedwords[99] := 'DOES'; ElevateDB_reservedwords[100] := 'DOUBLE'; ElevateDB_reservedwords[101] := 'DROP'; ElevateDB_reservedwords[102] := 'ELSE'; ElevateDB_reservedwords[103] := 'ELSEIF'; ElevateDB_reservedwords[104] := 'EMPTY'; ElevateDB_reservedwords[105] := 'ENCRYPTED'; ElevateDB_reservedwords[106] := 'END'; ElevateDB_reservedwords[107] := 'EOF'; ElevateDB_reservedwords[108] := 'ERROR'; ElevateDB_reservedwords[109] := 'ERRORCODE'; ElevateDB_reservedwords[110] := 'ERRORMSG'; ElevateDB_reservedwords[111] := 'ESCAPE'; ElevateDB_reservedwords[112] := 'EVERY'; ElevateDB_reservedwords[113] := 'EXCEPT'; ElevateDB_reservedwords[114] := 'EXCEPTION'; ElevateDB_reservedwords[115] := 'EXCLUDING'; ElevateDB_reservedwords[116] := 'EXECUTE'; ElevateDB_reservedwords[117] := 'EXISTS'; ElevateDB_reservedwords[118] := 'EXP'; ElevateDB_reservedwords[119] := 'EXPORT'; ElevateDB_reservedwords[120] := 'EXTERNAL'; ElevateDB_reservedwords[121] := 'EXTRACT'; ElevateDB_reservedwords[122] := 'FALSE'; ElevateDB_reservedwords[123] := 'FETCH'; ElevateDB_reservedwords[124] := 'FILE'; ElevateDB_reservedwords[125] := 'FILTER'; ElevateDB_reservedwords[126] := 'FIRST'; ElevateDB_reservedwords[127] := 'FLOAT'; ElevateDB_reservedwords[128] := 'FLOOR'; ElevateDB_reservedwords[129] := 'FLUSH'; ElevateDB_reservedwords[130] := 'FOR'; ElevateDB_reservedwords[131] := 'FOREIGN'; ElevateDB_reservedwords[132] := 'FORMAT'; ElevateDB_reservedwords[133] := 'FOURTH'; ElevateDB_reservedwords[134] := 'FROM'; ElevateDB_reservedwords[135] := 'FULL'; ElevateDB_reservedwords[136] := 'FUNCTION'; ElevateDB_reservedwords[137] := 'GENERATED'; ElevateDB_reservedwords[138] := 'GENERATOR'; ElevateDB_reservedwords[139] := 'GRANT'; ElevateDB_reservedwords[140] := 'GROUP'; ElevateDB_reservedwords[141] := 'GUID'; ElevateDB_reservedwords[142] := 'HAVING'; ElevateDB_reservedwords[143] := 'HEADERS'; ElevateDB_reservedwords[144] := 'HOUR'; ElevateDB_reservedwords[145] := 'IDENTITY'; ElevateDB_reservedwords[146] := 'IF'; ElevateDB_reservedwords[147] := 'IFNULL'; ElevateDB_reservedwords[148] := 'IMMEDIATE'; ElevateDB_reservedwords[149] := 'IMPORT'; ElevateDB_reservedwords[150] := 'IN'; ElevateDB_reservedwords[151] := 'INCLUDE'; ElevateDB_reservedwords[152] := 'INCLUDING'; ElevateDB_reservedwords[153] := 'INCREMENT'; ElevateDB_reservedwords[154] := 'INDEX'; ElevateDB_reservedwords[155] := 'INDEXED'; ElevateDB_reservedwords[156] := 'INNER'; ElevateDB_reservedwords[157] := 'INOUT'; ElevateDB_reservedwords[158] := 'INSENSITIVE'; ElevateDB_reservedwords[159] := 'INSERT'; ElevateDB_reservedwords[160] := 'INT'; ElevateDB_reservedwords[161] := 'INTEGER'; ElevateDB_reservedwords[162] := 'INTERSECT'; ElevateDB_reservedwords[163] := 'INTERVAL'; ElevateDB_reservedwords[164] := 'INTO'; ElevateDB_reservedwords[165] := 'IS'; ElevateDB_reservedwords[166] := 'ITERATE'; ElevateDB_reservedwords[167] := 'JOB'; ElevateDB_reservedwords[168] := 'JOIN'; ElevateDB_reservedwords[169] := 'JOINOPTIMIZECOSTS'; ElevateDB_reservedwords[170] := 'KEEP'; ElevateDB_reservedwords[171] := 'KEY'; ElevateDB_reservedwords[172] := 'LARGE'; ElevateDB_reservedwords[173] := 'LAST'; ElevateDB_reservedwords[174] := 'LCASE'; ElevateDB_reservedwords[175] := 'LEADING'; ElevateDB_reservedwords[176] := 'LEAVE'; ElevateDB_reservedwords[177] := 'LEFT'; ElevateDB_reservedwords[178] := 'LENGTH'; ElevateDB_reservedwords[179] := 'LIKE'; ElevateDB_reservedwords[180] := 'LITERAL'; ElevateDB_reservedwords[181] := 'LOCK'; ElevateDB_reservedwords[182] := 'LOG'; ElevateDB_reservedwords[183] := 'LOG10'; ElevateDB_reservedwords[184] := 'LOOP'; ElevateDB_reservedwords[185] := 'LOWER'; ElevateDB_reservedwords[186] := 'LTRIM'; ElevateDB_reservedwords[187] := 'MAINTAIN'; ElevateDB_reservedwords[188] := 'MAX'; ElevateDB_reservedwords[189] := 'MEMORY'; ElevateDB_reservedwords[190] := 'MESSAGE'; ElevateDB_reservedwords[191] := 'MIGRATE'; ElevateDB_reservedwords[192] := 'MIGRATOR'; ElevateDB_reservedwords[193] := 'MIN'; ElevateDB_reservedwords[194] := 'MINUTE'; ElevateDB_reservedwords[195] := 'MOD'; ElevateDB_reservedwords[196] := 'MODULE'; ElevateDB_reservedwords[197] := 'MONTH'; ElevateDB_reservedwords[198] := 'MONTHLY'; ElevateDB_reservedwords[199] := 'MOVE'; ElevateDB_reservedwords[200] := 'MSECOND'; ElevateDB_reservedwords[201] := 'NAME'; ElevateDB_reservedwords[202] := 'NEXT'; ElevateDB_reservedwords[203] := 'NO'; ElevateDB_reservedwords[204] := 'NOJOINOPTIMIZE'; ElevateDB_reservedwords[205] := 'NONE'; ElevateDB_reservedwords[206] := 'NOT'; ElevateDB_reservedwords[207] := 'NULL'; ElevateDB_reservedwords[208] := 'NULLABLE'; ElevateDB_reservedwords[209] := 'NULLIF'; ElevateDB_reservedwords[210] := 'NUMERIC'; ElevateDB_reservedwords[211] := 'OBJECT'; ElevateDB_reservedwords[212] := 'OCCURS'; ElevateDB_reservedwords[213] := 'OF'; ElevateDB_reservedwords[214] := 'ON'; ElevateDB_reservedwords[215] := 'ONCE'; ElevateDB_reservedwords[216] := 'OPEN'; ElevateDB_reservedwords[217] := 'OPTIMIZE'; ElevateDB_reservedwords[218] := 'OPTION'; ElevateDB_reservedwords[219] := 'OR'; ElevateDB_reservedwords[220] := 'ORDER'; ElevateDB_reservedwords[221] := 'OUT'; ElevateDB_reservedwords[222] := 'OUTER'; ElevateDB_reservedwords[223] := 'PAGE'; ElevateDB_reservedwords[224] := 'PASSWORD'; ElevateDB_reservedwords[225] := 'PATH'; ElevateDB_reservedwords[226] := 'PI'; ElevateDB_reservedwords[227] := 'PM'; ElevateDB_reservedwords[228] := 'POS'; ElevateDB_reservedwords[229] := 'POSITION'; ElevateDB_reservedwords[230] := 'POWER'; ElevateDB_reservedwords[231] := 'PRECISION'; ElevateDB_reservedwords[232] := 'PREPARE'; ElevateDB_reservedwords[233] := 'PRIMARY'; ElevateDB_reservedwords[234] := 'PRIOR'; ElevateDB_reservedwords[235] := 'PRIVILEGES'; ElevateDB_reservedwords[236] := 'PROCEDURE'; ElevateDB_reservedwords[237] := 'QUOTE'; ElevateDB_reservedwords[238] := 'RADIANS'; ElevateDB_reservedwords[239] := 'RAISE'; ElevateDB_reservedwords[240] := 'RAND'; ElevateDB_reservedwords[241] := 'RANGE'; ElevateDB_reservedwords[242] := 'REDEFINE'; ElevateDB_reservedwords[243] := 'REFERENCES'; ElevateDB_reservedwords[244] := 'RELATIVE'; ElevateDB_reservedwords[245] := 'REMOVE'; ElevateDB_reservedwords[246] := 'REPAIR'; ElevateDB_reservedwords[247] := 'REPEAT'; ElevateDB_reservedwords[248] := 'REPLACE'; ElevateDB_reservedwords[249] := 'RESTORE'; ElevateDB_reservedwords[250] := 'RESTRICT'; ElevateDB_reservedwords[251] := 'RESULT'; ElevateDB_reservedwords[252] := 'RETURN'; ElevateDB_reservedwords[253] := 'RETURNS'; ElevateDB_reservedwords[254] := 'REVOKE'; ElevateDB_reservedwords[255] := 'RIGHT'; ElevateDB_reservedwords[256] := 'ROLE'; ElevateDB_reservedwords[257] := 'ROLLBACK'; ElevateDB_reservedwords[258] := 'ROUND'; ElevateDB_reservedwords[259] := 'ROW'; ElevateDB_reservedwords[260] := 'ROWCOUNT'; ElevateDB_reservedwords[261] := 'ROWS'; ElevateDB_reservedwords[262] := 'ROWSAFFECTED'; ElevateDB_reservedwords[263] := 'RTRIM'; ElevateDB_reservedwords[264] := 'RUN'; ElevateDB_reservedwords[265] := 'RUNSUM'; ElevateDB_reservedwords[266] := 'SECOND'; ElevateDB_reservedwords[267] := 'SELECT'; ElevateDB_reservedwords[268] := 'SENSITIVE'; ElevateDB_reservedwords[269] := 'SERVER'; ElevateDB_reservedwords[270] := 'SESSION'; ElevateDB_reservedwords[271] := 'SET'; ElevateDB_reservedwords[272] := 'SIGN'; ElevateDB_reservedwords[273] := 'SIN'; ElevateDB_reservedwords[274] := 'SIZE'; ElevateDB_reservedwords[275] := 'SMALLINT'; ElevateDB_reservedwords[276] := 'SQRT'; ElevateDB_reservedwords[277] := 'START'; ElevateDB_reservedwords[278] := 'STATEMENT'; ElevateDB_reservedwords[279] := 'STDDEV'; ElevateDB_reservedwords[280] := 'SUBSTR'; ElevateDB_reservedwords[281] := 'SUBSTRING'; ElevateDB_reservedwords[282] := 'SUM'; ElevateDB_reservedwords[283] := 'SUMSQUARE'; ElevateDB_reservedwords[284] := 'TABLE'; ElevateDB_reservedwords[285] := 'TABLES'; ElevateDB_reservedwords[286] := 'TAN'; ElevateDB_reservedwords[287] := 'TEMPORARY'; ElevateDB_reservedwords[288] := 'TEXT'; ElevateDB_reservedwords[289] := 'TEXTOCCURS'; ElevateDB_reservedwords[290] := 'TEXTSEARCH'; ElevateDB_reservedwords[291] := 'THEN'; ElevateDB_reservedwords[292] := 'THIRD'; ElevateDB_reservedwords[293] := 'TIME'; ElevateDB_reservedwords[294] := 'TIMESTAMP'; ElevateDB_reservedwords[295] := 'TO'; ElevateDB_reservedwords[296] := 'TOP'; ElevateDB_reservedwords[297] := 'TRAILING'; ElevateDB_reservedwords[298] := 'TRANSACTION'; ElevateDB_reservedwords[299] := 'TRIGGER'; ElevateDB_reservedwords[300] := 'TRIM'; ElevateDB_reservedwords[301] := 'TRUE'; ElevateDB_reservedwords[302] := 'TRUNC'; ElevateDB_reservedwords[303] := 'TRUNCATE'; ElevateDB_reservedwords[304] := 'TYPE'; ElevateDB_reservedwords[305] := 'UCASE'; ElevateDB_reservedwords[306] := 'UNENCRYPTED'; ElevateDB_reservedwords[307] := 'UNION'; ElevateDB_reservedwords[308] := 'UNIQUE'; ElevateDB_reservedwords[309] := 'UNPREPARE'; ElevateDB_reservedwords[310] := 'UNTIL'; ElevateDB_reservedwords[311] := 'UPDATE'; ElevateDB_reservedwords[312] := 'UPPER'; ElevateDB_reservedwords[313] := 'USE'; ElevateDB_reservedwords[314] := 'USER'; ElevateDB_reservedwords[315] := 'USING'; ElevateDB_reservedwords[316] := 'UTC'; ElevateDB_reservedwords[317] := 'VALUES'; ElevateDB_reservedwords[318] := 'VARBYTE'; ElevateDB_reservedwords[319] := 'VARCHAR'; ElevateDB_reservedwords[320] := 'VARYING'; ElevateDB_reservedwords[321] := 'VERSION'; ElevateDB_reservedwords[322] := 'VIEW'; ElevateDB_reservedwords[323] := 'WEEK'; ElevateDB_reservedwords[324] := 'WEEKLY'; ElevateDB_reservedwords[325] := 'WEEKS'; ElevateDB_reservedwords[326] := 'WHEN'; ElevateDB_reservedwords[327] := 'WHERE'; ElevateDB_reservedwords[328] := 'WHILE'; ElevateDB_reservedwords[329] := 'WINDOWS'; ElevateDB_reservedwords[330] := 'WITH'; ElevateDB_reservedwords[331] := 'WITHOUT'; ElevateDB_reservedwords[332] := 'WORD'; ElevateDB_reservedwords[333] := 'WORK'; ElevateDB_reservedwords[334] := 'YEAR'; end; function TDAElevateDBConnection.IdentifierNeedsQuoting( const iIdentifier: string): boolean; begin Result:=inherited IdentifierNeedsQuoting(iIdentifier) or ElevateDB_IdentifierNeedsQuoting(iIdentifier); end; initialization ElevateDB_InitializeReservedWords; finalization ElevateDB_reservedwords := nil; end.