#31351 closed Cleanup/optimization (fixed)
Need warning when UniqueConstraint with condition is used but supports_partial_indexes is False
| Reported by: | Matthijs Kooijman | Owned by: | Ichlasul Affan |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | Ichlasul Affan, Ian Foote | Triage Stage: | Ready for checkin |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | yes | UI/UX: | no |
Description
Databases that support supports_partial_indexes allow using a UniqueConstraint with a condition specified (implemented in #29547 and #30062). However, when such constraints are specified, but the database (e.g. Mysql/Mariadb or older versions of sqlite) does not support partial indexes, these constraints are silently ignored.
It would be better if this would give a warning, similar to the warning for CheckConstraints at https://github.com/django/django/blob/9358da704ea9ba55f22df912e47b54eb85d5c97e/django/db/models/base.py#L1838-L1862
I have observed this with 2.2.10, but looking at the code, this has not changed since then, so I'm setting version to master.
This is probably a fairly trivial change, but I'm not in the opportunity to provide a PR in the near future.
Change History (12)
comment:1 by , 6 years ago
| Cc: | added |
|---|---|
| Needs tests: | set |
| Owner: | changed from to |
| Status: | new → assigned |
| Triage Stage: | Unreviewed → Accepted |
| Type: | Uncategorized → Cleanup/optimization |
comment:2 by , 6 years ago
Replying to Matthijs Kooijman:
Databases that support supports_partial_indexes allow using a
UniqueConstraintwith aconditionspecified (implemented in #29547 and #30062). However, when such constraints are specified, but the database (e.g. Mysql/Mariadb or older versions of sqlite) does not support partial indexes, these constraints are silently ignored.
It would be better if this would give a warning, similar to the warning for
CheckConstraintsat https://github.com/django/django/blob/9358da704ea9ba55f22df912e47b54eb85d5c97e/django/db/models/base.py#L1838-L1862
I have observed this with 2.2.10, but looking at the code, this has not changed since then, so I'm setting version to master.
This is probably a fairly trivial change, but I'm not in the opportunity to provide a PR in the near future.
Firstly, I'm sorry I am new contributor to Django. When I explored further on the code, the warning checks for specific DBMS' ability to check constraints using connection.features.support_table_check_constraints. Unfortunately, I think that similiar type of variable would be available on some database connectors for this case (unique constraint with conditions). Would you mind if I just add the warning regardless of what kind of database users will use?
UPDATE: Oh nevermind, I can just use support_partial_indexes. The default definitions is actually available via django.db.backends.base.features.
comment:3 by , 6 years ago
Yeah, I think the check can just look at supports_partial_indexes, since that is also what [the code that decides (not) to add the constraint](https://github.com/django/django/blob/57a3d96ff57abffa8e7fbe3fd972a5ee39bd0fec/django/db/backends/base/schema.py#L1097) looks at.
comment:4 by , 6 years ago
comment:5 by , 6 years ago
| Has patch: | set |
|---|---|
| Needs tests: | unset |
| Patch needs improvement: | set |
comment:6 by , 6 years ago
| Patch needs improvement: | unset |
|---|
comment:7 by , 6 years ago
| Patch needs improvement: | set |
|---|
comment:8 by , 6 years ago
| Cc: | added |
|---|
comment:9 by , 6 years ago
| Patch needs improvement: | unset |
|---|
I just had a look over the PR and it looks like the outstanding issues have been resolved.
comment:10 by , 6 years ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
As mentioned by #30062, the warning should be given when using MySQL/MariaDB or SQLite version <= 3.8.