Fix for last issue relating to #577

This commit is contained in:
Simon Willison 2023-08-17 16:43:40 -07:00
commit 374506a7ed
2 changed files with 12 additions and 9 deletions

View file

@ -876,7 +876,7 @@ class Database:
for fk in foreign_keys: for fk in foreign_keys:
if fk.other_table == name and columns.get(fk.other_column): if fk.other_table == name and columns.get(fk.other_column):
continue continue
if not any( if fk.other_column != "rowid" and not any(
c for c in self[fk.other_table].columns if c.name == fk.other_column c for c in self[fk.other_table].columns if c.name == fk.other_column
): ):
raise AlterError( raise AlterError(

View file

@ -469,18 +469,21 @@ def test_add_column_foreign_key(fresh_db):
fresh_db.create_table("dogs", {"name": str}) fresh_db.create_table("dogs", {"name": str})
fresh_db.create_table("breeds", {"name": str}) fresh_db.create_table("breeds", {"name": str})
fresh_db["dogs"].add_column("breed_id", fk="breeds") fresh_db["dogs"].add_column("breed_id", fk="breeds")
assert ( assert fresh_db["dogs"].schema == (
"CREATE TABLE [dogs] ( [name] TEXT , [breed_id] INTEGER, FOREIGN KEY([breed_id]) REFERENCES [breeds]([rowid]) )" 'CREATE TABLE "dogs" (\n'
== collapse_whitespace(fresh_db["dogs"].schema) " [name] TEXT,\n"
" [breed_id] INTEGER REFERENCES [breeds]([rowid])\n"
")"
) )
# And again with an explicit primary key column # And again with an explicit primary key column
fresh_db.create_table("subbreeds", {"name": str, "primkey": str}, pk="primkey") fresh_db.create_table("subbreeds", {"name": str, "primkey": str}, pk="primkey")
fresh_db["dogs"].add_column("subbreed_id", fk="subbreeds") fresh_db["dogs"].add_column("subbreed_id", fk="subbreeds")
assert ( assert fresh_db["dogs"].schema == (
"CREATE TABLE [dogs] ( [name] TEXT , [breed_id] INTEGER, [subbreed_id] TEXT, " 'CREATE TABLE "dogs" (\n'
"FOREIGN KEY([breed_id]) REFERENCES [breeds]([rowid]), " " [name] TEXT,\n"
"FOREIGN KEY([subbreed_id]) REFERENCES [subbreeds]([primkey]) )" " [breed_id] INTEGER REFERENCES [breeds]([rowid]),\n"
== collapse_whitespace(fresh_db["dogs"].schema) " [subbreed_id] TEXT REFERENCES [subbreeds]([primkey])\n"
")"
) )