Skip to content

migration:generate dropging and re-adding the same column #11126

@tholum

Description

@tholum

Issue description

Migration Droping and readding column with the same spec

Expected Behavior

When I run migration:generate it shouldn't drop a column, just to re-add it with the same spec

Actual Behavior

Migration adds

    await queryRunner.query(`ALTER TABLE \`azure_groups_members\` DROP COLUMN \`createdByCoreUserId\``);
    await queryRunner.query(`ALTER TABLE \`azure_groups_members\` ADD \`createdByCoreUserId\` varchar(255) NULL`);
import { MigrationInterface, QueryRunner } from "typeorm";

export class Migration1731093850771 implements MigrationInterface {
    name = 'Migration1731093850771'

    public async up(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`ALTER TABLE \`at_tickets\` ADD \`autotaskCompanies\` int NULL`);
        await queryRunner.query(`ALTER TABLE \`todos_todo\` CHANGE \`nextActionTime\` \`nextActionTime\` float(2) NULL`);
        await queryRunner.query(`ALTER TABLE \`at_tickets\` CHANGE \`nextActionTime\` \`nextActionTime\` float(2) NULL`);
        await queryRunner.query(`ALTER TABLE \`azure_groups_members\` DROP COLUMN \`createdByCoreUserId\``);
        await queryRunner.query(`ALTER TABLE \`azure_groups_members\` ADD \`createdByCoreUserId\` varchar(255) NULL`);
        await queryRunner.query(`ALTER TABLE \`azure_groups_members\` DROP COLUMN \`updatedByCoreUserId\``);
        await queryRunner.query(`ALTER TABLE \`azure_groups_members\` ADD \`updatedByCoreUserId\` varchar(255) NULL`);
        await queryRunner.query(`ALTER TABLE \`azure_directory_role_members\` DROP COLUMN \`createdByCoreUserId\``);
        await queryRunner.query(`ALTER TABLE \`azure_directory_role_members\` ADD \`createdByCoreUserId\` varchar(255) NULL`);
        await queryRunner.query(`ALTER TABLE \`azure_directory_role_members\` DROP COLUMN \`updatedByCoreUserId\``);
        await queryRunner.query(`ALTER TABLE \`azure_directory_role_members\` ADD \`updatedByCoreUserId\` varchar(255) NULL`);
        await queryRunner.query(`ALTER TABLE \`at_tickets\` ADD CONSTRAINT \`FK_6b220c64c020af86108d77d4d0a\` FOREIGN KEY (\`autotaskCompanies\`) REFERENCES \`at_companies\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION`);
    }

    public async down(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`ALTER TABLE \`at_tickets\` DROP FOREIGN KEY \`FK_6b220c64c020af86108d77d4d0a\``);
        await queryRunner.query(`ALTER TABLE \`azure_directory_role_members\` DROP COLUMN \`updatedByCoreUserId\``);
        await queryRunner.query(`ALTER TABLE \`azure_directory_role_members\` ADD \`updatedByCoreUserId\` varchar(255) NULL`);
        await queryRunner.query(`ALTER TABLE \`azure_directory_role_members\` DROP COLUMN \`createdByCoreUserId\``);
        await queryRunner.query(`ALTER TABLE \`azure_directory_role_members\` ADD \`createdByCoreUserId\` varchar(255) NULL`);
        await queryRunner.query(`ALTER TABLE \`azure_groups_members\` DROP COLUMN \`updatedByCoreUserId\``);
        await queryRunner.query(`ALTER TABLE \`azure_groups_members\` ADD \`updatedByCoreUserId\` varchar(255) NULL`);
        await queryRunner.query(`ALTER TABLE \`azure_groups_members\` DROP COLUMN \`createdByCoreUserId\``);
        await queryRunner.query(`ALTER TABLE \`azure_groups_members\` ADD \`createdByCoreUserId\` varchar(255) NULL`);
        await queryRunner.query(`ALTER TABLE \`at_tickets\` CHANGE \`nextActionTime\` \`nextActionTime\` float(12) NULL`);
        await queryRunner.query(`ALTER TABLE \`todos_todo\` CHANGE \`nextActionTime\` \`nextActionTime\` float(12) NULL`);
        await queryRunner.query(`ALTER TABLE \`at_tickets\` DROP COLUMN \`autotaskCompanies\``);
    }

}

Steps to reproduce

I don't have minimal code to reproduce it, The column's in question are added by extending a class, so may, it started when I used a ManyToMany and JoinTable, so I am suspecting it is somehow doing that

@ManyToMany(() => AzureGroups , {onDelete: 'NO ACTION', onUpdate: 'NO ACTION'})
    @JoinTable({
        name: 'azure_groups_members',
        joinColumn: {
            name: 'azureUserId',
            referencedColumnName: 'id'
        },
        inverseJoinColumn: {
            name: 'azureGroupId',
            referencedColumnName: 'id'
        },
        synchronize: false
    })
    AzureGroups: AzureGroups[]; 
    
    ```


### My Environment

| Dependency          | Version  |
| ---                 | ---      |
| Operating System    |  Ubuntu 24.04  |
| Node.js version     | 18.20.2  |
| Typescript version  |  5.1.6 |
| TypeORM version     | 0.3.20  |


### Additional Context

_No response_

### Relevant Database Driver(s)

- [ ] aurora-mysql
- [ ] aurora-postgres
- [ ] better-sqlite3
- [ ] cockroachdb
- [ ] cordova
- [ ] expo
- [ ] mongodb
- [X] mysql
- [ ] nativescript
- [ ] oracle
- [ ] postgres
- [ ] react-native
- [ ] sap
- [ ] spanner
- [ ] sqlite
- [ ] sqlite-abstract
- [ ] sqljs
- [ ] sqlserver

### Are you willing to resolve this issue by submitting a Pull Request?

No, I don’t have the time and I’m okay to wait for the community / maintainers to resolve this issue.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions