From 2ceb1c87b3d7a79486883e6f3ce8c133030ba169 Mon Sep 17 00:00:00 2001 From: Charles Bochet Date: Fri, 13 Dec 2024 19:16:04 +0100 Subject: [PATCH] Fix array enum renaming (#9067) When creating an enum type (let's say post_type_enum), postgres will automatically create a array enum type based on this enum and prefix it with an underscore (so _post_type_enum). Our code was not taking this case into account while dealing with MULTISELECT Resources: https://www.postgresql.org/docs/current/sql-createtype.html image --- .../services/workspace-migration-enum.service.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/services/workspace-migration-enum.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/services/workspace-migration-enum.service.ts index 209b4635d..2e1aaa5c4 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/services/workspace-migration-enum.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/services/workspace-migration-enum.service.ts @@ -231,20 +231,23 @@ export class WorkspaceMigrationEnumService { tableName: string, columnName: string, ): Promise { - const result = await queryRunner.query( - `SELECT udt_name FROM information_schema.columns WHERE table_schema = $1 AND table_name = $2 AND column_name = $3`, + const [result] = await queryRunner.query( + `SELECT udt_name, data_type FROM information_schema.columns WHERE table_schema = $1 AND table_name = $2 AND column_name = $3`, [schemaName, tableName, columnName], ); - const enumTypeName = result[0]?.udt_name; - - if (!enumTypeName) { + if (!result) { throw new WorkspaceMigrationException( `Enum type name not found for column ${columnName} in table ${tableName} while trying to alter enum`, WorkspaceMigrationExceptionCode.ENUM_TYPE_NAME_NOT_FOUND, ); } + const enumTypeName = + result.data_type === 'ARRAY' + ? result.udt_name.replace(/^_/, '') + : result.udt_name; + return enumTypeName; } }