diff --git a/packages/cli/src/modules/source-control.ee/__tests__/source-control-import.service.ee.test.ts b/packages/cli/src/modules/source-control.ee/__tests__/source-control-import.service.ee.test.ts index ee7414c77cf..e20babf698c 100644 --- a/packages/cli/src/modules/source-control.ee/__tests__/source-control-import.service.ee.test.ts +++ b/packages/cli/src/modules/source-control.ee/__tests__/source-control-import.service.ee.test.ts @@ -2980,6 +2980,48 @@ describe('SourceControlImportService', () => { ); }); + it('should rename columns when name changes but ID stays the same', async () => { + // Arrange + const mockDataTable = { + id: 'dt1', + name: 'Test Table', + ownedBy: { + type: 'team', + teamId: 'project1', + teamName: 'Team Project 1', + }, + columns: [{ id: 'col1', name: 'newColumnName', type: 'string', index: 0 }], + createdAt: '2024-01-01T00:00:00.000Z', + updatedAt: '2024-01-02T00:00:00.000Z', + }; + + const existingTable = { + id: 'dt1', + name: 'Test Table', + projectId: 'project1', + columns: [{ id: 'col1', name: 'oldColumnName' }], + }; + + fsReadFile.mockResolvedValue(JSON.stringify(mockDataTable) as any); + dataTableRepository.findOne.mockResolvedValue(existingTable as any); + dataTableColumnRepository.find.mockResolvedValue([ + { id: 'col1', name: 'oldColumnName' }, + ] as any); + projectRepository.findOne.mockResolvedValue({ id: 'project1', type: 'team' } as any); + + // Act + await service.importDataTablesFromWorkFolder([mockCandidate], mockUser.id); + + // Assert + expect(dataTableDDLService.renameColumn).toHaveBeenCalledWith( + 'dt1', + 'oldColumnName', + 'newColumnName', + 'sqlite', + expect.anything(), + ); + }); + it('should delete removed columns', async () => { // Arrange const mockDataTable = { diff --git a/packages/cli/src/modules/source-control.ee/source-control-import.service.ee.ts b/packages/cli/src/modules/source-control.ee/source-control-import.service.ee.ts index bc86823f0ab..936b04516aa 100644 --- a/packages/cli/src/modules/source-control.ee/source-control-import.service.ee.ts +++ b/packages/cli/src/modules/source-control.ee/source-control-import.service.ee.ts @@ -1422,6 +1422,20 @@ export class SourceControlImportService { }); columnEntities.push(columnEntity); + // Rename columns whose name changed (same ID, different name) + if (!isNewTable && existingColumnIds.has(column.id)) { + const oldName = existingColumnNameMap.get(column.id); + if (oldName && oldName !== column.name) { + await this.dataTableDDLService.renameColumn( + dataTable.id, + oldName, + column.name, + dbType, + trx, + ); + } + } + // Add new columns to existing physical table if (!isNewTable && !existingColumnIds.has(column.id)) { await this.dataTableDDLService.addColumn(dataTable.id, columnEntity, dbType, trx);