semillero-INVIMA/benchmarks/scripts/apply-optimization.js

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);
});