From 3ac72683da41dd81e6499f2e4a8e4b262d6147bf Mon Sep 17 00:00:00 2001 From: martmull Date: Tue, 16 Dec 2025 14:35:03 +0100 Subject: [PATCH] Update migration command (#16578) Avoid pg_ table request --- .../1-14-update-created-by-enum.command.ts | 41 +++++++++++-------- .../1-14-upgrade-version-command.module.ts | 3 +- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-14/1-14-update-created-by-enum.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-14/1-14-update-created-by-enum.command.ts index 37b879a32d..be2b0ed020 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-14/1-14-update-created-by-enum.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-14/1-14-update-created-by-enum.command.ts @@ -4,6 +4,7 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { isDefined } from 'twenty-shared/utils'; import { DataSource, Repository } from 'typeorm'; +import { FieldMetadataType } from 'twenty-shared/types'; import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; @@ -11,6 +12,9 @@ import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.ent import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager'; import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util'; +import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; +import { computeTableName } from 'src/engine/utils/compute-table-name.util'; +import { computePostgresEnumName } from 'src/engine/workspace-manager/workspace-migration-runner/utils/compute-postgres-enum-name.util'; @Command({ name: 'upgrade:1-14:udpate-created-by-enum', @@ -24,6 +28,8 @@ export class UpdateCreatedByEnumCommand extends ActiveOrSuspendedWorkspacesMigra protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: GlobalWorkspaceOrmManager, protected readonly dataSourceService: DataSourceService, + @InjectRepository(FieldMetadataEntity) + protected readonly fieldMetadataRepository: Repository, @InjectDataSource() private readonly coreDataSource: DataSource, ) { @@ -50,33 +56,32 @@ export class UpdateCreatedByEnumCommand extends ActiveOrSuspendedWorkspacesMigra await queryRunner.connect(); await queryRunner.startTransaction(); - const createdByEnums = await queryRunner.query( - `SELECT t.typname - FROM pg_type t - JOIN pg_namespace n ON n.oid = t.typnamespace - WHERE t.typtype = 'e' - AND n.nspname = '${schemaName}' - AND t.typname LIKE '%\\_createdBySource\\_enum' ESCAPE '\\' - AND NOT EXISTS ( - SELECT 1 - FROM pg_enum e - WHERE e.enumtypid = t.oid - AND e.enumlabel = 'APPLICATION' - );`, - ); + const createdByFields = await this.fieldMetadataRepository.find({ + where: { workspaceId, name: 'createdBy', type: FieldMetadataType.ACTOR }, + relations: ['object'], + }); if (isDryRun) { this.logger.log( - `Dry run mode: found ${createdByEnums.length} createdBy enums to update`, + `Dry run mode: found ${createdByFields.length} createdBy enums to update`, ); } if (!options.dryRun) { - this.logger.log(`Updating ${createdByEnums.length} createdBy enums`); + this.logger.log(`Updating ${createdByFields.length} createdBy enums`); try { - for (const createdByEnum of createdByEnums) { + for (const createdByField of createdByFields) { + const tableName = computeTableName( + createdByField.object.nameSingular, + createdByField.object.isCustom, + ); + const createdByEnumName = computePostgresEnumName({ + tableName, + columnName: 'createdBySource', + }); + await queryRunner.query( - `ALTER TYPE "${schemaName}"."${createdByEnum.typname}" ADD VALUE 'APPLICATION'`, + `ALTER TYPE "${schemaName}"."${createdByEnumName}" ADD VALUE IF NOT EXISTS 'APPLICATION'`, ); } await queryRunner.commitTransaction(); diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-14/1-14-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-14/1-14-upgrade-version-command.module.ts index e0b71cfa92..e9b3fd8c03 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-14/1-14-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-14/1-14-upgrade-version-command.module.ts @@ -9,10 +9,11 @@ import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-s import { RoleModule } from 'src/engine/metadata-modules/role/role.module'; import { WorkspaceSchemaManagerModule } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.module'; import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache.module'; +import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; @Module({ imports: [ - TypeOrmModule.forFeature([WorkspaceEntity]), + TypeOrmModule.forFeature([WorkspaceEntity, FieldMetadataEntity]), DataSourceModule, AiAgentModule, RoleModule,