node-odbc
Version:
ODBC interface for NodeJS
474 lines (473 loc) • 22.2 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const assert = require("assert");
const odbc = require("../lib/node-odbc");
const mod = require("./module");
mod.connection.forEach((connection) => {
describe(`query type checker -> promise ${connection.name} (toSingle)`, function () {
this.timeout(connection.timeout);
it("insert null -> fetch null", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a int )`).toSingle();
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, null).toSingle();
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toSingle();
assert.ok(r.a == null);
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert bool -> fetch bool", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let val = Math.random() > 0.5 ? true : false;
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a bit )`).toSingle();
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, val).toSingle();
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toSingle();
assert.ok(r.a == val);
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert int32 -> fetch int32", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let num = mod.getRandomInt(250, 50);
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a int )`).toSingle();
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, num).toSingle();
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toSingle();
assert.ok(r.a == num);
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert int64 -> fetch int32", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let num = mod.getRandomInt(4200000000, 2147483647);
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a bigint )`).toSingle();
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, num).toSingle();
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toSingle();
assert.ok(r.a == num);
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert double -> fetch double", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let num = Math.random() * 250;
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a float )`).toSingle();
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, num).toSingle();
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toSingle();
assert.ok(r.a == num);
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert string -> fetch string (char)", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let str = mod.getRandomString(100);
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a char(128) )`).toSingle();
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, str).toSingle();
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toSingle();
for (var i = 0; i < 128; i++) {
if (r.a == undefined) {
throw "failed";
}
let rc = r.a.charCodeAt(i);
let c;
if (i >= str.length) {
c = " ".charCodeAt(0);
}
else {
c = str.charCodeAt(i);
}
assert(rc == c);
}
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert string -> fetch string (nchar)", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let str = mod.getRandomString(100);
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a nchar(128) )`).toSingle();
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, str).toSingle();
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toSingle();
for (var i = 0; i < 128; i++) {
if (r.a == undefined) {
throw "failed";
}
let rc = r.a.charCodeAt(i);
let c;
if (i >= str.length) {
c = " ".charCodeAt(0);
}
else {
c = str.charCodeAt(i);
}
assert(rc == c);
}
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert string -> fetch string (varchar)", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let str = mod.getRandomString(100);
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a varchar(128) )`).toSingle();
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, str).toSingle();
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toSingle();
assert(r.a == str, `invalid string ${r.a} : ${str}`);
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert string -> fetch string (nvarchar)", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let str = mod.getRandomString(100);
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a nvarchar(128) )`).toSingle();
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, str).toSingle();
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toSingle();
assert(r.a == str);
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert date -> fetch date", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let date = new Date(Date.now());
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a datetime )`).toSingle();
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, odbc.makeDateValue(date)).toSingle();
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toSingle();
if (r.a == undefined) {
throw "failed";
}
assert(r.a.getFullYear() == date.getFullYear());
assert(r.a.getMonth() == date.getMonth());
assert(r.a.getDate() == date.getDate());
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert date -> fetch date", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let date = new Date(2017, 6, 7, 5, 46, 12, 623);
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a datetime )`).toSingle();
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, date).toSingle();
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toSingle();
if (r.a == undefined) {
throw "failed";
}
assert.ok(r.a.getFullYear() == date.getFullYear());
assert.ok(r.a.getMonth() == date.getMonth());
assert.ok(r.a.getDate() == date.getDate());
assert.ok(r.a.getHours() == date.getHours());
assert.ok(r.a.getMinutes() == date.getMinutes());
assert.ok(r.a.getSeconds() == date.getSeconds());
assert.ok(r.a.getMilliseconds() == date.getMilliseconds());
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert numeric -> fetch numeric", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let num = odbc.makeNumericValue(18, 0, true, new Uint8Array([25, 20, 30, 40]));
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a numeric(18, 0) )`).toSingle();
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, num).toSingle();
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toSingle();
if (r.a == undefined) {
throw "failed";
}
assert.ok(r.a.precision == num.precision, "invalid precision");
assert.ok(r.a.scale == num.scale, "invalid scale");
assert.ok(r.a.sign == num.sign, "invalid sign");
for (var i = 0; i < r.a.value.length; i++) {
if (i < num.value.length) {
assert.ok(r.a.value[i] == num.value[i]);
}
}
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
//it("insert buffer -> fetch buffer", (done) => {
// let tblName = mod.getRandomTableName();
// let con = new odbc.Connection()
// .connect(connection.connectionString);
// let buf = Buffer.alloc(128);
// for (var i = 0; i < 128; i++) {
// buf[i] = Math.floor(Math.random() * 127);
// }
// let r = async () => {
// await con.prepareQuery(`CREATE TABLE ${tblName}( a varbinary(128) )`).toSingle();
// await con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, buf).toSingle();
// let r = await con.prepareQuery(`SELECT * FROM ${tblName}`).toSingle<{ a: Buffer }>();
// assert.ok(r.a.length == buf.length);
// for (var i = 0; i < r.a.length; i++) {
// assert.ok(r.a[i] == buf[i], `invalid symbol ${r.a[i]} : ${buf[i]}`);
// }
// };
// r().then(() => {
// done();
// }).catch((err) => {
// done(err);
// });
//});
});
//> todo create nullable tests with all data types
describe(`query type checker -> promise ${connection.name} (toArray)`, function () {
this.timeout(connection.timeout);
it("insert null -> fetch null", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let val = new Array();
for (let i = 0; i < mod.getRandomInt(50, 15); i++) {
val.push(null);
}
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a int )`).toSingle();
for (let i of val) {
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, null).toSingle();
}
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toArray();
assert.ok(r.length == val.length);
for (let i = 0; i < r.length; i++) {
assert.ok(r[i].a == val[i]);
}
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert bool -> fetch bool", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let val = new Array();
for (let i = 0; i < mod.getRandomInt(50, 15); i++) {
val.push(Math.random() >= 0.5 ? true : false);
}
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a bit )`).toSingle();
for (let i of val) {
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, i).toSingle();
}
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toArray();
assert.ok(r.length == val.length);
for (let i = 0; i < r.length; i++) {
assert.ok(r[i].a == val[i], `invalid type: ${r[i]} ${val[i]}`);
}
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert int32 -> fetch int32", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let val = [];
for (let i = 0; i < mod.getRandomInt(50, 15); i++) {
val.push(mod.getRandomInt(300, 500));
}
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a int )`).toSingle();
for (let i of val) {
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, i).toSingle();
}
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toArray();
assert.ok(r.length == val.length);
for (let i = 0; i < r.length; i++) {
assert.ok(r[i].a == val[i]);
}
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert int64 -> fetch int64", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let val = [];
for (let i = 0; i < mod.getRandomInt(50, 15); i++) {
val.push(mod.getRandomInt(4200000000, 2147483647));
}
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a bigint )`).toSingle();
for (let i of val) {
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, i).toSingle();
}
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toArray();
assert.ok(r.length == val.length);
for (let i = 0; i < r.length; i++) {
assert.ok(r[i].a == val[i]);
}
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert double -> fetch double", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let val = [];
for (let i = 0; i < mod.getRandomInt(50, 15); i++) {
val.push(Math.random() * 250);
}
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a float )`).toSingle();
for (let i of val) {
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, i).toSingle();
}
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toArray();
assert.ok(r.length == val.length);
for (let i = 0; i < r.length; i++) {
assert.ok(r[i].a == val[i]);
}
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert string -> fetch string(varchar)", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let val = [];
for (let i = 0; i < mod.getRandomInt(50, 15); i++) {
val.push(mod.getRandomString(120));
}
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a varchar(128) )`).toSingle();
for (let i of val) {
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, i).toSingle();
}
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toArray();
assert.ok(r.length == val.length);
for (let i = 0; i < r.length; i++) {
assert.ok(r[i].a == val[i]);
}
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
it("insert string -> fetch string(nvarchar)", (done) => {
let tblName = mod.getRandomTableName();
let con = new odbc.Connection()
.connect(connection.connectionString);
let val = [];
for (let i = 0; i < mod.getRandomInt(50, 15); i++) {
val.push(mod.getRandomString(120));
}
let r = () => __awaiter(this, void 0, void 0, function* () {
yield con.prepareQuery(`CREATE TABLE ${tblName}( a nvarchar(128) )`).toSingle();
for (let i of val) {
yield con.prepareQuery(`INSERT INTO ${tblName}(a)VALUES(?)`, i).toSingle();
}
let r = yield con.prepareQuery(`SELECT * FROM ${tblName}`).toArray();
assert.ok(r.length == val.length);
for (let i = 0; i < r.length; i++) {
assert.ok(r[i].a == val[i]);
}
});
r().then(() => {
done();
}).catch((err) => {
done(err);
});
});
});
});
;