Consider PK when checking for indexes, fixes #382.

This commit is contained in:
Friedrich Lindenberg 2021-12-16 11:06:31 +01:00
parent 602d52f416
commit 6121e517a8

View File

@ -529,7 +529,7 @@ class Table(object):
"""Check if an index exists to cover the given ``columns``."""
if not self.exists:
return False
columns = set([self._get_column_name(c) for c in columns])
columns = set([self._get_column_name(c) for c in ensure_list(columns)])
if columns in self._indexes:
return True
for column in columns:
@ -537,7 +537,13 @@ class Table(object):
return False
indexes = self.db.inspect.get_indexes(self.name, schema=self.db.schema)
for index in indexes:
if columns == set(index.get("column_names", [])):
idx_columns = index.get("column_names", [])
if len(columns.intersection(idx_columns)) == len(columns):
self._indexes.append(columns)
return True
if self.table.primary_key is not None:
pk_columns = [c.name for c in self.table.primary_key.columns]
if len(columns.intersection(pk_columns)) == len(columns):
self._indexes.append(columns)
return True
return False