summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2021-12-16 16:08:33 +0000
committerGerrit Code Review <gerrit@ci3.zzzcomputing.com>2021-12-16 16:08:33 +0000
commit3543fcc9c9601e81560d055ceadaea05c75815c0 (patch)
treee0287f4fced80f1ec41f723c5c7fe6d81f07127c
parent11c879e7ebe5947b9733b2c16adc0c106d3ce085 (diff)
parent3a33fa8b0acd9220ef4428ac6a56ebd8d40c3762 (diff)
downloadsqlalchemy-3543fcc9c9601e81560d055ceadaea05c75815c0.tar.gz
Merge "include InterfaceError for mariadb disconnect check" into main
-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)
):