]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commit
Guard against re-entrant autobegin in Core, ORM
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 15 Jan 2021 23:24:56 +0000 (18:24 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 16 Jan 2021 01:14:34 +0000 (20:14 -0500)
commitc5b4af959e13f8214121f62f322c668bb178d41f
tree7369dfbf35c7005ec2cfcf965f77a42d4ed98671
parent5be3c030b321ecc342bf4cd84cbb0838efacd155
Guard against re-entrant autobegin in Core, ORM

Fixed bug in "future" version of :class:`.Engine` where emitting SQL during
the :meth:`.EngineEvents.do_begin` event hook would cause a re-entrant
condition due to autobegin, including the recipe documented for SQLite to
allow for savepoints and serializable isolation support.

Fixed issue in new :class:`_orm.Session` similar to that of the
:class:`_engine.Connection` where the new "autobegin" logic could be
tripped into a re-entrant state if SQL were executed within the
:meth:`.SessionEvents.after_transaction_create` event hook.

Also repair the new "testing_engine" pytest fixture to
set up for "future" engine appropriately, which wasn't working
leading to the test_execute.py tests not using the future
engine since recent f1e96cb0874927a475d0c11139.

Fixes: #5845
Change-Id: Ib2432d8c8bd753e24be60720ec47affb2df15a4a
doc/build/changelog/unreleased_14/5845.rst [new file with mode: 0644]
lib/sqlalchemy/engine/base.py
lib/sqlalchemy/orm/session.py
lib/sqlalchemy/testing/fixtures.py
test/dialect/test_sqlite.py
test/engine/test_execute.py
test/orm/test_events.py