You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ma...@apache.org on 2018/03/26 16:42:36 UTC

[incubator-superset] branch master updated: Preprocess SQL Lab query prior to checking syntax (#4686)

This is an automated email from the ASF dual-hosted git repository.

maximebeauchemin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 4ec8258  Preprocess SQL Lab query prior to checking syntax (#4686)
4ec8258 is described below

commit 4ec82582c6c6e750a7bbd39b56a58fbaa81349c2
Author: Ville Brofeldt <33...@users.noreply.github.com>
AuthorDate: Mon Mar 26 19:42:33 2018 +0300

    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.
---
 superset/sql_lab.py | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/superset/sql_lab.py b/superset/sql_lab.py
index 12644fc..d28de7c 100644
--- a/superset/sql_lab.py
+++ b/superset/sql_lab.py
@@ -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')

-- 
To stop receiving notification emails like this one, please contact
maximebeauchemin@apache.org.