aboutsummaryrefslogtreecommitdiffstats
path: root/Source/TableDocument.m
diff options
context:
space:
mode:
authorrowanbeentje <rowan@beent.je>2009-02-18 21:47:29 +0000
committerrowanbeentje <rowan@beent.je>2009-02-18 21:47:29 +0000
commit3ca168863ddbdc3ac3bba0cfd9a64ce262cbfea8 (patch)
tree19639d2095efd7c3d48ac2dedf893653f8a60c2e /Source/TableDocument.m
parent2525366dbfed3aef78beaed89630ea543389cec1 (diff)
downloadsequelpro-3ca168863ddbdc3ac3bba0cfd9a64ce262cbfea8.tar.gz
sequelpro-3ca168863ddbdc3ac3bba0cfd9a64ce262cbfea8.tar.bz2
sequelpro-3ca168863ddbdc3ac3bba0cfd9a64ce262cbfea8.zip
Sets and enforces a connection timeout, and handles connection timeouts appropriately - offering to retry, reconnect, or disconnect. This fixes Issue #93, Issue #69, and Issue #77.
The gory details: Previously, MCPKit was correctly running mysql_ping to ensure a connection still existed before running a query, and aborted the query if the connection was no longer active.However the code very rarely checked the response of this, so if a query failed subsequent queries would continue to be run and the program would end up checking non-existent results, throwing Cocoa exceptions and generally breaking. However, mysql_ping would also use the default timeout (30 seconds) for each check - when running the (previous to r333) 14 queries to switch tables, this resulted in a long hang before the program even broke. To exacerbate the issue, certain situations triggered a bug present in mysql_ping in the old client binaries we're using (http://bugs.mysql.com/bug.php?id=9678), causing mysql_ping to never return despite the presence of a timeout, and so causing an indefinite hang. This issue has been fixed by: - Setting a new 10 second connection timeout for both new connections (Issue #69) and for mysql_pings. Once preferences have been redesigned we'll probably make this value editable. - Enforce the 10 second timeout even if mysql_ping hangs by using interrupts. - Wrap mysql_ping in a new method to do the above and also catch re-established connections without reporting false failures. - When a connection has failed, prompt the user to Retry, Reconnect, or Disconnect. Reconnect uses the original details for the old connection to establish a new connection, also attempting to preserve the current encoding. - Do not return control to the main loop until a connection has been reestablished (or disconnected) - this ensures the program is never in a broken state without having to rewrite all query usage. Much of the above patches the MCPKit connection methods as necessary.
Diffstat (limited to 'Source/TableDocument.m')
-rw-r--r--Source/TableDocument.m2
1 files changed, 2 insertions, 0 deletions
diff --git a/Source/TableDocument.m b/Source/TableDocument.m
index b9cb66a6..10ef7dca 100644
--- a/Source/TableDocument.m
+++ b/Source/TableDocument.m
@@ -158,6 +158,8 @@ NSString *TableDocumentFavoritesControllerFavoritesDidChange = @"TableDocumentFa
password:[passwordField stringValue]
usingPort:[portField intValue]];
}
+ [mySQLConnection setParentWindow:tableWindow];
+
if ( ![mySQLConnection isConnected] )
code = 2;
if ( !code && ![[databaseField stringValue] isEqualToString:@""] ) {