From 8f109a5981fab640d1a7585d8409387006a978a7 Mon Sep 17 00:00:00 2001 From: chuancy <3195234362@qq.com> Date: Mon, 31 Aug 2020 13:03:07 +0800 Subject: [PATCH] fix(db-engine-spec): execute oracle DML statement bug in sqllab (#10706) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix execute oracle DML statement bug in sqllab when i execute oracle sql statements like update in SQLLAB, get "oracle error: not a query" error. Refer https://www.python.org/dev/peps/pep-0249/, superset old version use `cursor.description` ,because this attribute will be None for operations that do not return rows or if the cursor has not had an operation invoked via the .execute*() method yet. * Apply suggestions from code review Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com> * Update oracle.py * Update oracle.py * Update oracle.py * Apply suggestions from code review Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com> * Update oracle.py * Update superset/db_engine_specs/oracle.py Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com> Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com> --- superset/db_engine_specs/oracle.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/superset/db_engine_specs/oracle.py b/superset/db_engine_specs/oracle.py index 813b1507a6465..01c06f40a0af5 100644 --- a/superset/db_engine_specs/oracle.py +++ b/superset/db_engine_specs/oracle.py @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. from datetime import datetime -from typing import Optional +from typing import Any, List, Optional, Tuple from superset.db_engine_specs.base import BaseEngineSpec, LimitMethod from superset.utils import core as utils @@ -57,3 +57,16 @@ def epoch_to_dttm(cls) -> str: @classmethod def epoch_ms_to_dttm(cls) -> str: return "TO_DATE('1970-01-01','YYYY-MM-DD')+(1/24/60/60/1000)*{col}" + + @classmethod + def fetch_data( + cls, cursor: Any, limit: Optional[int] = None + ) -> List[Tuple[Any, ...]]: + """ + :param cursor: Cursor instance + :param limit: Maximum number of rows to be returned by the cursor + :return: Result of query + """ + if not cursor.description: + return [] + return super().fetch_data(cursor, limit)