]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
additional fixes re: mariadb innodb etc.
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 29 Nov 2025 03:47:40 +0000 (22:47 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 29 Nov 2025 03:47:40 +0000 (22:47 -0500)
fix a bunch of side effects that were not tested in the gerrit
phase because we run with --backendonly

Change-Id: Iebcedb962e6e11dd247b0da5f309a71db711694c

lib/sqlalchemy/dialects/mysql/provision.py
lib/sqlalchemy/testing/fixtures/sql.py
lib/sqlalchemy/testing/provision.py
test/orm/inheritance/test_abc_inheritance.py
test/orm/test_unitofwork.py
test/requirements.py

index 4559dfc77af6cc6cd4c165c6dacd0076373afacb..eb0f49a6ef51f4536fd72288796923ead48d22c9 100644 (file)
@@ -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")
 
index ae18e69f58f5e205bba77d7792c0b36450c9bf7c..e6e43dbe005bed08200910a02a2f6bcbe0b24005 100644 (file)
@@ -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
index aa7d0daaa1584908c5120628be97f102f54f7501..efd89b4128589ba484d6c75eee105dde8c01ebef 100644 (file)
@@ -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
index d778ef33c796e8d8c3928e96e5da7f0cb48930c1..b6c7db521ba5cb7428b2d4c6bd6b2fceb1a09a84 100644 (file)
@@ -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)
index f8873f9154e03dbc53f830443726a7b4f9c8ae3f..2713b5572cb5fa2c25bd46002bf7616d0175d1c7 100644 (file)
@@ -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"):
index 50eb38c2b6394c9d9c1bf6146ea0e4c73b979cf1..cdc5e4f869e0317e3d5ff8a5f5ecd776170f325b 100644 (file)
@@ -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"])