diff options
author | Hasan Ramezani <hasan.r67@gmail.com> | 2019-07-30 16:21:05 +0200 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-07-30 16:32:13 +0200 |
commit | e3fc9af4abd65262f2d3bdced96b687b65be618a (patch) | |
tree | a136c11065b41a32796443a1954c5775accc2fc3 /django/db/backends/mysql/introspection.py | |
parent | b2aad9ad4d35ee3bb448ba698b8c56bb972bdd8a (diff) | |
download | django-e3fc9af4abd65262f2d3bdced96b687b65be618a.tar.gz |
Refs #30593 -- Fixed introspection of check constraints columns on MariaDB.
Diffstat (limited to 'django/db/backends/mysql/introspection.py')
-rw-r--r-- | django/db/backends/mysql/introspection.py | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/django/db/backends/mysql/introspection.py b/django/db/backends/mysql/introspection.py index 86133a254e..db1a387679 100644 --- a/django/db/backends/mysql/introspection.py +++ b/django/db/backends/mysql/introspection.py @@ -147,12 +147,16 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): return self.connection.features._mysql_storage_engine return result[0] - def _parse_constraint_columns(self, check_clause): + def _parse_constraint_columns(self, check_clause, columns): check_columns = OrderedSet() statement = sqlparse.parse(check_clause)[0] tokens = (token for token in statement.flatten() if not token.is_whitespace) for token in tokens: - if token.ttype in [sqlparse.tokens.Name, sqlparse.tokens.Literal.String.Single]: + if ( + token.ttype == sqlparse.tokens.Name and + self.connection.ops.quote_name(token.value) == token.value and + token.value[1:-1] in columns + ): check_columns.add(token.value[1:-1]) return check_columns @@ -201,6 +205,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): constraints[constraint]['unique'] = True # Add check constraints. if self.connection.features.can_introspect_check_constraints: + columns = {info.name for info in self.get_table_description(cursor, table_name)} type_query = """ SELECT c.constraint_name, c.check_clause FROM information_schema.check_constraints AS c @@ -211,7 +216,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): cursor.execute(type_query, [table_name]) for constraint, check_clause in cursor.fetchall(): constraints[constraint] = { - 'columns': self._parse_constraint_columns(check_clause), + 'columns': self._parse_constraint_columns(check_clause, columns), 'primary_key': False, 'unique': False, 'index': False, |