UNPKG

db-conn-hdb

Version:

Database Connecton and Pool implementation for SAP HANA hdb

148 lines 5.65 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 }); const db_conn_1 = require("db-conn"); const buffer_1 = require("buffer"); const HdbColumnType_1 = require("./HdbColumnType"); const hdb = require("hdb"); class HdbConnection { constructor(client) { this.client = client; } close() { return __awaiter(this, void 0, void 0, function* () { this.client.end(); delete this.client; }); } convertColumnMetaData(colMeta) { let rt = {}; rt.name = colMeta.columnName; switch (colMeta.dataType) { case HdbColumnType_1.HdbColumnType.INTEGER: rt.type = db_conn_1.SqlType.integer; break; case HdbColumnType_1.HdbColumnType.NVARCHAR: rt.type = db_conn_1.SqlType.varchar; break; case HdbColumnType_1.HdbColumnType.DECIMAL: rt.type = db_conn_1.SqlType.decimal; break; case HdbColumnType_1.HdbColumnType.TIMESTAMP: rt.type = db_conn_1.SqlType.timestamp; break; //default: //throw Error(`undefined column type ${colMeta.dataType}`) } return rt; } convertResultSetMetaData(statement) { const rt = []; for (let i in statement.resultSetMetadata) { const srcColMeta = statement.resultSetMetadata[i]; const tgtColMeta = this.convertColumnMetaData(srcColMeta); rt.push(tgtColMeta); } return rt; } execute(sql, params) { return __awaiter(this, void 0, void 0, function* () { const thisConn = this; if (params === undefined) { params = []; } return new Promise((resolve, reject) => { this.client.prepare(sql, function (err, statement) { if (err) { reject(err); return; } statement.exec(params, function (err, rows) { if (err) { reject(err); return; } const rt = {}; if (isNaN(rows) == false) { rt.affectedRows = rows; } if (Array.isArray(rows)) { rt.data = rows; rt.metadata = thisConn.convertResultSetMetaData(statement); for (const index in rt.data) { const obj = rt.data[index]; for (const name in obj) { const value = obj[name]; if (buffer_1.Buffer.isBuffer(value) == false) { continue; } obj[name] = value.toString(); } } } statement.drop(function (err) { /* istanbul ignore next */ if (err) { reject(err); return; } resolve(rt); }); }); }); }); }); } executeQuery(sql, params) { return __awaiter(this, void 0, void 0, function* () { const rt = yield this.execute(sql, params); if (rt.data === undefined) { throw new Error("No data returned"); } return rt.data; }); } setAutoCommit(autoCommit) { return __awaiter(this, void 0, void 0, function* () { this.client.setAutoCommit(autoCommit); }); } commit() { return __awaiter(this, void 0, void 0, function* () { const that = this; return new Promise((resolve, reject) => { that.client.commit(function (err) { if (err) { reject(err); return; } resolve(); }); }); }); } rollback() { return __awaiter(this, void 0, void 0, function* () { const that = this; return new Promise((resolve, reject) => { that.client.rollback(function (err) { if (err) { reject(err); return; } resolve(); }); }); }); } } exports.HdbConnection = HdbConnection; //# sourceMappingURL=HdbConnection.js.map