mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #31351 -- Added system checks for partial indexes and unique constraints support.
This commit is contained in:
committed by
Mariusz Felisiak
parent
e8d3088925
commit
53d229ff63
@@ -234,7 +234,7 @@ class UniqueTogetherTests(SimpleTestCase):
|
||||
|
||||
|
||||
@isolate_apps('invalid_models_tests')
|
||||
class IndexesTests(SimpleTestCase):
|
||||
class IndexesTests(TestCase):
|
||||
|
||||
def test_pointing_to_missing_field(self):
|
||||
class Model(models.Model):
|
||||
@@ -331,6 +331,50 @@ class IndexesTests(SimpleTestCase):
|
||||
),
|
||||
])
|
||||
|
||||
def test_index_with_condition(self):
|
||||
class Model(models.Model):
|
||||
age = models.IntegerField()
|
||||
|
||||
class Meta:
|
||||
indexes = [
|
||||
models.Index(
|
||||
fields=['age'],
|
||||
name='index_age_gte_10',
|
||||
condition=models.Q(age__gte=10),
|
||||
),
|
||||
]
|
||||
|
||||
errors = Model.check(databases=self.databases)
|
||||
expected = [] if connection.features.supports_partial_indexes else [
|
||||
Warning(
|
||||
'%s does not support indexes with conditions.'
|
||||
% connection.display_name,
|
||||
hint=(
|
||||
"Conditions will be ignored. Silence this warning if you "
|
||||
"don't care about it."
|
||||
),
|
||||
obj=Model,
|
||||
id='models.W037',
|
||||
)
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
|
||||
def test_index_with_condition_required_db_features(self):
|
||||
class Model(models.Model):
|
||||
age = models.IntegerField()
|
||||
|
||||
class Meta:
|
||||
required_db_features = {'supports_partial_indexes'}
|
||||
indexes = [
|
||||
models.Index(
|
||||
fields=['age'],
|
||||
name='index_age_gte_10',
|
||||
condition=models.Q(age__gte=10),
|
||||
),
|
||||
]
|
||||
|
||||
self.assertEqual(Model.check(databases=self.databases), [])
|
||||
|
||||
|
||||
@isolate_apps('invalid_models_tests')
|
||||
class FieldNamesTests(TestCase):
|
||||
@@ -1325,5 +1369,48 @@ class ConstraintsTests(TestCase):
|
||||
class Meta:
|
||||
required_db_features = {'supports_table_check_constraints'}
|
||||
constraints = [models.CheckConstraint(check=models.Q(age__gte=18), name='is_adult')]
|
||||
self.assertEqual(Model.check(databases=self.databases), [])
|
||||
|
||||
def test_unique_constraint_with_condition(self):
|
||||
class Model(models.Model):
|
||||
age = models.IntegerField()
|
||||
|
||||
class Meta:
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=['age'],
|
||||
name='unique_age_gte_100',
|
||||
condition=models.Q(age__gte=100),
|
||||
),
|
||||
]
|
||||
|
||||
errors = Model.check(databases=self.databases)
|
||||
expected = [] if connection.features.supports_partial_indexes else [
|
||||
Warning(
|
||||
'%s does not support unique constraints with conditions.'
|
||||
% connection.display_name,
|
||||
hint=(
|
||||
"A constraint won't be created. Silence this warning if "
|
||||
"you don't care about it."
|
||||
),
|
||||
obj=Model,
|
||||
id='models.W036',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
|
||||
def test_unique_constraint_with_condition_required_db_features(self):
|
||||
class Model(models.Model):
|
||||
age = models.IntegerField()
|
||||
|
||||
class Meta:
|
||||
required_db_features = {'supports_partial_indexes'}
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=['age'],
|
||||
name='unique_age_gte_100',
|
||||
condition=models.Q(age__gte=100),
|
||||
),
|
||||
]
|
||||
|
||||
self.assertEqual(Model.check(databases=self.databases), [])
|
||||
|
||||
Reference in New Issue
Block a user