[fix] SQL parsing of table names (#7490)

This commit is contained in:
John Bodley
2019-06-03 11:07:57 -07:00
committed by GitHub
parent 78c1674dc7
commit 45b41aadcc
3 changed files with 73 additions and 15 deletions

View File

@@ -29,6 +29,12 @@ class SupersetTestCase(unittest.TestCase):
query = 'SELECT * FROM tbname'
self.assertEquals({'tbname'}, self.extract_tables(query))
query = 'SELECT * FROM tbname foo'
self.assertEquals({'tbname'}, self.extract_tables(query))
query = 'SELECT * FROM tbname AS foo'
self.assertEquals({'tbname'}, self.extract_tables(query))
# underscores
query = 'SELECT * FROM tb_name'
self.assertEquals({'tb_name'},
@@ -47,11 +53,40 @@ class SupersetTestCase(unittest.TestCase):
{'schemaname.tbname'},
self.extract_tables('SELECT * FROM schemaname.tbname'))
# Ill-defined schema/table.
self.assertEquals(
{'schemaname.tbname'},
self.extract_tables('SELECT * FROM "schemaname"."tbname"'))
self.assertEquals(
{'schemaname.tbname'},
self.extract_tables('SELECT * FROM schemaname.tbname foo'))
self.assertEquals(
{'schemaname.tbname'},
self.extract_tables('SELECT * FROM schemaname.tbname AS foo'))
# cluster
self.assertEquals(
{'clustername.schemaname.tbname'},
self.extract_tables('SELECT * FROM clustername.schemaname.tbname'))
# Ill-defined cluster/schema/table.
self.assertEquals(
set(),
self.extract_tables('SELECT * FROM schemaname.'))
self.assertEquals(
set(),
self.extract_tables('SELECT * FROM clustername.schemaname.'))
self.assertEquals(
set(),
self.extract_tables('SELECT * FROM clustername..'))
self.assertEquals(
set(),
self.extract_tables('SELECT * FROM clustername..tbname'))
# quotes
query = 'SELECT field1, field2 FROM tb_name'
self.assertEquals({'tb_name'}, self.extract_tables(query))