36 lines
1.0 KiB
JavaScript
36 lines
1.0 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const { createClient, benchmarkDir } = require('./benchmark-lib');
|
|
|
|
const direction = process.argv[2] === 'down' ? 'down' : 'up';
|
|
const file = path.join(benchmarkDir, 'migrations', `optimization_${direction}.sql`);
|
|
|
|
const splitStatements = (sql) =>
|
|
sql
|
|
.replace(/^\s*--.*$/gm, '')
|
|
.split(/;\s*(?:\r?\n|$)/)
|
|
.map((item) => item.trim())
|
|
.filter(Boolean);
|
|
|
|
const main = async () => {
|
|
const sql = fs.readFileSync(file, 'utf8');
|
|
const statements = splitStatements(sql);
|
|
const client = await createClient();
|
|
try {
|
|
await client.query('SET statement_timeout = 0');
|
|
for (const statement of statements) {
|
|
const started = Date.now();
|
|
console.log(`Ejecutando: ${statement.split(/\r?\n/)[0].slice(0, 120)}`);
|
|
await client.query(statement);
|
|
console.log(`OK en ${((Date.now() - started) / 1000).toFixed(2)}s`);
|
|
}
|
|
} finally {
|
|
await client.end();
|
|
}
|
|
};
|
|
|
|
main().catch((error) => {
|
|
console.error(error);
|
|
process.exit(1);
|
|
});
|