summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2021-11-13 19:27:15 -0500
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-11-15 08:20:30 +0100
commit560ff988dd6cff40381408c62494ca3eb9804f32 (patch)
tree25a6bedf9fd8385dbd0656dc5a59d8096f04c418
parent483e30c3d5c82c562a17e016ae2098666bf3a728 (diff)
Refs #33288 -- Removed SQLite's DatabaseIntrospection._get_foreign_key_constraints().
The get_relations() method returns the exact same data in a more generic format.
-rw-r--r--django/db/backends/sqlite3/introspection.py29
-rw-r--r--django/db/backends/sqlite3/schema.py5
2 files changed, 14 insertions, 20 deletions
diff --git a/django/db/backends/sqlite3/introspection.py b/django/db/backends/sqlite3/introspection.py
index 7c5c159b64..81884a7951 100644
--- a/django/db/backends/sqlite3/introspection.py
+++ b/django/db/backends/sqlite3/introspection.py
@@ -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):
diff --git a/django/db/backends/sqlite3/schema.py b/django/db/backends/sqlite3/schema.py
index f0c81c123b..db60fd4615 100644
--- a/django/db/backends/sqlite3/schema.py
+++ b/django/db/backends/sqlite3/schema.py
@@ -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