From: Mike Bayer Date: Sat, 29 Nov 2025 03:47:40 +0000 (-0500) Subject: additional fixes re: mariadb innodb etc. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2169a2950479873cd42d62c3f81a6bd7caa8aaeb;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git additional fixes re: mariadb innodb etc. fix a bunch of side effects that were not tested in the gerrit phase because we run with --backendonly Change-Id: Iebcedb962e6e11dd247b0da5f309a71db711694c --- diff --git a/lib/sqlalchemy/dialects/mysql/provision.py b/lib/sqlalchemy/dialects/mysql/provision.py index 4559dfc77a..eb0f49a6ef 100644 --- a/lib/sqlalchemy/dialects/mysql/provision.py +++ b/lib/sqlalchemy/dialects/mysql/provision.py @@ -119,10 +119,10 @@ def _upsert( @delete_from_all_tables.for_db("mysql", "mariadb") -def _delete_from_all_tables(cfg, connection, metadata): +def _delete_from_all_tables(connection, cfg, metadata): connection.exec_driver_sql("SET foreign_key_checks = 0") try: - delete_from_all_tables.call_original(cfg, connection, metadata) + delete_from_all_tables.call_original(connection, cfg, metadata) finally: connection.exec_driver_sql("SET foreign_key_checks = 1") diff --git a/lib/sqlalchemy/testing/fixtures/sql.py b/lib/sqlalchemy/testing/fixtures/sql.py index ae18e69f58..e6e43dbe00 100644 --- a/lib/sqlalchemy/testing/fixtures/sql.py +++ b/lib/sqlalchemy/testing/fixtures/sql.py @@ -142,7 +142,7 @@ class TablesTest(TestBase): ): with self.bind.begin() as conn: provision.delete_from_all_tables( - config, conn, self._tables_metadata + conn, config, self._tables_metadata ) @classmethod diff --git a/lib/sqlalchemy/testing/provision.py b/lib/sqlalchemy/testing/provision.py index aa7d0daaa1..efd89b4128 100644 --- a/lib/sqlalchemy/testing/provision.py +++ b/lib/sqlalchemy/testing/provision.py @@ -17,6 +17,8 @@ from . import engines from . import util from .. import exc from .. import inspect +from ..engine import Connection +from ..engine import Engine from ..engine import url as sa_url from ..schema import sort_tables_and_constraints from ..sql import ddl @@ -60,6 +62,8 @@ class register: url = sa_url.make_url(cfg) elif isinstance(cfg, sa_url.URL): url = cfg + elif isinstance(cfg, (Engine, Connection)): + url = cfg.engine.url else: url = cfg.db.url backend = url.get_backend_name() @@ -560,7 +564,7 @@ def allow_stale_updates(fn, *arg, **kw): @register.init -def delete_from_all_tables(cfg, connection, metadata): +def delete_from_all_tables(connection, cfg, metadata): """an absolutely foolproof delete from all tables routine. dialects should override this to add special instructions like diff --git a/test/orm/inheritance/test_abc_inheritance.py b/test/orm/inheritance/test_abc_inheritance.py index d778ef33c7..b6c7db521b 100644 --- a/test/orm/inheritance/test_abc_inheritance.py +++ b/test/orm/inheritance/test_abc_inheritance.py @@ -29,6 +29,8 @@ def _combinations(): *list(_combinations()), argnames="name,parent,child,direction", id_="saaa" ) class ABCTest(fixtures.MappedTest): + __requires__ = ("foreign_key_cycles_w_cascade",) + @classmethod def define_tables(cls, metadata): parent, child, direction = cls.parent, cls.child, cls.direction @@ -48,7 +50,12 @@ class ABCTest(fixtures.MappedTest): Column( "child_id", Integer, - ForeignKey("%s.id" % child, use_alter=True, name="foo"), + ForeignKey( + "%s.id" % child, + use_alter=True, + name="foo", + ondelete="cascade", + ), ) ) elif "a" == child and direction == ONETOMANY: @@ -56,7 +63,12 @@ class ABCTest(fixtures.MappedTest): Column( "parent_id", Integer, - ForeignKey("%s.id" % parent, use_alter=True, name="foo"), + ForeignKey( + "%s.id" % parent, + use_alter=True, + name="foo", + ondelete="cascade", + ), ) ) ta = Table(*ta) @@ -71,7 +83,12 @@ class ABCTest(fixtures.MappedTest): Column( "child_id", Integer, - ForeignKey("%s.id" % child, use_alter=True, name="foo"), + ForeignKey( + "%s.id" % child, + use_alter=True, + name="foo", + ondelete="cascade", + ), ) ) elif "b" == child and direction == ONETOMANY: @@ -79,7 +96,12 @@ class ABCTest(fixtures.MappedTest): Column( "parent_id", Integer, - ForeignKey("%s.id" % parent, use_alter=True, name="foo"), + ForeignKey( + "%s.id" % parent, + use_alter=True, + name="foo", + ondelete="cascade", + ), ) ) tb = Table(*tb) @@ -94,7 +116,12 @@ class ABCTest(fixtures.MappedTest): Column( "child_id", Integer, - ForeignKey("%s.id" % child, use_alter=True, name="foo"), + ForeignKey( + "%s.id" % child, + use_alter=True, + name="foo", + ondelete="cascade", + ), ) ) elif "c" == child and direction == ONETOMANY: @@ -102,7 +129,12 @@ class ABCTest(fixtures.MappedTest): Column( "parent_id", Integer, - ForeignKey("%s.id" % parent, use_alter=True, name="foo"), + ForeignKey( + "%s.id" % parent, + use_alter=True, + name="foo", + ondelete="cascade", + ), ) ) tc = Table(*tc) diff --git a/test/orm/test_unitofwork.py b/test/orm/test_unitofwork.py index f8873f9154..2713b5572c 100644 --- a/test/orm/test_unitofwork.py +++ b/test/orm/test_unitofwork.py @@ -1096,6 +1096,7 @@ class DefaultTest(fixtures.MappedTest): onupdate="im the update", ), mysql_engine="MyISAM", + mariadb_engine="MyISAM", ) st = Table( @@ -1106,6 +1107,7 @@ class DefaultTest(fixtures.MappedTest): ), Column("data", String(50)), mysql_engine="MyISAM", + mariadb_engine="MyISAM", ) if testing.against("postgresql", "oracle"): diff --git a/test/requirements.py b/test/requirements.py index 50eb38c2b6..cdc5e4f869 100644 --- a/test/requirements.py +++ b/test/requirements.py @@ -73,6 +73,10 @@ class DefaultRequirements(SuiteRequirements): return skip_if(no_support("sqlite", "not supported by database")) + @property + def foreign_key_cycles_w_cascade(self): + return skip_if(no_support("mssql", "not supported")) + @property def foreign_keys_reflect_as_index(self): return only_on(["mysql", "mariadb"])