mirror of
https://github.com/apache/superset.git
synced 2026-04-19 08:04:53 +00:00
feat: cancel db query on stop (#15403)
* feat: cancel db query on stop * fix pylint * Add unit tests * Do not bind multiple times * Stop only running queries * Postgres to cancel only the required query * Remove extra log * Add docstring * Better types, docstring and naming * Use python3 format strings * Update superset/sql_lab.py Co-authored-by: Beto Dealmeida <roberto@dealmeida.net> * Add cancel_query_on_windows_unload option to database * Return cancel_query as bool Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>
This commit is contained in:
committed by
GitHub
parent
a914e3c1cb
commit
02032ee8a4
@@ -21,6 +21,7 @@ from sqlalchemy.dialects.mysql import DATE, NVARCHAR, TEXT, VARCHAR
|
||||
|
||||
from superset.db_engine_specs.mysql import MySQLEngineSpec
|
||||
from superset.errors import ErrorLevel, SupersetError, SupersetErrorType
|
||||
from superset.models.sql_lab import Query
|
||||
from superset.utils.core import GenericDataType
|
||||
from tests.integration_tests.db_engine_specs.base_tests import (
|
||||
assert_generic_types,
|
||||
@@ -238,3 +239,22 @@ class TestMySQLEngineSpecsDbEngineSpec(TestDbEngineSpec):
|
||||
},
|
||||
)
|
||||
]
|
||||
|
||||
@unittest.mock.patch("sqlalchemy.engine.Engine.connect")
|
||||
def test_get_cancel_query_id(self, engine_mock):
|
||||
query = Query()
|
||||
cursor_mock = engine_mock.return_value.__enter__.return_value
|
||||
cursor_mock.fetchone.return_value = [123]
|
||||
assert MySQLEngineSpec.get_cancel_query_id(cursor_mock, query) == 123
|
||||
|
||||
@unittest.mock.patch("sqlalchemy.engine.Engine.connect")
|
||||
def test_cancel_query(self, engine_mock):
|
||||
query = Query()
|
||||
cursor_mock = engine_mock.return_value.__enter__.return_value
|
||||
assert MySQLEngineSpec.cancel_query(cursor_mock, query, 123) is True
|
||||
|
||||
@unittest.mock.patch("sqlalchemy.engine.Engine.connect")
|
||||
def test_cancel_query_failed(self, engine_mock):
|
||||
query = Query()
|
||||
cursor_mock = engine_mock.raiseError.side_effect = Exception()
|
||||
assert MySQLEngineSpec.cancel_query(cursor_mock, query, 123) is False
|
||||
|
||||
Reference in New Issue
Block a user