From 02097a03b20a58957149e68ad484fd2769831481 Mon Sep 17 00:00:00 2001 From: rowanbeentje Date: Mon, 16 Nov 2009 23:35:20 +0000 Subject: - Correctly report errors triggered *during* result download for streaming results. This improves partial content displays (using the new code as of r1530) and also improves custom query error reporting. --- Frameworks/MCPKit/MCPFoundationKit/MCPConnection.h | 1 + Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m | 11 ++++++++++- Frameworks/MCPKit/MCPFoundationKit/MCPStreamingResult.m | 5 +++++ Source/TableContent.m | 2 +- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.h b/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.h index 0442bf9f..e5de0713 100644 --- a/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.h +++ b/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.h @@ -196,6 +196,7 @@ void performThreadedKeepAlive(void *ptr); - (void)setLastErrorMessage:(NSString *)theErrorMessage; - (NSUInteger)getLastErrorID; + (BOOL)isErrorNumberConnectionError:(NSInteger)theErrorNumber; +- (void)updateErrorStatuses; // Queries - (NSString *)prepareBinaryData:(NSData *)theData; diff --git a/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m b/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m index 7db3ec2d..07ea4c39 100644 --- a/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m +++ b/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m @@ -1126,6 +1126,15 @@ void performThreadedKeepAlive(void *ptr) return NO; } +/** + * Update error messages - for example after a streaming result has finished processing. + */ +- (void)updateErrorStatuses +{ + [self setLastErrorMessage:nil]; + lastQueryErrorId = mysql_errno(mConnection); +} + #pragma mark - #pragma mark Queries @@ -1405,7 +1414,7 @@ void performThreadedKeepAlive(void *ptr) if (queryCancelled) { queryErrorMessage = [[NSString alloc] initWithString:NSLocalizedString(@"Query cancelled.", @"Query cancelled error")]; - queryErrorId = 1152; + queryErrorId = 1317; } else { queryErrorMessage = [[NSString alloc] initWithString:[self stringWithCString:mysql_error(mConnection)]]; queryErrorId = mysql_errno(mConnection); diff --git a/Frameworks/MCPKit/MCPFoundationKit/MCPStreamingResult.m b/Frameworks/MCPKit/MCPFoundationKit/MCPStreamingResult.m index 99150527..4fde472d 100644 --- a/Frameworks/MCPKit/MCPFoundationKit/MCPStreamingResult.m +++ b/Frameworks/MCPKit/MCPFoundationKit/MCPStreamingResult.m @@ -170,6 +170,11 @@ // once all memory has been freed if (processedRowCount == downloadedRowCount) { while (!dataFreed) usleep(1000); + + // Update the connection's error statuses in case of error during content download + [parentConnection updateErrorStatuses]; + + // Unlock the connection and return [parentConnection unlockConnection]; connectionUnlocked = YES; return nil; diff --git a/Source/TableContent.m b/Source/TableContent.m index d5c9e8d1..fbce4b33 100644 --- a/Source/TableContent.m +++ b/Source/TableContent.m @@ -553,7 +553,7 @@ [self processResultIntoDataStorage:streamingResult approximateRowCount:[prefs integerForKey:SPLimitResultsValue]]; [streamingResult release]; } - + if ([mySQLConnection queryCancelled] || ![[mySQLConnection getLastErrorMessage] isEqualToString:@""]) isInterruptedLoad = YES; else -- cgit v1.2.3