Fix enum deletion during migration v2 (#13977)

## Context
- When deleting an object, we were not properly deleting all the enums,
in fact some enums were inside composite fields and should have been
handled as well. This was already implemented that way for object update
and creation but not deletion.
- Fixing an issue where creating a field with an empty string as a
default value was skipped and causing an issue with non-nullable columns
This commit is contained in:
Weiko
2025-08-19 19:47:27 +02:00
committed by GitHub
parent 1b94621c05
commit 2fc29d41a8
3 changed files with 8 additions and 19 deletions
@@ -31,11 +31,7 @@ export const buildSqlColumnDefinition = (
parts.push('UNIQUE');
}
if (
isDefined(column.default) &&
column.default !== '' &&
column.type !== 'tsvector'
) {
if (isDefined(column.default) && column.type !== 'tsvector') {
const safeDefault = sanitizeDefaultValue(column.default);
parts.push(`DEFAULT ${safeDefault}`);
@@ -31,23 +31,13 @@ import { WorkspaceSchemaObjectActionRunnerService } from 'src/engine/workspace-m
WorkspaceMetadataObjectActionRunnerService,
WorkspaceMetadataIndexActionRunnerService,
WorkspaceMetadataFieldActionRunnerService,
WorkspaceSchemaObjectActionRunnerService,
WorkspaceSchemaIndexActionRunnerService,
WorkspaceSchemaFieldActionRunnerService,
WorkspaceMetadataMigrationRunnerService,
WorkspaceSchemaMigrationRunnerService,
WorkspaceMigrationRunnerV2Service,
],
exports: [
WorkspaceMigrationRunnerV2Service,
WorkspaceMetadataObjectActionRunnerService,
WorkspaceMetadataIndexActionRunnerService,
WorkspaceMetadataFieldActionRunnerService,
WorkspaceSchemaObjectActionRunnerService,
WorkspaceSchemaIndexActionRunnerService,
WorkspaceSchemaFieldActionRunnerService,
WorkspaceMetadataMigrationRunnerService,
WorkspaceSchemaMigrationRunnerService,
],
exports: [WorkspaceMigrationRunnerV2Service],
})
export class WorkspaceMigrationRunnerV2Module {}
@@ -49,14 +49,17 @@ export class WorkspaceSchemaObjectActionRunnerService
tableName,
});
const enumFlatFieldMetadatas = Object.values(
const enumOrCompositeFlatFieldMetadatas = Object.values(
flatObjectMetadataWithFlatFieldMaps.fieldsById,
)
.filter((field): field is FlatFieldMetadata => field != null)
.filter((field) => isEnumFlatFieldMetadata(field));
.filter(
(field) =>
isEnumFlatFieldMetadata(field) || isCompositeFlatFieldMetadata(field),
);
const enumOperations = collectEnumOperationsForObject({
flatFieldMetadatas: enumFlatFieldMetadatas,
flatFieldMetadatas: enumOrCompositeFlatFieldMetadatas,
tableName,
operation: EnumOperation.DROP,
});