]> 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:13:27 +0000 (14:13 -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
(cherry picked from commit e120837b682a3a822c2dff136ad48b1ca9fb6ce2)

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 f3130488780d25330a4c1901f55e2780d0c12ae1..c8b2eada6dc70bab40bd073d5afcc68c69a8c2fc 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 d35e5f821ae89049d9f470356f3b794f03138c28..5a1443ecbc1991b7701aeb20e8086913a977e927 100644 (file)
@@ -1565,7 +1565,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 f432561b189ea398d3e0c407c53f1a093911fdc6..49f829f7257e69919071ece748ff183368a08d40 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -170,7 +170,8 @@ aiomysql = mysql+aiomysql://scott:tiger@127.0.0.1:3306/test?charset=utf8mb4
 aiomysql_fallback = mysql+aiomysql://scott:tiger@127.0.0.1:3306/test?charset=utf8mb4&async_fallback=true
 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://scott:tiger@127.0.0.1:3306/test
+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 9579d6c2dc9d3b90c7f70005e8921a246ff6f945..bd597a96b799d4441aa1240ce0c7ebe039ce9c22 100644 (file)
@@ -1381,7 +1381,6 @@ class InvalidateDuringResultTest(fixtures.TestBase):
     )
     @testing.fails_if(
         [
-            "+mariadbconnector",
             "+mysqlconnector",
             "+mysqldb",
             "+cymysql",