From: Daniel Thorell <(none)> Date: Fri, 20 Oct 2017 16:59:55 +0000 (-0400) Subject: Remove deprecation warnings mysql5 7 20 X-Git-Tag: rel_1_1_15~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=71c9b49141872f33773d905072a554a923d505ea;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Remove deprecation warnings mysql5 7 20 MySQL 5.7.20 now warns for use of the @tx_isolation variable; a version check is now performed and uses @transaction_isolation instead to prevent this warning. For 1.1, also backport our_warn() test fixture fix from 9f0fb6c601 1.2 branch. (cherry picked from commit 41cfe44b5e5806b3d3b13949e41dbb347bfa29e1) Co-authored by: Mike Bayer Fixes: #4120 Pull-request: https://github.com/zzzeek/sqlalchemy/pull/391 Change-Id: I4d2e04df760c5351a71dde8b32145cdc69fa6115 --- diff --git a/doc/build/changelog/unreleased_11/4120.rst b/doc/build/changelog/unreleased_11/4120.rst new file mode 100644 index 0000000000..e84c1ac194 --- /dev/null +++ b/doc/build/changelog/unreleased_11/4120.rst @@ -0,0 +1,8 @@ +.. change:: + :tags: bug, mysql + :tickets: 4120 + :versions: 1.2.0b4 + + MySQL 5.7.20 now warns for use of the @tx_isolation variable; a version + check is now performed and uses @transaction_isolation instead + to prevent this warning. diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index 0abbf6b4b7..2ccdb9599d 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -1573,7 +1573,10 @@ class MySQLDialect(default.DefaultDialect): def get_isolation_level(self, connection): cursor = connection.cursor() - cursor.execute('SELECT @@tx_isolation') + if self._is_mysql and self.server_version_info >= (5, 7, 20): + cursor.execute('SELECT @@transaction_isolation') + else: + cursor.execute('SELECT @@tx_isolation') val = cursor.fetchone()[0] cursor.close() if util.py3k and isinstance(val, bytes): @@ -1740,6 +1743,10 @@ class MySQLDialect(default.DefaultDialect): def _is_mariadb(self): return 'MariaDB' in self.server_version_info + @property + def _is_mysql(self): + return 'MariaDB' not in self.server_version_info + @property def _is_mariadb_102(self): return self._is_mariadb and \ diff --git a/lib/sqlalchemy/testing/assertions.py b/lib/sqlalchemy/testing/assertions.py index 3ee38937f7..591ec01c26 100644 --- a/lib/sqlalchemy/testing/assertions.py +++ b/lib/sqlalchemy/testing/assertions.py @@ -130,9 +130,17 @@ def _expect_warnings(exc_cls, messages, regex=True, assert_=True, real_warn = warnings.warn - def our_warn(msg, exception, *arg, **kw): - if not issubclass(exception, exc_cls): - return real_warn(msg, exception, *arg, **kw) + def our_warn(msg, *arg, **kw): + if isinstance(msg, exc_cls): + exception = msg + msg = str(exception) + elif arg: + exception = arg[0] + else: + exception = None + + if not exception or not issubclass(exception, exc_cls): + return real_warn(msg, *arg, **kw) if not filters: return @@ -143,7 +151,7 @@ def _expect_warnings(exc_cls, messages, regex=True, assert_=True, seen.discard(filter_) break else: - real_warn(msg, exception, *arg, **kw) + real_warn(msg, *arg, **kw) with mock.patch("warnings.warn", our_warn): yield