diff options
author | Hannes Ljungberg <hannes.ljungberg@gmail.com> | 2021-02-06 20:45:54 +0100 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-02-12 21:11:04 +0100 |
commit | c60b9e6640c44597319069bcb10f8d604cb5fe47 (patch) | |
tree | eae00c637292cba6a17419683dde98af23de64ed /django/db/backends/mysql/introspection.py | |
parent | 694deff82f86e025561dfa724425f67e2ff7cbb7 (diff) | |
download | django-c60b9e6640c44597319069bcb10f8d604cb5fe47.tar.gz |
Simplified introspection of constraints on MySQL.
Co-authored-by: Mariusz Felisiak <felisiak.mariusz@gmail.com>
Diffstat (limited to 'django/db/backends/mysql/introspection.py')
-rw-r--r-- | django/db/backends/mysql/introspection.py | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/django/db/backends/mysql/introspection.py b/django/db/backends/mysql/introspection.py index 649df5c6d9..346765e30a 100644 --- a/django/db/backends/mysql/introspection.py +++ b/django/db/backends/mysql/introspection.py @@ -211,20 +211,26 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): # Get the actual constraint names and columns name_query = """ SELECT kc.`constraint_name`, kc.`column_name`, - kc.`referenced_table_name`, kc.`referenced_column_name` - FROM information_schema.key_column_usage AS kc + kc.`referenced_table_name`, kc.`referenced_column_name`, + c.`constraint_type` + FROM + information_schema.key_column_usage AS kc, + information_schema.table_constraints AS c WHERE kc.table_schema = DATABASE() AND + c.table_schema = kc.table_schema AND + c.constraint_name = kc.constraint_name AND + c.constraint_type != 'CHECK' AND kc.table_name = %s ORDER BY kc.`ordinal_position` """ cursor.execute(name_query, [table_name]) - for constraint, column, ref_table, ref_column in cursor.fetchall(): + for constraint, column, ref_table, ref_column, kind in cursor.fetchall(): if constraint not in constraints: constraints[constraint] = { 'columns': OrderedSet(), - 'primary_key': False, - 'unique': False, + 'primary_key': kind == 'PRIMARY KEY', + 'unique': kind in {'PRIMARY KEY', 'UNIQUE'}, 'index': False, 'check': False, 'foreign_key': (ref_table, ref_column) if ref_column else None, @@ -232,21 +238,6 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): if self.connection.features.supports_index_column_ordering: constraints[constraint]['orders'] = [] constraints[constraint]['columns'].add(column) - # Now get the constraint types - type_query = """ - SELECT c.constraint_name, c.constraint_type - FROM information_schema.table_constraints AS c - WHERE - c.table_schema = DATABASE() AND - c.table_name = %s - """ - cursor.execute(type_query, [table_name]) - for constraint, kind in cursor.fetchall(): - if kind.lower() == "primary key": - constraints[constraint]['primary_key'] = True - constraints[constraint]['unique'] = True - elif kind.lower() == "unique": - constraints[constraint]['unique'] = True # Add check constraints. if self.connection.features.can_introspect_check_constraints: unnamed_constraints_index = 0 |