aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/SPTextView.m45
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;
}
}
}