@starbemtech/star-db-query-builder
Version:
A query builder to be used with mysql or postgres
74 lines • 2.85 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createMysqlClient = void 0;
const promise_retry_1 = __importDefault(require("promise-retry"));
const monitor_1 = require("../monitor/monitor");
const transientErrorCodes = new Set([
'ECONNRESET',
'ETIMEDOUT',
'PROTOCOL_CONNECTION_LOST',
'ECONNREFUSED',
]);
function isTransientError(error) {
return error && error.code && transientErrorCodes.has(error.code);
}
const createMysqlClient = (pool, retryOptions) => {
monitor_1.monitor.emit(monitor_1.MonitorEvents.CONNECTION_CREATED, {
clientType: 'mysql',
poolOptions: pool.config,
});
return {
clientType: 'mysql',
query: async (sql, params) => {
return (0, promise_retry_1.default)(async (retry, attempt) => {
const startTime = Date.now();
try {
monitor_1.monitor.emit(monitor_1.MonitorEvents.QUERY_START, {
clientType: 'mysql',
sql,
params,
attempt,
});
const [rows] = await pool.execute(sql, params);
const elapsedTime = Date.now() - startTime;
monitor_1.monitor.emit(monitor_1.MonitorEvents.QUERY_END, {
clientType: 'mysql',
sql,
params,
attempt,
elapsedTime,
});
return rows;
}
catch (error) {
const elapsedTime = Date.now() - startTime;
monitor_1.monitor.emit(monitor_1.MonitorEvents.QUERY_ERROR, {
clientType: 'mysql',
sql,
params,
attempt,
elapsedTime,
error,
});
if (isTransientError(error)) {
console.warn(`MySQL query attempt ${attempt} failed, retrying...`, error);
monitor_1.monitor.emit(monitor_1.MonitorEvents.RETRY_ATTEMPT, {
clientType: 'mysql',
sql,
params,
attempt,
error,
});
return retry(error);
}
throw error;
}
}, retryOptions);
},
};
};
exports.createMysqlClient = createMysqlClient;
//# sourceMappingURL=mysqlClient.js.map