diff options
Diffstat (limited to 'Source/SPTextView.m')
-rw-r--r-- | Source/SPTextView.m | 45 |
1 files changed, 25 insertions, 20 deletions
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; } } } |