Merge pull request #94 from EverythingMe/fix_query_hash_not_updating

Fix: when updating query text the hash should change.
This commit is contained in:
Arik Fraimovich
2014-02-13 13:13:38 +02:00
4 changed files with 26 additions and 5 deletions

View File

@@ -20,6 +20,7 @@ def version():
"""Displays re:dash version.""" """Displays re:dash version."""
print __version__ print __version__
@manager.command @manager.command
def runworkers(): def runworkers():
"""Starts the re:dash query executors/workers.""" """Starts the re:dash query executors/workers."""

View File

@@ -204,9 +204,8 @@ class QueryAPI(BaseResource):
if 'latest_query_data_id' in query_def: if 'latest_query_data_id' in query_def:
query_def['latest_query_data'] = query_def.pop('latest_query_data_id') query_def['latest_query_data'] = query_def.pop('latest_query_data_id')
update = models.Query.update(**query_def).where(models.Query.id == query_id) models.Query.update_instance(query_id, **query_def)
update.execute()
query = models.Query.get_by_id(query_id) query = models.Query.get_by_id(query_id)
return query.to_dict(with_result=False, with_visualizations=True) return query.to_dict(with_result=False, with_visualizations=True)

View File

@@ -115,6 +115,14 @@ LEFT OUTER JOIN
""" """
return cls.raw(query) return cls.raw(query)
@classmethod
def update_instance(cls, query_id, **kwargs):
if 'query' in kwargs:
kwargs['query_hash'] = utils.gen_query_hash(kwargs['query'])
update = cls.update(**kwargs).where(cls.id == query_id)
return update.execute()
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
self.query_hash = utils.gen_query_hash(self.query) self.query_hash = utils.gen_query_hash(self.query)
self._set_api_key() self._set_api_key()

View File

@@ -1,5 +1,6 @@
from tests import BaseTestCase from tests import BaseTestCase
from factories import dashboard_factory from redash import models
from factories import dashboard_factory, query_factory
class DashboardTest(BaseTestCase): class DashboardTest(BaseTestCase):
@@ -12,4 +13,16 @@ class DashboardTest(BaseTestCase):
d3 = dashboard_factory.create() d3 = dashboard_factory.create()
self.assertNotEquals(d1.slug, d3.slug) self.assertNotEquals(d1.slug, d3.slug)
self.assertNotEquals(d2.slug, d3.slug) self.assertNotEquals(d2.slug, d3.slug)
class QueryTest(BaseTestCase):
def test_changing_query_text_changes_hash(self):
q = query_factory.create()
old_hash = q.query_hash
models.Query.update_instance(q.id, query="SELECT 2;")
q = models.Query.get_by_id(q.id)
self.assertNotEquals(old_hash, q.query_hash)