48 lines
1.4 KiB
JavaScript
48 lines
1.4 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const { performance } = require('perf_hooks');
|
|
const { createClient } = require('./benchmark-lib');
|
|
|
|
const direction = process.argv[2] || 'up';
|
|
const file =
|
|
direction === 'down'
|
|
? path.join(__dirname, '..', 'migrations', 'query02_optimization_down.sql')
|
|
: path.join(__dirname, '..', 'migrations', 'query02_optimization_up.sql');
|
|
|
|
const splitStatements = (sql) =>
|
|
sql
|
|
.split(/;\s*(?:\r?\n|$)/)
|
|
.map((item) => item.trim())
|
|
.filter(Boolean)
|
|
.filter((item) => !item.startsWith('--') || item.split(/\r?\n/).some((line) => !line.trim().startsWith('--')));
|
|
|
|
const stripLeadingComments = (statement) =>
|
|
statement
|
|
.split(/\r?\n/)
|
|
.filter((line) => !line.trim().startsWith('--'))
|
|
.join('\n')
|
|
.trim();
|
|
|
|
const main = async () => {
|
|
const sql = fs.readFileSync(file, 'utf8');
|
|
const statements = splitStatements(sql).map(stripLeadingComments).filter(Boolean);
|
|
const client = await createClient();
|
|
|
|
try {
|
|
await client.query('SET statement_timeout = 0');
|
|
for (const statement of statements) {
|
|
const started = performance.now();
|
|
process.stdout.write(`${statement.split(/\s+/).slice(0, 6).join(' ')} ... `);
|
|
await client.query(statement);
|
|
process.stdout.write(`${(performance.now() - started).toFixed(2)}ms\n`);
|
|
}
|
|
} finally {
|
|
await client.end();
|
|
}
|
|
};
|
|
|
|
main().catch((error) => {
|
|
console.error(error);
|
|
process.exit(1);
|
|
});
|