summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2021-12-14 16:46:50 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2021-12-16 09:17:04 -0500
commit3a33fa8b0acd9220ef4428ac6a56ebd8d40c3762 (patch)
treec741f9a6ab6adf3eb23c00fa90f82ec6455e7ad2
parent009747e146008ce695f33aee5ffb12a14f3a7e46 (diff)
downloadsqlalchemy-3a33fa8b0acd9220ef4428ac6a56ebd8d40c3762.tar.gz
include InterfaceError for mariadb disconnect check
Corrected the error classes inspected for the "is_disconnect" check for the ``mariadbconnector`` dialect, which was failing for disconnects that occurred due to common MySQL/MariaDB error codes such as 2006; the DBAPI appears to currently use the ``mariadb.InterfaceError`` exception class for disconnect errors such as error code 2006, which has been added to the list of classes checked. For the current "real reconnect test", shutting down the mariadb connection from the client side produces ProgrammingError("Connection isn't valid anymore") which we also continue to intercept. Fixes: #7457 Change-Id: I0b37cd7a73359a23ad756ff2af0a9333c841221b
-rw-r--r--doc/build/changelog/unreleased_14/7457.rst11
-rw-r--r--lib/sqlalchemy/dialects/mysql/base.py23
2 files changed, 25 insertions, 9 deletions
diff --git a/doc/build/changelog/unreleased_14/7457.rst b/doc/build/changelog/unreleased_14/7457.rst
new file mode 100644
index 000000000..b1942b0ea
--- /dev/null
+++ b/doc/build/changelog/unreleased_14/7457.rst
@@ -0,0 +1,11 @@
+.. change::
+ :tags: bug, mariadb
+ :tickets: 7457
+
+ Corrected the error classes inspected for the "is_disconnect" check for the
+ ``mariadbconnector`` dialect, which was failing for disconnects that
+ occurred due to common MySQL/MariaDB error codes such as 2006; the DBAPI
+ appears to currently use the ``mariadb.InterfaceError`` exception class for
+ disconnect errors such as error code 2006, which has been added to the list
+ of classes checked.
+
diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py
index fef1ec81a..fe0624d08 100644
--- a/lib/sqlalchemy/dialects/mysql/base.py
+++ b/lib/sqlalchemy/dialects/mysql/base.py
@@ -2540,16 +2540,21 @@ class MySQLDialect(default.DefaultDialect):
def is_disconnect(self, e, connection, cursor):
if isinstance(
- e, (self.dbapi.OperationalError, self.dbapi.ProgrammingError)
+ e,
+ (
+ self.dbapi.OperationalError,
+ self.dbapi.ProgrammingError,
+ self.dbapi.InterfaceError,
+ ),
+ ) and self._extract_error_code(e) in (
+ 1927,
+ 2006,
+ 2013,
+ 2014,
+ 2045,
+ 2055,
):
- return self._extract_error_code(e) in (
- 1927,
- 2006,
- 2013,
- 2014,
- 2045,
- 2055,
- )
+ return True
elif isinstance(
e, (self.dbapi.InterfaceError, self.dbapi.InternalError)
):