Skip to content

[MSSQL] Enum column definition removes and recreates constraint overwritting existing data #4897

@karlos1337

Description

@karlos1337

Issue type:

[ ] question
[X] bug report
[ ] feature request
[ ] documentation issue

Database system/driver:

[ ] cordova
[ ] mongodb
[X] mssql
[ ] mysql / mariadb
[ ] oracle
[ ] postgres
[ ] cockroachdb
[ ] sqlite
[ ] sqljs
[ ] react-native
[ ] expo

TypeORM version:

[X] latest
[ ] @next
[ ] 0.x.x (or put your version here)

Steps to reproduce or a small repository showing the problem:

export type UserRole = 'user' | 'admin';
export const userRoles = {
  USER: 'user' as UserRole,
  ADMIN: 'admin' as UserRole,
};

@Column('simple-enum', {
  default: userRoles.USER,
  enum: Object.values(userRoles),
})
role: UserRole;

On each compilation related constraint is removed and recreated so existing data is overwritten with default value (in this case switching all admin roles to user). I tried also using native enum or setting an static array ['user', 'admin'] as Column enum option, both with same result.

Related trace from nest:

nest_1    | query: SELECT * FROM "nest"."INFORMATION_SCHEMA"."TABLES" WHERE "TABLE_NAME" = 'typeorm_metadata' AND "TABLE_SCHEMA" = SCHEMA_NAME()
nest_1    | dropping old check constraint: "CK__user__role__3631FF56" from table "user"
nest_1    | query: ALTER TABLE "user" DROP CONSTRAINT "CK__user__role__3631FF56"
nest_1    | renaming column "role" in to "role"
nest_1    | columns changed in "user". updating: role
nest_1    | query: ALTER TABLE "user" DROP CONSTRAINT "DF_6620cd026ee2b231beac7cfe578"
nest_1    | query: ALTER TABLE "user" DROP COLUMN "role"
nest_1    | query: ALTER TABLE "user" ADD "role" nvarchar(255) CHECK( role IN ('user','admin') ) NOT NULL CONSTRAINT "DF_6620cd026ee2b231beac7cfe578" DEFAULT 'user'
nest_1    | query: COMMIT

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