未验证 提交 9b824a0a 编写于 作者: X xiaolei li 提交者: GitHub

[TD-13201]<test>:test cases for Node.js stmt (#10360)

* [TD-13201]<test>:test cases for Node.js stmt

* [TD-13201]<test>:update nodejs stmt test cases.

* [TD-13201]<test>:fix node.js test cases:replace blob to nchr

* [TD-13201]<test>nodejs remove useless case01
上级 6a767f85
......@@ -32,7 +32,7 @@ function stmtBindParamBatchSample() {
`f32 float,` +
`d64 double,` +
`bnr binary(20),` +
`blob nchar(20),` +
`nchr nchar(20),` +
`u8 tinyint unsigned,` +
`u16 smallint unsigned,` +
`u32 int unsigned,` +
......@@ -46,7 +46,7 @@ function stmtBindParamBatchSample() {
`t_f32 float,` +
`t_d64 double,` +
`t_bnr binary(20),` +
`t_blob nchar(20),` +
`t_nchr nchar(20),` +
`t_u8 tinyint unsigned,` +
`t_u16 smallint unsigned,` +
`t_u32 int unsigned,` +
......@@ -89,7 +89,7 @@ function stmtBindParamBatchSample() {
tags.bindNchar('TDengine数据');
tags.bindUTinyInt(254);
tags.bindUSmallInt(65534);
tags.bindUInt(4294967290 / 2);
tags.bindUInt(4294967290);
tags.bindUBigInt(164243520000011111n);
cursor.stmtInit();
......
......@@ -34,7 +34,7 @@ function stmtBindParamSample() {
`f32 float,` +
`d64 double,` +
`bnr binary(20),` +
`blob nchar(20),` +
`nchr nchar(20),` +
`u8 tinyint unsigned,` +
`u16 smallint unsigned,` +
`u32 int unsigned,` +
......
......@@ -33,7 +33,7 @@ function stmtSingleParaBatchSample() {
`f32 float,` +
`d64 double,` +
`bnr binary(20),` +
`blob nchar(20),` +
`nchr nchar(20),` +
`u8 tinyint unsigned,` +
`u16 smallint unsigned,` +
`u32 int unsigned,` +
......
......@@ -32,7 +32,7 @@ function stmtUseResultSample() {
`f32 float,` +
`d64 double,` +
`bnr binary(20),` +
`blob nchar(20),` +
`nchr nchar(20),` +
`u8 tinyint unsigned,` +
`u16 smallint unsigned,` +
`u32 int unsigned,` +
......
......@@ -34,7 +34,7 @@ function stmtBindParamSample(){
`f32 float,`+
`d64 double,`+
`bnr binary(20),`+
`blob nchar(20),`+
`nchr nchar(20),`+
`u8 tinyint unsigned,`+
`u16 smallint unsigned,`+
`u32 int unsigned,`+
......
......@@ -452,7 +452,8 @@ class TaosMultiBind {
if (element == null || element == undefined) {
ref.set(mbindIsNullBuf, index * ref.types.char.size, 1, ref.types.char);
} else {
ref.writeInt64LE(mbindBufferBuf, index * ref.types.uint64.size, element.toString())
ref.writeUInt64LE(mbindBufferBuf, index * ref.types.uint64.size, element.toString())
ref.set(mbindIsNullBuf, index * ref.types.char.size, 0, ref.types.char);
}
......
......@@ -222,7 +222,7 @@ describe("test unsigned type", () => {
",us2 smallint unsigned" +
",ui4 int unsigned" +
",ubi8 bigint unsigned" +
",desc_blob nchar(200)" +
",desc_nchr nchar(200)" +
");";
executeUpdate(createSql);
let expectResField = getFieldArr(getFeildsFromDll(createSql));
......@@ -268,7 +268,7 @@ describe("test unsigned type", () => {
",us2 smallint unsigned" +
",ui4 int unsigned" +
",ubi8 bigint unsigned" +
",desc_blob nchar(200)" +
",desc_nchr nchar(200)" +
");";
executeUpdate(createSql);
let expectResField = getFieldArr(getFeildsFromDll(createSql));
......@@ -315,7 +315,7 @@ describe("test unsigned type", () => {
",us2 smallint unsigned" +
",ui4 int unsigned" +
",ubi8 bigint unsigned" +
",desc_blob nchar(200)" +
",desc_nchr nchar(200)" +
");";
executeUpdate(createSql);
let expectResField = getFieldArr(getFeildsFromDll(createSql));
......@@ -384,7 +384,7 @@ describe("test cn character", () => {
`desc:create,insert,query with cn characters;` +
`filename:${fileName};` +
`result:${result}`, () => {
createSql = "create table if not exists nchartest_s(ts timestamp,value int,text binary(200),detail nchar(200))tags(tag_bi binary(50),tag_blob nchar(50));"
createSql = "create table if not exists nchartest_s(ts timestamp,value int,text binary(200),detail nchar(200))tags(tag_bi binary(50),tag_nchr nchar(50));"
executeUpdate(createSql);
let expectResField = getFieldArr(getFeildsFromDll(createSql));
let colData = [1641827743305, 1, 'taosdata', 'tdengine'
......
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);
// This is a taos connection
let conn;
// This is a Cursor
let c1;
// prepare data
let dbName = 'node_test_stmt_db';
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, 4294967290 / 2, 164243520000011111n];
let tagData2 = [true, 2, 32767, 1234555, -164243520000011111n, 214.02, 2.01, 'taosdata涛思数据', 'TDengine数据', 254, 65534, 4294967290 / 2, 164243520000011111n];
let tagData3 = [true, 3, 32767, 1234555, -164243520000011111n, 214.02, 2.01, 'taosdata涛思数据', 'TDengine数据', 254, 65534, 4294967290 / 2, 164243520000011111n];
/**
* 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) {
console.log(sql);
c1.execute(sql);
}
function executeQuery(sql) {
c1.execute(sql, { quiet: true })
var data = c1.fetchall();
let fields = c1.fields;
let resArr = [];
data.forEach(row => {
row.forEach(data => {
if (data instanceof Date) {
// console.log("date obejct:"+data.valueOf());
resArr.push(data.taosTimestamp());
} else {
// console.log("not date:"+data);
resArr.push(data);
}
// console.log(data instanceof Date)
})
})
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 ${dbName} keep 3650;`);
executeUpdate(`use ${dbName};`);
});
// 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 ${dbName};`);
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 TAOS_BIND
let tagBind1 = new taos.TaosBind(14);
tagBind1.bindBool(true);
tagBind1.bindTinyInt(1);
tagBind1.bindSmallInt(32767);
tagBind1.bindInt(1234555);
tagBind1.bindBigInt(-164243520000011111n);
tagBind1.bindFloat(214.02);
tagBind1.bindDouble(2.01);
tagBind1.bindBinary('taosdata涛思数据');
tagBind1.bindNchar('TDengine数据');
tagBind1.bindUTinyInt(254);
tagBind1.bindUSmallInt(65534);
tagBind1.bindUInt(4294967290 / 2);
tagBind1.bindUBigInt(164243520000011111n);
//Prepare TAOS_MULTI_BIND data
let mBind1 = new taos.TaosMultiBind();
executeUpdate(createSql);
c1.stmtInit();
c1.stmtPrepare(insertSql);
c1.stmtSetTbnameTags(`${table}_s01`, tagBind1.getBind());
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.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: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 querySql = `select * from ${table}`;
let expectResField = getFieldArr(getFeildsFromDll(createSql));
let expectResData = getResData(getBindData(), tagData1, 14).concat(getResData(getBindData(), tagData2, 14)).concat(getResData(getBindData(), tagData3, 14));
// prepare tag TAOS_BIND
let tagBind1 = new taos.TaosBind(14);
tagBind1.bindBool(true);
tagBind1.bindTinyInt(1);
tagBind1.bindSmallInt(32767);
tagBind1.bindInt(1234555);
tagBind1.bindBigInt(-164243520000011111n);
tagBind1.bindFloat(214.02);
tagBind1.bindDouble(2.01);
tagBind1.bindBinary('taosdata涛思数据');
tagBind1.bindNchar('TDengine数据');
tagBind1.bindUTinyInt(254);
tagBind1.bindUSmallInt(65534);
tagBind1.bindUInt(4294967290 / 2);
tagBind1.bindUBigInt(164243520000011111n);
let tagBind2 = new taos.TaosBind(14);
tagBind2.bindBool(true);
tagBind2.bindTinyInt(2);
tagBind2.bindSmallInt(32767);
tagBind2.bindInt(1234555);
tagBind2.bindBigInt(-164243520000011111n);
tagBind2.bindFloat(214.02);
tagBind2.bindDouble(2.01);
tagBind2.bindBinary('taosdata涛思数据');
tagBind2.bindNchar('TDengine数据');
tagBind2.bindUTinyInt(254);
tagBind2.bindUSmallInt(65534);
tagBind2.bindUInt(4294967290 / 2);
tagBind2.bindUBigInt(164243520000011111n);
let tagBind3 = new taos.TaosBind(14);
tagBind3.bindBool(true);
tagBind3.bindTinyInt(3);
tagBind3.bindSmallInt(32767);
tagBind3.bindInt(1234555);
tagBind3.bindBigInt(-164243520000011111n);
tagBind3.bindFloat(214.02);
tagBind3.bindDouble(2.01);
tagBind3.bindBinary('taosdata涛思数据');
tagBind3.bindNchar('TDengine数据');
tagBind3.bindUTinyInt(254);
tagBind3.bindUSmallInt(65534);
tagBind3.bindUInt(4294967290 / 2);
tagBind3.bindUBigInt(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`, tagBind1.getBind());
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`, tagBind2.getBind());
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}_s0`, tagBind3.getBind());
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 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])
})
});
})
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 tagBind = new taos.TaosBind(14);
tagBind.bindBool(true);
tagBind.bindTinyInt(1);
tagBind.bindSmallInt(32767);
tagBind.bindInt(1234555);
tagBind.bindBigInt(-164243520000011111n);
tagBind.bindFloat(214.02);
tagBind.bindDouble(2.01);
tagBind.bindBinary('taosdata涛思数据');
tagBind.bindNchar('TDengine数据');
tagBind.bindUTinyInt(254);
tagBind.bindUSmallInt(65534);
tagBind.bindUInt(4294967290 / 2);
tagBind.bindUBigInt(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`, tagBind.getBind());
c1.stmtBindParamBatch(mBinds.getMultiBindArr());
c1.stmtAddBatch();
c1.stmtExecute();
c1.stmtClose();
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])
})
});
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 querySql = `select * from ${table}`;
let expectResField = getFieldArr(getFeildsFromDll(createSql));
let expectResData = getResData(getBindData(), tagData1, 14).concat(getResData(getBindData(), tagData2, 14)).concat(getResData(getBindData(), tagData3, 14));
// prepare tag TAOS_BIND
let tagBind1 = new taos.TaosBind(14);
tagBind1.bindBool(true);
tagBind1.bindTinyInt(1);
tagBind1.bindSmallInt(32767);
tagBind1.bindInt(1234555);
tagBind1.bindBigInt(-164243520000011111n);
tagBind1.bindFloat(214.02);
tagBind1.bindDouble(2.01);
tagBind1.bindBinary('taosdata涛思数据');
tagBind1.bindNchar('TDengine数据');
tagBind1.bindUTinyInt(254);
tagBind1.bindUSmallInt(65534);
tagBind1.bindUInt(4294967290 / 2);
tagBind1.bindUBigInt(164243520000011111n);
let tagBind2 = new taos.TaosBind(14);
tagBind2.bindBool(true);
tagBind2.bindTinyInt(2);
tagBind2.bindSmallInt(32767);
tagBind2.bindInt(1234555);
tagBind2.bindBigInt(-164243520000011111n);
tagBind2.bindFloat(214.02);
tagBind2.bindDouble(2.01);
tagBind2.bindBinary('taosdata涛思数据');
tagBind2.bindNchar('TDengine数据');
tagBind2.bindUTinyInt(254);
tagBind2.bindUSmallInt(65534);
tagBind2.bindUInt(4294967290 / 2);
tagBind2.bindUBigInt(164243520000011111n);
let tagBind3 = new taos.TaosBind(14);
tagBind3.bindBool(true);
tagBind3.bindTinyInt(3);
tagBind3.bindSmallInt(32767);
tagBind3.bindInt(1234555);
tagBind3.bindBigInt(-164243520000011111n);
tagBind3.bindFloat(214.02);
tagBind3.bindDouble(2.01);
tagBind3.bindBinary('taosdata涛思数据');
tagBind3.bindNchar('TDengine数据');
tagBind3.bindUTinyInt(254);
tagBind3.bindUSmallInt(65534);
tagBind3.bindUInt(4294967290 / 2);
tagBind3.bindUBigInt(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`, tagBind1.getBind());
c1.stmtBindParamBatch(mBinds.getMultiBindArr());
c1.stmtAddBatch();
// c1.stmtExecute();
// ===========bind for 2nd table ==========
c1.stmtSetTbnameTags(`${table}_s02`, tagBind2.getBind());
c1.stmtBindParamBatch(mBinds.getMultiBindArr());
c1.stmtAddBatch();
// c1.stmtExecute();
// ===========bind for 3rd table ==========
c1.stmtSetTbnameTags(`${table}_s03`, tagBind3.getBind());
c1.stmtBindParamBatch(mBinds.getMultiBindArr());
c1.stmtAddBatch();
c1.stmtExecute();
c1.stmtClose();
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])
})
});
})
describe("stmt_bind_param", () => {
test(`name:bindParamWithOneTable;` +
`author:${author};` +
`desc:using stmtBindParam() bind one table in a batch;` +
`filename:${fileName};` +
`result:${result}`, () => {
let table = 'bindparam_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 data = getBindData();
let expectResData = getResData(data, tagData1, 14);
//prepare tag data
let tags = new taos.TaosBind(13);
tags.bindBool(true);
tags.bindTinyInt(1);
tags.bindSmallInt(32767);
tags.bindInt(1234555);
tags.bindBigInt(-164243520000011111n);
tags.bindFloat(214.02);
tags.bindDouble(2.01);
tags.bindBinary('taosdata涛思数据');
tags.bindNchar('TDengine数据');
tags.bindUTinyInt(254);
tags.bindUSmallInt(65534);
tags.bindUInt(4294967290 / 2);
tags.bindUBigInt(164243520000011111n);
executeUpdate(createSql);
c1.stmtInit();
c1.stmtPrepare(insertSql);
c1.stmtSetTbnameTags(`${table}_s01`, tags.getBind());
for (let i = 0; i < data.length - 14; i += 14) {
let bind = new taos.TaosBind(14);
bind.bindTimestamp(data[i]);
bind.bindBool(data[i + 1]);
bind.bindTinyInt(data[i + 2]);
bind.bindSmallInt(data[i + 3]);
bind.bindInt(data[i + 4]);
bind.bindBigInt(data[i + 5]);
bind.bindFloat(data[i + 6]);
bind.bindDouble(data[i + 7]);
bind.bindBinary(data[i + 8]);
bind.bindNchar(data[i + 9]);
bind.bindUTinyInt(data[i + 10]);
bind.bindUSmallInt(data[i + 11]);
bind.bindUInt(data[i + 12]);
bind.bindUBigInt(data[i + 13]);
c1.stmtBindParam(bind.getBind());
c1.stmtAddBatch();
}
let bind2 = new taos.TaosBind(14);
bind2.bindTimestamp(data[14 * 4]);
for (let j = 0; j < 13; j++) {
bind2.bindNil();
}
c1.stmtBindParam(bind2.getBind());
c1.stmtAddBatch();
c1.stmtExecute();
c1.stmtClose();
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])
})
});
test(`name:bindParamWithMultiTable;` +
`author:${author};` +
`desc:using stmtBindParam() bind multiple tables in a batch;` +
`filename:${fileName};` +
`result:${result}`, () => {
let table = 'bindparam_m21';//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 data = getBindData();
let expectResData = getResData(data, tagData1, 14).concat(getResData(data, tagData2, 14)).concat(getResData(data, tagData3, 14));
// prepare tag TAOS_BIND
let tagBind1 = new taos.TaosBind(14);
tagBind1.bindBool(true);
tagBind1.bindTinyInt(1);
tagBind1.bindSmallInt(32767);
tagBind1.bindInt(1234555);
tagBind1.bindBigInt(-164243520000011111n);
tagBind1.bindFloat(214.02);
tagBind1.bindDouble(2.01);
tagBind1.bindBinary('taosdata涛思数据');
tagBind1.bindNchar('TDengine数据');
tagBind1.bindUTinyInt(254);
tagBind1.bindUSmallInt(65534);
tagBind1.bindUInt(4294967290 / 2);
tagBind1.bindUBigInt(164243520000011111n);
let tagBind2 = new taos.TaosBind(14);
tagBind2.bindBool(true);
tagBind2.bindTinyInt(2);
tagBind2.bindSmallInt(32767);
tagBind2.bindInt(1234555);
tagBind2.bindBigInt(-164243520000011111n);
tagBind2.bindFloat(214.02);
tagBind2.bindDouble(2.01);
tagBind2.bindBinary('taosdata涛思数据');
tagBind2.bindNchar('TDengine数据');
tagBind2.bindUTinyInt(254);
tagBind2.bindUSmallInt(65534);
tagBind2.bindUInt(4294967290 / 2);
tagBind2.bindUBigInt(164243520000011111n);
let tagBind3 = new taos.TaosBind(14);
tagBind3.bindBool(true);
tagBind3.bindTinyInt(3);
tagBind3.bindSmallInt(32767);
tagBind3.bindInt(1234555);
tagBind3.bindBigInt(-164243520000011111n);
tagBind3.bindFloat(214.02);
tagBind3.bindDouble(2.01);
tagBind3.bindBinary('taosdata涛思数据');
tagBind3.bindNchar('TDengine数据');
tagBind3.bindUTinyInt(254);
tagBind3.bindUSmallInt(65534);
tagBind3.bindUInt(4294967290 / 2);
tagBind3.bindUBigInt(164243520000011111n);
executeUpdate(createSql);
c1.stmtInit();
c1.stmtPrepare(insertSql);
// ========= bind for 1st table =================
c1.stmtSetTbnameTags(`${table}_s01`, tagBind1.getBind());
for (let i = 0; i < data.length - 14; i += 14) {
let bind = new taos.TaosBind(14);
bind.bindTimestamp(data[i]);
bind.bindBool(data[i + 1]);
bind.bindTinyInt(data[i + 2]);
bind.bindSmallInt(data[i + 3]);
bind.bindInt(data[i + 4]);
bind.bindBigInt(data[i + 5]);
bind.bindFloat(data[i + 6]);
bind.bindDouble(data[i + 7]);
bind.bindBinary(data[i + 8]);
bind.bindNchar(data[i + 9]);
bind.bindUTinyInt(data[i + 10]);
bind.bindUSmallInt(data[i + 11]);
bind.bindUInt(data[i + 12]);
bind.bindUBigInt(data[i + 13]);
c1.stmtBindParam(bind.getBind());
c1.stmtAddBatch();
}
let bind2 = new taos.TaosBind(14);
bind2.bindTimestamp(data[14 * 4]);
for (let j = 0; j < 13; j++) {
bind2.bindNil();
}
c1.stmtBindParam(bind2.getBind());
c1.stmtAddBatch();
// c1.stmtExecute();
// ========= bind for 2nd table =================
c1.stmtSetTbnameTags(`${table}_s02`, tagBind2.getBind());
for (let i = 0; i < data.length - 14; i += 14) {
let bind = new taos.TaosBind(14);
bind.bindTimestamp(data[i]);
bind.bindBool(data[i + 1]);
bind.bindTinyInt(data[i + 2]);
bind.bindSmallInt(data[i + 3]);
bind.bindInt(data[i + 4]);
bind.bindBigInt(data[i + 5]);
bind.bindFloat(data[i + 6]);
bind.bindDouble(data[i + 7]);
bind.bindBinary(data[i + 8]);
bind.bindNchar(data[i + 9]);
bind.bindUTinyInt(data[i + 10]);
bind.bindUSmallInt(data[i + 11]);
bind.bindUInt(data[i + 12]);
bind.bindUBigInt(data[i + 13]);
c1.stmtBindParam(bind.getBind());
c1.stmtAddBatch();
}
c1.stmtBindParam(bind2.getBind());
c1.stmtAddBatch();
// c1.stmtExecute();
// ========= bind for 3rd table =================
c1.stmtSetTbnameTags(`${table}_s03`, tagBind3.getBind());
for (let i = 0; i < data.length - 14; i += 14) {
let bind = new taos.TaosBind(14);
bind.bindTimestamp(data[i]);
bind.bindBool(data[i + 1]);
bind.bindTinyInt(data[i + 2]);
bind.bindSmallInt(data[i + 3]);
bind.bindInt(data[i + 4]);
bind.bindBigInt(data[i + 5]);
bind.bindFloat(data[i + 6]);
bind.bindDouble(data[i + 7]);
bind.bindBinary(data[i + 8]);
bind.bindNchar(data[i + 9]);
bind.bindUTinyInt(data[i + 10]);
bind.bindUSmallInt(data[i + 11]);
bind.bindUInt(data[i + 12]);
bind.bindUBigInt(data[i + 13]);
c1.stmtBindParam(bind.getBind());
c1.stmtAddBatch();
}
c1.stmtBindParam(bind2.getBind());
c1.stmtAddBatch();
c1.stmtExecute();
c1.stmtClose();
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])
})
});
})
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册