From 7325d291524827806feed271a077ea23e2b1b21f Mon Sep 17 00:00:00 2001 From: Gagaro Date: Tue, 22 Mar 2022 09:11:46 +0100 Subject: [PATCH] Refs #30581 -- Fixed DatabaseFeatures.bare_select_suffix on MySQL < 8 and MariaDB < 10.4. --- django/db/backends/mysql/features.py | 11 +++++++++++ tests/backends/tests.py | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/django/db/backends/mysql/features.py b/django/db/backends/mysql/features.py index 357e431524e..834ea4f88f2 100644 --- a/django/db/backends/mysql/features.py +++ b/django/db/backends/mysql/features.py @@ -56,6 +56,17 @@ class DatabaseFeatures(BaseDatabaseFeatures): else: return (5, 7) + @cached_property + def bare_select_suffix(self): + if ( + self.connection.mysql_is_mariadb and self.connection.mysql_version < (10, 4) + ) or ( + not self.connection.mysql_is_mariadb + and self.connection.mysql_version < (8,) + ): + return " FROM DUAL" + return "" + @cached_property def test_collations(self): charset = "utf8" diff --git a/tests/backends/tests.py b/tests/backends/tests.py index 28e00a04ca4..85b0e55cb01 100644 --- a/tests/backends/tests.py +++ b/tests/backends/tests.py @@ -548,6 +548,12 @@ class BackendTestCase(TransactionTestCase): ) self.assertEqual(tuple(kwargs["extra"].values()), params[1:]) + def test_queries_bare_where(self): + sql = f"SELECT 1{connection.features.bare_select_suffix} WHERE 1=1" + with connection.cursor() as cursor: + cursor.execute(sql) + self.assertEqual(cursor.fetchone(), (1,)) + def test_timezone_none_use_tz_false(self): connection.ensure_connection() with self.settings(TIME_ZONE=None, USE_TZ=False):