UNPKG

tdengine-client

Version:

A Node.js connector for TDengine.

599 lines (525 loc) 22.8 kB
const taos = require('../../tdengine'); const { getFeildsFromDll: getFelidFromDll, buildInsertSql, getFieldArr, getResData } = require('../utils/utilTools') const author = 'xiaolei'; const result = 'passed'; const fileName = __filename.slice(__dirname.length + 1); const db = 'node_db'; // This is a taos connection let conn; // This is a Cursor let c1; function executeUpdate(sql,printFlag = false) { if(printFlag === true){ console.log(sql); } c1.execute(sql,{'quiet':false}); } function executeQuery(sql,printFlag = false) { if(printFlag === true){ console.log(sql); } c1.execute(sql, { quiet: true }) var data = c1.fetchall({'quiet':false}); let fields = c1.fields; let resArr = []; data.forEach(row => { row.forEach(data => { if (data instanceof Date) { resArr.push(data.taosTimestamp()); } else { resArr.push(data); } }) }) return { resData: resArr, resFeilds: fields }; } beforeAll(() => { conn = taos.connect({ host: "127.0.0.1", user: "root", password: "taosdata", config: "/etc/taos", port: 10 }); c1 = conn.cursor(); executeUpdate(`create database if not exists ${db} keep 3650;`); executeUpdate(`use ${db};`); }); // Clears the database and adds some testing data. // Jest will wait for this promise to resolve before running tests. afterAll(() => { executeUpdate(`drop database if exists ${db};`); c1.close(); conn.close(); }); describe("test unsigned type", () => { test(`name:test unsinged tinnyint ntable;` + `author:${author};` + `desc:create,insert,query with unsigned tinnyint;` + `filename:${fileName};` + `result:${result}`, () => { let createSql = "create table if not exists utinnytest(ts timestamp,ut tinyint unsigned,i4 int,rownum nchar(20));"; executeUpdate(createSql); let expectResField = getFieldArr(getFelidFromDll(createSql)); let expectResData = [1641827743305, 254, 124, 'row1' , 1641827743306, 0, -123, 'row2' , 1641827743307, 54, 0, 'row3']; let insertSql = buildInsertSql('utinnytest', '', expectResData, [], 4); executeUpdate(insertSql); let result = executeQuery("select * from utinnytest;"); let actualResData = result.resData; let actualResFields = result.resFeilds; //assert result data length expect(expectResData.length).toEqual(actualResData.length); //assert result data expectResData.forEach((item, index) => { expect(item).toEqual(actualResData[index]); }); //assert result meta data expectResField.forEach((item, index) => { expect(item).toEqual(actualResFields[index]) }) }); test(`name:test unsinged smallint ntable;` + `author:${author};` + `desc:create,insert,query with unsigned smallint;` + `filename:${fileName};` + `result:${result}`, () => { let createSql = "create table if not exists usmalltest(ts timestamp,ut smallint unsigned,i4 int,rownum nchar(20));"; executeUpdate(createSql); let expectResField = getFieldArr(getFelidFromDll(createSql)); let expectResData = [1641827743305, 65534, 124, 'row1', 1641827743306, 0, -123, 'row2', 1641827743307, 79, 0, 'row3']; let insertSql = buildInsertSql('usmalltest', '', expectResData, [], 4); executeUpdate(insertSql); let result = executeQuery("select * from usmalltest;"); let actualResData = result.resData; let actualResFields = result.resFeilds; //assert result data length expect(expectResData.length).toEqual(actualResData.length); //assert result data expectResData.forEach((item, index) => { expect(item).toEqual(actualResData[index]); }); //assert result meta data expectResField.forEach((item, index) => { expect(item).toEqual(actualResFields[index]) }) }); test(`name:test unsinged int ntable;` + `author:${author};` + `desc:create,insert,query with unsigned int;` + `filename:${fileName};` + `result:${result}`, () => { let createSql = "create table if not exists uinttest(ts timestamp,ui int unsigned,i4 int,rownum nchar(20));"; executeUpdate(createSql); let expectResField = getFieldArr(getFelidFromDll(createSql)); let expectResData = [1641827743305, 4294967294, 2147483647, 'row1', 1641827743306, 0, -2147483647, 'row2', 1641827743307, 105, 0, 'row3']; let insertSql = buildInsertSql('uinttest', '', expectResData, [], 4); executeUpdate(insertSql); let result = executeQuery("select * from uinttest;"); let actualResData = result.resData; let actualResFields = result.resFeilds; //assert result data length expect(expectResData.length).toEqual(actualResData.length); //assert result data expectResData.forEach((item, index) => { expect(item).toEqual(actualResData[index]); }); //assert result meta data expectResField.forEach((item, index) => { expect(item).toEqual(actualResFields[index]) }) }); test(`name:test unsinged bigint ntable;` + `author:${author};` + `desc:create,insert,query with unsigned bigint;` + `filename:${fileName};` + `result:${result}`, () => { let createSql = "create table if not exists ubigtest(ts timestamp,ui bigint unsigned,i8 bigint,rownum nchar(20));"; executeUpdate(createSql); let expectResField = getFieldArr(getFelidFromDll(createSql)); let expectResData = [1641827743305, 18446744073709551614n, 9223372036854775807n, 'row1', 1641827743306, 0n, -9223372036854775807n, 'row2', 1641827743307, 130n, 0n, 'row3']; let insertSql = buildInsertSql('ubigtest', '', expectResData, [], 4); executeUpdate(insertSql); let result = executeQuery("select * from ubigtest;"); let actualResData = result.resData; let actualResFields = result.resFeilds; //assert result data length expect(expectResData.length).toEqual(actualResData.length); //assert result data expectResData.forEach((item, index) => { expect(item).toEqual(actualResData[index]); }); //assert result meta data expectResField.forEach((item, index) => { expect(item).toEqual(actualResFields[index]) }) }); test(`name:test unsinged type ntable;` + `author:${author};` + `desc:create,insert,query with mutiple unsinged type;` + `filename:${fileName};` + `result:${result}`, () => { let createSql = "create table if not exists unsigntest(ts timestamp,ut tinyint unsigned,us smallint unsigned,ui int unsigned,ub bigint unsigned,bi bigint);"; executeUpdate(createSql); let expectResField = getFieldArr(getFelidFromDll(createSql)); let expectResData = [1641827743305, 254, 65534, 4294967294, 18446744073709551614n, 9223372036854775807n, 1641827743306, 0, 0, 0, 0n, -9223372036854775807n]; let insertSql = buildInsertSql('unsigntest', '', expectResData, [], 6); executeUpdate(insertSql); let result = executeQuery("select * from unsigntest;"); // console.log(`result.data:${result.resData}`); // console.log(`result.feilds:${result.resFeilds}`); let actualResData = result.resData; let actualResFields = result.resFeilds; //assert result data length expect(expectResData.length).toEqual(actualResData.length); //assert result data expectResData.forEach((item, index) => { expect(item).toEqual(actualResData[index]); }); //assert result meta data expectResField.forEach((item, index) => { expect(item).toEqual(actualResFields[index]) }) }); test(`name:test unsinged type stable max value;` + `author:${author};` + `desc:this is a description;` + `filename:${fileName};` + `result:${result}`, () => { let createSql = "create table if not exists max_unsigned_tag_test" + "(ts timestamp" + ",ut tinyint unsigned" + ",us smallint unsigned" + ",ui int unsigned" + ",ub bigint unsigned" + ",bi bigint)" + "tags(" + "ut1 tinyint unsigned" + ",us2 smallint unsigned" + ",ui4 int unsigned" + ",ubi8 bigint unsigned" + ",desc_nchr nchar(200)" + ");"; executeUpdate(createSql); let expectResField = getFieldArr(getFelidFromDll(createSql)); let colData = [1641827743305, 254, 65534, 4294967294, 18446744073709551614n, 9223372036854775807n, 1641827743306, 0, 0, 0, 0n, -9223372036854775807n, 1641827743307, 201, 44, 2, 8n, 1531n]; let tagData = [254, 65534, 4294967294, 18446744073709551614n, 'max value of unsinged type tag'] let insertSql = buildInsertSql('max_unsigned_tag_test_sub1', 'max_unsigned_tag_test', colData, tagData, 6); let expectResData = getResData(colData, tagData, 6); executeUpdate(insertSql); let result = executeQuery("select * from max_unsigned_tag_test;"); let actualResData = result.resData; let actualResFields = result.resFeilds; //assert result data length expect(expectResData.length).toEqual(actualResData.length); //assert result data expectResData.forEach((item, index) => { expect(item).toEqual(actualResData[index]); }); //assert result meta data expectResField.forEach((item, index) => { expect(item).toEqual(actualResFields[index]) }) }); test(`name:test unsinged type stable minimal value;` + `author:${author};` + `desc:this is a description;` + `filename:${fileName};` + `result:${result}`, () => { let createSql = "create table if not exists min_unsigned_tag_test" + "(ts timestamp" + ",ut tinyint unsigned" + ",us smallint unsigned" + ",ui int unsigned" + ",ub bigint unsigned" + ",bi bigint)" + "tags(" + "ut1 tinyint unsigned" + ",us2 smallint unsigned" + ",ui4 int unsigned" + ",ubi8 bigint unsigned" + ",desc_nchr nchar(200)" + ");"; executeUpdate(createSql); let expectResField = getFieldArr(getFelidFromDll(createSql)); let colData = [1641827743305, 254, 65534, 4294967294, 18446744073709551614n, 9223372036854775807n, 1641827743306, 0, 0, 0, 0n, -9223372036854775807n, 1641827743307, 201, 44, 2, 8n, 1531n]; let tagData = [0, 0, 0, 0n, 'minimal value of unsinged type tag'] let insertSql = buildInsertSql('min_unsigned_tag_test_sub1', 'min_unsigned_tag_test', colData, tagData, 6); let expectResData = getResData(colData, tagData, 6); executeUpdate(insertSql); let result = executeQuery("select * from min_unsigned_tag_test;"); let actualResData = result.resData; let actualResFields = result.resFeilds; //assert result data length //console.log("expectResData.length:" + expectResData.length + " actualResData.length:" + actualResData.length); expect(expectResData.length).toEqual(actualResData.length); //assert result data expectResData.forEach((item, index) => { expect(item).toEqual(actualResData[index]); }); //assert result meta data expectResField.forEach((item, index) => { expect(item).toEqual(actualResFields[index]) }) }); test(`name:test unsinged type stable mixed value;` + `author:${author};` + `desc:this is a description;` + `filename:${fileName};` + `result:${result}`, () => { let createSql = "create table if not exists mix_unsigned_tag_test" + "(ts timestamp" + ",ut tinyint unsigned" + ",us smallint unsigned" + ",ui int unsigned" + ",ub bigint unsigned" + ",bi bigint)" + "tags(" + "ut1 tinyint unsigned" + ",us2 smallint unsigned" + ",ui4 int unsigned" + ",ubi8 bigint unsigned" + ",desc_nchr nchar(200)" + ");"; executeUpdate(createSql); let expectResField = getFieldArr(getFelidFromDll(createSql)); let colData = [1641827743305, 254, 65534, 4294967294, 18446744073709551614n, 9223372036854775807n, 1641827743306, 0, 0, 0, 0n, -9223372036854775807n, 1641827743307, 201, 44, 2, 8n, 1531n]; let tagData = [1, 20, 300, 4000n, 'mixed value of unsinged type tag'] let insertSql = buildInsertSql('mix_unsigned_tag_test_sub1', 'mix_unsigned_tag_test', colData, tagData, 6); let expectResData = getResData(colData, tagData, 6); executeUpdate(insertSql); let result = executeQuery("select * from mix_unsigned_tag_test;"); let actualResData = result.resData; let actualResFields = result.resFeilds; //assert result data length expect(expectResData.length).toEqual(actualResData.length); //assert result data expectResData.forEach((item, index) => { expect(item).toEqual(actualResData[index]); }); //assert result meta data expectResField.forEach((item, index) => { expect(item).toEqual(actualResFields[index]) }) }); }) describe("test cn character", () => { test(`name:test cn ntable;` + `author:${author};` + `desc:create,insert,query with cn characters;` + `filename:${fileName};` + `result:${result}`, () => { createSql = "create table if not exists nchartest(ts timestamp,val int,text binary(200),detail nchar(200));" executeUpdate(createSql); let expectResField = getFieldArr(getFelidFromDll(createSql)); let expectResData = [1641827743305, 1, 'taosdata', 'tdengine' , 1641827743306, 2, 'tasdata', '涛思数据' , 1641827743307, 3, '涛思数据', 'tdengine' , 1641827743308, 4, '涛思数据taosdata', 'tdengine' , 1641827743309, 5, '涛思数据taosdata', 'tdengine涛思数据']; let insertSql = buildInsertSql('nchartest', '', expectResData, [], 4); executeUpdate(insertSql); let result = executeQuery("select * from nchartest;"); let actualResData = result.resData; let actualResFields = result.resFeilds; //assert result data length expect(expectResData.length).toEqual(actualResData.length); //assert result data expectResData.forEach((item, index) => { expect(item).toEqual(actualResData[index]); }); //assert result meta data expectResField.forEach((item, index) => { expect(item).toEqual(actualResFields[index]) }) }) test(`name:test cn stable;` + `author:${author};` + `desc:create,insert,query with cn characters;` + `filename:${fileName};` + `result:${result}`, () => { createSql = "create table if not exists nchartest_s(ts timestamp,val int,text binary(200),detail nchar(200))tags(tag_bi binary(50),tag_nchr nchar(50));" executeUpdate(createSql); let expectResField = getFieldArr(getFelidFromDll(createSql)); let colData = [1641827743305, 1, 'taosdata', 'tdengine' , 1641827743306, 2, 'tasdata', '涛思数据' , 1641827743307, 3, '涛思数据', 'tdengine' , 1641827743308, 4, '涛思数据taosdata', 'tdengine' , 1641827743309, 5, '涛思数据taosdata', 'tdengine涛思数据']; let tagData = ['tags涛思', '数据tags']; let insertSql = buildInsertSql('sb_1', 'nchartest_s', colData, tagData, 4); let expectResData = getResData(colData, tagData, 4); executeUpdate(insertSql); let result = executeQuery("select * from nchartest_s;"); let actualResData = result.resData; let actualResFields = result.resFeilds; //assert result data length expect(expectResData.length).toEqual(actualResData.length); //assert result data expectResData.forEach((item, index) => { expect(item).toEqual(actualResData[index]); }); //assert result meta data expectResField.forEach((item, index) => { expect(item).toEqual(actualResFields[index]) }) }) }) describe("test support microsecond", () => { test(`name:ms support ntable;` + `author:${author};` + `desc:test normal table supports microseconds;` + `filename:${fileName};` + `result:${result}`, () => { let db = 'nodejs_support_ms_ntable'; let table = 'us_test_ntable'; let expectResData = [1625801548423914, 1, 1625801548423914, 1625801548423915, 2, 1625801548423914, 1625801548423916, 3, 1625801548423914, 1625801548423917, 4, 1625801548423914]; let createDB = `create database if not exists ${db} keep 3650 precision \'us\';`; let createSql = `create table if not exists ${db}.${table} (ts timestamp, seq int,record_date timestamp);`; let dropDB = `drop database if exists ${db};`; let insertSql = buildInsertSql(db + '.' + table, '',expectResData, [], 3); let querySql = `select * from ${db}.${table};`; let expectResField = getFieldArr(getFelidFromDll(createSql)); executeUpdate(dropDB); executeUpdate(createDB); executeUpdate(createSql); executeUpdate(insertSql); let result = executeQuery(querySql); let actualResData = result.resData; let actualResFields = result.resFeilds; //assert result data length expect(expectResData.length).toEqual(actualResData.length); //assert result data expectResData.forEach((item, index) => { expect(item).toEqual(actualResData[index]); }); //assert result meta data expectResField.forEach((item, index) => { expect(item).toEqual(actualResFields[index]) }) executeUpdate(dropDB); }); test(`name:ms support stable;` + `author:${author};` + `desc:test stable supports microseconds;` + `filename:${fileName};` + `result:${result}`, () => { let db = 'nodejs_support_ms_stable'; let stable = 'us_test_stable'; let table = "sub_1"; let colData = [1625801548423914, 1, 1625801548423914, 1625801548423915, 2, 1625801548423914, 1625801548423916, 3, 1625801548423914, 1625801548423917, 4, 1625801548423914]; let tagData = [1,1625801548423914]; let createDB = `create database if not exists ${db} keep 3650 precision \'us\';`; let createSql = `create table if not exists ${db}.${stable} (ts timestamp,seq int,`+ `record_date timestamp)tags(id int,htime timestamp);`; let dropDB = `drop database if exists ${db};`; let insertSql = buildInsertSql(db + '.' + table, db + '.' + stable, colData,tagData, 3); let querySql = `select * from ${db}.${stable};`; let expectResField = getFieldArr(getFelidFromDll(createSql)); let expectResData = getResData(colData, tagData, 3); executeUpdate(dropDB); executeUpdate(createDB); executeUpdate(createSql); executeUpdate(insertSql); let result = executeQuery(querySql); let actualResData = result.resData; let actualResFields = result.resFeilds; //assert result data length expect(expectResData.length).toEqual(actualResData.length); //assert result data expectResData.forEach((item, index) => { expect(item).toEqual(actualResData[index]); }); //assert result meta data expectResField.forEach((item, index) => { expect(item).toEqual(actualResFields[index]) }) executeUpdate(dropDB); }) }) describe("test support nanosecond", () => { test(`name:ns support ntable;` + `author:${author};` + `desc:test normal table supports nanoseconds;` + `filename:${fileName};` + `result:${result}`, () => { let db = 'nodejs_support_ns_ntable'; let table = 'ns_test_ntable'; let expectResData = [1625801548423914100, 1, 1625801548423914 ,1625801548423914200, 2, 1625801548423914 ]; let createDB = `create database if not exists ${db} keep 3650 precision \'ns\';`; let createSql = `create table if not exists ${db}.${table} (ts timestamp, seq int,record_date timestamp);`; let dropDB = `drop database if exists ${db};`; let insertSql = buildInsertSql(db + '.' + table, '',expectResData, [], 3); let querySql = `select * from ${db}.${table};`; let expectResField = getFieldArr(getFelidFromDll(createSql)); executeUpdate(dropDB); executeUpdate(createDB); executeUpdate(createSql); executeUpdate(insertSql); console.log(querySql); let result = executeQuery(querySql); let actualResData = result.resData; let actualResFields = result.resFeilds; //assert result data length expect(expectResData.length).toEqual(actualResData.length); //assert result data expectResData.forEach((item, index) => { expect(item).toEqual(actualResData[index]); }); //assert result meta data expectResField.forEach((item, index) => { expect(item).toEqual(actualResFields[index]) }) executeUpdate(dropDB); }); test(`name:ns support stable;` + `author:${author};` + `desc:test stable supports nanoseconds;` + `filename:${fileName};` + `result:${result}`, () => { let db = 'nodejs_support_ns_stable'; let stable = 'ns_test_stable'; let table = "sub_1"; let colData = [1625801548423914100, 1, 1625801548423914, 1625801548423914200, 2, 1625801548423914]; let tagData = [1,1625801548423914100]; let createDB = `create database if not exists ${db} keep 3650 precision \'ns\';`; let createSql = `create table if not exists ${db}.${stable} (ts timestamp,seq int,`+ `record_date timestamp)tags(id int,htime timestamp);`; let dropDB = `drop database if exists ${db};`; let insertSql = buildInsertSql(db + '.' + table, db + '.' + stable, colData,tagData, 3); let querySql = `select * from ${db}.${stable};`; let expectResField = getFieldArr(getFelidFromDll(createSql)); let expectResData = getResData(colData, tagData, 3); executeUpdate(dropDB); executeUpdate(createDB); executeUpdate(createSql); executeUpdate(insertSql); let result = executeQuery(querySql); let actualResData = result.resData; let actualResFields = result.resFeilds; //assert result data length expect(expectResData.length).toEqual(actualResData.length); //assert result data expectResData.forEach((item, index) => { expect(item).toEqual(actualResData[index]); }); //assert result meta data expectResField.forEach((item, index) => { expect(item).toEqual(actualResFields[index]) }) executeUpdate(dropDB); }) })