tdengine-client
Version:
A Node.js connector for TDengine.
852 lines (772 loc) • 33.1 kB
JavaScript
/**
* @jest-environment node
*/
const taos = require('../../tdengine');
const { getFeildsFromDll, buildInsertSql, getFieldArr, getResData } = require('../utils/utilTools')
const author = 'xiaolei';
const result = 'passed';
const fileName = __filename.slice(__dirname.length + 1);
const db = 'stmt_db';
// This is a taos connection
let conn;
// This is a Cursor
let c1;
// prepare data
let tsArr = [1642435200000, 1642435300000, 1642435400000, 1642435500000, 1642435600000];
let boolArr = [true, false, true, false, null];
let tinyIntArr = [-127, 3, 127, 0, null];
let smallIntArr = [-32767, 16, 32767, 0, null];
let intArr = [-2147483647, 17, 2147483647, 0, null];
let bigIntArr = [-9223372036854775807n, 9223372036854775807n, 18n, 0n, null];
let floatArr = [3.4028234663852886e+38, -3.4028234663852886e+38, 19, 0, null];
let doubleArr = [1.7976931348623157e+308, -1.7976931348623157e+308, 20, 0, null];
let binaryArr = ['TDengine_Binary', 'taosdata涛思数据', '~!@#$%^&*()', '', null];
let ncharArr = ['TDengine_Nchar', 'taosdata涛思数据', '~!@#$$%^&*()', '', null];
let uTinyIntArr = [0, 127, 254, 23, null];
let uSmallIntArr = [0, 256, 65534, 24, null];
let uIntArr = [0, 1233, 4294967294, 25, null];
let uBigIntArr = [0n, 36424354000001111n, 18446744073709551614n, 26n, null];
//prepare tag data.
let tagData1 = [true, 1, 32767, 1234555, -164243520000011111n, 214.02, 2.01, 'taosdata涛思数据', 'TDengine数据', 254, 65534, 4294967295, 164243520000011111n];
let tagData2 = [true, 2, 32767, 1234555, -164243520000011111n, 214.02, 2.01, 'taosdata涛思数据', 'TDengine数据', 254, 65534, 4294967295, 164243520000011111n];
let tagData3 = [true, 3, 32767, 1234555, -164243520000011111n, 214.02, 2.01, 'taosdata涛思数据', 'TDengine数据', 254, 65534, 4294967295, 164243520000011111n];
let jsonTag = ['{\"tag1\":\"jtag_1\",\"tag2\":1,\"tag3\":true}']
/**
* Combine individual array of every tdengine type that
* has been declared and then return a new array.
* @returns return data array.
*/
function getBindData() {
let bindDataArr = [];
for (let i = 0; i < 5; i++) {
bindDataArr.push(tsArr[i]);
bindDataArr.push(boolArr[i]);
bindDataArr.push(tinyIntArr[i]);
bindDataArr.push(smallIntArr[i]);
bindDataArr.push(intArr[i]);
bindDataArr.push(bigIntArr[i]);
bindDataArr.push(floatArr[i]);
bindDataArr.push(doubleArr[i]);
bindDataArr.push(binaryArr[i]);
bindDataArr.push(ncharArr[i]);
bindDataArr.push(uTinyIntArr[i]);
bindDataArr.push(uSmallIntArr[i]);
bindDataArr.push(uIntArr[i]);
bindDataArr.push(uBigIntArr[i]);
}
return bindDataArr;
}
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, resFields: 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 36500;`);
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("stmt_bind_single_param", () => {
test(`name:bindSingleParamWithOneTable;` +
`author:${author};` +
`desc:Using stmtBindSingleParam() bind one table in a batch;` +
`filename:${fileName};` +
`result:${result}`, () => {
let table = 'bindsingleparambatch_121';
let createSql = `create table if not exists ${table} ` +
`(ts timestamp,` +
`bl bool,` +
`i8 tinyint,` +
`i16 smallint,` +
`i32 int,` +
`i64 bigint,` +
`f32 float,` +
`d64 double,` +
`bnr binary(20),` +
`nchr nchar(20),` +
`u8 tinyint unsigned,` +
`u16 smallint unsigned,` +
`u32 int unsigned,` +
`u64 bigint unsigned` +
`)tags(` +
`t_bl bool,` +
`t_i8 tinyint,` +
`t_i16 smallint,` +
`t_i32 int,` +
`t_i64 bigint,` +
`t_f32 float,` +
`t_d64 double,` +
`t_bnr binary(20),` +
`t_nchr nchar(20),` +
`t_u8 tinyint unsigned,` +
`t_u16 smallint unsigned,` +
`t_u32 int unsigned,` +
`t_u64 bigint unsigned` +
`);`;
let insertSql = `insert into ? using ${table} tags(?,?,?,?,?,?,?,?,?,?,?,?,?) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?);`;
let querySql = `select * from ${table}`;
let expectResField = getFieldArr(getFeildsFromDll(createSql));
let expectResData = getResData(getBindData(), tagData1, 14);
// prepare tag
let tags = new taos.TaosMultiBindArr(14);
tags.multiBindBool([true]);
tags.multiBindTinyInt([1]);
tags.multiBindSmallInt([32767]);
tags.multiBindInt([1234555])
tags.multiBindBigInt([-164243520000011111n]);
tags.multiBindFloat([214.02]);
tags.multiBindDouble([2.01]);
tags.multiBindBinary(['taosdata涛思数据']);
tags.multiBindNchar(['TDengine数据']);
tags.multiBindUTinyInt([254]);
tags.multiBindUSmallInt([65534]);
tags.multiBindUInt([4294967295]);
tags.multiBindUBigInt([164243520000011111n]);
//Prepare TAOS_MULTI_BIND data
let mBind1 = new taos.TaosMultiBind();
executeUpdate(createSql);
c1.stmtInit();
c1.stmtPrepare(insertSql);
c1.stmtSetTbnameTags(`${table}_s01`, tags.getMultiBindArr());
c1.stmtBindSingleParamBatch(mBind1.multiBindTimestamp(tsArr), 0);
c1.stmtBindSingleParamBatch(mBind1.multiBindBool(boolArr), 1);
c1.stmtBindSingleParamBatch(mBind1.multiBindTinyInt(tinyIntArr), 2);
c1.stmtBindSingleParamBatch(mBind1.multiBindSmallInt(smallIntArr), 3);
c1.stmtBindSingleParamBatch(mBind1.multiBindInt(intArr), 4);
c1.stmtBindSingleParamBatch(mBind1.multiBindBigInt(bigIntArr), 5);
c1.stmtBindSingleParamBatch(mBind1.multiBindFloat(floatArr), 6);
c1.stmtBindSingleParamBatch(mBind1.multiBindDouble(doubleArr), 7);
c1.stmtBindSingleParamBatch(mBind1.multiBindBinary(binaryArr), 8);
c1.stmtBindSingleParamBatch(mBind1.multiBindNchar(ncharArr), 9);
c1.stmtBindSingleParamBatch(mBind1.multiBindUTinyInt(uTinyIntArr), 10);
c1.stmtBindSingleParamBatch(mBind1.multiBindUSmallInt(uSmallIntArr), 11);
c1.stmtBindSingleParamBatch(mBind1.multiBindUInt(uIntArr), 12);
c1.stmtBindSingleParamBatch(mBind1.multiBindUBigInt(uBigIntArr), 13);
c1.stmtAddBatch();
c1.stmtExecute();
c1.stmtClose();
let result = executeQuery(querySql);
let actualResData = result.resData;
let actualResFields = result.resFields;
//assert result data length
expect(expectResData.length).toEqual(actualResData.length);
//assert result data
expectResData.forEach((item, index) => {
expect(actualResData[index]).toEqual(item);
});
//assert result meta data
expectResField.forEach((item, index) => {
expect(actualResFields[index]).toEqual(item)
})
});
test(`name:bindSingleParamWithMultiTable;` +
`author:${author};` +
`desc:Using stmtBindSingleParam() bind multiple tables in a batch;` +
`filename:${fileName};` +
`result:${result}`, () => {
let table = 'bindsingleparambatch_m21';//bind multiple table to one batch
let createSql = `create table if not exists ${table} ` +
`(ts timestamp,` +
`bl bool,` +
`i8 tinyint,` +
`i16 smallint,` +
`i32 int,` +
`i64 bigint,` +
`f32 float,` +
`d64 double,` +
`bnr binary(20),` +
`nchr nchar(20),` +
`u8 tinyint unsigned,` +
`u16 smallint unsigned,` +
`u32 int unsigned,` +
`u64 bigint unsigned` +
`)tags(` +
`t_bl bool,` +
`t_i8 tinyint,` +
`t_i16 smallint,` +
`t_i32 int,` +
`t_i64 bigint,` +
`t_f32 float,` +
`t_d64 double,` +
`t_bnr binary(20),` +
`t_nchr nchar(20),` +
`t_u8 tinyint unsigned,` +
`t_u16 smallint unsigned,` +
`t_u32 int unsigned,` +
`t_u64 bigint unsigned` +
`);`;
let insertSql = `insert into ? using ${table} tags(?,?,?,?,?,?,?,?,?,?,?,?,?) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?);`;
let querySql1 = `select ts,bl,i8,i16,i32,i64,f32,d64,bnr,nchr,u8,u16,u32,u64,t_bl,t_i8,t_i16,t_i32,t_i64,t_f32,t_d64,t_bnr,t_nchr,t_u8,t_u16,t_u32,t_u64 from ${table}_s01;`;
let querySql2 = `select ts,bl,i8,i16,i32,i64,f32,d64,bnr,nchr,u8,u16,u32,u64,t_bl,t_i8,t_i16,t_i32,t_i64,t_f32,t_d64,t_bnr,t_nchr,t_u8,t_u16,t_u32,t_u64 from ${table}_s02;`;
let querySql3 = `select ts,bl,i8,i16,i32,i64,f32,d64,bnr,nchr,u8,u16,u32,u64,t_bl,t_i8,t_i16,t_i32,t_i64,t_f32,t_d64,t_bnr,t_nchr,t_u8,t_u16,t_u32,t_u64 from ${table}_s03;`;
let expectResField = getFieldArr(getFeildsFromDll(createSql));
let expectResData1 = getResData(getBindData(), tagData1, 14)
let expectResData2 = getResData(getBindData(), tagData2, 14)
let expectResData3 = getResData(getBindData(), tagData3, 14);
// prepare tag TAOS_BIND
let tag1 = new taos.TaosMultiBindArr(14);
tag1.multiBindBool([true]);
tag1.multiBindTinyInt([1]);
tag1.multiBindSmallInt([32767]);
tag1.multiBindInt([1234555]);
tag1.multiBindBigInt([-164243520000011111n]);
tag1.multiBindFloat([214.02]);
tag1.multiBindDouble([2.01]);
tag1.multiBindBinary(['taosdata涛思数据']);
tag1.multiBindNchar(['TDengine数据']);
tag1.multiBindUTinyInt([254]);
tag1.multiBindUSmallInt([65534]);
tag1.multiBindUInt([4294967295]);
tag1.multiBindUBigInt([164243520000011111n]);
let tag2 = new taos.TaosMultiBindArr(14);
tag2.multiBindBool([true]);
tag2.multiBindTinyInt([2]);
tag2.multiBindSmallInt([32767]);
tag2.multiBindInt([1234555]);
tag2.multiBindBigInt([-164243520000011111n]);
tag2.multiBindFloat([214.02]);
tag2.multiBindDouble([2.01]);
tag2.multiBindBinary(['taosdata涛思数据']);
tag2.multiBindNchar(['TDengine数据']);
tag2.multiBindUTinyInt([254]);
tag2.multiBindUSmallInt([65534]);
tag2.multiBindUInt([4294967295]);
tag2.multiBindUBigInt([164243520000011111n]);
let tag3 = new taos.TaosMultiBindArr(14);
tag3.multiBindBool([true]);
tag3.multiBindTinyInt([3]);
tag3.multiBindSmallInt([32767]);
tag3.multiBindInt([1234555]);
tag3.multiBindBigInt([-164243520000011111n]);
tag3.multiBindFloat([214.02]);
tag3.multiBindDouble([2.01]);
tag3.multiBindBinary(['taosdata涛思数据']);
tag3.multiBindNchar(['TDengine数据']);
tag3.multiBindUTinyInt([254]);
tag3.multiBindUSmallInt([65534]);
tag3.multiBindUInt([4294967295]);
tag3.multiBindUBigInt([164243520000011111n]);
//Prepare TAOS_MULTI_BIND data
let mBind = new taos.TaosMultiBind();
executeUpdate(createSql);
c1.stmtInit();
c1.stmtPrepare(insertSql);
// ========bind for 1st table =============
c1.stmtSetTbnameTags(`${table}_s01`, tag1.getMultiBindArr());
c1.stmtBindSingleParamBatch(mBind.multiBindTimestamp(tsArr), 0);
c1.stmtBindSingleParamBatch(mBind.multiBindBool(boolArr), 1);
c1.stmtBindSingleParamBatch(mBind.multiBindTinyInt(tinyIntArr), 2);
c1.stmtBindSingleParamBatch(mBind.multiBindSmallInt(smallIntArr), 3);
c1.stmtBindSingleParamBatch(mBind.multiBindInt(intArr), 4);
c1.stmtBindSingleParamBatch(mBind.multiBindBigInt(bigIntArr), 5);
c1.stmtBindSingleParamBatch(mBind.multiBindFloat(floatArr), 6);
c1.stmtBindSingleParamBatch(mBind.multiBindDouble(doubleArr), 7);
c1.stmtBindSingleParamBatch(mBind.multiBindBinary(binaryArr), 8);
c1.stmtBindSingleParamBatch(mBind.multiBindNchar(ncharArr), 9);
c1.stmtBindSingleParamBatch(mBind.multiBindUTinyInt(uTinyIntArr), 10);
c1.stmtBindSingleParamBatch(mBind.multiBindUSmallInt(uSmallIntArr), 11);
c1.stmtBindSingleParamBatch(mBind.multiBindUInt(uIntArr), 12);
c1.stmtBindSingleParamBatch(mBind.multiBindUBigInt(uBigIntArr), 13);
c1.stmtAddBatch();
// c1.stmtExecute();
// ========bind for 2nd table =============
c1.stmtSetTbnameTags(`${table}_s02`, tag2.getMultiBindArr());
c1.stmtBindSingleParamBatch(mBind.multiBindTimestamp(tsArr), 0);
c1.stmtBindSingleParamBatch(mBind.multiBindBool(boolArr), 1);
c1.stmtBindSingleParamBatch(mBind.multiBindTinyInt(tinyIntArr), 2);
c1.stmtBindSingleParamBatch(mBind.multiBindSmallInt(smallIntArr), 3);
c1.stmtBindSingleParamBatch(mBind.multiBindInt(intArr), 4);
c1.stmtBindSingleParamBatch(mBind.multiBindBigInt(bigIntArr), 5);
c1.stmtBindSingleParamBatch(mBind.multiBindFloat(floatArr), 6);
c1.stmtBindSingleParamBatch(mBind.multiBindDouble(doubleArr), 7);
c1.stmtBindSingleParamBatch(mBind.multiBindBinary(binaryArr), 8);
c1.stmtBindSingleParamBatch(mBind.multiBindNchar(ncharArr), 9);
c1.stmtBindSingleParamBatch(mBind.multiBindUTinyInt(uTinyIntArr), 10);
c1.stmtBindSingleParamBatch(mBind.multiBindUSmallInt(uSmallIntArr), 11);
c1.stmtBindSingleParamBatch(mBind.multiBindUInt(uIntArr), 12);
c1.stmtBindSingleParamBatch(mBind.multiBindUBigInt(uBigIntArr), 13);
c1.stmtAddBatch();
// c1.stmtExecute();
// ========bind for 3rd table =============
c1.stmtSetTbnameTags(`${table}_s03`, tag3.getMultiBindArr());
c1.stmtBindSingleParamBatch(mBind.multiBindTimestamp(tsArr), 0);
c1.stmtBindSingleParamBatch(mBind.multiBindBool(boolArr), 1);
c1.stmtBindSingleParamBatch(mBind.multiBindTinyInt(tinyIntArr), 2);
c1.stmtBindSingleParamBatch(mBind.multiBindSmallInt(smallIntArr), 3);
c1.stmtBindSingleParamBatch(mBind.multiBindInt(intArr), 4);
c1.stmtBindSingleParamBatch(mBind.multiBindBigInt(bigIntArr), 5);
c1.stmtBindSingleParamBatch(mBind.multiBindFloat(floatArr), 6);
c1.stmtBindSingleParamBatch(mBind.multiBindDouble(doubleArr), 7);
c1.stmtBindSingleParamBatch(mBind.multiBindBinary(binaryArr), 8);
c1.stmtBindSingleParamBatch(mBind.multiBindNchar(ncharArr), 9);
c1.stmtBindSingleParamBatch(mBind.multiBindUTinyInt(uTinyIntArr), 10);
c1.stmtBindSingleParamBatch(mBind.multiBindUSmallInt(uSmallIntArr), 11);
c1.stmtBindSingleParamBatch(mBind.multiBindUInt(uIntArr), 12);
c1.stmtBindSingleParamBatch(mBind.multiBindUBigInt(uBigIntArr), 13);
c1.stmtAddBatch();
c1.stmtExecute();
c1.stmtClose();
let result1 = executeQuery(querySql1);
let actualResData1 = result1.resData;
let actualResFields1 = result1.resFields;
//assert result data length for table 1
expect(expectResData1.length).toEqual(actualResData1.length);
//assert result data for table 1
expectResData1.forEach((item, index) => {
expect(item).toEqual(actualResData1[index]);
});
//assert result meta data for table 1
expectResField.forEach((item, index) => {
expect(item).toEqual(actualResFields1[index])
})
let result2 = executeQuery(querySql2);
let actualResData2 = result2.resData;
let actualResFields2 = result2.resFields;
//assert result data length for table 2
expect(expectResData2.length).toEqual(actualResData2.length);
//assert result data for table 2
expectResData2.forEach((item, index) => {
expect(item).toEqual(actualResData2[index]);
});
//assert result meta data for table 2
expectResField.forEach((item, index) => {
expect(item).toEqual(actualResFields2[index])
})
let result3 = executeQuery(querySql3);
let actualResData3 = result3.resData;
let actualResFields3 = result3.resFields;
//assert result data length for table 3
expect(expectResData3.length).toEqual(actualResData3.length);
//assert result data for table 3
expectResData3.forEach((item, index) => {
expect(item).toEqual(actualResData3[index]);
});
//assert result meta data for table 3
expectResField.forEach((item, index) => {
expect(item).toEqual(actualResFields3[index])
})
});
test('name:bindSingleParamWithJson' +
`author:${author};` +
`desc:Using stmtBindSingleParam() bind one table in a batch and set;` +
`filename:${fileName};` +
`result:${result}`, () => {
let table = 'bindsingleparambatch_121_j';
let createSql = `create table if not exists ${table} ` +
`(ts timestamp,` +
`bl bool,` +
`i8 tinyint,` +
`i16 smallint,` +
`i32 int,` +
`i64 bigint,` +
`f32 float,` +
`d64 double,` +
`bnr binary(20),` +
`nchr nchar(20),` +
`u8 tinyint unsigned,` +
`u16 smallint unsigned,` +
`u32 int unsigned,` +
`u64 bigint unsigned` +
`)tags(` +
`json_tag json`+
`);`;
let insertSql = `insert into ? using ${table} tags(?) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?);`;
let querySql = `select * from ${table}`;
let expectResField = getFieldArr(getFeildsFromDll(createSql));
let expectResData = getResData(getBindData(), jsonTag, 14);
// prepare json tag
let jTag = new taos.TaosMultiBindArr(1);
jTag.multiBindJSON(jsonTag);
//prepare TAOS_MULTI_BIND dat
let mBind1 = new taos.TaosMultiBind();
executeUpdate(createSql);
c1.stmtInit();
c1.stmtPrepare(insertSql);
c1.stmtSetTbnameTags(`${table}_s01`, jTag.getMultiBindArr());
c1.stmtBindSingleParamBatch(mBind1.multiBindTimestamp(tsArr), 0);
c1.stmtBindSingleParamBatch(mBind1.multiBindBool(boolArr), 1);
c1.stmtBindSingleParamBatch(mBind1.multiBindTinyInt(tinyIntArr), 2);
c1.stmtBindSingleParamBatch(mBind1.multiBindSmallInt(smallIntArr), 3);
c1.stmtBindSingleParamBatch(mBind1.multiBindInt(intArr), 4);
c1.stmtBindSingleParamBatch(mBind1.multiBindBigInt(bigIntArr), 5);
c1.stmtBindSingleParamBatch(mBind1.multiBindFloat(floatArr), 6);
c1.stmtBindSingleParamBatch(mBind1.multiBindDouble(doubleArr), 7);
c1.stmtBindSingleParamBatch(mBind1.multiBindBinary(binaryArr), 8);
c1.stmtBindSingleParamBatch(mBind1.multiBindNchar(ncharArr), 9);
c1.stmtBindSingleParamBatch(mBind1.multiBindUTinyInt(uTinyIntArr), 10);
c1.stmtBindSingleParamBatch(mBind1.multiBindUSmallInt(uSmallIntArr), 11);
c1.stmtBindSingleParamBatch(mBind1.multiBindUInt(uIntArr), 12);
c1.stmtBindSingleParamBatch(mBind1.multiBindUBigInt(uBigIntArr), 13);
c1.stmtAddBatch();
c1.stmtExecute();
c1.stmtClose();
let result = executeQuery(querySql);
let actualResData = result.resData;
let actualResFields = result.resFields;
//assert result data length
expect(expectResData.length).toEqual(actualResData.length);
//assert result data
expectResData.forEach((item, index) => {
expect(actualResData[index]).toEqual(item);
});
//assert result meta data
expectResField.forEach((item, index) => {
expect(actualResFields[index]).toEqual(item)
})
expect(2).toEqual(2)
})
})
describe("stmt_bind_para_batch", () => {
test(`name:bindParamBatchWithOneTable;` +
`author:${author};` +
`desc:Using stmtBindParamBatch() bind one table in a batch;` +
`filename:${fileName};` +
`result:${result}`, () => {
let table = 'bindparambatch_121';//bind one table to one batch
let createSql = `create table if not exists ${table} ` +
`(ts timestamp,` +
`bl bool,` +
`i8 tinyint,` +
`i16 smallint,` +
`i32 int,` +
`i64 bigint,` +
`f32 float,` +
`d64 double,` +
`bnr binary(20),` +
`nchr nchar(20),` +
`u8 tinyint unsigned,` +
`u16 smallint unsigned,` +
`u32 int unsigned,` +
`u64 bigint unsigned` +
`)tags(` +
`t_bl bool,` +
`t_i8 tinyint,` +
`t_i16 smallint,` +
`t_i32 int,` +
`t_i64 bigint,` +
`t_f32 float,` +
`t_d64 double,` +
`t_bnr binary(20),` +
`t_nchr nchar(20),` +
`t_u8 tinyint unsigned,` +
`t_u16 smallint unsigned,` +
`t_u32 int unsigned,` +
`t_u64 bigint unsigned` +
`);`;
let insertSql = `insert into ? using ${table} tags(?,?,?,?,?,?,?,?,?,?,?,?,?) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?);`;
let querySql = `select * from ${table}`;
let expectResField = getFieldArr(getFeildsFromDll(createSql));
let expectResData = getResData(getBindData(), tagData1, 14);
//prepare tag TAO_BIND
let tags = new taos.TaosMultiBindArr(14);
tags.multiBindBool([true]);
tags.multiBindTinyInt([1]);
tags.multiBindSmallInt([32767]);
tags.multiBindInt([1234555]);
tags.multiBindBigInt([-164243520000011111n]);
tags.multiBindFloat([214.02]);
tags.multiBindDouble([2.01]);
tags.multiBindBinary(['taosdata涛思数据']);
tags.multiBindNchar(['TDengine数据']);
tags.multiBindUTinyInt([254]);
tags.multiBindUSmallInt([65534]);
tags.multiBindUInt([4294967295]);
tags.multiBindUBigInt([164243520000011111n]);
//Prepare TAOS_MULTI_BIND data array
let mBinds = new taos.TaosMultiBindArr(14);
mBinds.multiBindTimestamp(tsArr);
mBinds.multiBindBool(boolArr);
mBinds.multiBindTinyInt(tinyIntArr);
mBinds.multiBindSmallInt(smallIntArr);
mBinds.multiBindInt(intArr);
mBinds.multiBindBigInt(bigIntArr);
mBinds.multiBindFloat(floatArr);
mBinds.multiBindDouble(doubleArr);
mBinds.multiBindBinary(binaryArr);
mBinds.multiBindNchar(ncharArr);
mBinds.multiBindUTinyInt(uTinyIntArr);
mBinds.multiBindUSmallInt(uSmallIntArr);
mBinds.multiBindUInt(uIntArr);
mBinds.multiBindUBigInt(uBigIntArr);
executeUpdate(createSql);
c1.stmtInit();
c1.stmtPrepare(insertSql);
c1.stmtSetTbnameTags(`${table}_s01`, tags.getMultiBindArr());
c1.stmtBindParamBatch(mBinds.getMultiBindArr());
c1.stmtAddBatch();
c1.stmtExecute();
c1.stmtClose();
let result = executeQuery(querySql);
let actualResData = result.resData;
let actualResFields = result.resFields;
//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:bindParamBatchWithMultiTable;` +
`author:${author};` +
`desc:Using stmtBindParamBatch() bind multiple tables in a batch;` +
`filename:${fileName};` +
`result:${result}`, () => {
let table = 'bindparambatch_m21';//bind multiple tables to one batch
let createSql = `create table if not exists ${table} ` +
`(ts timestamp,` +
`bl bool,` +
`i8 tinyint,` +
`i16 smallint,` +
`i32 int,` +
`i64 bigint,` +
`f32 float,` +
`d64 double,` +
`bnr binary(20),` +
`nchr nchar(20),` +
`u8 tinyint unsigned,` +
`u16 smallint unsigned,` +
`u32 int unsigned,` +
`u64 bigint unsigned` +
`)tags(` +
`t_bl bool,` +
`t_i8 tinyint,` +
`t_i16 smallint,` +
`t_i32 int,` +
`t_i64 bigint,` +
`t_f32 float,` +
`t_d64 double,` +
`t_bnr binary(20),` +
`t_nchr nchar(20),` +
`t_u8 tinyint unsigned,` +
`t_u16 smallint unsigned,` +
`t_u32 int unsigned,` +
`t_u64 bigint unsigned` +
`);`;
let insertSql = `insert into ? using ${table} tags(?,?,?,?,?,?,?,?,?,?,?,?,?) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?);`;
let querySql1 = `select ts,bl,i8,i16,i32,i64,f32,d64,bnr,nchr,u8,u16,u32,u64,t_bl,t_i8,t_i16,t_i32,t_i64,t_f32,t_d64,t_bnr,t_nchr,t_u8,t_u16,t_u32,t_u64 from ${table}_s01;`;
let querySql2 = `select ts,bl,i8,i16,i32,i64,f32,d64,bnr,nchr,u8,u16,u32,u64,t_bl,t_i8,t_i16,t_i32,t_i64,t_f32,t_d64,t_bnr,t_nchr,t_u8,t_u16,t_u32,t_u64 from ${table}_s02;`;
let querySql3 = `select ts,bl,i8,i16,i32,i64,f32,d64,bnr,nchr,u8,u16,u32,u64,t_bl,t_i8,t_i16,t_i32,t_i64,t_f32,t_d64,t_bnr,t_nchr,t_u8,t_u16,t_u32,t_u64 from ${table}_s03;`;
let expectResField = getFieldArr(getFeildsFromDll(createSql));
let expectResData1 = getResData(getBindData(), tagData1, 14);
let expectResData2 = getResData(getBindData(), tagData2, 14);
let expectResData3 = getResData(getBindData(), tagData3, 14);;
// prepare tag TAOS_BIND
let tag1 = new taos.TaosMultiBindArr(14);
tag1.multiBindBool([true]);
tag1.multiBindTinyInt([1]);
tag1.multiBindSmallInt([32767]);
tag1.multiBindInt([1234555]);
tag1.multiBindBigInt([-164243520000011111n]);
tag1.multiBindFloat([214.02]);
tag1.multiBindDouble([2.01]);
tag1.multiBindBinary(['taosdata涛思数据']);
tag1.multiBindNchar(['TDengine数据']);
tag1.multiBindUTinyInt([254]);
tag1.multiBindUSmallInt([65534]);
tag1.multiBindUInt([4294967295]);
tag1.multiBindUBigInt([164243520000011111n]);
let tag2 = new taos.TaosMultiBindArr(14);
tag2.multiBindBool([true]);
tag2.multiBindTinyInt([2]);
tag2.multiBindSmallInt([32767]);
tag2.multiBindInt([1234555]);
tag2.multiBindBigInt([-164243520000011111n]);
tag2.multiBindFloat([214.02]);
tag2.multiBindDouble([2.01]);
tag2.multiBindBinary(['taosdata涛思数据']);
tag2.multiBindNchar(['TDengine数据']);
tag2.multiBindUTinyInt([254]);
tag2.multiBindUSmallInt([65534]);
tag2.multiBindUInt([4294967295]);
tag2.multiBindUBigInt([164243520000011111n]);
let tag3 = new taos.TaosMultiBindArr(14);
tag3.multiBindBool([true]);
tag3.multiBindTinyInt([3]);
tag3.multiBindSmallInt([32767]);
tag3.multiBindInt([1234555]);
tag3.multiBindBigInt([-164243520000011111n]);
tag3.multiBindFloat([214.02]);
tag3.multiBindDouble([2.01]);
tag3.multiBindBinary(['taosdata涛思数据']);
tag3.multiBindNchar(['TDengine数据']);
tag3.multiBindUTinyInt([254]);
tag3.multiBindUSmallInt([65534]);
tag3.multiBindUInt([4294967295]);
tag3.multiBindUBigInt([164243520000011111n]);
//Prepare TAOS_MULTI_BIND data array
let mBinds = new taos.TaosMultiBindArr(14);
mBinds.multiBindTimestamp(tsArr);
mBinds.multiBindBool(boolArr);
mBinds.multiBindTinyInt(tinyIntArr);
mBinds.multiBindSmallInt(smallIntArr);
mBinds.multiBindInt(intArr);
mBinds.multiBindBigInt(bigIntArr);
mBinds.multiBindFloat(floatArr);
mBinds.multiBindDouble(doubleArr);
mBinds.multiBindBinary(binaryArr);
mBinds.multiBindNchar(ncharArr);
mBinds.multiBindUTinyInt(uTinyIntArr);
mBinds.multiBindUSmallInt(uSmallIntArr);
mBinds.multiBindUInt(uIntArr);
mBinds.multiBindUBigInt(uBigIntArr);
executeUpdate(createSql);
c1.stmtInit();
c1.stmtPrepare(insertSql);
// ===========bind for 1st table ==========
c1.stmtSetTbnameTags(`${table}_s01`, tag1.getMultiBindArr());
c1.stmtBindParamBatch(mBinds.getMultiBindArr());
c1.stmtAddBatch();
// c1.stmtExecute();
// ===========bind for 2nd table ==========
c1.stmtSetTbnameTags(`${table}_s02`, tag2.getMultiBindArr());
c1.stmtBindParamBatch(mBinds.getMultiBindArr());
c1.stmtAddBatch();
// c1.stmtExecute();
// ===========bind for 3rd table ==========
c1.stmtSetTbnameTags(`${table}_s03`, tag3.getMultiBindArr());
c1.stmtBindParamBatch(mBinds.getMultiBindArr());
c1.stmtAddBatch();
c1.stmtExecute();
c1.stmtClose();
let result1 = executeQuery(querySql1);
let actualResData1 = result1.resData;
let actualResFields1 = result1.resFields;
//assert result data length
expect(expectResData1.length).toEqual(actualResData1.length);
//assert result data
expectResData1.forEach((item, index) => {
expect(item).toEqual(actualResData1[index]);
});
//assert result meta data
expectResField.forEach((item, index) => {
expect(item).toEqual(actualResFields1[index])
})
let result2 = executeQuery(querySql2);
let actualResData2 = result2.resData;
let actualResFields2 = result2.resFields;
//assert result data length for table 2
expect(expectResData2.length).toEqual(actualResData2.length);
//assert result data for table 2
expectResData2.forEach((item, index) => {
expect(item).toEqual(actualResData2[index]);
});
//assert result meta data for table 2
expectResField.forEach((item, index) => {
expect(item).toEqual(actualResFields2[index])
})
let result3 = executeQuery(querySql3);
let actualResData3 = result3.resData;
let actualResFields3 = result3.resFields;
//assert result data length for table 3
expect(expectResData3.length).toEqual(actualResData3.length);
//assert result data for table 3
expectResData3.forEach((item, index) => {
expect(item).toEqual(actualResData3[index]);
});
//assert result meta data for table 3
expectResField.forEach((item, index) => {
expect(item).toEqual(actualResFields3[index])
})
});
test(`name:bindParamBatchWithJson`+
`author:${author};` +
`desc:Using stmtBindParamBatch() bind one json tag table in a batch;` +
`filename:${fileName};` +
`result:${result}`, () => {
let table = 'bindparambatch_121_j';//bind one table to one batch
let createSql = `create table if not exists ${table} ` +
`(ts timestamp,` +
`bl bool,` +
`i8 tinyint,` +
`i16 smallint,` +
`i32 int,` +
`i64 bigint,` +
`f32 float,` +
`d64 double,` +
`bnr binary(20),` +
`nchr nchar(20),` +
`u8 tinyint unsigned,` +
`u16 smallint unsigned,` +
`u32 int unsigned,` +
`u64 bigint unsigned` +
`)tags(` +
`json_tag json`+
`);`;
let insertSql = `insert into ? using ${table} tags(?) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?);`;
let querySql = `select * from ${table}`;
let expectResField = getFieldArr(getFeildsFromDll(createSql));
let expectResData = getResData(getBindData(), jsonTag, 14);
// prepare json tag
let jTags = new taos.TaosMultiBindArr(1);
jTags.multiBindJSON(jsonTag);
//Prepare TAOS_MULTI_BIND data array
let mBinds = new taos.TaosMultiBindArr(14);
mBinds.multiBindTimestamp(tsArr);
mBinds.multiBindBool(boolArr);
mBinds.multiBindTinyInt(tinyIntArr);
mBinds.multiBindSmallInt(smallIntArr);
mBinds.multiBindInt(intArr);
mBinds.multiBindBigInt(bigIntArr);
mBinds.multiBindFloat(floatArr);
mBinds.multiBindDouble(doubleArr);
mBinds.multiBindBinary(binaryArr);
mBinds.multiBindNchar(ncharArr);
mBinds.multiBindUTinyInt(uTinyIntArr);
mBinds.multiBindUSmallInt(uSmallIntArr);
mBinds.multiBindUInt(uIntArr);
mBinds.multiBindUBigInt(uBigIntArr);
executeUpdate(createSql);
c1.stmtInit();
c1.stmtPrepare(insertSql);
c1.stmtSetTbnameTags(`${table}_s01`, jTags.getMultiBindArr());
c1.stmtBindParamBatch(mBinds.getMultiBindArr());
c1.stmtAddBatch();
c1.stmtExecute();
c1.stmtClose();
let result = executeQuery(querySql);
let actualResData = result.resData;
let actualResFields = result.resFields;
//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])
})
})
})