/** * Migration Engine * * Manages database migrations including running migrations, * rolling back, tracking migration history, and status checking. * * Executes platform-independent migration operations by translating * them to database-specific commands via the adapter. */ import { IMigration, IMigrationHistory, IMigrationStatusResult, IMigrationResult, IFieldDefinition } from '../types/migration.interface'; import { BaseAdapter } from '../adapters/base.adapter'; /** * Migration Engine for managing database migrations */ export declare class MigrationEngine { private adapter; private databaseType; constructor(adapter: BaseAdapter); /** * Execute a raw query using the adapter's raw() method * This is a convenience wrapper that handles different query types */ private rawQuery; /** * Initialize migration tracking collection if it doesn't exist */ initialize(): Promise; private createMigrationTrackingCollection; private createSQLMigrationTable; private createMongoMigrationCollection; private upgradeMongoMigrationValidator; private createDynamoMigrationTable; private createCassandraMigrationTable; /** * Run all pending migrations */ migrate(migrations: IMigration[], options?: { dryRun?: boolean; appliedBy?: string; }): Promise>; /** * Run a single migration */ runMigration(migration: IMigration, direction: 'up' | 'down', appliedBy?: string): Promise; /** * Rollback the last N migrations */ rollback(migrations: IMigration[], count?: number): Promise>; /** * Rollback all migrations */ rollbackAll(migrations: IMigration[]): Promise>; /** * Reset database (rollback all and re-run all migrations) */ reset(migrations: IMigration[]): Promise<{ rollback: Map; migrate: Map; }>; getStatus(migrations: IMigration[]): Promise; getAppliedMigrations(): Promise; getPendingMigrations(migrations: IMigration[]): Promise; /** * Check if a table exists in the database */ private tableExists; isMigrationApplied(tag: string): Promise; private executeOperation; private executeCreateCollection; private executeDropCollection; private executeCreateIndex; private executeDropIndex; private executeAddField; private executeDropField; private executeRenameField; private executeModifyField; private executeAddConstraint; private executeDropConstraint; private executeCreateMongoValidation; private executeDropMongoValidation; private executeShardCollection; private executeCreateDynamoTable; private executeUpdateDynamoThroughput; private executeAddDynamoGSI; private executeRemoveDynamoGSI; private executeEnableDynamoStream; private executeEnableDynamoTTL; private executeAlterCassandraTable; private executeCreateCassandraMaterializedView; private executeDropCassandraMaterializedView; private executeRawOperation; private createSQLTable; private createMongoCollection; /** * Create a unique index on a MongoDB collection field. */ private createMongoUniqueIndex; /** * Register an auto-increment field in the MongoDB counters collection. * Uses atomic operations to ensure thread safety. */ private registerMongoAutoIncrementField; /** * Store schema metadata for MongoDB collections. * This enables application-level features like default values. */ private storeMongoSchemaMetadata; private createDynamoTable; private createCassandraTable; private createSQLIndex; private createMongoIndex; private createCassandraIndex; private buildColumnDefinition; private buildCassandraColumnDefinition; private buildConstraintSQL; private buildDynamoGSI; private buildDynamoProjection; private mapFieldTypeToSQL; private mapFieldTypeToCassandra; private isSQLDatabase; private recordMigration; private removeMigrationRecord; private calculateChecksum; private sortByDependencies; private getOperationDescription; private escapeIdentifier; private formatValue; } /** * Migration Helpers for creating common migrations */ export declare const MigrationHelpers: { generateMigrationTag(name: string): string; createCollectionMigration(tag: string, name: string, fields: IFieldDefinition[]): IMigration; addFieldMigration(tag: string, collection: string, field: IFieldDefinition): IMigration; addIndexMigration(tag: string, collection: string, indexName: string, fields: string[], unique?: boolean): IMigration; };