From 051b8420eac7583db659c97092470e4425572853 Mon Sep 17 00:00:00 2001 From: Malthe Borch Date: Thu, 6 Jan 2022 16:37:15 +0100 Subject: [PATCH] Fix handling of bindvars when no parameters are provided --- airflow/providers/oracle/hooks/oracle.py | 3 +++ tests/providers/oracle/hooks/test_oracle.py | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/airflow/providers/oracle/hooks/oracle.py b/airflow/providers/oracle/hooks/oracle.py index b5dd4532e9ee8..d5f3a8595a132 100644 --- a/airflow/providers/oracle/hooks/oracle.py +++ b/airflow/providers/oracle/hooks/oracle.py @@ -309,6 +309,9 @@ def callproc( sql = f"BEGIN {identifier}({args}); END;" def handler(cursor): + if cursor.bindvars is None: + return + if isinstance(cursor.bindvars, list): return [v.getvalue() for v in cursor.bindvars] diff --git a/tests/providers/oracle/hooks/test_oracle.py b/tests/providers/oracle/hooks/test_oracle.py index 0f5c7dfa96e96..3eae248107fd1 100644 --- a/tests/providers/oracle/hooks/test_oracle.py +++ b/tests/providers/oracle/hooks/test_oracle.py @@ -292,6 +292,18 @@ def test_bulk_insert_rows_no_rows(self): with pytest.raises(ValueError): self.db_hook.bulk_insert_rows('table', rows) + def test_callproc_none(self): + parameters = None + + class bindvar(int): + def getvalue(self): + return self + + self.cur.bindvars = None + result = self.db_hook.callproc('proc', True, parameters) + assert self.cur.execute.mock_calls == [mock.call('BEGIN proc(); END;')] + assert result == parameters + def test_callproc_dict(self): parameters = {"a": 1, "b": 2, "c": 3}