Author: jure
Date: Thu Dec 20 10:21:52 2012
New Revision: 1424391

URL: http://svn.apache.org/viewvc?rev=1424391&view=rev
Log:
Towards #288, properly expand identifier list(s) within FROM

Modified:
    
incubator/bloodhound/branches/bep_0003_multiproduct/trac/trac/bloodhound/db.py

Modified: 
incubator/bloodhound/branches/bep_0003_multiproduct/trac/trac/bloodhound/db.py
URL: 
http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/trac/trac/bloodhound/db.py?rev=1424391&r1=1424390&r2=1424391&view=diff
==============================================================================
--- 
incubator/bloodhound/branches/bep_0003_multiproduct/trac/trac/bloodhound/db.py 
(original)
+++ 
incubator/bloodhound/branches/bep_0003_multiproduct/trac/trac/bloodhound/db.py 
Thu Dec 20 10:21:52 2012
@@ -133,12 +133,11 @@ class BloodhoundProductSQLTranslate(obje
         # hack to workaround sqlparse bug that wrongly presents list of tokens
         # as IdentifierList in certain situations
         if isinstance(token, Types.IdentifierList):
-            expression_token_idx = self._token_idx(parent, token)
-            del parent.tokens[expression_token_idx]
-            last_token = start_token
+            idx = self._token_idx(parent, token)
+            del parent.tokens[idx]
             for t in token.tokens:
-                self._token_insert_after(parent, last_token, t)
-                last_token = t
+                parent.tokens.insert(idx, t)
+                idx += 1
             token = self._token_next(parent, start_token)
         return token
 
@@ -215,16 +214,18 @@ class BloodhoundProductSQLTranslate(obje
             return list()
 
         current_token = self._token_next(parent, start_token)
-        last_token = current_token
+        prev_token = start_token
         table_name_tokens = list()
         join_tokens = list()
         while current_token and \
               not current_token.match(Tokens.Keyword, end_words) and \
               not isinstance(current_token, Types.Where):
-            last_token = current_token
             next_token = self._token_next(parent, current_token)
             if current_token.is_whitespace():
                 pass
+            elif isinstance(current_token, Types.IdentifierList):
+                current_token = self._expression_token_unwind_hack(parent, 
current_token, prev_token)
+                continue
             elif isinstance(current_token, Types.Identifier):
                 parenthesis = filter(lambda t: isinstance(t, 
Types.Parenthesis), current_token.tokens)
                 if parenthesis:
@@ -260,9 +261,9 @@ class BloodhoundProductSQLTranslate(obje
                 table_name_tokens.append(current_token)
             else:
                 raise Exception("Failed to parse FROM table name")
+            prev_token = current_token
             current_token = next_token
-
-        if last_token:
+        if prev_token:
             process_table_name_tokens(table_name_tokens)
         return current_token
 


Reply via email to