mirror of
https://github.com/apache/superset.git
synced 2026-04-19 08:04:53 +00:00
Preprocess SQL Lab query prior to checking syntax (#4686)
Syntax checking doesn't work if jinja templates haven't been prerendered. Also remove unreachable return statement. Fixes #4288.
This commit is contained in:
committed by
Maxime Beauchemin
parent
097a37a1a1
commit
4ec82582c6
@@ -161,8 +161,18 @@ def execute_sql(
|
||||
if store_results and not results_backend:
|
||||
return handle_error("Results backend isn't configured.")
|
||||
|
||||
try:
|
||||
template_processor = get_template_processor(
|
||||
database=database, query=query)
|
||||
tp = template_params or {}
|
||||
rendered_query = template_processor.process_template(query.sql, **tp)
|
||||
except Exception as e:
|
||||
logging.exception(e)
|
||||
msg = 'Template rendering failed: ' + utils.error_msg_from_exception(e)
|
||||
return handle_error(msg)
|
||||
|
||||
# Limit enforced only for retrieving the data, not for the CTA queries.
|
||||
superset_query = SupersetQuery(query.sql)
|
||||
superset_query = SupersetQuery(rendered_query)
|
||||
executed_sql = superset_query.stripped()
|
||||
if not superset_query.is_select() and not database.allow_dml:
|
||||
return handle_error(
|
||||
@@ -172,7 +182,6 @@ def execute_sql(
|
||||
return handle_error(
|
||||
'Only `SELECT` statements can be used with the CREATE TABLE '
|
||||
'feature.')
|
||||
return
|
||||
if not query.tmp_table_name:
|
||||
start_dttm = datetime.fromtimestamp(query.start_time)
|
||||
query.tmp_table_name = 'tmp_{}_table_{}'.format(
|
||||
@@ -183,16 +192,6 @@ def execute_sql(
|
||||
db_engine_spec.limit_method == LimitMethod.WRAP_SQL):
|
||||
executed_sql = database.wrap_sql_limit(executed_sql, query.limit)
|
||||
query.limit_used = True
|
||||
try:
|
||||
template_processor = get_template_processor(
|
||||
database=database, query=query)
|
||||
tp = template_params or {}
|
||||
executed_sql = template_processor.process_template(
|
||||
executed_sql, **tp)
|
||||
except Exception as e:
|
||||
logging.exception(e)
|
||||
msg = 'Template rendering failed: ' + utils.error_msg_from_exception(e)
|
||||
return handle_error(msg)
|
||||
|
||||
# Hook to allow environment-specific mutation (usually comments) to the SQL
|
||||
SQL_QUERY_MUTATOR = config.get('SQL_QUERY_MUTATOR')
|
||||
|
||||
Reference in New Issue
Block a user