UNPKG

@bazilio-san/af-stream

Version:
100 lines 3.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DbMsSql = void 0; const sql = require("mssql"); const DbBase_1 = require("./DbBase"); const constants_1 = require("../constants"); const commonTimeout = constants_1.MILLIS_IN_HOUR * 3; // 3 ч const mssqlDefaults = { options: { enableArithAbort: false }, pool: { max: 10, min: 1, idleTimeoutMillis: commonTimeout, acquireTimeoutMillis: commonTimeout, createTimeoutMillis: commonTimeout, destroyTimeoutMillis: commonTimeout, reapIntervalMillis: commonTimeout, createRetryIntervalMillis: commonTimeout, }, trustServerCertificate: true, stream: false, parseJSON: false, requestTimeout: commonTimeout, connectionTimeout: commonTimeout, server: '', }; class DbMsSql extends DbBase_1.DbBase { constructor(options) { super(options); this.pool = null; const { dbOptions, dbConfig } = options; const mssqlDbOptions = { ...mssqlDefaults, ...(dbOptions || {}) }; ['options', 'pool'].forEach((propName) => { if (typeof (dbOptions === null || dbOptions === void 0 ? void 0 : dbOptions[propName]) === 'object') { Object.assign(mssqlDbOptions[propName], dbOptions[propName]); } }); this.cfg = { ...mssqlDbOptions, ...dbConfig, server: dbConfig.server || dbConfig.host }; this.request = null; } async getPool() { var _a, _b, _c; if (((_a = this.pool) === null || _a === void 0 ? void 0 : _a.connected) || ((_b = this.pool) === null || _b === void 0 ? void 0 : _b.connecting)) { return this.pool; } if ((_c = this.pool) === null || _c === void 0 ? void 0 : _c.close) { await this.pool.close(); } this.pool = null; const { logger } = this.options; try { this.pool = new sql.ConnectionPool(this.cfg); if (typeof this.pool !== 'object') { logger.error(`Cant create mssql connection pool: ${this.dbInfo}`); process.exit(0); } this.pool.on('close', () => { this.pool = null; }); this.pool.on('error', (err) => { logger.error('POOL-ERROR'); logger.error(err); }); await this.pool.connect(); return this.pool; } catch (err) { logger.error('POOL-ERROR'); logger.error(`Cant connect to ${this.dbInfo}\n${err}\nEXIT PROCESS`); process.exit(1); } } async close() { var _a; if ((_a = this.pool) === null || _a === void 0 ? void 0 : _a.close) { await this.pool.close(); this.options.logger.info(`Mssql connection pool for "${this.dbInfo}" closed`); return true; } return false; } async query(strSQL) { if (!this.request) { const pool = await this.getPool(); this.request = new sql.Request(pool); } return this.request.query(strSQL); } async _getColumnsNames() { const result = await this.query(`${'SELECT'} TOP (1) * FROM ${this.schemaAndTable}`); const { columns } = result.recordset; return Object.keys(columns); } // eslint-disable-next-line class-methods-use-this limitIt(strSQL, limit) { return strSQL.replace('SELECT ', `SELECT TOP(${limit}) `); } } exports.DbMsSql = DbMsSql; //# sourceMappingURL=DbMsSql.js.map