aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPNavigatorController.m
diff options
context:
space:
mode:
authorrowanbeentje <rowan@beent.je>2012-03-17 15:32:00 +0000
committerrowanbeentje <rowan@beent.je>2012-03-17 15:32:00 +0000
commitac8ebfe4bba6d7da6edad87c75b174156d919621 (patch)
tree08a3c2843d3c520090f40e6341b26043a7ccf014 /Source/SPNavigatorController.m
parent8886d935e933c6239aa9b35e900d96f7d07527c7 (diff)
parenteab6df4de773259f90dd5a1d25e44ca4d2765bbf (diff)
downloadsequelpro-ac8ebfe4bba6d7da6edad87c75b174156d919621.tar.gz
sequelpro-ac8ebfe4bba6d7da6edad87c75b174156d919621.tar.bz2
sequelpro-ac8ebfe4bba6d7da6edad87c75b174156d919621.zip
Merge in the SPMySQL Framework. This new framework should provide much of the functionality required from MCPKit and is based around its interface for relatively easy integration.
Externally visible changes as a result of this merge: - Speed improvements, particularly when loading large data sets - Stability improvements, particularly related to connection state after the connection is dropped (eg Issue #1256) - Improved support for new MySQL data types, which should address Issue #1052. - Database structure retrieval and query cancellation now use a single persistent helper connection instead of lots of connections on-demand. This should help Issue #1097. - More internal commands now use queries instead of MySQL functions; for example USE queries are now used to trigger database selection, improving transcripts. This addresses Issue #1247. - Improved internal encoding work; while this needs support within the UI, it lays the foundation for issues like Issue #1280. Code improvements: - Much improved class layouts including extensive category usage - Improved documentation across framework methods - Support for fast enumeration across result objects - Rewrite fixes use of a number of deprecate functions - Much less code duplication across result set types - Improved encapsultation within the framework, limiting the number of methods exposed, and also not exposing all the MySQL headers From the Readme file: The SPMySQL Framework is intended to provide a stable MySQL connection framework, with the ability to run text-based queries and rapidly retrieve result sets with conversion from MySQL data types to Cocoa objects. SPMySQL.framework has an interface loosely based around that provided by MCPKit by Serge Cohen and Bertrand Mansion (http://mysql-cocoa.sourceforge.net/), and in particular the heavily modified Sequel Pro version (http://www.sequelpro.com/). It is a full rewrite of the original framework, although it includes code from patches implementing the following Sequel Pro functionality, largely contributed by Hans-Jörg Bibiko, Stuart Connolly, Jakob Egger, and Rowan Beentje: - Connection locking (Jakob et al) - Ping & keepalive (Rowan et al) - Query cancellation (Rowan et al) - Delegate setup (Stuart et al) - SSL support (Rowan et al) - Connection checking (Rowan et al) - Version state (Stuart et al) - Maximum packet size control (Hans et al) - Result multithreading and streaming (Rowan et al) - Improved encoding support & switching (Rowan et al) - Database structure; moved to inside the app (Hans et al) - Query reattempts and error-handling approach (Rowan et al) - Geometry result class (Hans et al) - Connection proxy (Stuart et al)
Diffstat (limited to 'Source/SPNavigatorController.m')
-rw-r--r--Source/SPNavigatorController.m43
1 files changed, 21 insertions, 22 deletions
diff --git a/Source/SPNavigatorController.m b/Source/SPNavigatorController.m
index 30b47006..2b27a598 100644
--- a/Source/SPNavigatorController.m
+++ b/Source/SPNavigatorController.m
@@ -33,6 +33,8 @@
#import "SPTooltip.h"
#import "SPAppController.h"
#import "SPDatabaseViewController.h"
+#import "SPMySQL.h"
+#import "SPDatabaseStructure.h"
#import <objc/message.h>
#endif
@@ -68,9 +70,7 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte
@synchronized(self) {
return [[self sharedNavigatorController] retain];
}
-#ifdef SP_REFACTOR
- return nil; // only here to stop clang's "can reach end of non-void function"
-#endif
+ return nil;
}
- (id)init
@@ -117,9 +117,8 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte
[functionIcon release];
[fieldIcon release];
#endif
-#ifdef SP_REFACTOR /* patch */
+
[super dealloc];
-#endif
}
/**
* The following base protocol methods are implemented to ensure the singleton status of this class.
@@ -449,12 +448,12 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte
[[schemaData objectForKey:connectionName] removeObjectForKey:db];
}
}
- id structureData = [theConnection getDbStructure];
+ id structureData = [[doc databaseStructureRetrieval] structure];
if(structureData && [structureData objectForKey:connectionName] && [[structureData objectForKey:connectionName] isKindOfClass:NSDictionaryClass]) {
for(id item in [[structureData objectForKey:connectionName] allKeys])
[[schemaData objectForKey:connectionName] setObject:[[structureData objectForKey:connectionName] objectForKey:item] forKey:item];
- NSArray *a = [theConnection getAllKeysOfDbStructure];
+ NSArray *a = [[doc databaseStructureRetrieval] allStructureKeys];
if(a)
[allSchemaKeys setObject:a forKey:connectionName];
} else {
@@ -799,7 +798,7 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte
[expandStatus2 removeObjectForKey:[[parentObject allKeysForObject:item] objectAtIndex:0]];
}
-- (id)outlineView:(id)outlineView child:(NSInteger)index ofItem:(id)item
+- (id)outlineView:(id)outlineView child:(NSInteger)childIndex ofItem:(id)item
{
if (item == nil) {
@@ -822,7 +821,7 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte
// No parent return the child by using the normal sort routine
if(!parentObject || ![parentObject isKindOfClass:NSDictionaryClass])
- return [item objectForKey:NSArrayObjectAtIndex([allKeys sortedArrayUsingFunction:compareStrings context:nil],index)];
+ return [item objectForKey:NSArrayObjectAtIndex([allKeys sortedArrayUsingFunction:compareStrings context:nil],childIndex)];
// Get the parent key name for storing
id parentKeys = [parentObject allKeysForObject:item];
@@ -832,26 +831,26 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte
// For safety reasons
if(!itemRef)
- return [item objectForKey:NSArrayObjectAtIndex([allKeys sortedArrayUsingFunction:compareStrings context:nil],index)];
+ return [item objectForKey:NSArrayObjectAtIndex([allKeys sortedArrayUsingFunction:compareStrings context:nil],childIndex)];
// Not yet cached so do it
if(![cachedSortedKeys objectForKey:itemRef])
[cachedSortedKeys setObject:[allKeys sortedArrayUsingFunction:compareStrings context:nil] forKey:itemRef];
- return [item objectForKey:NSArrayObjectAtIndex([cachedSortedKeys objectForKey:itemRef],index)];
+ return [item objectForKey:NSArrayObjectAtIndex([cachedSortedKeys objectForKey:itemRef],childIndex)];
}
// If something failed return the child by using the normal way
- return [item objectForKey:NSArrayObjectAtIndex([allKeys sortedArrayUsingFunction:compareStrings context:nil],index)];
+ return [item objectForKey:NSArrayObjectAtIndex([allKeys sortedArrayUsingFunction:compareStrings context:nil],childIndex)];
} else {
- return [item objectForKey:NSArrayObjectAtIndex([allKeys sortedArrayUsingFunction:compareStrings context:nil],index)];
+ return [item objectForKey:NSArrayObjectAtIndex([allKeys sortedArrayUsingFunction:compareStrings context:nil],childIndex)];
}
}
else if ([item isKindOfClass:[NSArray class]])
{
- return NSArrayObjectAtIndex(item,index);
+ return NSArrayObjectAtIndex(item,childIndex);
}
return nil;
@@ -1016,9 +1015,9 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte
if(!parentObject) return 0;
if([outlineView levelForItem:item] == 3 && [outlineView isExpandable:[outlineView itemAtRow:[outlineView rowForItem:item]-1]])
- return 5.0;
+ return 5.0f;
- return 18.0;
+ return 18.0f;
}
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldExpandItem:(id)item
@@ -1065,7 +1064,7 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte
NSUInteger i = 0;
for(i=0; i<[selectedItem count]-2; i++) {
NSString *item = NSArrayObjectAtIndex(selectedItem, i);
- if(![item length]) continue;
+ if([item isNSNull] || ![item length]) continue;
[infoArray addObject:[NSString stringWithFormat:@"%@: %@",
[self tableInfoLabelForIndex:i ofType:0],
[item stringByReplacingOccurrencesOfString:@"," withString:@", "]]];
@@ -1163,7 +1162,7 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
{
// Use first row as dummy to increase the distance between content and header
- return (row == 0) ? 5.0 : 16.0;
+ return (row == 0) ? 5.0f : 16.0f;
}
- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex
@@ -1213,11 +1212,11 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte
#pragma mark -
#pragma mark others
-- (NSString*)tableInfoLabelForIndex:(NSInteger)index ofType:(NSInteger)type
+- (NSString*)tableInfoLabelForIndex:(NSInteger)anIndex ofType:(NSInteger)type
{
if(type == 0 || type == 1) // TABLE / VIEW
- switch(index) {
+ switch(anIndex) {
case 0:
return NSLocalizedString(@"Type", @"type label (Navigator)");
case 1:
@@ -1239,7 +1238,7 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte
}
if(type == 2) // PROCEDURE
- switch(index) {
+ switch(anIndex) {
case 0:
return @"DTD Identifier";
case 1:
@@ -1252,7 +1251,7 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte
return @"Definer";
}
if(type == 3) // FUNCTION
- switch(index) {
+ switch(anIndex) {
case 0:
return NSLocalizedString(@"Return Type", @"return type label (Navigator)");
case 1: