UNPKG

slim-node-mysql

Version:

MySQL database class to abstract pooling and prepared statements

75 lines 3.82 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SlimNodeMySQLPool = void 0; const promise_1 = require("mysql2/promise"); const resultSetHeaderToExecuteResult_1 = require("./converters/resultSetHeaderToExecuteResult"); const InvalidExecuteStatement_1 = require("./errors/InvalidExecuteStatement"); const MySQLPreparedStatement_1 = require("./MySQLPreparedStatement"); const ConnectionStringParserStrategy_1 = require("./parsers/ConnectionStringParserStrategy"); class SlimNodeMySQLPool { constructor(config, otherPoolOptions) { if (typeof config === 'string') { const connection = ConnectionStringParserStrategy_1.ConnectionStringParserStrategy.getParserStrategy(config).parseConnectionString(config); this.pool = (0, promise_1.createPool)(Object.assign(Object.assign({}, otherPoolOptions), { host: connection.host, user: connection.user, password: connection.password, database: connection.database })); } else { this.pool = (0, promise_1.createPool)(config); } } query(sql, parameters) { if (parameters) { return this.queryPrepared(sql, parameters); } return this.promiseQuery(sql); } execute(sql, parameters) { return __awaiter(this, void 0, void 0, function* () { let preparedSQL = sql; let preparedValues; if (parameters) { const preparedStatement = new MySQLPreparedStatement_1.MySQLPreparedStatement(sql, parameters); ({ preparedSQL, preparedValues } = preparedStatement.prepare()); } const [header] = yield this.pool.query(preparedSQL, preparedValues); if (this.isResultSetHeader(header)) { return (0, resultSetHeaderToExecuteResult_1.resultSetHeaderToExecuteResult)(header); } else { throw new InvalidExecuteStatement_1.InvalidExecuteStatementError('Unexpected non-ExecuteResult returned from execute method. Make sure to use query for SELECT statements.'); } }); } close() { var _a; return __awaiter(this, void 0, void 0, function* () { yield ((_a = this.pool) === null || _a === void 0 ? void 0 : _a.end()); }); } queryPrepared(sql, parameters) { return __awaiter(this, void 0, void 0, function* () { const preparedStatement = new MySQLPreparedStatement_1.MySQLPreparedStatement(sql, parameters); const { preparedSQL, preparedValues } = preparedStatement.prepare(); return this.promiseQuery(preparedSQL, preparedValues); }); } promiseQuery(sql, preparedValues) { return __awaiter(this, void 0, void 0, function* () { const [data] = yield this.pool.query(sql, preparedValues); return data; }); } isResultSetHeader(data) { return (data && data.hasOwnProperty('affectedRows') && data.hasOwnProperty('insertId')); } } exports.SlimNodeMySQLPool = SlimNodeMySQLPool; //# sourceMappingURL=SlimNodeMySQLPool.js.map