diff --git a/lerna.json b/lerna.json
index 6270454faa..f42284a20d 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,5 +1,5 @@
{
- "version": "2.11.12",
+ "version": "2.11.13",
"npmClient": "yarn",
"packages": [
"packages/*"
diff --git a/packages/server/src/db/linkedRows/LinkController.ts b/packages/server/src/db/linkedRows/LinkController.ts
index 5bfae49e8b..457819251a 100644
--- a/packages/server/src/db/linkedRows/LinkController.ts
+++ b/packages/server/src/db/linkedRows/LinkController.ts
@@ -308,12 +308,19 @@ class LinkController {
}
})
)
- // remove schema from other table
- let linkedTable = await this._db.get
(field.tableId)
- if (field.fieldName) {
- delete linkedTable.schema[field.fieldName]
+ try {
+ // remove schema from other table, if it exists
+ let linkedTable = await this._db.get(field.tableId)
+ if (field.fieldName) {
+ delete linkedTable.schema[field.fieldName]
+ }
+ await this._db.put(linkedTable)
+ } catch (error: any) {
+ // ignore missing to ensure broken relationship columns can be deleted
+ if (error.statusCode !== 404) {
+ throw error
+ }
}
- await this._db.put(linkedTable)
}
/**
diff --git a/packages/server/src/db/tests/linkController.spec.js b/packages/server/src/db/tests/linkController.spec.js
index 59d0f3f983..5caf35f61a 100644
--- a/packages/server/src/db/tests/linkController.spec.js
+++ b/packages/server/src/db/tests/linkController.spec.js
@@ -233,4 +233,19 @@ describe("test the link controller", () => {
}
await config.updateTable(table)
})
+
+ it("should be able to remove a linked field from a table, even if the linked table does not exist", async () => {
+ await createLinkedRow()
+ await createLinkedRow("link2")
+ table1.schema["link"].tableId = "not_found"
+ const controller = await createLinkController(table1, null, table1)
+ await context.doInAppContext(appId, async () => {
+ let before = await controller.getTableLinkDocs()
+ await controller.removeFieldFromTable("link")
+ let after = await controller.getTableLinkDocs()
+ expect(before.length).toEqual(2)
+ // shouldn't delete the other field
+ expect(after.length).toEqual(1)
+ })
+ })
})