Refs #33288 -- Removed SQLite's DatabaseIntrospection._get_foreign_key_constraints().

The get_relations() method returns the exact same data in a more generic
format.
This commit is contained in:
Simon Charette 2021-11-13 19:27:15 -05:00 committed by Mariusz Felisiak
parent 483e30c3d5
commit 560ff988dd
2 changed files with 14 additions and 20 deletions

View File

@ -137,22 +137,6 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
return name
return None
def _get_foreign_key_constraints(self, cursor, table_name):
constraints = {}
cursor.execute('PRAGMA foreign_key_list(%s)' % self.connection.ops.quote_name(table_name))
for row in cursor.fetchall():
# Remaining on_update/on_delete/match values are of no interest.
id_, _, table, from_, to = row[:5]
constraints['fk_%d' % id_] = {
'columns': [from_],
'primary_key': False,
'unique': False,
'foreign_key': (table, to),
'check': False,
'index': False,
}
return constraints
def _parse_column_or_constraint_definition(self, tokens, columns):
token = None
is_constraint_definition = None
@ -349,7 +333,18 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
"check": False,
"index": False,
}
constraints.update(self._get_foreign_key_constraints(cursor, table_name))
relations = enumerate(self.get_relations(cursor, table_name).items())
constraints.update({
f'fk_{index}': {
'columns': [column_name],
'primary_key': False,
'unique': False,
'foreign_key': (ref_table_name, ref_column_name),
'check': False,
'index': False,
}
for index, (column_name, (ref_column_name, ref_table_name)) in relations
})
return constraints
def _get_index_columns_orders(self, sql):

View File

@ -75,9 +75,8 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
for other_table in self.connection.introspection.get_table_list(cursor):
if ignore_self and other_table.name == table_name:
continue
constraints = self.connection.introspection._get_foreign_key_constraints(cursor, other_table.name)
for constraint in constraints.values():
constraint_table, constraint_column = constraint['foreign_key']
relations = self.connection.introspection.get_relations(cursor, other_table.name)
for constraint_column, constraint_table in relations.values():
if (constraint_table == table_name and
(column_name is None or constraint_column == column_name)):
return True