Skip to content

Commit 46fdffe

Browse files
author
Quentin Presley
committed
Rebase
2 parents 661bbcf + 2501b28 commit 46fdffe

9 files changed

+72
-40
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ Install a newer compiler or upgrade older one.
1515

1616
- You need not to install any db2 ODBC client driver for connectivity. Just install ibm_db and it is ready for use.
1717

18+
- Recommended versions of node.js is V4.x, V6.x and V7.x. Support for node.js V0.10.x is deprecated on Windows and will be discontinued from next release.
19+
1820
## Install
1921
------------
2022

build.zip

519 KB
Binary file not shown.

installer/driverInstall.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,16 @@ var download_file_httpget = function(file_url) {
3939
var ODBC_BINDINGS_V10 = 'build\/Release\/odbc_bindings.node.0.10.36';
4040
var ODBC_BINDINGS_V12 = 'build\/Release\/odbc_bindings.node.0.12.7';
4141
var ODBC_BINDINGS_V4 = 'build\/Release\/odbc_bindings.node.4.6.1';
42+
var ODBC_BINDINGS_V6 = 'build\/Release\/odbc_bindings.node.6.9.1';
4243

4344
/*
4445
* odbcBindingsNode will consist of the node binary-
4546
* file name according to the node version in the system.
4647
*/
4748
var odbcBindingsNode = (Number(process.version.match(/^v(\d+\.\d+)/)[1]) < 0.12) && ODBC_BINDINGS_V10 ||
4849
(Number(process.version.match(/^v(\d+\.\d+)/)[1]) < 4.0) && ODBC_BINDINGS_V12 ||
49-
(Number(process.version.match(/^v(\d+\.\d+)/)[1]) < 5.0) && ODBC_BINDINGS_V4 || ODBC_BINDINGS ;
50+
(Number(process.version.match(/^v(\d+\.\d+)/)[1]) < 5.0) && ODBC_BINDINGS_V4 ||
51+
(Number(process.version.match(/^v(\d+\.\d+)/)[1]) < 7.0) && ODBC_BINDINGS_V6 || ODBC_BINDINGS ;
5052

5153
readStream = fs.createReadStream(BUILD_FILE);
5254

lib/odbc.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ Database.prototype.query = function (query, params, cb)
330330
resultset = outparams;
331331
multipleResultSet = true;
332332
}
333-
if (typeof(result) === 'object') {
333+
if (result && typeof(result) === 'object') {
334334
fetchMore();
335335
} else {
336336
cb(initialErr, resultset);

test/test-call-async.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ ibmdb.open(cn, function (err, conn)
1313
var query = "CaLL " + schema + ".proc1(?, ?, ?)";
1414
if(err) return console.log(err);
1515
try {
16-
conn.querySync("drop procedure " + schema + ".proc1");
16+
conn.querySync("drop procedure " + schema + ".proc1(INT, INT, VARCHAR(20))");
1717
console.log("proc1 dropped.\n");
1818
} catch(e) {}
1919
conn.querySync("create procedure " + schema + ".proc1 " +
@@ -30,14 +30,14 @@ ibmdb.open(cn, function (err, conn)
3030
else {
3131
console.log("return value = ", result[0], result[1]);
3232
}
33-
conn.querySync("drop procedure " + schema + ".proc1");
33+
conn.querySync("drop procedure " + schema + ".proc1(INT, INT, VARCHAR(20))");
3434
assert.deepEqual(result, [ 4, 'verygood' ]);
3535
});
3636
conn.querySync("create or replace procedure " + schema + ".proc2 (IN v1 INTEGER) BEGIN END");
3737
query = "call " + schema + ".proc2(?)";
3838
conn.query({"sql":query, "params" : [param1]}, function(err, result){
3939
if(err) console.log(err);
40-
conn.querySync("drop procedure " + schema + ".proc2");
40+
conn.querySync("drop procedure " + schema + ".proc2(INT)");
4141
conn.closeSync();
4242
assert.equal(result.length, 0);
4343
console.log('done');

test/test-call-stmt.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ ibmdb.open(cn, function (err, conn)
1212
{
1313
if(err) return console.log(err);
1414
try {
15-
conn.querySync("drop procedure " + schema + ".proc1");
15+
conn.querySync("drop procedure " + schema + ".proc1(INT, INT, VARCHAR(20))");
1616
} catch(e) {}
1717

1818
conn.querySync("create or replace procedure " + schema + ".proc1 " +
@@ -26,11 +26,11 @@ ibmdb.open(cn, function (err, conn)
2626
assert.deepEqual(result, [ 1, 'verygood' ]);
2727
console.log("Output Parameters V2 = ", result[0], ", V3 = ", result[1]);
2828

29-
conn.querySync("drop procedure " + schema + ".proc1");
29+
conn.querySync("drop procedure " + schema + ".proc1(INT, INT, VARCHAR(20))");
3030
conn.querySync("create or replace procedure " + schema + ".proc2 (IN v1 INTEGER) BEGIN END");
3131
result = conn.querySync("call " + schema + ".proc2(?)", [param1]);
3232
assert.deepEqual(result, []);
33-
conn.querySync("drop procedure " + schema + ".proc2");
33+
conn.querySync("drop procedure " + schema + ".proc2(INT)");
3434
conn.closeSync();
3535
console.log('done');
3636
});

test/test-prepareSync-multiple-execution.js

+37-13
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
var common = require("./common")
2-
, odbc = require("../")
3-
, db = new odbc.Database()
2+
, ibmdb = require("../")
43
, assert = require("assert")
54
;
65

76
var count = 0;
87
var iterations = 10;
98

10-
db.openSync(common.connectionString);
9+
var conn = ibmdb.openSync(common.connectionString);
1110

12-
common.dropTables(db, function () {
13-
common.createTables(db, function (err, data) {
11+
common.dropTables(conn, function () {
12+
common.createTables(conn, function (err, data) {
1413
if (err) {
1514
console.log(err);
1615

1716
return finish(2);
1817
}
1918

20-
var stmt = db.prepareSync("insert into " + common.tableName + " (colint, coltext) VALUES (?, ?)");
19+
conn.beginTransactionSync();
20+
var stmt = conn.prepareSync("insert into " + common.tableName + " (colint, coltext) VALUES (?, ?)");
2121
assert.equal(stmt.constructor.name, "ODBCStatement");
2222

2323
recursive(stmt);
@@ -27,7 +27,7 @@ common.dropTables(db, function () {
2727
function finish(retValue) {
2828
console.log("finish exit value: %s", retValue);
2929

30-
db.closeSync();
30+
conn.closeSync();
3131
process.exit(retValue || 0);
3232
}
3333

@@ -51,18 +51,42 @@ function recursive (stmt) {
5151
result.closeSync();
5252
count += 1;
5353

54-
console.log("count %s, iterations %s", count, iterations);
54+
console.log("Executed iteration %s out of %s.", count, iterations);
5555

56-
if (count <= iterations) {
56+
if (count < iterations) {
5757
setTimeout(function(){
5858
recursive(stmt);
5959
},100);
6060
}
6161
else {
62-
console.log(db.querySync("select * from " + common.tableName));
63-
64-
common.dropTables(db, function () {
65-
return finish(0);
62+
console.log("Inserted Rows = ");
63+
console.log(conn.querySync("select * from " + common.tableName));
64+
try {
65+
var result = stmt.bindSync(['abc', 'hello world']);
66+
assert.equal(result, true);
67+
}
68+
catch (e) {
69+
console.log(e.message);
70+
finish(5);
71+
}
72+
73+
stmt.execute(function (err, result) {
74+
if (err) { // Expecting Error here.
75+
console.log(err.message);
76+
conn.rollbackTransactionSync();
77+
var data = conn.querySync("select * from " + common.tableName);
78+
console.log("After roolback, selected rows = ", data);
79+
assert.deepEqual(data, []);
80+
common.dropTables(conn, function () { return finish(0); });
81+
}
82+
else
83+
{
84+
result.closeSync();
85+
conn.commitTransactionSync();
86+
var data = conn.querySync("select * from " + common.tableName);
87+
console.log("After commit, selected rows = ", data);
88+
common.dropTables(conn, function () { return finish(6); });
89+
}
6690
});
6791
}
6892
});

test/test-sp-resultset-execute.js

+12-10
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,23 @@
55
var common = require("./common")
66
, ibmdb = require("../")
77
, assert = require("assert")
8-
;
8+
, schema = common.connectionObject.CURRENTSCHEMA;
99

10-
var proc1 = "create or replace procedure proc2 ( IN v1 int, INOUT v2 varchar(30) ) dynamic result sets 2 language sql begin declare cr1 cursor with return for select c1, c2 from mytab1; declare cr2 cursor with return for select c2 from mytab1; open cr1; open cr2; set v2 = 'success'; end";
11-
var proc2 = "create or replace procedure proc2 ( IN v1 int, INOUT v2 varchar(30) ) language sql begin set v2 = 'success'; end";
12-
var proc3 = "create or replace procedure proc2 ( IN v1 int, IN v2 varchar(30) ) dynamic result sets 2 language sql begin declare cr1 cursor with return for select c1, c2 from mytab1; declare cr2 cursor with return for select c2 from mytab1; open cr1; open cr2; end";
13-
var query = "call proc2(?, ?)";
10+
if(schema == undefined) schema = "NEWTON";
11+
12+
var proc1 = "create or replace procedure " + schema + ".proc2 ( IN v1 int, INOUT v2 varchar(30) ) dynamic result sets 2 language sql begin declare cr1 cursor with return for select c1, c2 from " + schema + ".mytab1; declare cr2 cursor with return for select c2 from " + schema + ".mytab1; open cr1; open cr2; set v2 = 'success'; end";
13+
var proc2 = "create or replace procedure " + schema + ".proc2 ( IN v1 int, INOUT v2 varchar(30) ) language sql begin set v2 = 'success'; end";
14+
var proc3 = "create or replace procedure " + schema + ".proc2 ( IN v1 int, IN v2 varchar(30) ) dynamic result sets 2 language sql begin declare cr1 cursor with return for select c1, c2 from " + schema + ".mytab1; declare cr2 cursor with return for select c2 from " + schema + ".mytab1; open cr1; open cr2; end";
15+
var query = "call " + schema + ".proc2(?, ?)";
1416
var result;
1517
//ibmdb.debug(true);
1618
ibmdb.open(common.connectionString, {fetchMode : 3}, function (err, conn) {
1719
if(err) return console.log(err);
1820
try {
19-
conn.querySync("drop table mytab1");
21+
conn.querySync("drop table " + schema + ".mytab1");
2022
} catch (e) {};
21-
conn.querySync({"sql":"create table mytab1 (c1 int, c2 varchar(20))", "noResults":true});
22-
conn.querySync("insert into mytab1 values (2, 'bimal'), (3, 'kumar')");
23+
conn.querySync({"sql":"create table " + schema + ".mytab1 (c1 int, c2 varchar(20))", "noResults":true});
24+
conn.querySync("insert into " + schema + ".mytab1 values (2, 'bimal'), (3, 'kumar')");
2325
param2 = {ParamType:"INOUT", DataType:1, Data:"abc", Length:50};
2426

2527
// Create SP with INOUT param and 2 Result Set.
@@ -136,8 +138,8 @@ ibmdb.open(common.connectionString, {fetchMode : 3}, function (err, conn) {
136138
stmt.closeSync();
137139

138140
// Do Cleanup.
139-
conn.querySync("drop procedure proc2 ( INT, VARCHAR(30) )");
140-
conn.querySync("drop table mytab1");
141+
conn.querySync("drop procedure " + schema + ".proc2 ( INT, VARCHAR(30) )");
142+
conn.querySync("drop table " + schema + ".mytab1");
141143
// Close connection in last only.
142144
conn.close(function (err) { console.log("done.");});
143145
});

test/test-sp-resultset.js

+11-9
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
var common = require("./common")
22
, ibmdb = require("../")
33
, assert = require("assert")
4-
;
4+
, schema = common.connectionObject.CURRENTSCHEMA;
55

6-
var proc1 = "create or replace procedure proc2 ( IN v1 int, INOUT v2 varchar(30) ) dynamic result sets 2 language sql begin declare cr1 cursor with return for select c1, c2 from mytab1; declare cr2 cursor with return for select c2 from mytab1; open cr1; open cr2; set v2 = 'success'; end";
7-
var proc2 = "create or replace procedure proc2 ( IN v1 int, INOUT v2 varchar(30) ) language sql begin set v2 = 'success'; end";
8-
var proc3 = "create or replace procedure proc2 ( IN v1 int, IN v2 varchar(30) ) dynamic result sets 2 language sql begin declare cr1 cursor with return for select c1, c2 from mytab1; declare cr2 cursor with return for select c2 from mytab1; open cr1; open cr2; end";
9-
var query = "call proc2(?, ?)";
6+
if(schema == undefined) schema = "NEWTON";
7+
8+
var proc1 = "create or replace procedure " + schema + ".proc2 ( IN v1 int, INOUT v2 varchar(30) ) dynamic result sets 2 language sql begin declare cr1 cursor with return for select c1, c2 from " + schema + ".mytab1; declare cr2 cursor with return for select c2 from " + schema + ".mytab1; open cr1; open cr2; set v2 = 'success'; end";
9+
var proc2 = "create or replace procedure " + schema + ".proc2 ( IN v1 int, INOUT v2 varchar(30) ) language sql begin set v2 = 'success'; end";
10+
var proc3 = "create or replace procedure " + schema + ".proc2 ( IN v1 int, IN v2 varchar(30) ) dynamic result sets 2 language sql begin declare cr1 cursor with return for select c1, c2 from " + schema + ".mytab1; declare cr2 cursor with return for select c2 from " + schema + ".mytab1; open cr1; open cr2; end";
11+
var query = "call " + schema + ".proc2(?, ?)";
1012
var result;
1113
ibmdb.open(common.connectionString, {fetchMode : 3}, function (err, conn) {
1214
if(err) return console.log(err);
1315
try {
14-
conn.querySync({"sql":"create table mytab1 (c1 int, c2 varchar(20))", "noResults":true});
16+
conn.querySync({"sql":"create table " + schema + ".mytab1 (c1 int, c2 varchar(20))", "noResults":true});
1517
} catch (e) {};
16-
conn.querySync("insert into mytab1 values (2, 'bimal'), (3, 'kumar')");
18+
conn.querySync("insert into " + schema + ".mytab1 values (2, 'bimal'), (3, 'kumar')");
1719
param2 = {ParamType:"INOUT", DataType:1, Data:"abc", Length:50};
1820

1921
// Create SP with INOUT param and 2 Result Set.
@@ -65,8 +67,8 @@ ibmdb.open(common.connectionString, {fetchMode : 3}, function (err, conn) {
6567
}
6668

6769
// Do Cleanup.
68-
conn.querySync("drop procedure proc2 ( INT, VARCHAR(30) )");
69-
conn.querySync("drop table mytab1");
70+
conn.querySync("drop procedure " + schema + ".proc2 ( INT, VARCHAR(30) )");
71+
conn.querySync("drop table " + schema + ".mytab1");
7072
// Close connection in last only.
7173
conn.close(function (err) { console.log("done.");});
7274
});

0 commit comments

Comments
 (0)