* Result all indexes on UpdateIndexDefs, not only the PK. Patch from Ladislav Karrach, bug

git-svn-id: trunk@15325 -
This commit is contained in:
joost 2010-05-25 20:10:44 +00:00
parent 0ca44b1a7e
commit 73df2c730d

View File

@ -82,7 +82,6 @@ type
// New methods
procedure execsql(const asql: string);
procedure UpdateIndexDefs(IndexDefs : TIndexDefs;TableName : string); override; // Differs from SQLDB.
function getprimarykeyfield(const atablename: string; const acursor: tsqlcursor): string;
function RowsAffected(cursor: TSQLCursor): TRowsCount; override;
function GetSchemaInfoSQL(SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string; override;
function StrToStatementType(s : string) : TStatementType; override;
@ -663,29 +662,6 @@ begin
checkerror(sqlite3_exec(fhandle,pchar(asql),@execscallback,@result,nil));
end;
function TSQLite3Connection.getprimarykeyfield(const atablename: string;
const acursor: tsqlcursor): string;
var
int1,int2: integer;
ar1: TArrayStringArray;
str1: string;
begin
result:= '';
if atablename <> '' then
begin
ar1:= stringsquery('PRAGMA table_info('+atablename+');');
for int1:= 0 to high(ar1) do
begin
if (high(ar1[int1]) >= 5) and (ar1[int1][5] <> '0') then
begin
if result<>'' then result := result+';';
result:= result+ar1[int1][1];
end;
end;
end;
end;
function TSQLite3Connection.RowsAffected(cursor: TSQLCursor): TRowsCount;
begin
if assigned(cursor) then
@ -722,32 +698,58 @@ end;
procedure TSQLite3Connection.UpdateIndexDefs(IndexDefs: TIndexDefs; TableName: string);
var
str1: string;
begin
str1:= getprimarykeyfield(tablename,nil);
if str1 <> '' then
begin
indexdefs.add('$PRIMARY_KEY$',str1,[ixPrimary,ixUnique]);
end;
end;
{
procedure TSQLite3Connection.UpdateIndexDefs(var IndexDefs: TIndexDefs;
const TableName: string);
var
int1,int2: integer;
ar1: TArrayStringArray;
str1: string;
begin
ar1:= stringsquery('PRAGMA table_info('+tablename+');');
for int1:= 0 to high(ar1) do begin
if (high(ar1[int1]) >= 5) and (ar1[int1][5] <> '0') then begin
indexdefs.add('$PRIMARY_KEY$',ar1[int1][1],[ixPrimary,ixUnique]);
break;
artableinfo, arindexlist, arindexinfo: TArrayStringArray;
il,ii: integer;
IndexName: string;
IndexOptions: TIndexOptions;
PKFields, IXFields: TStrings;
l: boolean;
function CheckPKFields:boolean;
var i: integer;
begin
Result:=false;
if IXFields.Count<>PKFields.Count then Exit;
for i:=0 to IXFields.Count-1 do
if PKFields.IndexOf(IXFields[i])<0 then Exit;
Result:=true;
PKFields.Clear;
end;
end;
begin
PKFields:=TStringList.Create;
IXFields:=TStringList.Create;
IXFields.Delimiter:=';';
//primary key fields
artableinfo := stringsquery('PRAGMA table_info('+TableName+');');
for ii:=low(artableinfo) to high(artableinfo) do
if (high(artableinfo[ii]) >= 5) and (artableinfo[ii][5] = '1') then
PKFields.Add(artableinfo[ii][1]);
//list of all table indexes
arindexlist:=stringsquery('PRAGMA index_list('+TableName+');');
for il:=low(arindexlist) to high(arindexlist) do
begin
IndexName:=arindexlist[il][1];
if arindexlist[il][2]='1' then
IndexOptions:=[ixUnique]
else
IndexOptions:=[];
//list of columns in given index
arindexinfo:=stringsquery('PRAGMA index_info('+IndexName+');');
IXFields.Clear;
for ii:=low(arindexinfo) to high(arindexinfo) do
IXFields.Add(arindexinfo[ii][2]);
if CheckPKFields then IndexOptions:=IndexOptions+[ixPrimary];
IndexDefs.Add(IndexName, IXFields.DelimitedText, IndexOptions);
end;
PKFields.Free;
IXFields.Free;
end;
}
function TSQLite3Connection.getinsertid: int64;
begin