summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Caselli <cfederico87@gmail.com>2023-02-13 22:35:09 +0100
committerFederico Caselli <cfederico87@gmail.com>2023-02-14 21:40:37 +0100
commitc7a5c4dd2063be596be9731e493d4ea9a3ff1123 (patch)
tree1fdde35b0ac87a18bffe2892044f1de5877a5762
parent1b726c48384931c813d254b6451cfb6ea4e5b882 (diff)
downloadsqlalchemy-c7a5c4dd2063be596be9731e493d4ea9a3ff1123.tar.gz
Improve ``oracledb`` thick mode flag.
Adjusted ``oracledb`` thick mode flag to make ``thick_mode=False`` not enable thick mode. Previously only ``None`` was accepted as off value. Fixes: #9295 Change-Id: I1a8397c19d065dfc2dda597e719922fc8d31acb1
-rw-r--r--doc/build/changelog/unreleased_20/9295.rst6
-rw-r--r--lib/sqlalchemy/dialects/oracle/oracledb.py4
-rw-r--r--test/dialect/oracle/_oracledb_mode.py8
-rw-r--r--test/dialect/oracle/test_dialect.py21
4 files changed, 27 insertions, 12 deletions
diff --git a/doc/build/changelog/unreleased_20/9295.rst b/doc/build/changelog/unreleased_20/9295.rst
new file mode 100644
index 000000000..57b872f71
--- /dev/null
+++ b/doc/build/changelog/unreleased_20/9295.rst
@@ -0,0 +1,6 @@
+.. change::
+ :tags: oracle, bug
+ :tickets: 9295
+
+ Adjusted ``oracledb`` ``thick_mode`` flag to accept any falsy value that's
+ not a dict as off value. Previously only ``None`` was accepted as off value.
diff --git a/lib/sqlalchemy/dialects/oracle/oracledb.py b/lib/sqlalchemy/dialects/oracle/oracledb.py
index eecbbd16c..3ead846b1 100644
--- a/lib/sqlalchemy/dialects/oracle/oracledb.py
+++ b/lib/sqlalchemy/dialects/oracle/oracledb.py
@@ -76,7 +76,9 @@ class OracleDialect_oracledb(_OracleDialect_cx_oracle):
**kwargs,
)
- if self.dbapi is not None and thick_mode is not None:
+ if self.dbapi is not None and (
+ thick_mode or isinstance(thick_mode, dict)
+ ):
kw = thick_mode if isinstance(thick_mode, dict) else {}
self.dbapi.init_oracle_client(**kw)
diff --git a/test/dialect/oracle/_oracledb_mode.py b/test/dialect/oracle/_oracledb_mode.py
index 21743d6ec..a02a5389b 100644
--- a/test/dialect/oracle/_oracledb_mode.py
+++ b/test/dialect/oracle/_oracledb_mode.py
@@ -14,16 +14,16 @@ def _get_version(conn):
return conn.exec_driver_sql(sql).scalar()
-def run_thin_mode(url, queue):
- e = create_engine(url)
+def run_thin_mode(url, queue, **kw):
+ e = create_engine(url, **kw)
with e.connect() as conn:
res = _get_version(conn)
queue.put((res, e.dialect.is_thin_mode(conn)))
e.dispose()
-def run_thick_mode(url, queue):
- e = create_engine(url, thick_mode={"driver_name": "custom-driver-name"})
+def run_thick_mode(url, queue, **kw):
+ e = create_engine(url, **kw)
with e.connect() as conn:
res = _get_version(conn)
queue.put((res, e.dialect.is_thin_mode(conn)))
diff --git a/test/dialect/oracle/test_dialect.py b/test/dialect/oracle/test_dialect.py
index 38f4b176b..4587fe6c0 100644
--- a/test/dialect/oracle/test_dialect.py
+++ b/test/dialect/oracle/test_dialect.py
@@ -96,10 +96,12 @@ class OracledbMode(fixtures.TestBase):
__backend__ = True
__only_on__ = "oracle+oracledb"
- def _run_in_process(self, fn):
+ def _run_in_process(self, fn, fn_kw=None):
ctx = get_context("spawn")
queue = ctx.Queue()
- process = ctx.Process(target=fn, args=(config.db_url, queue))
+ process = ctx.Process(
+ target=fn, args=(config.db_url, queue), kwargs=fn_kw or {}
+ )
try:
process.start()
process.join(10)
@@ -108,19 +110,24 @@ class OracledbMode(fixtures.TestBase):
finally:
process.kill()
- def test_thin_mode(self):
+ @testing.combinations({}, {"thick_mode": None}, {"thick_mode": False})
+ def test_thin_mode(self, options):
from ._oracledb_mode import run_thin_mode
- mode, is_thin = self._run_in_process(run_thin_mode)
+ mode, is_thin = self._run_in_process(run_thin_mode, options)
is_true(is_thin)
is_true(mode.startswith("python-oracledb thn"))
- def test_thick_mode(self):
+ @testing.combinations(True, {}, {"driver_name": "custom-driver-name"})
+ def test_thick_mode(self, value):
from ._oracledb_mode import run_thick_mode
- mode, is_thin = self._run_in_process(run_thick_mode)
+ mode, is_thin = self._run_in_process(
+ run_thick_mode, {"thick_mode": value}
+ )
is_false(is_thin)
- eq_(mode.strip(), "custom-driver-name")
+ if isinstance(value, dict) and value.get("driver_name"):
+ eq_(mode.strip(), "custom-driver-name")
class DialectWBackendTest(fixtures.TestBase):