From 374506a7ed0ae635dfb51da0cd565746459325b9 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Thu, 17 Aug 2023 16:43:40 -0700 Subject: [PATCH] Fix for last issue relating to #577 --- sqlite_utils/db.py | 2 +- tests/test_create.py | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index 44880f6..534d2ee 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -876,7 +876,7 @@ class Database: for fk in foreign_keys: if fk.other_table == name and columns.get(fk.other_column): 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 ): raise AlterError( diff --git a/tests/test_create.py b/tests/test_create.py index f418805..9deb2a5 100644 --- a/tests/test_create.py +++ b/tests/test_create.py @@ -469,18 +469,21 @@ def test_add_column_foreign_key(fresh_db): fresh_db.create_table("dogs", {"name": str}) fresh_db.create_table("breeds", {"name": str}) fresh_db["dogs"].add_column("breed_id", fk="breeds") - assert ( - "CREATE TABLE [dogs] ( [name] TEXT , [breed_id] INTEGER, FOREIGN KEY([breed_id]) REFERENCES [breeds]([rowid]) )" - == collapse_whitespace(fresh_db["dogs"].schema) + assert fresh_db["dogs"].schema == ( + 'CREATE TABLE "dogs" (\n' + " [name] TEXT,\n" + " [breed_id] INTEGER REFERENCES [breeds]([rowid])\n" + ")" ) # And again with an explicit primary key column fresh_db.create_table("subbreeds", {"name": str, "primkey": str}, pk="primkey") fresh_db["dogs"].add_column("subbreed_id", fk="subbreeds") - assert ( - "CREATE TABLE [dogs] ( [name] TEXT , [breed_id] INTEGER, [subbreed_id] TEXT, " - "FOREIGN KEY([breed_id]) REFERENCES [breeds]([rowid]), " - "FOREIGN KEY([subbreed_id]) REFERENCES [subbreeds]([primkey]) )" - == collapse_whitespace(fresh_db["dogs"].schema) + assert fresh_db["dogs"].schema == ( + 'CREATE TABLE "dogs" (\n' + " [name] TEXT,\n" + " [breed_id] INTEGER REFERENCES [breeds]([rowid]),\n" + " [subbreed_id] TEXT REFERENCES [subbreeds]([primkey])\n" + ")" )