chore: Support SET & SHOW commands as read only SQL commands (#11868)

* Support SET & SHOW commands as read only SQL commands

* Move is_readonly definition into the engine spec

* Rename & use super()

Co-authored-by: bogdan kyryliuk <bogdankyryliuk@dropbox.com>
This commit is contained in:
Bogdan
2020-12-03 10:44:11 -08:00
committed by GitHub
parent 38d21acff6
commit 0396c705d4
11 changed files with 124 additions and 16 deletions

View File

@@ -376,14 +376,43 @@ class TestSupersetSqlParse(unittest.TestCase):
def test_update_not_select(self):
sql = ParsedQuery("UPDATE t1 SET col1 = NULL")
self.assertEqual(False, sql.is_select())
self.assertEqual(False, sql.is_readonly())
def test_set(self):
sql = ParsedQuery(
"""
-- comment
SET hivevar:desc='Legislators';
"""
)
self.assertEqual(True, sql.is_set())
self.assertEqual(False, sql.is_select())
self.assertEqual(True, ParsedQuery("set hivevar:desc='bla'").is_set())
self.assertEqual(False, ParsedQuery("SELECT 1").is_set())
def test_show(self):
sql = ParsedQuery(
"""
-- comment
SHOW LOCKS test EXTENDED;
-- comment
"""
)
self.assertEqual(True, sql.is_show())
self.assertEqual(False, sql.is_select())
self.assertEqual(True, ParsedQuery("SHOW TABLES").is_show())
self.assertEqual(True, ParsedQuery("shOw TABLES").is_show())
self.assertEqual(True, ParsedQuery("show TABLES").is_show())
self.assertEqual(False, ParsedQuery("SELECT 1").is_show())
def test_explain(self):
sql = ParsedQuery("EXPLAIN SELECT 1")
self.assertEqual(True, sql.is_explain())
self.assertEqual(False, sql.is_select())
self.assertEqual(True, sql.is_readonly())
def test_complex_extract_tables(self):
query = """SELECT sum(m_examples) AS "sum__m_example"