diff options
-rw-r--r-- | Frameworks/MCPKit/MCPFoundationKit/MCPConnection.h | 5 | ||||
-rw-r--r-- | Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m | 35 | ||||
-rw-r--r-- | Source/SPConnectionController.m | 3 |
3 files changed, 38 insertions, 5 deletions
diff --git a/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.h b/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.h index 4a0f7485..87b9ca57 100644 --- a/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.h +++ b/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.h @@ -119,7 +119,6 @@ static inline NSData* NSStringDataUsingLossyEncoding(NSString* self, int encodin SEL timeConnectedSEL; } -@property (readwrite, assign) id delegate; @property (readwrite, assign) BOOL useKeepAlive; @property (readwrite, assign) BOOL delegateQueryLogging; @property (readwrite, assign) int connectionTimeout; @@ -129,6 +128,10 @@ static inline NSData* NSStringDataUsingLossyEncoding(NSString* self, int encodin - (id)initToHost:(NSString *)host withLogin:(NSString *)login usingPort:(int)port; - (id)initToSocket:(NSString *)socket withLogin:(NSString *)login; +// Delegate +- (id)delegate; +- (void)setDelegate:(id)connectionDelegate; + // Connection details - (BOOL)setPort:(int)thePort; - (BOOL)setPassword:(NSString *)thePassword; diff --git a/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m b/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m index e3d26aeb..7429e23a 100644 --- a/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m +++ b/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m @@ -58,7 +58,6 @@ static BOOL sTruncateLongFieldInLogs = YES; @implementation MCPConnection // Synthesize ivars -@synthesize delegate; @synthesize useKeepAlive; @synthesize delegateQueryLogging; @synthesize connectionTimeout; @@ -104,7 +103,7 @@ static BOOL sTruncateLongFieldInLogs = YES; // Initialize ivar defaults connectionTimeout = 10; useKeepAlive = YES; - keepAliveInterval = 60; + keepAliveInterval = 60; connectionThreadId = 0; maxAllowedPacketSize = -1; @@ -112,6 +111,9 @@ static BOOL sTruncateLongFieldInLogs = YES; lastQueryErrorId = 0; lastQueryErrorMessage = nil; lastQueryAffectedRows = 0; + + // Enable delegate query logging by default + delegateQueryLogging = YES; // Default to allowing queries to be reattempted if they fail due to connection issues retryAllowed = YES; @@ -172,6 +174,29 @@ static BOOL sTruncateLongFieldInLogs = YES; } #pragma mark - +#pragma mark Delegate + +/** + * Get the connection's current delegate. + */ +- (id)delegate +{ + return delegate; +} + +/** + * Set the connection's delegate to the supplied object. + */ +- (void)setDelegate:(id)connectionDelegate +{ + delegate = connectionDelegate; + + // Check that the delegate implements willQueryString:connection: and cache the result as its used + // vert frequently. + delegateResponseToWillQueryString = [delegate respondsToSelector:@selector(willQueryString:connection:)]; +} + +#pragma mark - #pragma mark Connection details /** @@ -1244,8 +1269,10 @@ static void forcePingTimeout(int signalNumber) (void)(*stopKeepAliveTimerPtr)(self, stopKeepAliveTimerSEL); // Inform the delegate about the query if logging is enabled and delegate responds to willQueryString:connection: - if (delegateQueryLogging && delegateResponseToWillQueryString) - (void)(NSString*)(*willQueryStringPtr)(delegate, willQueryStringSEL, query); + if (delegateQueryLogging && delegateResponseToWillQueryString) { + [delegate willQueryString:query connection:self]; + } + // If thirty seconds have elapsed since the last query, check the connection. This provides // a balance between keeping high read/write timeouts for long queries, network issues, and diff --git a/Source/SPConnectionController.m b/Source/SPConnectionController.m index b401219a..272808a5 100644 --- a/Source/SPConnectionController.m +++ b/Source/SPConnectionController.m @@ -286,6 +286,9 @@ // Connection delegate must be set before actual connection attempt is made [mySQLConnection setDelegate:tableDocument]; + + // Set whether or not we should enable delegate logging according to the prefs + [mySQLConnection setDelegateQueryLogging:[prefs boolForKey:@"ConsoleEnableLogging"]]; // Set options from preferences [mySQLConnection setConnectionTimeout:[[prefs objectForKey:@"ConnectionTimeoutValue"] intValue]]; |