From: Mike Bayer Date: Thu, 6 Aug 2020 00:32:02 +0000 (-0400) Subject: Fixes for MySQL 8 X-Git-Tag: rel_1_4_0b1~196^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5668fd73ea51bffbccb8b1ae8923ef2d545efacb;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 --- diff --git a/test/dialect/mysql/test_reflection.py b/test/dialect/mysql/test_reflection.py index 2e1b204900..f0465ec50c 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 = [ @@ -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", diff --git a/test/dialect/mysql/test_types.py b/test/dialect/mysql/test_types.py index 40908c8552..d9afb0063a 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 @@ -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):