@bazilio-san/af-stream
Version:
Data stream from database table
100 lines • 3.71 kB
JavaScript
;
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