From babd7b08ed1034f096eab71aae9456419d09ebc5 Mon Sep 17 00:00:00 2001 From: Sonarly Claude Code Date: Tue, 24 Mar 2026 16:31:01 +0000 Subject: [PATCH] fix: check table existence before dropping columns in field delete action https://sonarly.com/issue/18011?type=bug Deleting a custom object fails with "Migration action 'delete' for 'fieldMetadata' failed" when the workspace schema table doesn't exist but metadata records for the object and its fields still do. --- .../workspace-schema-table-manager.service.ts | 15 +++++++++++++++ .../delete-field-action-handler.service.ts | 11 +++++++++++ 2 files changed, 26 insertions(+) diff --git a/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/services/workspace-schema-table-manager.service.ts b/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/services/workspace-schema-table-manager.service.ts index 690a35859a2..57bc0570dfa 100644 --- a/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/services/workspace-schema-table-manager.service.ts +++ b/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/services/workspace-schema-table-manager.service.ts @@ -49,6 +49,21 @@ export class WorkspaceSchemaTableManagerService { await queryRunner.query(sql); } + async tableExists({ + queryRunner, + schemaName, + tableName, + }: { + queryRunner: QueryRunner; + schemaName: string; + tableName: string; + }): Promise { + const sql = `SELECT to_regclass('${escapeIdentifier(schemaName)}.${escapeIdentifier(tableName)}') IS NOT NULL AS "exists"`; + const result = await queryRunner.query(sql); + + return result?.[0]?.exists === true; + } + async renameTable({ queryRunner, schemaName, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/field/services/delete-field-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/field/services/delete-field-action-handler.service.ts index cf63b42c4c9..1d0d76a25b8 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/field/services/delete-field-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/field/services/delete-field-action-handler.service.ts @@ -79,6 +79,17 @@ export class DeleteFieldActionHandlerService extends WorkspaceMigrationRunnerAct objectMetadata: flatObjectMetadata, }); + const tableExists = + await this.workspaceSchemaManagerService.tableManager.tableExists({ + queryRunner, + schemaName, + tableName, + }); + + if (!tableExists) { + return; + } + const columnDefinitions = generateColumnDefinitions({ flatFieldMetadata, flatObjectMetadata,