]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fixes for MySQL 8
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 6 Aug 2020 00:32:02 +0000 (20:32 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 6 Aug 2020 01:16:57 +0000 (21:16 -0400)
MySQL 8.0.19 has some changes to how it reports on display widths
for int types (seems like it omits it in some cases), and also
no longer cares about the length for YEAR.   Another adjustment
to the ordering of constraints reported in one case also.
At least one CI machine is at 8.0.21 now.

Change-Id: Ie2101bed3ad75dcbb62cd05abe95ef14ad895cf5

test/dialect/mysql/test_reflection.py
test/dialect/mysql/test_types.py

index 2e1b2049009f620e130320d7098590a327ac78b7..f0465ec50c93c4b2393b8d74fba088f790e8a52e 100644 (file)
@@ -126,7 +126,10 @@ class TypeReflectionTest(fixtures.TestBase):
             (mysql.YEAR(display_width=4), mysql.YEAR(display_width=4)),
         ]
 
-        self._run_test(specs, ["display_width"])
+        if testing.against("mysql>=8.0.19"):
+            self._run_test(specs, [])
+        else:
+            self._run_test(specs, ["display_width"])
 
     def test_string_types(self):
         specs = [
@@ -193,7 +196,14 @@ class TypeReflectionTest(fixtures.TestBase):
                 (BigInteger, mysql.BIGINT(display_width=20)),
             ]
         )
-        self._run_test(specs, ["display_width", "unsigned", "zerofill"])
+
+        # TODO: mysql 8.0.19-ish doesn't consistently report
+        # on display_width.   need to test this more accurately though
+        # for the cases where it does
+        if testing.against("mysql >= 8.0.19"):
+            self._run_test(specs, ["unsigned", "zerofill"])
+        else:
+            self._run_test(specs, ["display_width", "unsigned", "zerofill"])
 
     def test_binary_types(self):
         specs = [
@@ -949,7 +959,10 @@ class ReflectionTest(fixtures.TestBase, AssertsCompiledSQL):
             )
         else:
             eq_(
-                inspect(testing.db).get_foreign_keys("PlaylistTrack"),
+                sorted(
+                    inspect(testing.db).get_foreign_keys("PlaylistTrack"),
+                    key=lambda elem: elem["name"],
+                ),
                 [
                     {
                         "name": "FK_PlaylistTTrackId",
index 40908c8552f40ad8aecbe071f89b363faa4602a0..d9afb0063a938d203687996cdcdc619fc810e5f6 100644 (file)
@@ -28,6 +28,7 @@ from sqlalchemy.testing import assert_raises_message
 from sqlalchemy.testing import AssertsCompiledSQL
 from sqlalchemy.testing import AssertsExecutionResults
 from sqlalchemy.testing import eq_
+from sqlalchemy.testing import eq_regex
 from sqlalchemy.testing import fixtures
 from sqlalchemy.testing import is_
 from sqlalchemy.util import u
@@ -635,7 +636,7 @@ class TypeRoundTripTest(fixtures.TestBase, AssertsExecutionResults):
         meta2 = MetaData(testing.db)
         table = Table("mysql_bool", meta2, autoload=True)
         eq_(colspec(table.c.b3), "b3 TINYINT(1)")
-        eq_(colspec(table.c.b4), "b4 TINYINT(1) UNSIGNED")
+        eq_regex(colspec(table.c.b4), r"b4 TINYINT(?:\(1\))? UNSIGNED")
 
         meta2 = MetaData(testing.db)
         table = Table(
@@ -749,7 +750,7 @@ class TypeRoundTripTest(fixtures.TestBase, AssertsExecutionResults):
                 eq_(list(row), [1950, 2050, None, 1950])
                 conn.execute(table.delete())
                 self.assert_(colspec(table.c.y1).startswith("y1 YEAR"))
-                eq_(colspec(table.c.y5), "y5 YEAR(4)")
+                eq_regex(colspec(table.c.y5), r"y5 YEAR(?:\(4\))?")
 
 
 class JSONTest(fixtures.TestBase):