mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-09-24 19:04:12 +02:00
Added db.index_foreign_keys() method plus test
This commit is contained in:
parent
093c3e66db
commit
61164d98cf
3 changed files with 21 additions and 7 deletions
|
|
@ -228,13 +228,7 @@ def index_foreign_keys(path):
|
||||||
Ensure every foreign key column has an index on it.
|
Ensure every foreign key column has an index on it.
|
||||||
"""
|
"""
|
||||||
db = sqlite_utils.Database(path)
|
db = sqlite_utils.Database(path)
|
||||||
for table_name in db.table_names():
|
db.index_foreign_keys()
|
||||||
table = db[table_name]
|
|
||||||
existing_indexes = {i.columns[0] for i in table.indexes if len(i.columns) == 1}
|
|
||||||
for fk in table.foreign_keys:
|
|
||||||
if fk.column not in existing_indexes:
|
|
||||||
print("Creating index on {}.{}".format(table_name, fk.column))
|
|
||||||
table.create_index([fk.column])
|
|
||||||
|
|
||||||
|
|
||||||
@cli.command(name="create-index")
|
@cli.command(name="create-index")
|
||||||
|
|
|
||||||
|
|
@ -315,6 +315,16 @@ class Database:
|
||||||
# can see the newly created foreign key.
|
# can see the newly created foreign key.
|
||||||
self.vacuum()
|
self.vacuum()
|
||||||
|
|
||||||
|
def index_foreign_keys(self):
|
||||||
|
for table_name in self.table_names():
|
||||||
|
table = self[table_name]
|
||||||
|
existing_indexes = {
|
||||||
|
i.columns[0] for i in table.indexes if len(i.columns) == 1
|
||||||
|
}
|
||||||
|
for fk in table.foreign_keys:
|
||||||
|
if fk.column not in existing_indexes:
|
||||||
|
table.create_index([fk.column])
|
||||||
|
|
||||||
def vacuum(self):
|
def vacuum(self):
|
||||||
self.conn.execute("VACUUM;")
|
self.conn.execute("VACUUM;")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -361,6 +361,16 @@ def test_add_foreign_key_guess_table(fresh_db):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_index_foreign_keys(fresh_db):
|
||||||
|
test_add_foreign_key_guess_table(fresh_db)
|
||||||
|
assert [] == fresh_db["dogs"].indexes
|
||||||
|
fresh_db.index_foreign_keys()
|
||||||
|
assert [["breed_id"]] == [i.columns for i in fresh_db["dogs"].indexes]
|
||||||
|
# Calling it a second time should do nothing
|
||||||
|
fresh_db.index_foreign_keys()
|
||||||
|
assert [["breed_id"]] == [i.columns for i in fresh_db["dogs"].indexes]
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"extra_data,expected_new_columns",
|
"extra_data,expected_new_columns",
|
||||||
[
|
[
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue