aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPNavigatorController.m
diff options
context:
space:
mode:
authorBibiko <bibiko@eva.mpg.de>2010-03-28 23:57:28 +0000
committerBibiko <bibiko@eva.mpg.de>2010-03-28 23:57:28 +0000
commit24b365b2a177d7de4cdbb7601424b6b1098a8414 (patch)
tree93959dbd99e4cb2b3b1ffcd9b264b241dabd1824 /Source/SPNavigatorController.m
parenta7800682c2a2fcd9bb5c85d2f5f965486b3a72d5 (diff)
downloadsequelpro-24b365b2a177d7de4cdbb7601424b6b1098a8414.tar.gz
sequelpro-24b365b2a177d7de4cdbb7601424b6b1098a8414.tar.bz2
sequelpro-24b365b2a177d7de4cdbb7601424b6b1098a8414.zip
- db structure for tables and views will now be queried by using SHOW… statements
- completion now works for server versions < 5 as well - proc/func info will be queried by using information_schema for mysql >= 5 - changed completion logic to handle new format - completion will get the info from SPNavigator since this controller caches all information about db structure - optimization and fine-tuning will follow very soon
Diffstat (limited to 'Source/SPNavigatorController.m')
-rw-r--r--Source/SPNavigatorController.m67
1 files changed, 28 insertions, 39 deletions
diff --git a/Source/SPNavigatorController.m b/Source/SPNavigatorController.m
index 8c460a91..dcc22c63 100644
--- a/Source/SPNavigatorController.m
+++ b/Source/SPNavigatorController.m
@@ -70,6 +70,7 @@ static SPNavigatorController *sharedNavigatorController = nil;
expandStatus1 = [[NSMutableDictionary alloc] init];
expandStatus2 = [[NSMutableDictionary alloc] init];
infoArray = [[NSMutableArray alloc] init];
+ updatingConnections = [[NSMutableSet alloc] initWithCapacity:1];
selectedKey1 = @"";
selectedKey2 = @"";
ignoreUpdate = NO;
@@ -89,6 +90,7 @@ static SPNavigatorController *sharedNavigatorController = nil;
if(allSchemaKeys) [allSchemaKeys release];
if(schemaData) [schemaData release];
if(infoArray) [infoArray release];
+ if(updatingConnections) [updatingConnections release];
if(expandStatus1) [expandStatus1 release];
if(expandStatus2) [expandStatus2 release];
}
@@ -124,6 +126,9 @@ static SPNavigatorController *sharedNavigatorController = nil;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateNavigator:)
name:@"SPDBStructureWasUpdated" object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(isUpdatingNavigator:)
+ name:@"SPDBStructureIsUpdating" object:nil];
+
}
- (NSString *)windowFrameAutosaveName
@@ -215,7 +220,7 @@ static SPNavigatorController *sharedNavigatorController = nil;
[outlineSchema2 collapseItem:[item objectForKey:[pathArray objectAtIndex:0]] collapseChildren:YES];
for(NSInteger i=0; i < [pathArray count]; i++) {
[aKey appendString:[pathArray objectAtIndex:i]];
- if(![item objectForKey:aKey]) break;
+ if(!item || ![item isKindOfClass:[NSDictionary class]] || ![item objectForKey:aKey]) break;
item = [item objectForKey:aKey];
[outlineSchema2 expandItem:item];
[aKey appendString:SPUniqueSchemaDelimiter];
@@ -377,11 +382,14 @@ static SPNavigatorController *sharedNavigatorController = nil;
[self performSelectorOnMainThread:@selector(updateEntriesForConnection:) withObject:nil waitUntilDone:YES];
}
+- (void)isUpdatingNavigator:(NSNotification *)aNotification
+{
+ // todo
+}
+
- (void)updateEntriesForConnection:(NSString*)connectionID
{
- if(![[self window] isVisible]) return;
- NSLog(@"UPDATE NAVIGATOR called");
if(ignoreUpdate) {
ignoreUpdate = NO;
return;
@@ -390,7 +398,7 @@ static SPNavigatorController *sharedNavigatorController = nil;
[self saveSelectedItems];
[infoArray removeAllObjects];
-
+
if ([[[NSDocumentController sharedDocumentController] documents] count]) {
for(id doc in [[NSDocumentController sharedDocumentController] documents]) {
@@ -406,7 +414,6 @@ static SPNavigatorController *sharedNavigatorController = nil;
[schemaData setObject:[NSMutableDictionary dictionary] forKey:connectionName];
}
-
NSArray *dbs = [doc allDatabaseNames];
NSArray *keys = [[schemaData objectForKey:connectionName] allKeys];
for(id db in keys) {
@@ -420,17 +427,9 @@ static SPNavigatorController *sharedNavigatorController = nil;
[[schemaData objectForKey:connectionName] setObject:[[[theConnection getDbStructure] objectForKey:connectionName] objectForKey:item] forKey:item];
[allSchemaKeys setObject:[theConnection getAllKeysOfDbStructure] forKey:connectionName];
} else {
-
- if([theConnection serverMajorVersion] > 4) {
- [schemaData setObject:[NSDictionary dictionary] forKey:[NSString stringWithFormat:@"%@&DEL&no data loaded yet", connectionName]];
- [allSchemaKeys setObject:[NSArray array] forKey:connectionName];
- } else {
- [schemaData setObject:[NSDictionary dictionary] forKey:[NSString stringWithFormat:@"%@&DEL&no data for this server version", connectionName]];
- [allSchemaKeys setObject:[NSArray array] forKey:connectionName];
- }
-
+ [schemaData setObject:[NSDictionary dictionary] forKey:[NSString stringWithFormat:@"%@&DEL&no data loaded yet", connectionName]];
+ [allSchemaKeys setObject:[NSArray array] forKey:connectionName];
}
-
}
[outlineSchema1 reloadData];
@@ -442,10 +441,9 @@ static SPNavigatorController *sharedNavigatorController = nil;
[self syncButtonAction:self];
- if(isFiltered)
+ if(isFiltered && [[self window] isVisible])
[self filterTree:self];
-
}
- (BOOL)schemaPathExistsForConnection:(NSString*)connectionID andDatabase:(NSString*)dbname
@@ -467,6 +465,13 @@ static SPNavigatorController *sharedNavigatorController = nil;
[outlineSchema2 reloadData];
}
+- (NSDictionary *)dbStructureForConnection:(NSString*)connectionID
+{
+ if([schemaData objectForKey:connectionID])
+ return [NSDictionary dictionaryWithDictionary:[schemaData objectForKey:connectionID]];
+ return nil;
+}
+
#pragma mark -
#pragma mark IBActions
@@ -1070,42 +1075,26 @@ static SPNavigatorController *sharedNavigatorController = nil;
case 0:
return @"DTD Identifier";
case 1:
- return NSLocalizedString(@"Default", @"default label");
- case 2:
return @"SQL Data Access";
+ case 2:
+ return @"Is Deterministic";
case 3:
- return NSLocalizedString(@"Encoding", @"encoding label");
+ return NSLocalizedString(@"Execution Privilege", @"execution privilege label");
case 4:
- return NSLocalizedString(@"Collation", @"collation label");
- case 5:
- return @"Is Deterministic";
- case 6:
- return @"Security Type";
- case 7:
return @"Definer";
- case 8:
- return NSLocalizedString(@"Comment", @"comment label");
}
if(type == 3) // FUNCTION
switch(index) {
case 0:
return NSLocalizedString(@"Return Type", @"return type label");
case 1:
- return NSLocalizedString(@"Default", @"default label");
- case 2:
return @"SQL Data Access";
- case 3:
- return NSLocalizedString(@"Encoding", @"encoding label");
- case 4:
- return NSLocalizedString(@"Collation", @"collation label");
- case 5:
+ case 2:
return @"Is Deterministic";
- case 6:
+ case 3:
return NSLocalizedString(@"Execution Privilege", @"execution privilege label");
- case 7:
+ case 4:
return @"Definer";
- case 8:
- return NSLocalizedString(@"Comment", @"comment label");
}
return @"";
}