From e29e1a70b0370d68f43d7b011fe721ffd7ae4bdc Mon Sep 17 00:00:00 2001 From: axiosleo Date: Mon, 23 Feb 2026 17:34:22 +0800 Subject: [PATCH 1/2] fix(migration): enhance migration logic to handle existing tables and prevent duplicate migrations --- src/migration.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/migration.js b/src/migration.js index b748db4..e79a67a 100644 --- a/src/migration.js +++ b/src/migration.js @@ -9,7 +9,7 @@ const { _execSQL } = require('./core'); const { _render } = require('@axiosleo/cli-tool/src/helper/str'); const { _foreach } = require('@axiosleo/cli-tool/src/helper/cmd'); const { _assign } = require('@axiosleo/cli-tool/src/helper/obj'); -const { TransactionHandler } = require('..'); +const { TransactionHandler } = require('./transaction'); const { ManageSQLBuilder, Builder } = require('./builder'); const migrationColumns = [ @@ -82,6 +82,12 @@ async function init(context) { handler = new QueryHandler(conn); if (await handler.existTable(context.task_key, database)) { + printer.yellow('table ' + context.task_key + ' already exists').println(); + const items = await handler.table(context.task_key).select(); + context.items = {}; + items.forEach(item => { + context.items[item.filename] = true; + }); conn.end(); return; } @@ -321,6 +327,12 @@ async function run(context) { const { files } = context; const queries = {}; await _foreach(files, async (file) => { + if (context.action === 'up' && context.items[file]) { + printer.yellow(`Migration file "${file}" has been migrated.`).println(); + return; + } else if (context.action === 'down' && !context.items[file]) { + return; + } const scriptPath = path.join(context.config.dir, file); const script = require(scriptPath); queries[file] = []; From 03b01360a52590e8a9882d905801ff6eb6f66214 Mon Sep 17 00:00:00 2001 From: axiosleo Date: Mon, 23 Feb 2026 17:42:02 +0800 Subject: [PATCH 2/2] fix(migration): initialize context.items to handle existing table entries correctly --- src/migration.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/migration.js b/src/migration.js index e79a67a..8bb1f0d 100644 --- a/src/migration.js +++ b/src/migration.js @@ -81,10 +81,10 @@ async function init(context) { context.pool = conn; handler = new QueryHandler(conn); + context.items = {}; if (await handler.existTable(context.task_key, database)) { printer.yellow('table ' + context.task_key + ' already exists').println(); const items = await handler.table(context.task_key).select(); - context.items = {}; items.forEach(item => { context.items[item.filename] = true; });