From 8f8694d3dec218bf85cc0f36eb6bc90b72ce9c6e Mon Sep 17 00:00:00 2001 From: Bibiko Date: Thu, 4 Nov 2010 17:28:16 +0000 Subject: =?UTF-8?q?=E2=80=A2=20alias=20(auto-)completion=20-=20further=20i?= =?UTF-8?q?mprovements=20regarding=20detecting=20of=20aliases=20esp.=20if?= =?UTF-8?q?=20used=20just=20after=20SELECT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/SPTextView.m | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) (limited to 'Source') diff --git a/Source/SPTextView.m b/Source/SPTextView.m index 892fc744..e9fe24a2 100644 --- a/Source/SPTextView.m +++ b/Source/SPTextView.m @@ -775,27 +775,32 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) NSArray *allTables = [[dbs objectForKey:conID] allKeys]; // 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]]; - NSRange aliasRange = [currentQuery rangeOfRegex:[NSString stringWithFormat:@"(?i)\\s`?(\\S+?)`?\\s+(AS\\s+)?`?%@`?\\b", tableName] capture:1L]; - if(aliasRange.length) { - NSString *alias = [[currentQuery substringWithRange:aliasRange] stringByReplacingOccurrencesOfString:@"``" withString:@"`"]; - // If alias refers to db.table split 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]]) { - tableName = tb; - dbName = db; + NSString *currentQuery = [[self string] substringWithRange:[customQueryInstance currentQueryRange]]; + NSArray *matches = [currentQuery componentsMatchedByRegex:[NSString stringWithFormat:@"(?i)\\s`?(\\S+?)`?\\s+(AS\\s+)?`?%@`?\\b", tableName]]; + for(NSString* m in matches) { + NSRange aliasRange = [m rangeOfRegex:[NSString stringWithFormat:@"(?i)\\s`?(\\S+?)`?\\s+(AS\\s+)?`?%@`?\\b", tableName] capture:1L]; + if(aliasRange.length) { + NSString *alias = [[m substringWithRange:aliasRange] stringByReplacingOccurrencesOfString:@"``" withString:@"`"]; + // If alias refers to db.table split 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]]) { + tableName = tb; + dbName = db; + break; + } + } + } else { + if([allTables containsObject:[NSString stringWithFormat:@"%@%@%@", conID, SPUniqueSchemaDelimiter, alias]]) { + tableName = alias; + break; } - } - } else { - if([allTables containsObject:[NSString stringWithFormat:@"%@%@%@", conID, SPUniqueSchemaDelimiter, alias]]) { - tableName = alias; } } } -- cgit v1.2.3