semillero-INVIMA/benchmarks/scripts/validate-query02.js

55 lines
1.7 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const {
capturePageSet,
compareCaptures,
createClient,
ensureDir,
query02Dir,
writeJson
} = require('./query02-lib');
const phase = process.argv[2] || 'after';
const outFile = path.join(query02Dir, 'validation.json');
const main = async () => {
ensureDir(query02Dir);
const current = fs.existsSync(outFile)
? JSON.parse(fs.readFileSync(outFile, 'utf8'))
: {
query: 'query_02',
pages: [0, 25, 250000, 1000000],
note: 'La validacion incluye source_uid solo como identificador; el contrato publico se compara con las columnas reales del endpoint.'
};
const client = await createClient();
try {
if (phase === 'before' && process.env.QUERY02_FORCE_OLD_PLAN === '1') {
await client.query('SET enable_indexscan = off');
await client.query('SET enable_indexonlyscan = off');
await client.query('SET enable_bitmapscan = off');
}
if (phase === 'before') {
current.before = await capturePageSet(client, current.pages);
delete current.after;
delete current.comparison;
} else {
if (!current.before) {
throw new Error('No existe captura before. Ejecute primero: node benchmarks/scripts/validate-query02.js before');
}
current.after = await capturePageSet(client, current.pages);
current.comparison = compareCaptures(current.before, current.after);
}
} finally {
await client.end();
}
writeJson(outFile, current);
console.log(JSON.stringify(current.comparison || { beforeCaptured: Boolean(current.before) }, null, 2));
};
main().catch((error) => {
console.error(error);
process.exit(1);
});