From 27fdc6f67e2cfc3ae55650b39bc0b33e54f4dc21 Mon Sep 17 00:00:00 2001 From: Dmytro Kazanzhy Date: Thu, 19 May 2022 22:34:22 +0300 Subject: [PATCH] Fix UnboundLocalError when sql is empty list in DatabricksSqlHook --- airflow/providers/databricks/hooks/databricks_sql.py | 6 +++++- tests/providers/databricks/hooks/test_databricks_sql.py | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/airflow/providers/databricks/hooks/databricks_sql.py b/airflow/providers/databricks/hooks/databricks_sql.py index afc165ee20be25..9d86b4dbe3ae65 100644 --- a/airflow/providers/databricks/hooks/databricks_sql.py +++ b/airflow/providers/databricks/hooks/databricks_sql.py @@ -167,7 +167,11 @@ def run(self, sql: Union[str, List[str]], autocommit=True, parameters=None, hand """ if isinstance(sql, str): sql = self.maybe_split_sql_string(sql) - self.log.debug("Executing %d statements", len(sql)) + + if sql: + self.log.debug("Executing %d statements", len(sql)) + else: + raise ValueError("List of SQL statements is empty") conn = None for sql_statement in sql: diff --git a/tests/providers/databricks/hooks/test_databricks_sql.py b/tests/providers/databricks/hooks/test_databricks_sql.py index 369aa045ebade9..05952beabd5b8f 100644 --- a/tests/providers/databricks/hooks/test_databricks_sql.py +++ b/tests/providers/databricks/hooks/test_databricks_sql.py @@ -20,6 +20,8 @@ import unittest from unittest import mock +import pytest + from airflow.models import Connection from airflow.providers.databricks.hooks.databricks_sql import DatabricksSqlHook from airflow.utils.session import provide_session @@ -82,3 +84,9 @@ def test_query(self, mock_requests, mock_conn): cur.execute.assert_has_calls([mock.call(q) for q in [query]]) cur.close.assert_called() + + def test_no_query(self): + for empty_statement in ([], '', '\n'): + with pytest.raises(ValueError) as err: + self.hook.run(sql=empty_statement) + assert err.value.args[0] == "List of SQL statements is empty"