From 6d326739c2a23a6e6d9ff161deafd0d98face6cf Mon Sep 17 00:00:00 2001 From: rosenfield Date: Tue, 6 Nov 2007 13:07:39 +0000 Subject: [PATCH] Bugfix: LOCK TABLES needs to be done before DISABLE KEYS. MySQL seemingly does not always enforce this correctly? Either way, it's the correct semantics, to prevent other writers leaving data in the table after keys has been disabled but before HeidiSQL locks it. --- source/exportsql.pas | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/exportsql.pas b/source/exportsql.pas index 02fc88a1..b05e268b 100644 --- a/source/exportsql.pas +++ b/source/exportsql.pas @@ -962,20 +962,20 @@ begin begin if tofile then begin - wfs(f, fixSQL( '/*!40000 ALTER TABLE '+ destMask(checkListTables.Items[i]) +' DISABLE KEYS;*/', target_version) ); wfs(f, 'LOCK TABLES '+ destMask(checkListTables.Items[i]) +' WRITE;' ); + wfs(f, fixSQL( '/*!40000 ALTER TABLE '+ destMask(checkListTables.Items[i]) +' DISABLE KEYS;*/', target_version) ); end else if todb then begin + cwin.ExecUpdateQuery( 'LOCK TABLES ' + sourceMask(destDb) + '.' + sourceMask(checkListTables.Items[i])+ ' WRITE, ' + sourceMask(sourceDb) + '.' + sourceMask(checkListTables.Items[i])+ ' WRITE'); if target_version > 40000 then cwin.ExecUpdateQuery( 'ALTER TABLE ' + sourceMask(destDb) + '.' + sourceMask(checkListTables.Items[i])+ ' DISABLE KEYS' ); - cwin.ExecUpdateQuery( 'LOCK TABLES ' + sourceMask(destDb) + '.' + sourceMask(checkListTables.Items[i])+ ' WRITE, ' + sourceMask(sourceDb) + '.' + sourceMask(checkListTables.Items[i])+ ' WRITE'); end else if tohost then begin + RemoteExecNonQuery(win2export, 'LOCK TABLES ' + destMask(destDb) + '.' + destMask(checkListTables.Items[i]) + ' WRITE'); if target_version > 40000 then RemoteExecNonQuery(win2export, 'ALTER TABLE ' + destMask(destDb) + '.' + destMask(checkListTables.Items[i]) + ' DISABLE KEYS'); - RemoteExecNonQuery(win2export, 'LOCK TABLES ' + destMask(destDb) + '.' + destMask(checkListTables.Items[i]) + ' WRITE'); end; end;