This is an automated email from the ASF dual-hosted git repository.

villebro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git


The following commit(s) were added to refs/heads/master by this push:
     new f6cd3a9  refactor(sql): optimize sql query parser (#9673)
f6cd3a9 is described below

commit f6cd3a917a162425e3289f7215ba305602bfa021
Author: Lily Kuang <l...@preset.io>
AuthorDate: Tue Jun 9 23:15:48 2020 -0700

    refactor(sql): optimize sql query parser (#9673)
    
    * optimize sql query parser
    
    * update extract from token
    
    * update doc string
    
    * pylint doc string
---
 superset/sql_parse.py | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/superset/sql_parse.py b/superset/sql_parse.py
index 3e50386..d87db83 100644
--- a/superset/sql_parse.py
+++ b/superset/sql_parse.py
@@ -208,7 +208,13 @@ class ParsedQuery:
         self, token: Token
     ) -> None:
         """
-        Populate self._tables from token
+        <Identifier> store a list of subtokens and <IdentifierList> store 
lists of
+        subtoken list.
+
+        It extracts <IdentifierList> and <Identifier> from :param token: and 
loops
+        through all subtokens recursively. It finds table_name_preceding_token 
and
+        passes <IdentifierList> and <Identifier> to self._process_tokenlist to 
populate
+        self._tables.
 
         :param token: instance of Token or child class, e.g. TokenList, to be 
processed
         """
@@ -240,9 +246,8 @@ class ParsedQuery:
                         if isinstance(token2, TokenList):
                             self._process_tokenlist(token2)
             elif isinstance(item, IdentifierList):
-                for token2 in item.tokens:
-                    if not self._is_identifier(token2):
-                        self._extract_from_token(item)
+                if any(not self._is_identifier(token2) for token2 in 
item.tokens):
+                    self._extract_from_token(item)
 
     def set_or_update_query_limit(self, new_limit: int) -> str:
         """Returns the query with the specified limit.

Reply via email to