Opened 5 years ago

Closed 5 years ago

Last modified 18 months ago

#30593 closed New feature (fixed)

Add support for check constraints on MariaDB 10.2+.

Reported by: Mariusz Felisiak Owned by: nobody
Component: Database layer (models, ORM) Version: dev
Severity: Normal Keywords: MariaDB, constraint, check
Cc: Tom Forbes, Ian Foote, Adam Johnson Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description

MariaDB 10.2+ support check constraints (see check-constraints), we should support them because we officially support this database. I created PR to fix feature flags but it requires more work e.g. with introspection.

10 tests fail at 698df6a009cb1c4dbd55905264f24f6edf41066e:

  • constraints.tests.CheckConstraintTests.test_name
  • constraints.tests.CheckConstraintTests.test_database_constraint
  • introspection.tests.IntrospectionTests.test_get_constraints
  • migrations.test_operations.OperationTests.test_add_constraint
  • migrations.test_operations.OperationTests.test_add_constraint_percent_escaping
  • migrations.test_operations.OperationTests.test_add_or_constraint
  • migrations.test_operations.OperationTests.test_create_model_with_constraint
  • migrations.test_operations.OperationTests.test_remove_constraint
  • schema.tests.SchemaTests.test_check_constraints
  • schema.tests.SchemaTests.test_remove_field_check_does_not_remove_meta_constraints

[1] https://mariadb.com/kb/en/library/information-schema-check_constraints-table/

Change History (5)

comment:1 by Hasan Ramezani, 5 years ago

Has patch: set
Patch needs improvement: set

3 tests fail:

  • introspection.tests.IntrospectionTests.test_get_constraints
  • schema.tests.SchemaTests.test_check_constraints
  • schema.tests.SchemaTests.test_remove_field_check_does_not_remove_meta_constraints

The information_schema.key_column_usage table, does not contain CHECK constraints records. we can find them in information_schema.table_constraints table.
The problem is that records in information_schema.table_constraints do not have column_name and we have to add them to constraints with an empty list of columns https://github.com/django/django/pull/11566/files#diff-ed5c74bb534df74e38bc62e79c84fa12R194.

Those 3 tests fail because of the above-mentioned problem.
Any idea?

comment:2 by Mariusz Felisiak <felisiak.mariusz@…>, 5 years ago

Resolution: fixed
Status: newclosed

In 1fc2c70f:

Fixed #30593 -- Added support for check constraints on MariaDB 10.2+.

comment:3 by Mariusz Felisiak <felisiak.mariusz@…>, 5 years ago

In b2aad9ad:

Refs #30593 -- Added _parse_constraint_columns() hook to introspection on MariaDB.

comment:4 by Mariusz Felisiak <felisiak.mariusz@…>, 5 years ago

In e3fc9af:

Refs #30593 -- Fixed introspection of check constraints columns on MariaDB.

comment:5 by Mariusz Felisiak <felisiak.mariusz@…>, 18 months ago

In ffff17d4:

Fixed #34553 -- Fixed improper % escaping of literal in constraints.

Proper escaping of % in string literals used when defining constaints
was attempted (a8b3f96f6) by overriding quote_value of Postgres and
Oracle schema editor. The same approach was used when adding support for
constraints to the MySQL/MariaDB backend (1fc2c70).

Later on it was discovered that this approach was not appropriate and
that a preferable one was to pass params=None when executing the
constraint creation DDL to avoid any form of interpolation in the first
place (42e8cf47).

When the second patch was applied the corrective of the first were not
removed which caused % literals to be unnecessary doubled. This flew
under the radar because the existings test were crafted in a way that
consecutive %% didn't catch regressions.

This commit introduces an extra test for exact lookups which
highlights more adequately % doubling problems but also adjust a
previous
endswith test to cover % doubling problems (%\% -> %%\%%).

Thanks Thomas Kolar for the report.

Refs #32369, #30408, #30593.

Note: See TracTickets for help on using tickets.
Back to Top