From: Mike Bayer Date: Thu, 6 Aug 2020 00:32:02 +0000 (-0400) Subject: Fixes for MySQL 8 X-Git-Tag: rel_1_3_19~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2eaf2a978570420603da3397dae503184b68466c;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Fixes for MySQL 8 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 (cherry picked from commit 5668fd73ea51bffbccb8b1ae8923ef2d545efacb) --- diff --git a/test/dialect/mysql/test_reflection.py b/test/dialect/mysql/test_reflection.py index 1ab646f3c6..dfc7992d26 100644 --- a/test/dialect/mysql/test_reflection.py +++ b/test/dialect/mysql/test_reflection.py @@ -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 = [ @@ -945,7 +955,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", diff --git a/test/dialect/mysql/test_types.py b/test/dialect/mysql/test_types.py index ee626b0826..f34a8d3243 100644 --- a/test/dialect/mysql/test_types.py +++ b/test/dialect/mysql/test_types.py @@ -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 @@ -637,7 +638,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( @@ -751,7 +752,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):