diff --git a/packages/core/utils/src/dml/__tests__/entity-builder.spec.ts b/packages/core/utils/src/dml/__tests__/entity-builder.spec.ts index 3abff26809..e879890d38 100644 --- a/packages/core/utils/src/dml/__tests__/entity-builder.spec.ts +++ b/packages/core/utils/src/dml/__tests__/entity-builder.spec.ts @@ -2746,6 +2746,49 @@ describe("Entity builder", () => { `Cannot apply indexes on fields (doesnotexist, anotherdoesnotexist) for model User` ) }) + + test("should define indexes for an entity", () => { + const group = model.define("group", { + id: model.number(), + name: model.text(), + users: model.hasMany(() => user), + }) + + const setting = model.define("setting", { + name: model.text(), + user: model.belongsTo(() => user), + }) + + const user = model.define("user", { + email: model.text(), + account: model.text(), + organization: model.text(), + group: model.belongsTo(() => group, { mappedBy: "users" }), + setting: model.hasOne(() => setting), + }) + + const User = toMikroORMEntity(user) + const metaData = MetadataStorage.getMetadataFromDecorator(User) + + expect(metaData.indexes).toEqual([ + { + expression: + 'CREATE INDEX IF NOT EXISTS "IDX_user_group_id" ON "user" (group_id) WHERE deleted_at IS NULL', + name: "IDX_user_group_id", + }, + ]) + + const Setting = toMikroORMEntity(setting) + const settingMetadata = MetadataStorage.getMetadataFromDecorator(Setting) + + expect(settingMetadata.indexes).toEqual([ + { + expression: + 'CREATE INDEX IF NOT EXISTS "IDX_setting_user_id" ON "setting" (user_id) WHERE deleted_at IS NULL', + name: "IDX_setting_user_id", + }, + ]) + }) }) describe("Entity builder | hasMany", () => { diff --git a/packages/core/utils/src/dml/helpers/create-mikro-orm-entity.ts b/packages/core/utils/src/dml/helpers/create-mikro-orm-entity.ts index 5468d14793..84d47a25eb 100644 --- a/packages/core/utils/src/dml/helpers/create-mikro-orm-entity.ts +++ b/packages/core/utils/src/dml/helpers/create-mikro-orm-entity.ts @@ -69,9 +69,7 @@ export function createMikrORMEntity() { } }) - if (entityIndexes?.length) { - applyEntityIndexes(MikroORMEntity, tableName, entityIndexes) - } + applyEntityIndexes(MikroORMEntity, tableName, entityIndexes) /** * Converting class to a MikroORM entity diff --git a/packages/core/utils/src/dml/helpers/mikro-orm/apply-indexes.ts b/packages/core/utils/src/dml/helpers/mikro-orm/apply-indexes.ts index 421d675f75..4acd61c719 100644 --- a/packages/core/utils/src/dml/helpers/mikro-orm/apply-indexes.ts +++ b/packages/core/utils/src/dml/helpers/mikro-orm/apply-indexes.ts @@ -36,7 +36,7 @@ export function applyIndexes( export function applyEntityIndexes( MikroORMEntity: EntityConstructor, tableName: string, - entityIndexes: EntityIndex[] + entityIndexes: EntityIndex[] = [] ) { const foreignKeyIndexes = applyForeignKeyIndexes(MikroORMEntity) const indexes = [...entityIndexes, ...foreignKeyIndexes]