db-conn-hdb
Version:
Database Connecton and Pool implementation for SAP HANA hdb
148 lines • 5.65 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 });
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