summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/testing
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2022-03-07 11:17:47 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2022-03-07 11:17:47 -0500
commitfbacb1991585202a5bf22acb0d36b5c979bcfad8 (patch)
tree22d51e00560d2209457530c6f572674807edd084 /lib/sqlalchemy/testing
parenta289e05226e20cc6de9deb479f63297320ef7c5c (diff)
downloadsqlalchemy-fbacb1991585202a5bf22acb0d36b5c979bcfad8.tar.gz
test sqlite w/ savepoint workaround in session fixture test
Fixes: #7795 Change-Id: Ib790581555656c088f86c00080c70d19ca295a03
Diffstat (limited to 'lib/sqlalchemy/testing')
-rw-r--r--lib/sqlalchemy/testing/engines.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/sqlalchemy/testing/engines.py b/lib/sqlalchemy/testing/engines.py
index 79adb8c3c..4496b8ded 100644
--- a/lib/sqlalchemy/testing/engines.py
+++ b/lib/sqlalchemy/testing/engines.py
@@ -306,8 +306,10 @@ def testing_engine(
options=None,
asyncio=False,
transfer_staticpool=False,
+ _sqlite_savepoint=False,
):
if asyncio:
+ assert not _sqlite_savepoint
from sqlalchemy.ext.asyncio import (
create_async_engine as create_engine,
)
@@ -318,9 +320,11 @@ def testing_engine(
if not options:
use_reaper = True
scope = "function"
+ sqlite_savepoint = False
else:
use_reaper = options.pop("use_reaper", True)
scope = options.pop("scope", "function")
+ sqlite_savepoint = options.pop("sqlite_savepoint", False)
url = url or config.db.url
@@ -336,6 +340,16 @@ def testing_engine(
engine = create_engine(url, **options)
+ if sqlite_savepoint and engine.name == "sqlite":
+ # apply SQLite savepoint workaround
+ @event.listens_for(engine, "connect")
+ def do_connect(dbapi_connection, connection_record):
+ dbapi_connection.isolation_level = None
+
+ @event.listens_for(engine, "begin")
+ def do_begin(conn):
+ conn.exec_driver_sql("BEGIN")
+
if transfer_staticpool:
from sqlalchemy.pool import StaticPool