Restrict disabling foreign keys to MySQL when dropping objects. See http://www.heidisql.com/forum.php?t=7025#p16142

This commit is contained in:
Ansgar Becker
2014-08-17 10:00:46 +00:00
parent be988526bd
commit 2a4a23a19b

View File

@ -3004,6 +3004,7 @@ var
ObjectList: TDBObjectList;
Editor: TDBObjectEditor;
Conn: TDBConnection;
DisableForeignKeys: Boolean;
begin
Conn := ActiveConnection;
@ -3058,7 +3059,8 @@ begin
if MessageDialog(f_('Drop %d object(s) in database "%s"?', [ObjectList.Count, Conn.Database]), msg, mtCriticalConfirmation, [mbok,mbcancel]) = mrOk then begin
try
// Disable foreign key checks to avoid SQL errors
if Conn.ServerVersionInt >= 40014 then
DisableForeignKeys := (Conn.Parameters.NetTypeGroup = ngMySQL) and (Conn.ServerVersionInt >= 40014);
if DisableForeignKeys then
Conn.Query('SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0');
// Compose and run DROP [TABLE|VIEW|...] queries
Editor := ActiveObjectEditor;
@ -3067,7 +3069,7 @@ begin
if Assigned(Editor) and Editor.Modified and Editor.DBObject.IsSameAs(DBObject) then
Editor.Modified := False;
end;
if Conn.ServerVersionInt >= 40014 then
if DisableForeignKeys then
Conn.Query('SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS');
// Refresh ListTables + dbtree so the dropped tables are gone:
Conn.ClearDbObjects(ActiveDatabase);