浏览代码

Refs #30581 -- Fixed DatabaseFeatures.bare_select_suffix on MySQL < 8 and MariaDB < 10.4.

Gagaro 3 年之前
父节点
当前提交
7325d29152
共有 2 个文件被更改,包括 17 次插入0 次删除
  1. 11 0
      django/db/backends/mysql/features.py
  2. 6 0
      tests/backends/tests.py

+ 11 - 0
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"

+ 6 - 0
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):