UNPKG

@starbemtech/star-db-query-builder

Version:

A query builder to be used with mysql or postgres

74 lines 2.85 kB
"use strict"; 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