slim-node-mysql
Version:
MySQL database class to abstract pooling and prepared statements
75 lines • 3.82 kB
JavaScript
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
;