summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2020-08-05 20:32:02 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2020-08-05 21:16:57 -0400
commit5668fd73ea51bffbccb8b1ae8923ef2d545efacb (patch)
treebe00a199984cd9b9f69e1d83212eb67ba7ca1800
parentcc57ea495f6460dd56daa6de57e40047ed999369 (diff)
downloadsqlalchemy-5668fd73ea51bffbccb8b1ae8923ef2d545efacb.tar.gz
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
-rw-r--r--test/dialect/mysql/test_reflection.py19
-rw-r--r--test/dialect/mysql/test_types.py5
2 files changed, 19 insertions, 5 deletions
diff --git a/test/dialect/mysql/test_reflection.py b/test/dialect/mysql/test_reflection.py
index 2e1b20490..f0465ec50 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 40908c855..d9afb0063 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):