git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.RemObjects@46 b6239004-a887-0f4b-9937-50029ccdca16
255 lines
8.9 KiB
ObjectPascal
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.
|
|
|