Componentes.Terceros.RemObj.../internal/6.0.43.801/1/Data Abstract for Delphi/Source/Drivers/uDAAbsoluteDBDriver.pas
2010-01-29 16:17:43 +00:00

869 lines
29 KiB
ObjectPascal

unit uDAAbsoluteDBDriver;
{----------------------------------------------------------------------------}
{ Data Abstract Library - Driver Library }
{ }
{ compiler: Delphi 6 and up }
{ platform: Win32 }
{ }
{ (c)opyright RemObjects Software. all rights reserved. }
{ Originally was created by Steve Forbes }
{ }
{ Using this code requires a valid license of the Data Abstract }
{ which can be obtained at http://www.remobjects.com. }
{----------------------------------------------------------------------------}
{$IFDEF MSWINDOWS}
{$I ..\DataAbstract.inc}
{$ELSE}
{$I ../DataAbstract.inc}
{$ENDIF}
{$R DataAbstract_AbsoluteDBDriver_Glyphs.res}
//{$I absvr.inc}
interface
uses DB, Classes, uDAEngine, uDAInterfaces, uROClasses, ABSMain, uDAUtils;
type
{ TDAAbsoluteDBDriver }
TDAAbsoluteDBDriver = class(TDADriverReference)
end;
{ IAbsoluteDBConnection }
IAbsoluteDBConnection = interface
['{A0A17C42-D225-4610-83D5-FC6D2A554010}']
end;
{ IABSConnectionProperties
Provides access to common properties of AbsoluteDB connections }
IABSConnectionProperties = interface
['{7B13C981-3131-47A5-A6AC-62635B1777AD}']
function GetKeepConnections: Boolean;
procedure SetKeepConnections(Value: Boolean);
property KeepConnections: Boolean read GetKeepConnections write SetKeepConnections;
end;
{ TAbsoluteDBConnection }
TAbsoluteDBConnection = class(TDAConnectionWrapper)
private
FDatabase: TABSDatabase;
FSession: TABSSession;
protected
function GetConnected: Boolean; override;
procedure SetConnected(Value: Boolean); override;
public
constructor Create(AOwner: TComponent); override;
property Database: TABSDatabase read FDatabase;
property Session: TABSSession read FSession;
end;
{ TDAEAbsoluteDBDriver }
TDAEAbsoluteDBDriver = class(TDAEDriver)
private
protected
function GetConnectionClass: TDAEConnectionClass; override;
// IDADriver
function GetDriverID: string; override;
function GetDescription: string; override;
procedure GetAuxParams(const AuxDriver: string; out List: IROStrings); override;
function GetAvailableDriverOptions: TDAAvailableDriverOptions; override;
function GetDefaultConnectionType(const AuxDriver: string): string; override; safecall;
public
end;
{ TDAEAbsoluteDBConnection }
TDAEAbsoluteDBConnection = class(TDAEConnection, IAbsoluteDBConnection, IABSConnectionProperties)
private
FConnection: TAbsoluteDBConnection;
protected
// IABSConnectionProperties
function GetKeepConnections: Boolean;
procedure SetKeepConnections(Value: Boolean);
// IDAConnection
function CreateCustomConnection: TCustomConnection; override;
function CreateMacroProcessor: TDASQLMacroProcessor; override;
function GetDatasetClass: TDAEDatasetClass; override;
procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); override;
function DoBeginTransaction: Integer; override;
procedure DoCommitTransaction; override;
procedure DoRollbackTransaction; override;
function DoGetInTransaction: Boolean; override;
procedure DoGetTableNames(out List: IROStrings); override;
function DoGetLastAutoInc(const GeneratorName: string): integer; override;
procedure DoGetTableFields(const aTableName: string; out Fields: TDAFieldCollection);override;
function IdentifierNeedsQuoting(const iIdentifier: string): boolean; override; {$IFNDEF FPC_SAFECALL_BUG}safecall;{$ENDIF}
public
end;
{ TDAEAbsoluteDBQuery }
TDAEAbsoluteDBQuery = class(TDAEDataset, IDAMustSetParams)
private
protected
function CreateDataset(aConnection: TDAEConnection): TDataset; override;
procedure ClearParams; override;
function DoExecute: Integer; override;
function DoGetSQL: string; override;
procedure DoSetSQL(const Value: string); override;
procedure DoPrepare(Value: Boolean); override;
// IDAMustSetParams
procedure SetParamValues(AParams: TDAParamCollection); override;{$IFNDEF FPC_SAFECALL_BUG}safecall;{$ENDIF}
procedure GetParamValues(AParams: TDAParamCollection); override;{$IFNDEF FPC_SAFECALL_BUG}safecall;{$ENDIF}
end;
const
AbsoluteDB_DriverType = 'AbsoluteDB';
procedure Register;
function GetDriverObject: IDADriver; stdcall;
implementation
uses
SysUtils, uDADriverManager, uDARes, uDAMacroProcessors, Variants,
uROBinaryHelpers;
var
_driver: TDAEDriver = nil;
absolute_reservedwords: array of string;
const
GEN_NAME_DELIMITER = '*';
procedure Register;
begin
RegisterComponents(DAPalettePageName, [TDAAbsoluteDBDriver]);
end;
{$IFDEF DataAbstract_SchemaModelerOnly}
{$INCLUDE ..\DataAbstract_SchemaModelerOnly.inc}
{$ENDIF DataAbstract_SchemaModelerOnly}
function GetDriverObject: IDADriver;
begin
{$IFDEF DataAbstract_SchemaModelerOnly}
if not RunningInSchemaModeler then begin
result := nil;
exit;
end;
{$ENDIF}
if (_driver = nil) then _driver := TDAEAbsoluteDBDriver.Create(nil);
result := _driver;
end;
{ TAbsoluteDBConnection }
constructor TAbsoluteDBConnection.Create(AOwner: TComponent);
begin
inherited;
FSession := TABSSession.Create(Self);
FSession.AutoSessionName := TRUE;
FDatabase := TABSDatabase.Create(Self);
FDatabase.SessionName := FSession.SessionName;
FDatabase.DatabaseName := 'ABSOLUTEDB';
end;
function TAbsoluteDBConnection.GetConnected: Boolean;
begin
result := FDatabase.Connected;
end;
procedure TAbsoluteDBConnection.SetConnected(Value: Boolean);
begin
if not(csDestroying in FDatabase.ComponentState) then begin
try
FSession.Active := Value;
FDatabase.Connected := Value;
except
FSession.Active := FALSE;
FDatabase.Connected := FALSE;
raise;
end;
end;
end;
{ TDAEAbsoluteDBConnection }
procedure TDAEAbsoluteDBConnection.DoApplyConnectionString(
aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection);
begin
inherited;
with aConnStrParser do begin
FConnection.Database.DatabaseFileName := Database;
if (AuxParams['DisableTempFiles'] = 'False') then
begin
FConnection.Database.DisableTempFiles := False;
end
else
begin
FConnection.Database.DisableTempFiles := True;
end;
if (AuxParams['Exclusive'] = 'False') then
begin
FConnection.Database.Exclusive := False;
end
else
begin
FConnection.Database.Exclusive := True;
end;
if (AuxParams['HandleShared'] = 'False') then
begin
FConnection.Database.HandleShared := False;
end
else
begin
FConnection.Database.HandleShared := True;
end;
if (AuxParams['KeepConnections'] = 'False') then
begin
FConnection.Session.KeepConnections := False;
FConnection.Database.KeepConnection := False;
end
else if (AuxParams['KeepConnections'] = 'True') then
begin
FConnection.Session.KeepConnections := True;
FConnection.Database.KeepConnection := True;
end;
if (AuxParams['MultiUser'] = 'False') then
begin
FConnection.Database.MultiUser := False;
end
else
begin
FConnection.Database.MultiUser := True;
end;
if (AuxParams['DBPassword'] <> '') then
begin
fConnection.Database.Password := AuxParams['DBPassword'];
end;
end;
end;
function TDAEAbsoluteDBConnection.DoBeginTransaction: integer;
begin
result := -1;
FConnection.Database.StartTransaction;
end;
procedure TDAEAbsoluteDBConnection.DoCommitTransaction;
begin
with FConnection do
Database.Commit;
end;
function TDAEAbsoluteDBConnection.CreateCustomConnection: TCustomConnection;
begin
result := TAbsoluteDBConnection.Create(nil);
FConnection := TAbsoluteDBConnection(result);
end;
function TDAEAbsoluteDBConnection.GetDatasetClass: TDAEDatasetClass;
begin
result := TDAEAbsoluteDBQuery
end;
procedure TDAEAbsoluteDBConnection.DoGetTableNames(out List: IROStrings);
var
_database: string;
begin
List := TROStrings.Create;
_database := FConnection.Database.DatabaseName;
FConnection.Session.GetTableNames(_database, List.Strings);
end;
procedure TDAEAbsoluteDBConnection.DoRollbackTransaction;
begin
FConnection.Database.Rollback;
end;
function TDAEAbsoluteDBConnection.DoGetInTransaction: Boolean;
begin
result := FConnection.Database.InTransaction;
end;
function TDAEAbsoluteDBConnection.CreateMacroProcessor: TDASQLMacroProcessor;
begin
result := TDADBISAMMacroProcessor.Create;
end;
function TDAEAbsoluteDBConnection.GetKeepConnections: Boolean;
begin
result := FConnection.Session.KeepConnections;
end;
procedure TDAEAbsoluteDBConnection.SetKeepConnections(Value: Boolean);
begin
FConnection.Session.KeepConnections := Value;
FConnection.Database.KeepConnection := Value;
end;
function TDAEAbsoluteDBConnection.DoGetLastAutoInc(
const GeneratorName: string): integer;
var
lQuery: IDADataset;
TableName: String;
FieldName: String;
begin
try
if ((GeneratorName <> '') and (Pos(GEN_NAME_DELIMITER, GeneratorName) > 0)) then
begin
TableName := Copy(GeneratorName, 1,
Pos(GEN_NAME_DELIMITER, GeneratorName) - 1);
FieldName := Copy(GeneratorName,
Pos(GEN_NAME_DELIMITER, GeneratorName) + 1,
Length(GeneratorName) - (Length(TableName) + 1));
lQuery := GetDatasetClass.Create(Self);
try
lQuery.SQL := 'SELECT LASTAUTOINC(''' + TableName + ''', ''' +
FieldName + ''') from ' + QuoteIdentifierIfNeeded(TableName);
lQuery.Open;
Result := lQuery.Fields[0].AsInteger;
lQuery.Close;
finally
lQuery := nil;
end;
end
else
begin
Result := inherited DoGetLastAutoInc(GeneratorName);
end;
except
Result := inherited DoGetLastAutoInc(GeneratorName);
end;
end;
{$IFDEF DELPHI10UP}
{$WARN SYMBOL_DEPRECATED OFF}
{$ENDIF DELPHI10UP}
procedure TDAEAbsoluteDBConnection.DoGetTableFields(const aTableName: string;
out Fields: TDAFieldCollection);
var
i: integer;
pos1: integer;
fld: TDAField;
lofld:TFieldDef;
s: string;
ltable: TABSTable;
begin
Fields:=TDAFieldCollection.Create(nil);
ltable:=TABSTable.Create(nil);
try
ltable.DatabaseName := FConnection.Database.DatabaseName;
ltable.SessionName := FConnection.Session.SessionName;
ltable.TableName := aTableName;
ltable.FieldDefs.Update;
for i:=0 to ltable.FieldDefs.Count-1 do begin
lofld:=ltable.FieldDefs[i];
fld:= Fields.Add;
fld.Name:= lofld.Name;
fld.DataType:= VCLTypeToDAType(lofld.DataType);
fld.Size:= lofld.Size;
fld.Required:= lofld.Required;
fld.ReadOnly:= DB.faReadonly in lofld.Attributes;
if fld.DataType = datAutoInc then fld.GeneratorName:= aTableName+GEN_NAME_DELIMITER+fld.Name;
if fld.DataType = datDecimal then begin
case lofld.DataType of
ftBCD: begin
fld.DecimalPrecision:=20;
fld.DecimalScale:=lofld.Size;
end;
end;
end;
end;
//pk
ltable.IndexDefs.Update;
For i:=0 to ltable.IndexDefs.Count - 1 do
if ixPrimary in ltable.IndexDefs[i].Options then begin
Pos1 := 1;
s:=ltable.IndexDefs[i].Fields;
while Pos1 <= Length(s) do begin
fld := Fields.FindField(ExtractFieldName(s, Pos1));
if fld <> nil then fld.InPrimaryKey:=True;
end;
end;
finally
ltable.free;
end;
end;
{$IFDEF DELPHI10UP}
{$WARN SYMBOL_DEPRECATED ON}
{$ENDIF DELPHI10UP}
function TDAEAbsoluteDBConnection.IdentifierNeedsQuoting(
const iIdentifier: string): boolean;
begin
Result := inherited IdentifierNeedsQuoting(iIdentifier) or TestIdentifier(iIdentifier,absolute_reservedwords);
end;
{ TDAEAbsoluteDBDriver }
procedure TDAEAbsoluteDBDriver.GetAuxParams(const AuxDriver: string; out List: IROStrings);
begin
inherited;
List.Add('DBPassword=');
List.Add('DisableTempFiles=False,True');
List.Add('Exclusive=False,True');
List.Add('HandleShared=False,True');
List.Add('KeepConnections=False,True');
List.Add('MultiUser=False,True');
List.Sorted := True;
end;
function TDAEAbsoluteDBDriver.GetAvailableDriverOptions: TDAAvailableDriverOptions;
begin
result := [doDatabaseName, doCustom];
end;
function TDAEAbsoluteDBDriver.GetConnectionClass: TDAEConnectionClass;
begin
result := TDAEAbsoluteDBConnection
end;
function TDAEAbsoluteDBDriver.GetDefaultConnectionType(
const AuxDriver: string): string;
begin
Result := AbsoluteDB_DriverType;
end;
function TDAEAbsoluteDBDriver.GetDescription: string;
begin
result := 'AbsoluteDB Driver'{$IFDEF DataAbstract_SchemaModelerOnly} + SchemaModelerOnly{$ENDIF};
end;
function TDAEAbsoluteDBDriver.GetDriverID: string;
begin
result := 'AbsoluteDB';
end;
{ TDAEAbsoluteDBQuery }
function TDAEAbsoluteDBQuery.CreateDataset(aConnection: TDAEConnection): TDataset;
begin
result := TABSQuery.Create(nil);
with TABSQuery(result) do begin
DatabaseName := TDAEAbsoluteDBConnection(aConnection).FConnection.Database.DatabaseName;
SessionName := TDAEAbsoluteDBConnection(aConnection).FConnection.Session.SessionName;
ReadOnly := True;
RequestLive := True;
end;
end;
function TDAEAbsoluteDBQuery.DoExecute: integer;
begin
with TABSQuery(Dataset) do begin
ExecSQL;
result := RowsAffected;
end;
end;
function TDAEAbsoluteDBQuery.DoGetSQL: string;
begin
result := TABSQuery(Dataset).SQL.Text
end;
procedure TDAEAbsoluteDBQuery.DoPrepare(Value: Boolean);
begin
TABSQuery(Dataset).Prepared := Value;
end;
procedure TDAEAbsoluteDBQuery.SetParamValues(AParams: TDAParamCollection);
var
i: integer;
par: uDAInterfaces.TDAParam;
outpar: TParam;
ft: TFieldType;
lParIsEmpty: Boolean;
begin
for i := 0 to (AParams.Count - 1) do begin
par := AParams[i];
outpar := TABSQuery(Dataset).Params.ParamByName(par.Name);
ft := DATypeToVCLType(par.DataType);
case par.ParamType of
daptInput: outpar.ParamType := ptInput;
daptOutput: outpar.ParamType := ptOutput;
daptInputOutput: outpar.ParamType := ptInputOutput;
daptResult: outpar.ParamType := ptResult;
end;
lParIsEmpty := VarIsEmpty(par.Value) or VarIsNull(par.Value);
if par.DataType = datBlob then begin
outpar.DataType := ftBlob;
if not (par.ParamType in [daptOutput, daptResult]) then begin
if lParIsEmpty then
outpar.Value := Null
else
outpar.Value := VariantToAnsiString(par.Value);
end;
end
else begin
if (outpar.DataType <> ft) and (ft <> ftUnknown) then outpar.DataType := ft;
if not (par.ParamType in [daptOutput, daptResult]) then outpar.Value := par.Value;
end;
if lParIsEmpty and (par.DataType <> datUnknown) then begin
if (outpar.DataType <> ft) and (ft <> ftUnknown) then outpar.DataType := ft;
end;
end;
end;
procedure TDAEAbsoluteDBQuery.GetParamValues(AParams: TDAParamCollection);
var
i: integer;
par: uDAInterfaces.TDAParam;
begin
for i := 0 to (AParams.Count - 1) do begin
par := AParams[i];
if Par.ParamType in [daptOutput, daptInputOutput, daptResult] then
Par.Value := TABSQuery(Dataset).Params.ParamByName(par.Name).Value;
end;
end;
procedure TDAEAbsoluteDBQuery.DoSetSQL(const Value: string);
begin
TABSQuery(Dataset).SQL.Text := Value;
end;
exports GetDriverObject name func_GetDriverObject;
procedure TDAEAbsoluteDBQuery.ClearParams;
begin
inherited;
TABSQuery(Dataset).Params.Clear;
end;
procedure absolute_InitializeReservedWords;
begin
SetLength(absolute_reservedwords, 283);
// sorted with TStringList.Sort (bds2007)
absolute_reservedwords[0] := 'ABS';
absolute_reservedwords[1] := 'ABSOLUTE';
absolute_reservedwords[2] := 'ACOS';
absolute_reservedwords[3] := 'ACTION';
absolute_reservedwords[4] := 'ADD';
absolute_reservedwords[5] := 'ALL';
absolute_reservedwords[6] := 'ALLOCATE';
absolute_reservedwords[7] := 'ALTER';
absolute_reservedwords[8] := 'AND';
absolute_reservedwords[9] := 'ANY';
absolute_reservedwords[10] := 'ARE';
absolute_reservedwords[11] := 'AS';
absolute_reservedwords[12] := 'ASC';
absolute_reservedwords[13] := 'ASIN';
absolute_reservedwords[14] := 'ASSERTION';
absolute_reservedwords[15] := 'AT';
absolute_reservedwords[16] := 'ATAN';
absolute_reservedwords[17] := 'AUTHORIZATION';
absolute_reservedwords[18] := 'AUTOINC';
absolute_reservedwords[19] := 'AUTOINDEXES';
absolute_reservedwords[20] := 'AVG';
absolute_reservedwords[21] := 'BEGIN';
absolute_reservedwords[22] := 'BETWEEN';
absolute_reservedwords[23] := 'BIT';
absolute_reservedwords[24] := 'BIT_LENGTH';
absolute_reservedwords[25] := 'BLOBBLOCKSIZE';
absolute_reservedwords[26] := 'BLOBCOMPRESSIONALGORITHM';
absolute_reservedwords[27] := 'BLOBCOMPRESSIONMODE';
absolute_reservedwords[28] := 'BOTH';
absolute_reservedwords[29] := 'BY';
absolute_reservedwords[30] := 'CASCADE';
absolute_reservedwords[31] := 'CASCADED';
absolute_reservedwords[32] := 'CASE';
absolute_reservedwords[33] := 'CAST';
absolute_reservedwords[34] := 'CATALOG';
absolute_reservedwords[35] := 'CEIL';
absolute_reservedwords[36] := 'CHAR';
absolute_reservedwords[37] := 'CHAR_LENGTH';
absolute_reservedwords[38] := 'CHARACTER';
absolute_reservedwords[39] := 'CHARACTER_LENGTH';
absolute_reservedwords[40] := 'CHECK';
absolute_reservedwords[41] := 'CLOSE';
absolute_reservedwords[42] := 'COALESCE';
absolute_reservedwords[43] := 'COLLATE';
absolute_reservedwords[44] := 'COLLATION';
absolute_reservedwords[45] := 'COLUMN';
absolute_reservedwords[46] := 'COMMIT';
absolute_reservedwords[47] := 'CONNECT';
absolute_reservedwords[48] := 'CONNECTION';
absolute_reservedwords[49] := 'CONSTRAINT';
absolute_reservedwords[50] := 'CONSTRAINTS';
absolute_reservedwords[51] := 'CONTINUE';
absolute_reservedwords[52] := 'CONVERT';
absolute_reservedwords[53] := 'CORRESPONDING';
absolute_reservedwords[54] := 'COS';
absolute_reservedwords[55] := 'COUNT';
absolute_reservedwords[56] := 'CREATE';
absolute_reservedwords[57] := 'CROSS';
absolute_reservedwords[58] := 'CURRENT';
absolute_reservedwords[59] := 'CURRENT_DATE';
absolute_reservedwords[60] := 'CURRENT_TIME';
absolute_reservedwords[61] := 'CURRENT_TIMESTAMP';
absolute_reservedwords[62] := 'CURRENT_USER';
absolute_reservedwords[63] := 'CURSOR';
absolute_reservedwords[64] := 'CYCLED';
absolute_reservedwords[65] := 'DATE';
absolute_reservedwords[66] := 'DAY';
absolute_reservedwords[67] := 'DEALLOCATE';
absolute_reservedwords[68] := 'DEC';
absolute_reservedwords[69] := 'DECIMAL';
absolute_reservedwords[70] := 'DECLARE';
absolute_reservedwords[71] := 'DEFAULT';
absolute_reservedwords[72] := 'DEFERRABLE';
absolute_reservedwords[73] := 'DEFERRED';
absolute_reservedwords[74] := 'DELETE';
absolute_reservedwords[75] := 'DESC';
absolute_reservedwords[76] := 'DESCRIBE';
absolute_reservedwords[77] := 'DESCRIPTOR';
absolute_reservedwords[78] := 'DIAGNOSTICS';
absolute_reservedwords[79] := 'DISCONNECT';
absolute_reservedwords[80] := 'DISTINCT';
absolute_reservedwords[81] := 'DOMAIN';
absolute_reservedwords[82] := 'DOUBLE';
absolute_reservedwords[83] := 'DROP';
absolute_reservedwords[84] := 'ELSE';
absolute_reservedwords[85] := 'END';
absolute_reservedwords[86] := 'END-EXEC';
absolute_reservedwords[87] := 'ESCAPE';
absolute_reservedwords[88] := 'EXCEPT';
absolute_reservedwords[89] := 'EXCEPTION';
absolute_reservedwords[90] := 'EXEC';
absolute_reservedwords[91] := 'EXECUTE';
absolute_reservedwords[92] := 'EXISTS';
absolute_reservedwords[93] := 'EXP';
absolute_reservedwords[94] := 'EXTERNAL';
absolute_reservedwords[95] := 'EXTRACT';
absolute_reservedwords[96] := 'FALSE';
absolute_reservedwords[97] := 'FETCH';
absolute_reservedwords[98] := 'FIRST';
absolute_reservedwords[99] := 'FLOAT';
absolute_reservedwords[100] := 'FLOOR';
absolute_reservedwords[101] := 'FLUSH';
absolute_reservedwords[102] := 'FOR';
absolute_reservedwords[103] := 'FOREIGN';
absolute_reservedwords[104] := 'FOUND';
absolute_reservedwords[105] := 'FROM';
absolute_reservedwords[106] := 'FULL';
absolute_reservedwords[107] := 'GET';
absolute_reservedwords[108] := 'GLOBAL';
absolute_reservedwords[109] := 'GO';
absolute_reservedwords[110] := 'GOTO';
absolute_reservedwords[111] := 'GRANT';
absolute_reservedwords[112] := 'GROUP';
absolute_reservedwords[113] := 'HAVING';
absolute_reservedwords[114] := 'HOUR';
absolute_reservedwords[115] := 'IDENTITY';
absolute_reservedwords[116] := 'IF';
absolute_reservedwords[117] := 'IMMEDIATE';
absolute_reservedwords[118] := 'IN';
absolute_reservedwords[119] := 'INCREMENT';
absolute_reservedwords[120] := 'INDEX';
absolute_reservedwords[121] := 'INDICATOR';
absolute_reservedwords[122] := 'INITIALLY';
absolute_reservedwords[123] := 'INITIALVALUE';
absolute_reservedwords[124] := 'INNER';
absolute_reservedwords[125] := 'INPUT';
absolute_reservedwords[126] := 'INSENSITIVE';
absolute_reservedwords[127] := 'INSERT';
absolute_reservedwords[128] := 'INT';
absolute_reservedwords[129] := 'INTEGER';
absolute_reservedwords[130] := 'INTERSECT';
absolute_reservedwords[131] := 'INTERVAL';
absolute_reservedwords[132] := 'INTO';
absolute_reservedwords[133] := 'IS';
absolute_reservedwords[134] := 'ISOLATION';
absolute_reservedwords[135] := 'JOIN';
absolute_reservedwords[136] := 'KEY';
absolute_reservedwords[137] := 'LANGUAGE';
absolute_reservedwords[138] := 'LAST';
absolute_reservedwords[139] := 'LASTAUTOINC';
absolute_reservedwords[140] := 'LASTVALUE';
absolute_reservedwords[141] := 'LEADING';
absolute_reservedwords[142] := 'LEFT';
absolute_reservedwords[143] := 'LENGTH';
absolute_reservedwords[144] := 'LEVEL';
absolute_reservedwords[145] := 'LIKE';
absolute_reservedwords[146] := 'LOCAL';
absolute_reservedwords[147] := 'LOG';
absolute_reservedwords[148] := 'LOWER';
absolute_reservedwords[149] := 'LTRIM';
absolute_reservedwords[150] := 'MATCH';
absolute_reservedwords[151] := 'MAX';
absolute_reservedwords[152] := 'MAXVALUE';
absolute_reservedwords[153] := 'MEMORY';
absolute_reservedwords[154] := 'MIMETOBIN';
absolute_reservedwords[155] := 'MIN';
absolute_reservedwords[156] := 'MINUS';
absolute_reservedwords[157] := 'MINUTE';
absolute_reservedwords[158] := 'MINVALUE';
absolute_reservedwords[159] := 'MODIFY';
absolute_reservedwords[160] := 'MODULE';
absolute_reservedwords[161] := 'MONTH';
absolute_reservedwords[162] := 'NAMES';
absolute_reservedwords[163] := 'NATIONAL';
absolute_reservedwords[164] := 'NATURAL';
absolute_reservedwords[165] := 'NCHAR';
absolute_reservedwords[166] := 'NEW';
absolute_reservedwords[167] := 'NEXT';
absolute_reservedwords[168] := 'NO';
absolute_reservedwords[169] := 'NOAUTOINDEXES';
absolute_reservedwords[170] := 'NOCASE';
absolute_reservedwords[171] := 'NOCYCLED';
absolute_reservedwords[172] := '';
absolute_reservedwords[173] := 'NOMAXVALUE';
absolute_reservedwords[174] := 'NOMINVALUE';
absolute_reservedwords[175] := 'NOT';
absolute_reservedwords[176] := 'NOW';
absolute_reservedwords[177] := 'NULL';
absolute_reservedwords[178] := 'NULLIF';
absolute_reservedwords[179] := 'NUMERIC';
absolute_reservedwords[180] := 'OCTET_LENGTH';
absolute_reservedwords[181] := 'OF';
absolute_reservedwords[182] := 'ON';
absolute_reservedwords[183] := 'ONLY';
absolute_reservedwords[184] := 'OPEN';
absolute_reservedwords[185] := 'OPTION';
absolute_reservedwords[186] := 'OR';
absolute_reservedwords[187] := 'ORDER';
absolute_reservedwords[188] := 'OUTER';
absolute_reservedwords[189] := 'OUTPUT';
absolute_reservedwords[190] := 'OVERLAPS';
absolute_reservedwords[191] := 'PAD';
absolute_reservedwords[192] := 'PARTIAL';
absolute_reservedwords[193] := 'PASSWORD';
absolute_reservedwords[194] := 'POS';
absolute_reservedwords[195] := 'POSITION';
absolute_reservedwords[196] := 'POWER';
absolute_reservedwords[197] := 'PRECISION';
absolute_reservedwords[198] := 'PREPARE';
absolute_reservedwords[199] := 'PRESERVE';
absolute_reservedwords[200] := 'PRIMARY';
absolute_reservedwords[201] := 'PRIOR';
absolute_reservedwords[202] := 'PRIVILEGES';
absolute_reservedwords[203] := 'PROCEDURE';
absolute_reservedwords[204] := 'PUBLIC';
absolute_reservedwords[205] := 'RAND';
absolute_reservedwords[206] := 'READ';
absolute_reservedwords[207] := 'REAL';
absolute_reservedwords[208] := 'REFERENCES';
absolute_reservedwords[209] := 'RELATIVE';
absolute_reservedwords[210] := 'RENAME';
absolute_reservedwords[211] := 'RESTRICT';
absolute_reservedwords[212] := 'REVOKE';
absolute_reservedwords[213] := 'RIGHT';
absolute_reservedwords[214] := 'ROLLBACK';
absolute_reservedwords[215] := 'ROUND';
absolute_reservedwords[216] := 'ROWNUM';
absolute_reservedwords[217] := 'ROWS';
absolute_reservedwords[218] := 'RTRIM';
absolute_reservedwords[219] := 'SCHEMA';
absolute_reservedwords[220] := 'SCROLL';
absolute_reservedwords[221] := 'SECOND';
absolute_reservedwords[222] := 'SECTION';
absolute_reservedwords[223] := 'SELECT';
absolute_reservedwords[224] := 'SESSION';
absolute_reservedwords[225] := 'SESSION_USER';
absolute_reservedwords[226] := 'SET';
absolute_reservedwords[227] := 'SIGN';
absolute_reservedwords[228] := 'SIN';
absolute_reservedwords[229] := 'SIZE';
absolute_reservedwords[230] := 'SMALLINT';
absolute_reservedwords[231] := 'SOME';
absolute_reservedwords[232] := 'SPACE';
absolute_reservedwords[233] := 'SQL';
absolute_reservedwords[234] := 'SQLCODE';
absolute_reservedwords[235] := 'SQLERROR';
absolute_reservedwords[236] := 'SQLSTATE';
absolute_reservedwords[237] := 'SQR';
absolute_reservedwords[238] := 'SQRT';
absolute_reservedwords[239] := 'START';
absolute_reservedwords[240] := 'SUBSTRING';
absolute_reservedwords[241] := 'SUM';
absolute_reservedwords[242] := 'SYSDATE';
absolute_reservedwords[243] := 'SYSTEM_USER';
absolute_reservedwords[244] := 'TABLE';
absolute_reservedwords[245] := 'TEMPORARY';
absolute_reservedwords[246] := 'THEN';
absolute_reservedwords[247] := 'TIME';
absolute_reservedwords[248] := 'TIMESTAMP';
absolute_reservedwords[249] := 'TIMEZONE_HOUR';
absolute_reservedwords[250] := 'TIMEZONE_MINUTE';
absolute_reservedwords[251] := 'TO';
absolute_reservedwords[252] := 'TODATE';
absolute_reservedwords[253] := 'TOP';
absolute_reservedwords[254] := 'TOSTRING';
absolute_reservedwords[255] := 'TRAILING';
absolute_reservedwords[256] := 'TRANSACTION';
absolute_reservedwords[257] := 'TRANSLATE';
absolute_reservedwords[258] := 'TRANSLATION';
absolute_reservedwords[259] := 'TRIM';
absolute_reservedwords[260] := 'TRUE';
absolute_reservedwords[261] := 'TRUNCATE';
absolute_reservedwords[262] := 'UNION';
absolute_reservedwords[263] := 'UNIQUE';
absolute_reservedwords[264] := 'UNKNOWN';
absolute_reservedwords[265] := 'UPDATE';
absolute_reservedwords[266] := 'UPPER';
absolute_reservedwords[267] := 'USAGE';
absolute_reservedwords[268] := 'USER';
absolute_reservedwords[269] := 'USING';
absolute_reservedwords[270] := 'VALUE';
absolute_reservedwords[271] := 'VALUES';
absolute_reservedwords[272] := 'VARCHAR';
absolute_reservedwords[273] := 'VARYING';
absolute_reservedwords[274] := 'VIEW';
absolute_reservedwords[275] := 'WHEN';
absolute_reservedwords[276] := 'WHENEVER';
absolute_reservedwords[277] := 'WHERE';
absolute_reservedwords[278] := 'WITH';
absolute_reservedwords[279] := 'WORK';
absolute_reservedwords[280] := 'WRITE';
absolute_reservedwords[281] := 'YEAR';
absolute_reservedwords[282] := 'ZONE';
end;
initialization
_driver := nil;
RegisterDriverProc(GetDriverObject);
absolute_InitializeReservedWords;
finalization
absolute_reservedwords := nil;
UnregisterDriverProc(GetDriverObject);
FreeAndNil(_driver);
end.