@eggjs/dal-runtime
Version:
tegg dal decorator
56 lines • 4.99 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DatabaseForker = void 0;
const node_assert_1 = __importDefault(require("node:assert"));
const rds_1 = require("@eggjs/rds");
const DaoLoader_1 = require("./DaoLoader");
class DatabaseForker {
constructor(env, options) {
this.env = env;
this.options = options;
}
shouldFork() {
return this.env === 'unittest' && this.options.forkDb;
}
async forkDb(moduleDir) {
(0, node_assert_1.default)(this.shouldFork(), 'fork db only run in unittest');
// 尽早判断不应该 fork,避免对 rds pool 配置造成污染
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { name, initSql, forkDb, database, ...mysqlOptions } = this.options;
const client = new rds_1.RDSClient(Object.assign(mysqlOptions));
const conn = await client.getConnection();
await this.doCreateUtDb(conn);
await this.forkTables(conn, moduleDir);
conn.release();
await client.end();
}
async forkTables(conn, moduleDir) {
const daoClazzList = DaoLoader_1.DaoLoader.loadDaos(moduleDir);
for (const clazz of daoClazzList) {
await this.doForkTable(conn, clazz.tableSql);
}
}
async doForkTable(conn, sqlFile) {
const sqls = sqlFile.split(';').filter(t => !!t.trim());
for (const sql of sqls) {
await conn.query(sql);
}
}
async doCreateUtDb(conn) {
await conn.query(`CREATE DATABASE IF NOT EXISTS ${this.options.database};`);
await conn.query(`use ${this.options.database};`);
}
async destroy() {
(0, node_assert_1.default)(this.shouldFork(), 'fork db only run in unittest');
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { name, initSql, forkDb, database, ...mysqlOptions } = this.options;
const client = new rds_1.RDSClient(Object.assign(mysqlOptions));
await client.query(`DROP DATABASE ${database}`);
await client.end();
}
}
exports.DatabaseForker = DatabaseForker;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YWJhc2VGb3JrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvRGF0YWJhc2VGb3JrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOERBQWlDO0FBQ2pDLG9DQUF1QztBQUV2QywyQ0FBd0M7QUFFeEMsTUFBYSxjQUFjO0lBSXpCLFlBQVksR0FBVyxFQUFFLE9BQTBCO1FBQ2pELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxHQUFHLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ3hELENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQWlCO1FBQzVCLElBQUEscUJBQU0sRUFBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsOEJBQThCLENBQUMsQ0FBQztRQUMxRCxtQ0FBbUM7UUFDbkMsNkRBQTZEO1FBQzdELE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzFFLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUMxRCxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixNQUFNLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBaUI7UUFDOUMsTUFBTSxZQUFZLEdBQUcscUJBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkQsS0FBSyxNQUFNLEtBQUssSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQWU7UUFDN0MsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUk7UUFDN0IsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDNUUsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLElBQUEscUJBQU0sRUFBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsOEJBQThCLENBQUMsQ0FBQztRQUMxRCw2REFBNkQ7UUFDN0QsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDMUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoRCxNQUFNLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0NBQ0Y7QUFyREQsd0NBcURDIn0=