Fixed DatabaseFeatures.has_case_insensitive_like on MySQL and Oracle.

Incorrect since its introduction in 20bab2cf9d.
This commit is contained in:
Mariusz Felisiak 2017-07-24 21:51:29 +02:00 committed by GitHub
parent fe9f383357
commit 28a02259cb
3 changed files with 7 additions and 5 deletions

View File

@ -32,6 +32,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
supports_select_difference = False supports_select_difference = False
supports_slicing_ordering_in_compound = True supports_slicing_ordering_in_compound = True
supports_index_on_text_field = False supports_index_on_text_field = False
has_case_insensitive_like = False
@cached_property @cached_property
def _mysql_storage_engine(self): def _mysql_storage_engine(self):

View File

@ -39,3 +39,4 @@ class DatabaseFeatures(BaseDatabaseFeatures):
# does by uppercasing all identifiers. # does by uppercasing all identifiers.
ignores_table_name_case = True ignores_table_name_case = True
supports_index_on_text_field = False supports_index_on_text_field = False
has_case_insensitive_like = False

View File

@ -18,9 +18,7 @@ from django.db.models.functions import (
) )
from django.db.models.sql import constants from django.db.models.sql import constants
from django.db.models.sql.datastructures import Join from django.db.models.sql.datastructures import Join
from django.test import ( from django.test import SimpleTestCase, TestCase, skipUnlessDBFeature
SimpleTestCase, TestCase, skipIfDBFeature, skipUnlessDBFeature,
)
from django.test.utils import Approximate from django.test.utils import Approximate
from .models import ( from .models import (
@ -339,12 +337,14 @@ class BasicExpressionsTests(TestCase):
queryset = Employee.objects.filter(firstname__iexact=F('lastname')) queryset = Employee.objects.filter(firstname__iexact=F('lastname'))
self.assertQuerysetEqual(queryset, ["<Employee: Test test>"]) self.assertQuerysetEqual(queryset, ["<Employee: Test test>"])
@skipIfDBFeature('has_case_insensitive_like')
def test_ticket_16731_startswith_lookup(self): def test_ticket_16731_startswith_lookup(self):
Employee.objects.create(firstname="John", lastname="Doe") Employee.objects.create(firstname="John", lastname="Doe")
e2 = Employee.objects.create(firstname="Jack", lastname="Jackson") e2 = Employee.objects.create(firstname="Jack", lastname="Jackson")
e3 = Employee.objects.create(firstname="Jack", lastname="jackson") e3 = Employee.objects.create(firstname="Jack", lastname="jackson")
self.assertSequenceEqual(Employee.objects.filter(lastname__startswith=F('firstname')), [e2]) self.assertSequenceEqual(
Employee.objects.filter(lastname__startswith=F('firstname')),
[e2, e3] if connection.features.has_case_insensitive_like else [e2]
)
qs = Employee.objects.filter(lastname__istartswith=F('firstname')).order_by('pk') qs = Employee.objects.filter(lastname__istartswith=F('firstname')).order_by('pk')
self.assertSequenceEqual(qs, [e2, e3]) self.assertSequenceEqual(qs, [e2, e3])