From: Mike Bayer Date: Sat, 19 Feb 2022 19:11:19 +0000 (-0500) Subject: updates for mariadb connector 1.0.10 X-Git-Tag: rel_2_0_0b1~479 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e120837b682a3a822c2dff136ad48b1ca9fb6ce2;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git updates for mariadb connector 1.0.10 Fixed regression in mariadbconnector dialect as of mariadb connector 1.0.10 where the DBAPI no longer pre-buffers cursor.lastrowid. The dialect now fetches this value proactively for situations where it applies. test_invalidate_on_results seems to pass for mariadbconnector now. the driver has likely changed how it buffers result sets. This is a major change for them to make in a point release so we might want to watch this in case they reverse course again. Fixes: #7738 Change-Id: I9610aae01d1ae42fa92ffbc7123a6948e40ec9dd --- diff --git a/doc/build/changelog/unreleased_14/7738.rst b/doc/build/changelog/unreleased_14/7738.rst new file mode 100644 index 0000000000..dbb028fde3 --- /dev/null +++ b/doc/build/changelog/unreleased_14/7738.rst @@ -0,0 +1,7 @@ +.. change:: + :tags: bug, mariadb, regression + :tickets: 7738 + + Fixed regression in mariadbconnector dialect as of mariadb connector 1.0.10 + where the DBAPI no longer pre-buffers cursor.lastrowid. The dialect now + fetches this value proactively for situations where it applies. diff --git a/lib/sqlalchemy/dialects/mysql/mariadbconnector.py b/lib/sqlalchemy/dialects/mysql/mariadbconnector.py index ea6060c01b..fca91204f2 100644 --- a/lib/sqlalchemy/dialects/mysql/mariadbconnector.py +++ b/lib/sqlalchemy/dialects/mysql/mariadbconnector.py @@ -39,12 +39,21 @@ mariadb_cpy_minimum_version = (1, 0, 1) class MySQLExecutionContext_mariadbconnector(MySQLExecutionContext): + _lastrowid = None + def create_server_side_cursor(self): return self._dbapi_connection.cursor(buffered=False) def create_default_cursor(self): return self._dbapi_connection.cursor(buffered=True) + def post_exec(self): + if self.isinsert and self.compiled.postfetch_lastrowid: + self._lastrowid = self.cursor.lastrowid + + def get_lastrowid(self): + return self._lastrowid + class MySQLCompiler_mariadbconnector(MySQLCompiler): pass diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index b7dbfc52ee..a4dbf2361e 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -1383,7 +1383,6 @@ class DefaultExecutionContext(interfaces.ExecutionContext): return self._setup_ins_pk_from_empty() def _setup_ins_pk_from_lastrowid(self): - getter = self.compiled._inserted_primary_key_from_lastrowid_getter lastrowid = self.get_lastrowid() diff --git a/setup.cfg b/setup.cfg index a8c12377da..b45ebf8678 100644 --- a/setup.cfg +++ b/setup.cfg @@ -158,6 +158,7 @@ aiomysql_fallback = mysql+aiomysql://scott:tiger@127.0.0.1:3306/test?charset=utf asyncmy = mysql+asyncmy://scott:tiger@127.0.0.1:3306/test?charset=utf8mb4 asyncmy_fallback = mysql+asyncmy://scott:tiger@127.0.0.1:3306/test?charset=utf8mb4&async_fallback=true mariadb = mariadb+mysqldb://scott:tiger@127.0.0.1:3306/test +mariadb_connector = mariadb+mariadbconnector://scott:tiger@127.0.0.1:3306/test mssql = mssql+pyodbc://scott:tiger^5HHH@mssql2017:1433/test?driver=ODBC+Driver+13+for+SQL+Server mssql_pymssql = mssql+pymssql://scott:tiger@ms_2008 docker_mssql = mssql+pymssql://scott:tiger^5HHH@127.0.0.1:1433/test diff --git a/test/engine/test_reconnect.py b/test/engine/test_reconnect.py index cccf668210..c1f0639bb8 100644 --- a/test/engine/test_reconnect.py +++ b/test/engine/test_reconnect.py @@ -1312,7 +1312,6 @@ class InvalidateDuringResultTest(fixtures.TestBase): ) @testing.fails_if( [ - "+mariadbconnector", "+mysqlconnector", "+mysqldb", "+cymysql",