Fixed #32908 -- Allowed select_for_update(skip_locked) on MariaDB 10.6+.

This commit is contained in:
Mariusz Felisiak 2021-07-08 06:51:10 +02:00 committed by GitHub
parent 5013798fe9
commit 77b88fe621
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 16 additions and 7 deletions

View File

@ -185,7 +185,9 @@ class DatabaseFeatures(BaseDatabaseFeatures):
@cached_property @cached_property
def has_select_for_update_skip_locked(self): def has_select_for_update_skip_locked(self):
return not self.connection.mysql_is_mariadb and self.connection.mysql_version >= (8, 0, 1) if self.connection.mysql_is_mariadb:
return self.connection.mysql_version >= (10, 6)
return self.connection.mysql_version >= (8, 0, 1)
@cached_property @cached_property
def has_select_for_update_nowait(self): def has_select_for_update_nowait(self):

View File

@ -686,7 +686,7 @@ a :exc:`~django.db.NotSupportedError` is raised.
=============== ========= ========== =============== ========= ==========
Option MariaDB MySQL Option MariaDB MySQL
=============== ========= ========== =============== ========= ==========
``SKIP LOCKED`` X (≥8.0.1) ``SKIP LOCKED`` X (≥10.6) X (≥8.0.1)
``NOWAIT`` X (≥10.3) X (≥8.0.1) ``NOWAIT`` X (≥10.3) X (≥8.0.1)
``OF`` X (≥8.0.1) ``OF`` X (≥8.0.1)
``NO KEY`` ``NO KEY``

View File

@ -1792,11 +1792,11 @@ them::
>>> Person.objects.select_related('hometown').select_for_update().exclude(hometown=None) >>> Person.objects.select_related('hometown').select_for_update().exclude(hometown=None)
<QuerySet [<Person: ...)>, ...]> <QuerySet [<Person: ...)>, ...]>
Currently, the ``postgresql``, ``oracle``, and ``mysql`` database The ``postgresql``, ``oracle``, and ``mysql`` database backends support
backends support ``select_for_update()``. However, MariaDB 10.3+ supports only ``select_for_update()``. However, MariaDB 10.3+ only supports the ``nowait``
the ``nowait`` argument and MySQL 8.0.1+ supports the ``nowait``, argument, MariaDB 10.6+ also supports the ``skip_locked`` argument, and MySQL
``skip_locked``, and ``of`` arguments. The ``no_key`` argument is supported 8.0.1+ supports the ``nowait``, ``skip_locked``, and ``of`` arguments. The
only on PostgreSQL. ``no_key`` argument is only supported on PostgreSQL.
Passing ``nowait=True``, ``skip_locked=True``, ``no_key=True``, or ``of`` to Passing ``nowait=True``, ``skip_locked=True``, ``no_key=True``, or ``of`` to
``select_for_update()`` using database backends that do not support these ``select_for_update()`` using database backends that do not support these
@ -1836,6 +1836,10 @@ raised if ``select_for_update()`` is used in autocommit mode.
The ``of`` argument was allowed on MySQL 8.0.1+. The ``of`` argument was allowed on MySQL 8.0.1+.
.. versionchanged:: 4.0
The ``skip_locked`` argument was allowed on MariaDB 10.6+.
``raw()`` ``raw()``
~~~~~~~~~ ~~~~~~~~~

View File

@ -274,6 +274,9 @@ Models
* The new :attr:`.Aggregate.empty_aggregate_value` attribute allows specifying * The new :attr:`.Aggregate.empty_aggregate_value` attribute allows specifying
a value to return when the aggregation is used over an empty result set. a value to return when the aggregation is used over an empty result set.
* The ``skip_locked`` argument of :meth:`.QuerySet.select_for_update()` is now
allowed on MariaDB 10.6+.
Requests and Responses Requests and Responses
~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~