typeorm-explain
Version:
Tiny helper to wrap TypeORM's query builder queries to EXPLAIN
31 lines • 1.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const typeorm_1 = require("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}`;
},
};
async function explain(qb, explainParameters, format = 'text', connection = (0, typeorm_1.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);
}
exports.default = explain;
//# sourceMappingURL=index.js.map