@tdengine/websocket
Version:
The websocket Node.js connector for TDengine. TDengine versions 3.3.2.0 and above are recommended to use this connector.
274 lines (273 loc) • 13.1 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const wsConnectorPool_1 = require("../../src/client/wsConnectorPool");
const config_1 = require("../../src/common/config");
const wsSql_1 = require("../../src/sql/wsSql");
const utils_1 = require("../utils");
const stable = 'ws_stmt_stb';
const table = 'stmt_001';
const db = 'ws_stmt';
const createDB = `create database if not exists ${db} keep 3650`;
const useDB = `use ${db}`;
const dropDB = `drop database if exists ${db}`;
const tableCN = 'stmt_cn';
const stableCN = 'ws_stmt_stb_cn';
const jsonTable = 'stmt_json';
const jsonTableCN = 'stmt_json_cn';
const stableTags = [true, -1, -2, -3, -4, 1, 2, 3, 4, parseFloat(3.1415.toFixed(5)), parseFloat(3.14159265.toFixed(15)), 'varchar_tag_1', 'nchar_tag_1'];
const stableCNTags = [false, -1 * 2, -2 * 2, -3 * 2, -4 * 2, 1 * 2, 2 * 2, 3 * 2, 4 * 2, parseFloat((3.1415 * 2).toFixed(5)), parseFloat((3.14159265 * 2).toFixed(15)), 'varchar_标签_壹', 'nchar_标签_贰'];
const tableValues = [
[1656677710000, 1656677720000, 1656677730000, 1656677740000, 1656677750000],
[0, -1, -2, -3, -4],
[-1, -2, -3, -4, -5],
[-3, -4, -5, -6, -7],
// [0, 1, 2, 3, 4],
[BigInt(-2), BigInt(-3), BigInt(-4), BigInt(-5), BigInt(-6)],
[0, 1, 2, 3, 4],
[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6],
// [0, 1, 2, 3, 4],
[BigInt(3), BigInt(4), BigInt(5), BigInt(6), BigInt(7)],
[parseFloat(3.1415.toFixed(5)), parseFloat((3.1415 * 2).toFixed(5)), parseFloat((3.1415 * 3).toFixed(5)), parseFloat((3.1415 * 4).toFixed(5)), parseFloat((3.1415 * 5).toFixed(5))],
[parseFloat(3.14159265.toFixed(15)), parseFloat((3.14159265 * 2).toFixed(15)), parseFloat((3.14159265 * 3).toFixed(15)), parseFloat((3.14159265 * 4).toFixed(15)), parseFloat((3.14159265 * 5).toFixed(15))],
['varchar_col_1', 'varchar_col_2', 'varchar_col_3', 'varchar_col_4', 'varchar_col_5'],
['nchar_col_1', 'nchar_col_2', '', 'nchar_col_4', 'nchar_col_5'],
[true, false, true, false, true],
[null, null, null, null, null]
];
const tableCNValues = [
[BigInt(1656677760000), BigInt(1656677770000), BigInt(1656677780000), BigInt(1656677790000), BigInt(1656677100000)],
[0, -1, -2, -3, -4],
[-1, -2, -3, -4, -5],
[-2, -3, -4, -5, -6],
[BigInt(-3), BigInt(-4), BigInt(-5), BigInt(-6), BigInt(-7)],
[0, 1, 2, 3, 4],
[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6],
[BigInt(3), BigInt(4), BigInt(5), BigInt(6), BigInt(7)],
[parseFloat(3.1415.toFixed(5)), parseFloat((3.1415 * 2).toFixed(5)), parseFloat((3.1415 * 3).toFixed(5)), parseFloat((3.1415 * 4).toFixed(5)), parseFloat((3.1415 * 5).toFixed(5))],
[parseFloat(3.14159265.toFixed(15)), parseFloat((3.14159265 * 2).toFixed(15)), parseFloat((3.14159265 * 3).toFixed(15)), parseFloat((3.14159265 * 4).toFixed(15)), parseFloat((3.14159265 * 5).toFixed(15))],
['varchar_列_壹', 'varchar_列_贰', 'varchar_列_叁', 'varchar_列_肆', 'varchar_列_伍'],
['nchar_列_甲', 'nchar_列_乙', 'nchar_列_丙', 'nchar_列_丁', 'nchar_列_戊'],
[true, false, true, false, true],
[null, null, null, null, null],
];
let geoDataArray = [];
let varbinary = [];
const encoder = new TextEncoder();
for (let i = 0; i < 5; i++) {
let data = new Uint8Array([0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x59, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40,]);
geoDataArray.push(data.buffer);
let vdata = encoder.encode(`varchar_col_${i + 1}`);
varbinary.push(vdata.buffer);
}
const jsonTags = ["{\"key1\":\"taos\",\"key2\":null,\"key3\":\"TDengine\",\"key4\":0,\"key5\":false}"];
const jsonTagsCN = ["{\"key1\":\"taosdata\",\"key2\":null,\"key3\":\"TDengine涛思数据\",\"key4\":1,\"key5\":true}"];
const selectStable = `select * from ${stable}`;
const selectStableCN = `select * from ${stableCN}`;
const selectTable = `select * from ${table}`;
const selectTableCN = `select * from ${tableCN}`;
const selectJsonTable = `select * from ${jsonTable}`;
const selectJsonTableCN = `select * from ${jsonTableCN}`;
let dsn = 'ws://root:taosdata@localhost:6041';
beforeAll(async () => {
let conf = new config_1.WSConfig(dsn);
let ws = await wsSql_1.WsSql.open(conf);
await ws.exec(dropDB);
await ws.exec(createDB);
await ws.exec(useDB);
await ws.exec((0, utils_1.createBaseSTable)(stable));
await ws.exec((0, utils_1.createSTableJSON)(jsonTable));
await ws.close();
});
describe('TDWebSocket.Stmt()', () => {
jest.setTimeout(20 * 1000);
test('normal BindParam', async () => {
let wsConf = new config_1.WSConfig(dsn);
wsConf.setDb(db);
let connector = await wsSql_1.WsSql.open(wsConf);
let stmt = await (await connector).stmtInit();
expect(stmt).toBeTruthy();
expect(connector.state()).toBeGreaterThan(0);
await stmt.prepare((0, utils_1.getInsertBind)(tableValues.length + 2, stableTags.length, db, stable));
await stmt.setTableName(table);
let tagParams = stmt.newStmtParam();
tagParams.setBoolean([stableTags[0]]);
tagParams.setTinyInt([stableTags[1]]);
tagParams.setSmallInt([stableTags[2]]);
tagParams.setInt([stableTags[3]]);
tagParams.setBigint([BigInt(stableTags[4])]);
tagParams.setUTinyInt([stableTags[5]]);
tagParams.setUSmallInt([stableTags[6]]);
tagParams.setUInt([stableTags[7]]);
tagParams.setUBigint([BigInt(stableTags[8])]);
tagParams.setFloat([stableTags[9]]);
tagParams.setDouble([stableTags[10]]);
tagParams.setBinary([stableTags[11]]);
tagParams.setNchar([stableTags[12]]);
await stmt.setTags(tagParams);
let bindParams = stmt.newStmtParam();
bindParams.setTimestamp(tableValues[0]);
bindParams.setTinyInt(tableValues[1]);
bindParams.setSmallInt(tableValues[2]);
bindParams.setInt(tableValues[3]);
bindParams.setBigint(tableValues[4]);
bindParams.setUTinyInt(tableValues[5]);
bindParams.setUSmallInt(tableValues[6]);
bindParams.setUInt(tableValues[7]);
bindParams.setUBigint(tableValues[8]);
bindParams.setFloat(tableValues[9]);
bindParams.setDouble(tableValues[10]);
bindParams.setBinary(tableValues[11]);
bindParams.setNchar(tableValues[12]);
bindParams.setBoolean(tableValues[13]);
bindParams.setInt(tableValues[14]);
bindParams.setGeometry(geoDataArray);
bindParams.setVarBinary(varbinary);
await stmt.bind(bindParams);
await stmt.batch();
await stmt.exec();
expect(stmt.getLastAffected()).toEqual(5);
await stmt.close();
let result = await connector.exec(`select * from ${db}.${stable}`);
console.log(result);
await connector.close();
});
test('normal CN BindParam', async () => {
let wsConf = new config_1.WSConfig(dsn);
wsConf.setDb(db);
let connector = await wsSql_1.WsSql.open(wsConf);
let stmt = await (await connector).stmtInit();
expect(stmt).toBeTruthy();
expect(connector.state()).toBeGreaterThan(0);
await stmt.prepare((0, utils_1.getInsertBind)(tableValues.length + 2, stableTags.length, db, stable));
await stmt.setTableName(table);
let tagParams = stmt.newStmtParam();
tagParams.setBoolean([stableCNTags[0]]);
tagParams.setTinyInt([stableCNTags[1]]);
tagParams.setSmallInt([stableCNTags[2]]);
tagParams.setInt([stableCNTags[3]]);
tagParams.setBigint([BigInt(stableCNTags[4])]);
tagParams.setUTinyInt([stableCNTags[5]]);
tagParams.setUSmallInt([stableCNTags[6]]);
tagParams.setUInt([stableCNTags[7]]);
tagParams.setUBigint([BigInt(stableCNTags[8])]);
tagParams.setFloat([stableCNTags[9]]);
tagParams.setDouble([stableCNTags[10]]);
tagParams.setBinary([stableCNTags[11]]);
tagParams.setNchar([stableCNTags[12]]);
await stmt.setTags(tagParams);
let bindParams = stmt.newStmtParam();
bindParams.setTimestamp(tableCNValues[0]);
bindParams.setTinyInt(tableCNValues[1]);
bindParams.setSmallInt(tableCNValues[2]);
bindParams.setInt(tableCNValues[3]);
bindParams.setBigint(tableCNValues[4]);
bindParams.setUTinyInt(tableCNValues[5]);
bindParams.setUSmallInt(tableCNValues[6]);
bindParams.setUInt(tableCNValues[7]);
bindParams.setUBigint(tableCNValues[8]);
bindParams.setFloat(tableCNValues[9]);
bindParams.setDouble(tableCNValues[10]);
bindParams.setBinary(tableCNValues[11]);
bindParams.setNchar(tableCNValues[12]);
bindParams.setBoolean(tableCNValues[13]);
bindParams.setInt(tableCNValues[14]);
bindParams.setGeometry(geoDataArray);
bindParams.setVarBinary(varbinary);
await stmt.bind(bindParams);
await stmt.batch();
await stmt.exec();
expect(stmt.getLastAffected()).toEqual(5);
await stmt.close();
let result = await connector.exec(`select count(*) from ${db}.${stable}`);
console.log(result);
await connector.close();
});
test('normal json tag BindParam', async () => {
let wsConf = new config_1.WSConfig(dsn);
wsConf.setDb(db);
let connector = await wsSql_1.WsSql.open(wsConf);
let stmt = await (await connector).stmtInit();
expect(stmt).toBeTruthy();
expect(connector.state()).toBeGreaterThan(0);
await stmt.prepare((0, utils_1.getInsertBind)(tableValues.length + 2, jsonTags.length, db, jsonTable));
await stmt.setTableName(`${jsonTable}_001`);
let tagParams = stmt.newStmtParam();
tagParams.setJson(jsonTags);
await stmt.setTags(tagParams);
let bindParams = stmt.newStmtParam();
bindParams.setTimestamp(tableCNValues[0]);
bindParams.setTinyInt(tableCNValues[1]);
bindParams.setSmallInt(tableCNValues[2]);
bindParams.setInt(tableCNValues[3]);
bindParams.setBigint(tableCNValues[4]);
bindParams.setUTinyInt(tableCNValues[5]);
bindParams.setUSmallInt(tableCNValues[6]);
bindParams.setUInt(tableCNValues[7]);
bindParams.setUBigint(tableCNValues[8]);
bindParams.setFloat(tableCNValues[9]);
bindParams.setDouble(tableCNValues[10]);
bindParams.setBinary(tableCNValues[11]);
bindParams.setNchar(tableCNValues[12]);
bindParams.setBoolean(tableCNValues[13]);
bindParams.setInt(tableCNValues[14]);
bindParams.setGeometry(geoDataArray);
bindParams.setVarBinary(varbinary);
await stmt.bind(bindParams);
await stmt.batch();
await stmt.exec();
expect(stmt.getLastAffected()).toEqual(5);
await stmt.close();
let result = await connector.exec(`select * from ${db}.${jsonTable}`);
console.log(result);
await connector.close();
});
test('normal json cn tag BindParam', async () => {
let wsConf = new config_1.WSConfig(dsn);
wsConf.setDb(db);
let connector = await wsSql_1.WsSql.open(wsConf);
let stmt = await connector.stmtInit();
expect(stmt).toBeTruthy();
expect(connector.state()).toBeGreaterThan(0);
await stmt.prepare((0, utils_1.getInsertBind)(tableValues.length + 2, jsonTags.length, db, jsonTable));
await stmt.setTableName(`${jsonTable}_001`);
let tagParams = stmt.newStmtParam();
tagParams.setJson(jsonTagsCN);
await stmt.setTags(tagParams);
let bindParams = stmt.newStmtParam();
bindParams.setTimestamp(tableCNValues[0]);
bindParams.setTinyInt(tableCNValues[1]);
bindParams.setSmallInt(tableCNValues[2]);
bindParams.setInt(tableCNValues[3]);
bindParams.setBigint(tableCNValues[4]);
bindParams.setUTinyInt(tableCNValues[5]);
bindParams.setUSmallInt(tableCNValues[6]);
bindParams.setUInt(tableCNValues[7]);
bindParams.setUBigint(tableCNValues[8]);
bindParams.setFloat(tableCNValues[9]);
bindParams.setDouble(tableCNValues[10]);
bindParams.setBinary(tableCNValues[11]);
bindParams.setNchar(tableCNValues[12]);
bindParams.setBoolean(tableCNValues[13]);
bindParams.setInt(tableCNValues[14]);
bindParams.setGeometry(geoDataArray);
bindParams.setVarBinary(varbinary);
await stmt.bind(bindParams);
await stmt.batch();
await stmt.exec();
expect(stmt.getLastAffected()).toEqual(5);
await stmt.close();
let result = await connector.exec(`select * from ${db}.${jsonTable}`);
console.log(result);
await connector.close();
});
});
afterAll(async () => {
let conf = new config_1.WSConfig(dsn);
let ws = await wsSql_1.WsSql.open(conf);
await ws.exec(dropDB);
await ws.close();
wsConnectorPool_1.WebSocketConnectionPool.instance().destroyed();
});
;