typeorm-explain
Version:
Tiny helper to wrap TypeORM's query builder queries to EXPLAIN
28 lines • 1.29 kB
JavaScript
import { getConnection } from 'typeorm';
const explains = {
postgres(originalQuery, explainParameters = {
analyze: true,
verbose: true,
buffers: true,
}, format) {
const boolParameters = Object.entries(explainParameters)
.filter((argument) => typeof argument[1] === 'boolean')
.map(([key, value]) => `${key} ${value}`);
const explainParametersString = [...boolParameters, `FORMAT ${format.toUpperCase()}`]
.join(', ')
.toUpperCase();
return `EXPLAIN (${explainParametersString}) ${originalQuery}`;
},
};
export default async function explain(qb, explainParameters, format = 'text', connection = getConnection()) {
const { type } = connection.driver.options;
const [originalQuery, queryParameters] = qb.getQueryAndParameters();
const explainBuilder = explains[type];
if (!explainBuilder) {
const driversList = Object.keys(explains).join(',');
throw new Error(`typeorm-explain currently support limited db drivers (${driversList}). Feel free open PR to support your driver: ${type}`);
}
const query = explainBuilder(originalQuery, explainParameters, format);
return connection.query(query, queryParameters);
}
//# sourceMappingURL=index.js.map