use SQLQuery in run_query

This commit is contained in:
Omer Lachish
2018-11-25 00:20:58 +02:00
parent 0a62bee3a1
commit 202b93d8be

View File

@@ -12,8 +12,8 @@ from redash.utils import (collect_query_parameters,
collect_parameters_from_request,
gen_query_hash,
json_dumps,
utcnow,
mustache_render)
utcnow)
from redash.utils.sql_query import SQLQuery
from redash.tasks.queries import enqueue_query
@@ -33,15 +33,16 @@ def run_query_sync(data_source, parameter_values, query_text, max_age=0):
if missing_params:
raise Exception('Missing parameter value for: {}'.format(", ".join(missing_params)))
query = SQLQuery(query_text)
if query_parameters:
query_text = mustache_render(query_text, parameter_values)
query.apply(parameter_values)
if max_age <= 0:
query_result = None
else:
query_result = models.QueryResult.get_latest(data_source, query_text, max_age)
query_result = models.QueryResult.get_latest(data_source, query.text(), max_age)
query_hash = gen_query_hash(query_text)
query_hash = gen_query_hash(query.text())
if query_result:
logging.info("Returning cached result for query %s" % query_hash)
@@ -49,7 +50,7 @@ def run_query_sync(data_source, parameter_values, query_text, max_age=0):
try:
started_at = time.time()
data, error = data_source.query_runner.run_query(query_text, current_user)
data, error = data_source.query_runner.run_query(query.text(), current_user)
if error:
logging.info('got bak error')
@@ -58,7 +59,7 @@ def run_query_sync(data_source, parameter_values, query_text, max_age=0):
run_time = time.time() - started_at
query_result, updated_query_ids = models.QueryResult.store_result(data_source.org_id, data_source,
query_hash, query_text, data,
query_hash, query.text(), data,
run_time, utcnow())
models.db.session.commit()
@@ -84,18 +85,20 @@ def run_query(data_source, parameter_values, query_text, query_id, max_age=0):
return error_response(message)
query = SQLQuery(query_text)
if query_parameters:
query_text = mustache_render(query_text, parameter_values)
query.apply(parameter_values)
if max_age == 0:
query_result = None
else:
query_result = models.QueryResult.get_latest(data_source, query_text, max_age)
query_result = models.QueryResult.get_latest(data_source, query.text(), max_age)
if query_result:
return {'query_result': query_result.to_dict()}
else:
job = enqueue_query(query_text, data_source, current_user.id, metadata={"Username": current_user.email, "Query ID": query_id})
job = enqueue_query(query.text(), data_source, current_user.id, metadata={"Username": current_user.email, "Query ID": query_id})
return {'job': job.to_dict()}