Componentes.Terceros.RemObj.../internal/5.0.30.691/1/Data Abstract for Delphi/Source/uDASQLiteInterfaces.pas

255 lines
8.9 KiB
ObjectPascal

unit uDASQLiteInterfaces;
{----------------------------------------------------------------------------}
{ 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
uDAInterfaces, uDAEngine, uROClasses;
type
{ IDASQLiteConnection
For identification purposes Implemented by all SQLite connections }
IDASQLiteConnection = interface(IDAConnection)
['{C6249278-7BBB-4E4F-849B-A9AA7C9ACD66}']
end;
TDASQLiteDriver = class(TDAEDriver)
protected
function GetDefaultConnectionType(const AuxDriver: string): string; override; {$IFNDEF FPC_SAFECALL_BUG}safecall;{$ENDIF}
end;
TDASQLiteConnection = class(TDAEConnection, IDAFileBasedDatabase, IDASQLiteConnection)
protected
procedure DoGetTableNames(out List: IROStrings); override;
procedure DoGetStoredProcedureNames(out List: IROStrings); override;
procedure DoGetViewNames(out List: IROStrings); override;
function IdentifierNeedsQuoting(const iIdentifier: string): boolean; override; {$IFNDEF FPC_SAFECALL_BUG}safecall;{$ENDIF}
//IDAFileBasedDatabase
function GetFileExtensions: IROStrings;
end;
function SQLite_GetFileExtensions: IROStrings;
procedure SQLite_GetObjectNames(Query: IDADataset;AList: IROStrings; AObjectType: TDAObjecttype);
function SQLite_IdentifierNeedsQuoting(const iIdentifier: string): boolean;
const
SQLite_DriverType = 'SQLite';
implementation
uses
SysUtils;
var
sqlite_reservedwords : array of string;
function SQLite_GetFileExtensions: IROStrings;
begin
Result := TROStrings.Create;
result.Add('*.SQB;*.DB3;*.DB;*.DBB;SQLite Database (*.sqb,*.db3,*.db,*.dbb)');
result.Add('*.*;All files (*.*)');
end;
procedure SQLite_GetObjectNames(Query: IDADataset;AList: IROStrings; AObjectType: TDAObjecttype);
begin
try
case AObjectType of
dotTable: Query.SQL := 'SELECT name FROM sqlite_master WHERE type="table" ORDER BY name';
dotView: Query.SQL := 'SELECT name FROM sqlite_master WHERE type="view" ORDER BY name';
dotProcedure: Exit;
else
end;
Query.Open;
while not Query.EOF do begin
AList.Add(Trim(Query.Fields[0].AsString));
Query.Next;
end;
finally
Query:=nil;
end;
end;
function SQLite_IdentifierNeedsQuoting(const iIdentifier: string): boolean;
begin
result := TestIdentifier(iIdentifier, sqlite_reservedwords);
end;
{ TDASQLiteDriver }
function TDASQLiteDriver.GetDefaultConnectionType(
const AuxDriver: string): string;
begin
Result:= SQLite_DriverType;
end;
{ TDASQLiteConnection }
procedure TDASQLiteConnection.DoGetStoredProcedureNames(out List: IROStrings);
begin
inherited;
SQLite_GetObjectNames(GetDatasetClass.Create(Self),List,dotProcedure);
end;
procedure TDASQLiteConnection.DoGetTableNames(out List: IROStrings);
begin
inherited;
SQLite_GetObjectNames(GetDatasetClass.Create(Self),List,dotTable);
end;
procedure TDASQLiteConnection.DoGetViewNames(out List: IROStrings);
begin
inherited;
SQLite_GetObjectNames(GetDatasetClass.Create(Self),List,dotView);
end;
function TDASQLiteConnection.GetFileExtensions: IROStrings;
begin
Result:=SQLite_GetFileExtensions;
end;
function TDASQLiteConnection.IdentifierNeedsQuoting(
const iIdentifier: string): boolean;
begin
Result := inherited IdentifierNeedsQuoting(iIdentifier) or SQLite_IdentifierNeedsQuoting(iIdentifier);
end;
procedure sqlite_InitializeReservedWords;
begin
SetLength(sqlite_reservedwords,113);
// sorted with TStringList.Sort (bds2007)
sqlite_reservedwords[0] := 'ABORT';
sqlite_reservedwords[1] := 'ADD';
sqlite_reservedwords[2] := 'AFTER';
sqlite_reservedwords[3] := 'ALL';
sqlite_reservedwords[4] := 'ALTER';
sqlite_reservedwords[5] := 'ANALYZE';
sqlite_reservedwords[6] := 'AND';
sqlite_reservedwords[7] := 'AS';
sqlite_reservedwords[8] := 'ASC';
sqlite_reservedwords[9] := 'ATTACH';
sqlite_reservedwords[10] := 'AUTOINCREMENT';
sqlite_reservedwords[11] := 'BEFORE';
sqlite_reservedwords[12] := 'BEGIN';
sqlite_reservedwords[13] := 'BETWEEN';
sqlite_reservedwords[14] := 'BY';
sqlite_reservedwords[15] := 'CASCADE';
sqlite_reservedwords[16] := 'CASE';
sqlite_reservedwords[17] := 'CAST';
sqlite_reservedwords[18] := 'CHECK';
sqlite_reservedwords[19] := 'COLLATE';
sqlite_reservedwords[20] := 'COMMIT';
sqlite_reservedwords[21] := 'CONFLICT';
sqlite_reservedwords[22] := 'CONSTRAINT';
sqlite_reservedwords[23] := 'CREATE';
sqlite_reservedwords[24] := 'CROSS';
sqlite_reservedwords[25] := 'CURRENT_DATE';
sqlite_reservedwords[26] := 'CURRENT_TIME';
sqlite_reservedwords[27] := 'CURRENT_TIMESTAMP';
sqlite_reservedwords[28] := 'DATABASE';
sqlite_reservedwords[29] := 'DEFAULT';
sqlite_reservedwords[30] := 'DEFERRABLE';
sqlite_reservedwords[31] := 'DEFERRED';
sqlite_reservedwords[32] := 'DELETE';
sqlite_reservedwords[33] := 'DESC';
sqlite_reservedwords[34] := 'DETACH';
sqlite_reservedwords[35] := 'DISTINCT';
sqlite_reservedwords[36] := 'DROP';
sqlite_reservedwords[37] := 'EACH';
sqlite_reservedwords[38] := 'ELSE';
sqlite_reservedwords[39] := 'END';
sqlite_reservedwords[40] := 'ESCAPE';
sqlite_reservedwords[41] := 'EXCEPT';
sqlite_reservedwords[42] := 'EXCLUSIVE';
sqlite_reservedwords[43] := 'EXPLAIN';
sqlite_reservedwords[44] := 'FAIL';
sqlite_reservedwords[45] := 'FOR';
sqlite_reservedwords[46] := 'FOREIGN';
sqlite_reservedwords[47] := 'FROM';
sqlite_reservedwords[48] := 'FULL';
sqlite_reservedwords[49] := 'GLOB';
sqlite_reservedwords[50] := 'GROUP';
sqlite_reservedwords[51] := 'HAVING';
sqlite_reservedwords[52] := 'IF';
sqlite_reservedwords[53] := 'IGNORE';
sqlite_reservedwords[54] := 'IMMEDIATE';
sqlite_reservedwords[55] := 'IN';
sqlite_reservedwords[56] := 'INDEX';
sqlite_reservedwords[57] := 'INITIALLY';
sqlite_reservedwords[58] := 'INNER';
sqlite_reservedwords[59] := 'INSERT';
sqlite_reservedwords[60] := 'INSTEAD';
sqlite_reservedwords[61] := 'INTERSECT';
sqlite_reservedwords[62] := 'INTO';
sqlite_reservedwords[63] := 'IS';
sqlite_reservedwords[64] := 'ISNULL';
sqlite_reservedwords[65] := 'JOIN';
sqlite_reservedwords[66] := 'KEY';
sqlite_reservedwords[67] := 'LEFT';
sqlite_reservedwords[68] := 'LIKE';
sqlite_reservedwords[69] := 'LIMIT';
sqlite_reservedwords[70] := 'MATCH';
sqlite_reservedwords[71] := 'NATURAL';
sqlite_reservedwords[72] := 'NOT';
sqlite_reservedwords[73] := 'NOTNULL';
sqlite_reservedwords[74] := 'NULL';
sqlite_reservedwords[75] := 'OF';
sqlite_reservedwords[76] := 'OFFSET';
sqlite_reservedwords[77] := 'ON';
sqlite_reservedwords[78] := 'OR';
sqlite_reservedwords[79] := 'ORDER';
sqlite_reservedwords[80] := 'OUTER';
sqlite_reservedwords[81] := 'PLAN';
sqlite_reservedwords[82] := 'PRAGMA';
sqlite_reservedwords[83] := 'PRIMARY';
sqlite_reservedwords[84] := 'QUERY';
sqlite_reservedwords[85] := 'RAISE';
sqlite_reservedwords[86] := 'REFERENCES';
sqlite_reservedwords[87] := 'REINDEX';
sqlite_reservedwords[88] := 'RENAME';
sqlite_reservedwords[89] := 'REPLACE';
sqlite_reservedwords[90] := 'RESTRICT';
sqlite_reservedwords[91] := 'RIGHT';
sqlite_reservedwords[92] := 'ROLLBACK';
sqlite_reservedwords[93] := 'ROW';
sqlite_reservedwords[94] := 'SELECT';
sqlite_reservedwords[95] := 'SET';
sqlite_reservedwords[96] := 'TABLE';
sqlite_reservedwords[97] := 'TEMP';
sqlite_reservedwords[98] := 'TEMPORARY';
sqlite_reservedwords[99] := 'THEN';
sqlite_reservedwords[100] := 'TO';
sqlite_reservedwords[101] := 'TRANSACTION';
sqlite_reservedwords[102] := 'TRIGGER';
sqlite_reservedwords[103] := 'UNION';
sqlite_reservedwords[104] := 'UNIQUE';
sqlite_reservedwords[105] := 'UPDATE';
sqlite_reservedwords[106] := 'USING';
sqlite_reservedwords[107] := 'VACUUM';
sqlite_reservedwords[108] := 'VALUES';
sqlite_reservedwords[109] := 'VIEW';
sqlite_reservedwords[110] := 'VIRTUAL';
sqlite_reservedwords[111] := 'WHEN';
sqlite_reservedwords[112] := 'WHERE';
end;
initialization
sqlite_InitializeReservedWords;
finalization
sqlite_reservedwords := nil;
end.