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

hugh pushed a commit to branch fix-logs-sqllab
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 1699d6e0f99e752d87a876e85025e2bd4ea27003
Author: hughhhh <[email protected]>
AuthorDate: Thu Oct 6 14:26:47 2022 -0400

    yerp
---
 superset/sql_lab.py              |  8 ++++----
 tests/unit_tests/sql_lab_test.py | 44 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+), 4 deletions(-)

diff --git a/superset/sql_lab.py b/superset/sql_lab.py
index ed78673c23..3aa0d88fdb 100644
--- a/superset/sql_lab.py
+++ b/superset/sql_lab.py
@@ -209,7 +209,6 @@ def execute_sql_statement(  # pylint: 
disable=too-many-arguments,too-many-statem
     database: Database = query.database
     db_engine_spec = database.db_engine_spec
 
-    print('in 1')
     parsed_query = ParsedQuery(sql_statement)
     if is_feature_enabled("RLS_IN_SQLLAB"):
         # Insert any applicable RLS predicates
@@ -312,7 +311,8 @@ def execute_sql_statement(  # pylint: 
disable=too-many-arguments,too-many-statem
                 level=ErrorLevel.ERROR,
             )
         ) from ex
-    except SqlUserError as ex:
+    # todo(hughhhh): cleaner way to group all user exceptions here
+    except SyntaxError as ex:
         raise SupersetErrorException(
             SupersetError(
                 message=ex,
@@ -508,7 +508,7 @@ def execute_sql_statements(  # pylint: 
disable=too-many-arguments, too-many-loca
             query.set_extra_json_key("progress", msg)
             session.commit()
             try:
-                print('calling execute_sql_statement')
+                print("calling execute_sql_statement")
                 result_set = execute_sql_statement(
                     statement,
                     query,
@@ -521,7 +521,7 @@ def execute_sql_statements(  # pylint: 
disable=too-many-arguments, too-many-loca
                 payload.update({"status": QueryStatus.STOPPED})
                 return payload
             except Exception as ex:  # pylint: disable=broad-except
-                print('in exc')
+                print("in exc")
                 print(ex)
                 raise ex
                 msg = str(ex)
diff --git a/tests/unit_tests/sql_lab_test.py b/tests/unit_tests/sql_lab_test.py
index 29f45eab68..0bb785d3d5 100644
--- a/tests/unit_tests/sql_lab_test.py
+++ b/tests/unit_tests/sql_lab_test.py
@@ -16,10 +16,13 @@
 # under the License.
 # pylint: disable=import-outside-toplevel, invalid-name, unused-argument, 
too-many-locals
 
+import pytest
 import sqlparse
 from pytest_mock import MockerFixture
 from sqlalchemy.orm.session import Session
 
+from superset.errors import ErrorLevel, SupersetError, SupersetErrorType
+from superset.exceptions import SupersetErrorException
 from superset.utils.core import override_user
 
 
@@ -216,3 +219,44 @@ def test_sql_lab_insert_rls(
 |  3 |   9 |""".strip()
     )
     assert query.executed_sql == "SELECT c FROM t WHERE (t.c > 5)\nLIMIT 6"
+
+
+def test_execute_sql_statement_sql_user_error(mocker: MockerFixture, app: 
None) -> None:
+    """
+    Simple test for `execute_sql_statement`.
+    """
+    from superset.sql_lab import execute_sql_statement
+
+    sql_statement = "SELECT 42 AS answer"
+
+    query = mocker.MagicMock()
+    query.limit = 1
+    query.select_as_cta_used = False
+    database = query.database
+    database.allow_dml = False
+    database.apply_limit_to_sql.return_value = "SELECT 42 AS answer LIMIT 2"
+    db_engine_spec = database.db_engine_spec
+
+    from psycopg2.errors import SyntaxError
+
+    db_engine_spec.is_select_query.return_value = True
+    db_engine_spec.fetch_data.side_effect = SyntaxError("foo")
+
+    session = mocker.MagicMock()
+    cursor = mocker.MagicMock()
+    SupersetResultSet = mocker.patch("superset.sql_lab.SupersetResultSet")
+
+    with pytest.raises(SupersetErrorException) as excinfo:
+        execute_sql_statement(
+            sql_statement,
+            query,
+            session=session,
+            cursor=cursor,
+            log_params={},
+            apply_ctas=False,
+        )
+        assert excinfo.value.error == SupersetError(
+            message="foo",
+            error_type=SupersetErrorType.SYNTAX_ERROR,
+            level=ErrorLevel.ERROR,
+        )

Reply via email to