]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
updates for mariadb connector 1.0.10
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 19 Feb 2022 19:11:19 +0000 (14:11 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 19 Feb 2022 19:11:19 +0000 (14:11 -0500)
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

doc/build/changelog/unreleased_14/7738.rst [new file with mode: 0644]
lib/sqlalchemy/dialects/mysql/mariadbconnector.py
lib/sqlalchemy/engine/default.py
setup.cfg
test/engine/test_reconnect.py

diff --git a/doc/build/changelog/unreleased_14/7738.rst b/doc/build/changelog/unreleased_14/7738.rst
new file mode 100644 (file)
index 0000000..dbb028f
--- /dev/null
@@ -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.
index ea6060c01ba8fac6ef21f1c49e2e082f7d267bd8..fca91204f23f1f9473eb4003e502bfeb5c267dc4 100644 (file)
@@ -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
index b7dbfc52ee34c96d935399a77b1ca847f6e0c22d..a4dbf2361e21c0417f9ecb60b9fe97a51c16f0ef 100644 (file)
@@ -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()
index a8c12377da5c0a347a32dc1ca15b19aa5c41d24f..b45ebf86787a596359cfb719e11eeb780b5b58c6 100644 (file)
--- 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
index cccf668210c1655b4fdc89b180d8cb33c06feacf..c1f0639bb84a683df69b261e870f17c9a79875ed 100644 (file)
@@ -1312,7 +1312,6 @@ class InvalidateDuringResultTest(fixtures.TestBase):
     )
     @testing.fails_if(
         [
-            "+mariadbconnector",
             "+mysqlconnector",
             "+mysqldb",
             "+cymysql",