def is_readonly_query(cls, parsed_query: ParsedQuery) -> bool: """Pessimistic readonly, 100% sure statement won't mutate anything""" return ( parsed_query.is_select() or parsed_query.is_explain() or parsed_query.is_show() )
def test_is_explain(self): query = """ -- comment EXPLAIN select * from table -- comment 2 """ parsed = ParsedQuery(query) self.assertEqual(parsed.is_explain(), True) query = """ -- comment EXPLAIN select * from table where col1 = 'something' -- comment 2 -- comment 3 EXPLAIN select * from table where col1 = 'something' -- comment 4 """ parsed = ParsedQuery(query) self.assertEqual(parsed.is_explain(), True) query = """ -- This is a comment -- this is another comment but with a space in the front EXPLAIN SELECT * FROM TABLE """ parsed = ParsedQuery(query) self.assertEqual(parsed.is_explain(), True) query = """ /* This is a comment with stars instead */ EXPLAIN SELECT * FROM TABLE """ parsed = ParsedQuery(query) self.assertEqual(parsed.is_explain(), True) query = """ -- comment select * from table where col1 = 'something' -- comment 2 """ parsed = ParsedQuery(query) self.assertEqual(parsed.is_explain(), False)
def test_explain(self): sql = ParsedQuery("EXPLAIN SELECT 1") self.assertEqual(True, sql.is_explain()) self.assertEqual(False, sql.is_select())