]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commit
drop a 400 ton anvil on oracle 23c
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 27 Nov 2025 06:22:38 +0000 (01:22 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 28 Nov 2025 18:16:13 +0000 (13:16 -0500)
commit3d6a109c839638d19790c20f301a6a9c69ad54e8
tree9ac7b473e46b22d25ce708bbd3c0f0b376c97813
parent0260f7e58bcc7574c6b33bbbcc7f511a9e5eba07
drop a 400 ton anvil on oracle 23c

this DB is extremely erratic in being able to connect.   Add
a brute force connection retrier to all engines everywhere
(which for oracledb we can fortunately use their built-in feature
that also works).
This actually works and I can see it pausing under load, reconnecting,
and succeeding.  the problem is that absolutely every engine everywhere
needs this routine otherwise an engine without a retrier in it will
crash.    That then necessitates digging into testing_engine(),
making sure testing_engine() is used everywhere an engine that's going
to connect is used, then dealing with the fallout from that.

We also simplify some older workarounds for cx_oracle and
hack into config/provision to make oracledb seem like the primary
DBAPI for most tests.

testing_engine has been completely overhauled, making use of a new
post_configure_testing_engine() hook which moves and refines
the SQLite pool sharing and savepoint logic all into sqlite/provision.py
and also allows for cx_oracle to apply a retry event handler.

Change-Id: I4ea4c523effb878290d28b94d8925eb32fc5ae3b
21 files changed:
lib/sqlalchemy/dialects/oracle/provision.py
lib/sqlalchemy/dialects/sqlite/provision.py
lib/sqlalchemy/pool/impl.py
lib/sqlalchemy/testing/assertions.py
lib/sqlalchemy/testing/config.py
lib/sqlalchemy/testing/engines.py
lib/sqlalchemy/testing/fixtures/base.py
lib/sqlalchemy/testing/provision.py
lib/sqlalchemy/testing/requirements.py
test/aaa_profiling/test_orm.py
test/dialect/postgresql/test_reflection.py
test/engine/test_deprecations.py
test/engine/test_execute.py
test/engine/test_logging.py
test/engine/test_reconnect.py
test/engine/test_transaction.py
test/ext/asyncio/test_engine.py
test/ext/asyncio/test_session.py
test/requirements.py
test/sql/test_insert_exec.py
test/sql/test_lambdas.py