From 6e4eb7c46b1a274410b3fcd10a47063e68e5a062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A1=BE=E9=A2=A2?= <112171315+guaoo@users.noreply.github.com> Date: Thu, 28 Aug 2025 05:49:14 +0800 Subject: [PATCH] fix: error on first custom provider deletion (#1110) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes #1109 https://github.com/WiseLibs/better-sqlite3/blob/master/docs/api.md#transactionfunction---function > Transaction functions do not work with async functions. Technically speaking, async functions always return after the first await, which means the transaction will already be committed before any async code executes. --- ## Summary by cubic Fixes a runtime error when deleting the first custom provider by using a synchronous DB transaction. Ensures associated models and the provider are removed atomically without failing. - **Bug Fixes** - Replace async transaction callback with a synchronous one and remove awaits on tx operations to match the DB API and prevent the first-delete error. Co-authored-by: 顾颢 --- src/ipc/handlers/language_model_handlers.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ipc/handlers/language_model_handlers.ts b/src/ipc/handlers/language_model_handlers.ts index 381faa1..745e290 100644 --- a/src/ipc/handlers/language_model_handlers.ts +++ b/src/ipc/handlers/language_model_handlers.ts @@ -250,9 +250,9 @@ export function registerLanguageModelHandlers() { } // Use a transaction to ensure atomicity - await db.transaction(async (tx) => { + db.transaction((tx) => { // 1. Delete associated models - const deleteModelsResult = await tx + const deleteModelsResult = tx .delete(languageModelsSchema) .where(eq(languageModelsSchema.customProviderId, providerId)) .run(); @@ -261,7 +261,7 @@ export function registerLanguageModelHandlers() { ); // 2. Delete the provider - const deleteProviderResult = await tx + const deleteProviderResult = tx .delete(languageModelProvidersSchema) .where(eq(languageModelProvidersSchema.id, providerId)) .run();