]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Include new MySQL error code 4031 for MySQL disconnect check
authorvalievkarim <valievkarim@gmail.com>
Wed, 18 May 2022 20:24:41 +0000 (16:24 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 19 May 2022 13:33:05 +0000 (09:33 -0400)
Added disconnect code for MySQL error 4031, introduced in MySQL >= 8.0.24,
indicating connection idle timeout exceeded. In particular this repairs an
issue where pre-ping could not reconnect on a timed-out connection. Pull
request courtesy valievkarim.

Fixes: #8036
Closes: #8037
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/8037
Pull-request-sha: 7ab605c2d25c3cd83af41e3250c97c623220cc7a

Change-Id: I21249c9d8acb305ac43ce61b90b41daf7fabdfe8

doc/build/changelog/unreleased_14/8036.rst [new file with mode: 0644]
lib/sqlalchemy/dialects/mysql/base.py
test/dialect/mysql/test_dialect.py

diff --git a/doc/build/changelog/unreleased_14/8036.rst b/doc/build/changelog/unreleased_14/8036.rst
new file mode 100644 (file)
index 0000000..52b956b
--- /dev/null
@@ -0,0 +1,8 @@
+.. change::
+    :tags: bug, mysql
+    :tickets: 8036
+
+    Added disconnect code for MySQL error 4031, introduced in MySQL >= 8.0.24,
+    indicating connection idle timeout exceeded. In particular this repairs an
+    issue where pre-ping could not reconnect on a timed-out connection. Pull
+    request courtesy valievkarim.
index 420fcfdfdbc80230baa44cc327ed46f20a825552..65de88cfe6df491fbf08ce12bc960961ec31f706 100644 (file)
@@ -2568,6 +2568,7 @@ class MySQLDialect(default.DefaultDialect):
             2014,
             2045,
             2055,
+            4031,
         ):
             return True
         elif isinstance(
index 4fa524a35c7bd94b5446f39412cf0ec592f5a453..d79f2629fad32d1c19dedb00ca9d1f9bd8ee6525 100644 (file)
@@ -199,6 +199,10 @@ class DialectTest(fixtures.TestBase):
         (2006, "foo", "OperationalError", "pymysql", True),
         (2007, "foo", "OperationalError", "mysqldb", False),
         (2007, "foo", "OperationalError", "pymysql", False),
+        (4031, "foo", "OperationalError", "mysqldb", True),
+        (4031, "foo", "OperationalError", "pymysql", True),
+        (4032, "foo", "OperationalError", "mysqldb", False),
+        (4032, "foo", "OperationalError", "pymysql", False),
     )
     def test_is_disconnect(
         self, arg0, message, exc_cls_name, dialect_name, is_disconnect