summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/build/changelog/unreleased_14/7738.rst7
-rw-r--r--lib/sqlalchemy/dialects/mysql/mariadbconnector.py9
-rw-r--r--lib/sqlalchemy/engine/default.py1
-rw-r--r--setup.cfg1
-rw-r--r--test/engine/test_reconnect.py1
5 files changed, 17 insertions, 2 deletions
diff --git a/doc/build/changelog/unreleased_14/7738.rst b/doc/build/changelog/unreleased_14/7738.rst
new file mode 100644
index 000000000..dbb028fde
--- /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 ea6060c01..fca91204f 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 b7dbfc52e..a4dbf2361 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 a8c12377d..b45ebf867 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 cccf66821..c1f0639bb 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",