From 7bc3006b8d092a14c6a3781bd4edea80e59aa50e Mon Sep 17 00:00:00 2001 From: John Bodley <4567245+john-bodley@users.noreply.github.com> Date: Fri, 15 Mar 2019 09:19:30 -0700 Subject: [PATCH] [sqlparse] Fixing table name extraction for ill-defined query (#7029) (cherry picked from commit 07c340cf8203f13222f16efad1e55e202deb1865) --- superset/sql_parse.py | 6 +++--- tests/sql_parse_tests.py | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/superset/sql_parse.py b/superset/sql_parse.py index b653c88a2a001..8076f09c7470c 100644 --- a/superset/sql_parse.py +++ b/superset/sql_parse.py @@ -76,7 +76,7 @@ def get_statements(self): @staticmethod def __get_full_name(identifier): - if len(identifier.tokens) > 1 and identifier.tokens[1].value == '.': + if len(identifier.tokens) > 2 and identifier.tokens[1].value == '.': return '{}.{}'.format(identifier.tokens[0].value, identifier.tokens[2].value) return identifier.get_real_name() @@ -89,8 +89,8 @@ def __process_identifier(self, identifier): # exclude subselects if '(' not in str(identifier): table_name = self.__get_full_name(identifier) - if not table_name.startswith(CTE_PREFIX): - self._table_names.add(self.__get_full_name(identifier)) + if table_name and not table_name.startswith(CTE_PREFIX): + self._table_names.add(table_name) return # store aliases diff --git a/tests/sql_parse_tests.py b/tests/sql_parse_tests.py index e821fce25455a..56959397fa9c5 100644 --- a/tests/sql_parse_tests.py +++ b/tests/sql_parse_tests.py @@ -47,6 +47,11 @@ def test_simple_select(self): {'schemaname.tbname'}, self.extract_tables('SELECT * FROM schemaname.tbname')) + # Ill-defined schema/table. + self.assertEquals( + set(), + self.extract_tables('SELECT * FROM schemaname.')) + # quotes query = 'SELECT field1, field2 FROM tb_name' self.assertEquals({'tb_name'}, self.extract_tables(query))