From c5cc49331247a16e474d3dfdd7144d596b8b5580 Mon Sep 17 00:00:00 2001 From: zyyang Date: Tue, 29 Dec 2020 16:09:19 +0800 Subject: [PATCH 1/4] [TD-2302]: fix nodejs exception when query a null value --- src/connector/nodejs/test/testNull.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/connector/nodejs/test/testNull.js diff --git a/src/connector/nodejs/test/testNull.js b/src/connector/nodejs/test/testNull.js new file mode 100644 index 0000000000..ae3938a634 --- /dev/null +++ b/src/connector/nodejs/test/testNull.js @@ -0,0 +1,10 @@ +const taos = require('../tdengine'); +var conn = taos.connect({host: "127.0.0.1", user: "root", password: "taosdata", config: "/etc/taos", port: 6030}); +var c1 = conn.cursor(); + + +c1.query('select * from test.weather', true).then(function (result) { + result.pretty(); +}); + +conn.close(); \ No newline at end of file From f9dd3a97bb09af7a45aeb94da7ed854f5a372c77 Mon Sep 17 00:00:00 2001 From: zyyang Date: Tue, 29 Dec 2020 16:54:41 +0800 Subject: [PATCH 2/4] change --- src/connector/nodejs/nodetaos/cinterface.js | 34 +++++++++++++-------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/connector/nodejs/nodetaos/cinterface.js b/src/connector/nodejs/nodetaos/cinterface.js index 7e58f4eb02..995babdb2b 100644 --- a/src/connector/nodejs/nodetaos/cinterface.js +++ b/src/connector/nodejs/nodetaos/cinterface.js @@ -367,11 +367,15 @@ CTaosInterface.prototype.fetchBlock = function fetchBlock(result, fields) { let offset = 0; for (let i = 0; i < fields.length; i++) { pdata = ref.reinterpret(pblock,8,i*8); - pdata = ref.ref(pdata.readPointer()); - if (!convertFunctions[fields[i]['type']] ) { - throw new errors.DatabaseError("Invalid data type returned from database"); - } - blocks[i] = convertFunctions[fields[i]['type']](pdata, 1, fieldlens[i], offset, isMicro); + if(ref.isNull(pdata.readPointer())){ + blocks[i] = new Array(); + }else{ + pdata = ref.ref(pdata.readPointer()); + if (!convertFunctions[fields[i]['type']] ) { + throw new errors.DatabaseError("Invalid data type returned from database"); + } + blocks[i] = convertFunctions[fields[i]['type']](pdata, 1, fieldlens[i], offset, isMicro); + } } return {blocks: blocks, num_of_rows:Math.abs(num_of_rows)} } @@ -437,14 +441,18 @@ CTaosInterface.prototype.fetch_rows_a = function fetch_rows_a(result, callback, } if (numOfRows2 > 0){ for (let i = 0; i < fields.length; i++) { - if (!convertFunctions[fields[i]['type']] ) { - throw new errors.DatabaseError("Invalid data type returned from database"); - } - let prow = ref.reinterpret(row,8,i*8); - prow = prow.readPointer(); - prow = ref.ref(prow); - blocks[i] = convertFunctions[fields[i]['type']](prow, 1, fieldlens[i], offset, isMicro); - //offset += fields[i]['bytes'] * numOfRows2; + if(ref.isNull(pdata.readPointer())){ + blocks[i] = new Array(); + }else{ + if (!convertFunctions[fields[i]['type']] ) { + throw new errors.DatabaseError("Invalid data type returned from database"); + } + let prow = ref.reinterpret(row,8,i*8); + prow = prow.readPointer(); + prow = ref.ref(prow); + blocks[i] = convertFunctions[fields[i]['type']](prow, 1, fieldlens[i], offset, isMicro); + //offset += fields[i]['bytes'] * numOfRows2; + } } } callback(param2, result2, numOfRows2, blocks); From b71885472716c8ea7a84e0b22afbdcf85c186b6a Mon Sep 17 00:00:00 2001 From: zyyang Date: Tue, 29 Dec 2020 17:12:17 +0800 Subject: [PATCH 3/4] change --- src/connector/nodejs/package.json | 2 +- src/connector/nodejs/test/test.js | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/connector/nodejs/package.json b/src/connector/nodejs/package.json index 3f0600a09c..2d5cf45e1d 100644 --- a/src/connector/nodejs/package.json +++ b/src/connector/nodejs/package.json @@ -1,6 +1,6 @@ { "name": "td2.0-connector", - "version": "2.0.1", + "version": "2.0.4", "description": "A Node.js connector for TDengine.", "main": "tdengine.js", "scripts": { diff --git a/src/connector/nodejs/test/test.js b/src/connector/nodejs/test/test.js index 27c35bb481..bf4bb2c541 100644 --- a/src/connector/nodejs/test/test.js +++ b/src/connector/nodejs/test/test.js @@ -84,10 +84,19 @@ q.execute().then(function(r) { r.pretty(); }); + +// test query null value +c1.execute("create table if not exists td_connector_test.weather(ts timestamp, temperature float, humidity int) tags(location nchar(64))"); +c1.execute("insert into t1 using weather tags('北京') values(now, 11.11, 11)"); +c1.execute("insert into t1(ts, temperature) values(now, 22.22)"); +c1.execute("insert into t1(ts, humidity) values(now, 33)"); +c1.query('select * from test.t1', true).then(function (result) { + result.pretty(); +}); + var q = c1.query('select * from td_connector_test.weather'); console.log(q.query); q.execute().then(function(r) { - //console.log(r); r.pretty(); }); From 8af97223ed7c0f3b6887b2cd2106c6a667569f95 Mon Sep 17 00:00:00 2001 From: zyyang Date: Tue, 29 Dec 2020 17:12:50 +0800 Subject: [PATCH 4/4] change --- src/connector/nodejs/test/testNull.js | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 src/connector/nodejs/test/testNull.js diff --git a/src/connector/nodejs/test/testNull.js b/src/connector/nodejs/test/testNull.js deleted file mode 100644 index ae3938a634..0000000000 --- a/src/connector/nodejs/test/testNull.js +++ /dev/null @@ -1,10 +0,0 @@ -const taos = require('../tdengine'); -var conn = taos.connect({host: "127.0.0.1", user: "root", password: "taosdata", config: "/etc/taos", port: 6030}); -var c1 = conn.cursor(); - - -c1.query('select * from test.weather', true).then(function (result) { - result.pretty(); -}); - -conn.close(); \ No newline at end of file