Skip to content

Commit

Permalink
Issue #12: detect foreign keys of SQLite tables
Browse files Browse the repository at this point in the history
  • Loading branch information
ansgarbecker committed Jan 13, 2020
1 parent 245e033 commit 93a3c97
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions source/dbconnection.pas
Expand Up @@ -621,6 +621,7 @@ TSQLiteConnection = class(TDBConnection)
property LastRawResults: TSQLiteRawResults read FLastRawResults; property LastRawResults: TSQLiteRawResults read FLastRawResults;
function GetTableColumns(Table: TDBObject): TTableColumnList; override; function GetTableColumns(Table: TDBObject): TTableColumnList; override;
function GetTableKeys(Table: TDBObject): TTableKeyList; override; function GetTableKeys(Table: TDBObject): TTableKeyList; override;
function GetTableForeignKeys(Table: TDBObject): TForeignKeyList; override;
end; end;




Expand Down Expand Up @@ -4922,6 +4923,33 @@ function TDBConnection.GetTableForeignKeys(Table: TDBObject): TForeignKeyList;
end; end;




function TSQLiteConnection.GetTableForeignKeys(Table: TDBObject): TForeignKeyList;
var
ForeignQuery: TDBQuery;
ForeignKey: TForeignKey;
begin
// SQLite: query PRAGMA foreign_key_list
Result := TForeignKeyList.Create(True);
ForeignQuery := GetResults('SELECT * from PRAGMA_foreign_key_list('+EscapeString(Table.Name)+')');
ForeignKey := nil;
while not ForeignQuery.Eof do begin
if (not Assigned(ForeignKey)) or (ForeignKey.KeyName <> ForeignQuery.Col('id')) then begin
ForeignKey := TForeignKey.Create(Self);
Result.Add(ForeignKey);
ForeignKey.KeyName := ForeignQuery.Col('id');
ForeignKey.OldKeyName := ForeignKey.KeyName;
ForeignKey.ReferenceTable := Table.Database + '.' + ForeignQuery.Col('table');
ForeignKey.OnUpdate := ForeignQuery.Col('on_update');
ForeignKey.OnDelete := ForeignQuery.Col('on_delete');
end;
ForeignKey.Columns.Add(ForeignQuery.Col('from'));
ForeignKey.ForeignColumns.Add(ForeignQuery.Col('to'));
ForeignQuery.Next;
end;
ForeignQuery.Free;
end;


function TMySQLConnection.GetRowCount(Obj: TDBObject): Int64; function TMySQLConnection.GetRowCount(Obj: TDBObject): Int64;
var var
Rows: String; Rows: String;
Expand Down

0 comments on commit 93a3c97

Please sign in to comment.