Add check for calls to cache_key_wrapper (#8128)

* Add check for calls to cache_key_wrapper to avoid unavoidable compilation of query

* Add fetch_values_predicate to check

* Only check relevant attributes

* Address nit
This commit is contained in:
Ville Brofeldt
2019-08-27 23:36:05 +03:00
committed by Grace Guo
parent 6dc760a054
commit 1982b74af2
2 changed files with 49 additions and 3 deletions

View File

@@ -41,7 +41,7 @@ class DatabaseModelTestCase(SupersetTestCase):
col = TableColumn(column_name="foo", type="STRING")
self.assertEquals(col.is_time, False)
def test_cache_key_wrapper(self):
def test_has_extra_cache_keys(self):
query = "SELECT '{{ cache_key_wrapper('user_1') }}' as user"
table = SqlaTable(sql=query, database=get_main_database())
query_obj = {
@@ -55,4 +55,22 @@ class DatabaseModelTestCase(SupersetTestCase):
"extras": {"where": "(user != '{{ cache_key_wrapper('user_2') }}')"},
}
extra_cache_keys = table.get_extra_cache_keys(query_obj)
self.assertTrue(table.has_extra_cache_keys(query_obj))
self.assertListEqual(extra_cache_keys, ["user_1", "user_2"])
def test_has_no_extra_cache_keys(self):
query = "SELECT 'abc' as user"
table = SqlaTable(sql=query, database=get_main_database())
query_obj = {
"granularity": None,
"from_dttm": None,
"to_dttm": None,
"groupby": ["user"],
"metrics": [],
"is_timeseries": False,
"filter": [],
"extras": {"where": "(user != 'abc')"},
}
extra_cache_keys = table.get_extra_cache_keys(query_obj)
self.assertFalse(table.has_extra_cache_keys(query_obj))
self.assertListEqual(extra_cache_keys, [])