feat(M01-B): 增加迁移执行器与旧库只读兼容层

This commit is contained in:
Codex
2026-06-18 09:31:29 +08:00
parent 3cabb71de5
commit e069c50331
8 changed files with 487 additions and 1 deletions
+49
View File
@@ -0,0 +1,49 @@
import { loadConfig } from '../config.js';
import { closeMySqlPool, createMySqlPool } from './mysql.js';
import {
executeMigrationPlan,
loadMigrationPlan,
type MigrationDirection
} from './migration-runner.js';
const command = process.argv[2] ?? 'plan';
const validCommands = new Set(['plan', 'up', 'verify', 'down']);
if (!validCommands.has(command)) {
console.error('Usage: migrate-cli.js <plan|up|verify|down>');
process.exitCode = 2;
} else {
const direction: MigrationDirection = command === 'plan' ? 'up' : command as MigrationDirection;
const plan = await loadMigrationPlan(direction);
if (command === 'plan') {
console.log(JSON.stringify({
mode: 'dry-run',
direction: plan.direction,
file: plan.file,
checksum: plan.checksum,
statementCount: plan.statements.length
}, null, 2));
} else {
const config = loadConfig();
if (!config.mysql.passwordConfigured) {
console.error('QIPAI_MYSQL_PASSWORD is required for live migration commands.');
process.exitCode = 2;
} else {
const pool = createMySqlPool(config);
try {
const result = await executeMigrationPlan(pool, plan);
console.log(JSON.stringify({
mode: 'live',
direction: result.direction,
file: result.file,
checksum: result.checksum,
statementCount: result.statements.length,
affectedRows: result.affectedRows
}, null, 2));
} finally {
await closeMySqlPool(pool);
}
}
}
}