From 5ea48e5c87c3151b0b7973b88e19b06025a4be6c Mon Sep 17 00:00:00 2001 From: AbuJulaybeeb Date: Sun, 30 Aug 2026 17:41:42 +0100 Subject: [PATCH] feat(database): add database indexes to schema_version entity and migration --- src/entities/schema_version.entity.ts | 5 +++ ...804000000000-add-schema-version-indexes.ts | 34 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/migrations/1804000000000-add-schema-version-indexes.ts diff --git a/src/entities/schema_version.entity.ts b/src/entities/schema_version.entity.ts index f27d21dd..e9b1c636 100644 --- a/src/entities/schema_version.entity.ts +++ b/src/entities/schema_version.entity.ts @@ -5,10 +5,15 @@ import { CreateDateColumn, UpdateDateColumn, OneToMany, + Index, } from 'typeorm'; import { SchemaChange } from './schema_change.entity'; @Entity('schema_version') +@Index('IDX_schema_version_schemaName', ['schemaName']) +@Index('IDX_schema_version_checksum', ['checksum']) +@Index('IDX_schema_version_createdAt', ['createdAt']) +@Index('IDX_schema_version_schemaName_createdAt', ['schemaName', 'createdAt']) export class SchemaVersion { @PrimaryGeneratedColumn('uuid') id: string; diff --git a/src/migrations/1804000000000-add-schema-version-indexes.ts b/src/migrations/1804000000000-add-schema-version-indexes.ts new file mode 100644 index 00000000..ffa5c014 --- /dev/null +++ b/src/migrations/1804000000000-add-schema-version-indexes.ts @@ -0,0 +1,34 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +/** + * Issue #1239 - Add database indexes to the schema_version entity. + * + * Indexes added: + * - IDX_schema_version_schemaName - lookups and filtering by schema name + * - IDX_schema_version_checksum - lookups and verification by content checksum + * - IDX_schema_version_createdAt - chronological ordering and range queries + * - IDX_schema_version_schemaName_createdAt - composite index for schema version history queries + */ +export class AddSchemaVersionIndexes1804000000000 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + 'CREATE INDEX IF NOT EXISTS "IDX_schema_version_schemaName" ON "schema_version" ("schemaName")', + ); + await queryRunner.query( + 'CREATE INDEX IF NOT EXISTS "IDX_schema_version_checksum" ON "schema_version" ("checksum")', + ); + await queryRunner.query( + 'CREATE INDEX IF NOT EXISTS "IDX_schema_version_createdAt" ON "schema_version" ("createdAt")', + ); + await queryRunner.query( + 'CREATE INDEX IF NOT EXISTS "IDX_schema_version_schemaName_createdAt" ON "schema_version" ("schemaName", "createdAt")', + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query('DROP INDEX IF EXISTS "IDX_schema_version_schemaName_createdAt"'); + await queryRunner.query('DROP INDEX IF EXISTS "IDX_schema_version_createdAt"'); + await queryRunner.query('DROP INDEX IF EXISTS "IDX_schema_version_checksum"'); + await queryRunner.query('DROP INDEX IF EXISTS "IDX_schema_version_schemaName"'); + } +}