From bf083baf5c0e6048b692656cf35fd94d7c652c60 Mon Sep 17 00:00:00 2001 From: Bibiko Date: Thu, 4 Nov 2010 18:59:46 +0000 Subject: =?UTF-8?q?=E2=80=A2=20improved=20completion=20regarding=20leading?= =?UTF-8?q?=20commas=20=E2=80=A2=20alias=20(auto-)completion=20-=20further?= =?UTF-8?q?=20improvements=20regarding=20detecting=20of=20aliases=20esp.?= =?UTF-8?q?=20if=20used=20just=20after=20SELECT=20in=20conjunction=20with?= =?UTF-8?q?=20commas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/SPTextView.m | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Source/SPTextView.m b/Source/SPTextView.m index e9fe24a2..570353f2 100644 --- a/Source/SPTextView.m +++ b/Source/SPTextView.m @@ -658,7 +658,7 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) while(start > 0 && doParsing) { currentCharacter = [[self string] characterAtIndex:--start]; - if(!(backticksCounter%2) && [whiteSpaceCharSet characterIsMember:currentCharacter]) { + if(!(backticksCounter%2) && ([whiteSpaceCharSet characterIsMember:currentCharacter] || currentCharacter == ',')) { start++; break; } @@ -776,21 +776,22 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) // Check if found table name is known, if not parse for aliases if(![allTables containsObject:[NSString stringWithFormat:@"%@%@%@", conID, SPUniqueSchemaDelimiter, tableName]]) { NSString *currentQuery = [[self string] substringWithRange:[customQueryInstance currentQueryRange]]; - NSArray *matches = [currentQuery componentsMatchedByRegex:[NSString stringWithFormat:@"(?i)\\s`?(\\S+?)`?\\s+(AS\\s+)?`?%@`?\\b", tableName]]; + NSString *re = [NSString stringWithFormat:@"(?i)[\\s,]`?(\\S+?)`?\\s+(AS\\s+)?`?%@`?\\b", tableName]; + NSArray *matches = [currentQuery componentsMatchedByRegex:re]; for(NSString* m in matches) { - NSRange aliasRange = [m rangeOfRegex:[NSString stringWithFormat:@"(?i)\\s`?(\\S+?)`?\\s+(AS\\s+)?`?%@`?\\b", tableName] capture:1L]; + NSRange aliasRange = [m rangeOfRegex:re capture:1L]; if(aliasRange.length) { NSString *alias = [[m substringWithRange:aliasRange] stringByReplacingOccurrencesOfString:@"``" withString:@"`"]; - // If alias refers to db.table split it + // If alias refers to db.table split and check it if([alias rangeOfString:@"."].length) { NSRange dbRange = [alias rangeOfRegex:@"^`?(.*?)`?\\." capture:1L]; NSRange tbRange = [alias rangeOfRegex:@"\\.`?(.*?)`?$" capture:1L]; NSString *db = [[alias substringWithRange:dbRange] stringByReplacingOccurrencesOfString:@"``" withString:@"`"]; NSString *tb = [[alias substringWithRange:tbRange] stringByReplacingOccurrencesOfString:@"``" withString:@"`"]; - conID = [NSString stringWithFormat:@"%@%@%@", connectionID, SPUniqueSchemaDelimiter, db]; - if([dbs objectForKey:conID] && [[dbs objectForKey:conID] isKindOfClass:[NSDictionary class]]) { - allTables = [[dbs objectForKey:conID] allKeys]; - if([allTables containsObject:[NSString stringWithFormat:@"%@%@%@", conID, SPUniqueSchemaDelimiter, tb]]) { + NSString *curConID = [NSString stringWithFormat:@"%@%@%@", connectionID, SPUniqueSchemaDelimiter, db]; + if([dbs objectForKey:curConID] && [[dbs objectForKey:curConID] isKindOfClass:[NSDictionary class]]) { + allTables = [[dbs objectForKey:curConID] allKeys]; + if([allTables containsObject:[NSString stringWithFormat:@"%@%@%@", curConID, SPUniqueSchemaDelimiter, tb]]) { tableName = tb; dbName = db; break; -- cgit v1.2.3