const mysql = require('mysql2/promise') const fs = require('fs') const path = require('path') const DB_CFG = { host: 'cq-cdb-8fjmemkb.sql.tencentcdb.com', port: 27220, user: 'root', password: 'Ylrz_1q2w3e4r5t6y', multipleStatements: true } const MIGRATION_SQL = fs.readFileSync( path.join(__dirname, '../../java/fs-agent/src/main/resources/db/migration/tenant/V20260623_01__lobster_execution_config_drop_task_policy.sql'), 'utf8' ) function dbNameFromUrl(url) { if (!url) return null const m = String(url).match(/\/([^/?]+)(?:\?|$)/) return m ? m[1] : null } async function applyMigration(database) { const conn = await mysql.createConnection({ ...DB_CFG, database }) await conn.query(MIGRATION_SQL) const [cols] = await conn.query( "SHOW COLUMNS FROM lobster_execution_config LIKE 'enable_%'" ) await conn.end() return { database, legacyCols: cols.length } } async function main() { const masterConn = await mysql.createConnection({ ...DB_CFG, database: 'ylrz_saas' }) const dbs = new Set() try { const [tenants] = await masterConn.query( 'SELECT id, tenant_code, db_url FROM tenant_info WHERE db_url IS NOT NULL AND db_url != \'\'' ) for (const t of tenants) { const name = dbNameFromUrl(t.db_url) if (name) dbs.add(name) } } catch (e) { console.warn('tenant_info query skipped:', e.message) } await masterConn.end() for (const db of dbs) { try { const r = await applyMigration(db) console.log(`${db}: legacy_task_policy_cols=${r.legacyCols} (0=OK)`) } catch (e) { console.error(`${db}: ERROR ${e.message}`) } } } main().catch(e => { console.error(e) process.exit(1) })