@tdengine/websocket 3.1.0 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/lib/example/all_type_query.d.ts +2 -0
  2. package/lib/example/all_type_query.d.ts.map +1 -0
  3. package/lib/example/all_type_query.js +89 -0
  4. package/lib/example/all_type_stmt.d.ts +2 -0
  5. package/lib/example/all_type_stmt.d.ts.map +1 -0
  6. package/lib/example/all_type_stmt.js +130 -0
  7. package/lib/example/basicBatchTmq.d.ts +2 -0
  8. package/lib/example/basicBatchTmq.d.ts.map +1 -0
  9. package/lib/example/basicBatchTmq.js +129 -0
  10. package/lib/example/basicSql.js +9 -7
  11. package/lib/example/basicStmt.js +34 -20
  12. package/lib/example/basicTmq.js +22 -20
  13. package/lib/src/client/wsClient.d.ts +1 -1
  14. package/lib/src/client/wsClient.d.ts.map +1 -1
  15. package/lib/src/client/wsClient.js +5 -2
  16. package/lib/src/client/wsConnector.js +2 -2
  17. package/lib/src/client/wsResponse.d.ts +10 -2
  18. package/lib/src/client/wsResponse.d.ts.map +1 -1
  19. package/lib/src/client/wsResponse.js +30 -3
  20. package/lib/src/common/constant.d.ts +23 -1
  21. package/lib/src/common/constant.d.ts.map +1 -1
  22. package/lib/src/common/constant.js +25 -22
  23. package/lib/src/common/log.js +1 -1
  24. package/lib/src/common/taosResult.d.ts +11 -5
  25. package/lib/src/common/taosResult.d.ts.map +1 -1
  26. package/lib/src/common/taosResult.js +106 -76
  27. package/lib/src/common/utils.d.ts +2 -0
  28. package/lib/src/common/utils.d.ts.map +1 -1
  29. package/lib/src/common/utils.js +34 -1
  30. package/lib/src/sql/wsRows.d.ts.map +1 -1
  31. package/lib/src/sql/wsRows.js +21 -10
  32. package/lib/src/sql/wsSql.d.ts.map +1 -1
  33. package/lib/src/sql/wsSql.js +29 -19
  34. package/lib/src/stmt/wsParams.js +40 -40
  35. package/lib/src/tmq/constant.d.ts +15 -0
  36. package/lib/src/tmq/constant.d.ts.map +1 -1
  37. package/lib/src/tmq/constant.js +17 -1
  38. package/lib/src/tmq/tmqResponse.d.ts +20 -8
  39. package/lib/src/tmq/tmqResponse.d.ts.map +1 -1
  40. package/lib/src/tmq/tmqResponse.js +214 -89
  41. package/lib/src/tmq/wsTmq.d.ts.map +1 -1
  42. package/lib/src/tmq/wsTmq.js +24 -21
  43. package/lib/test/bulkPulling/log.test.d.ts +2 -0
  44. package/lib/test/bulkPulling/log.test.d.ts.map +1 -0
  45. package/lib/test/bulkPulling/log.test.js +44 -0
  46. package/lib/test/bulkPulling/schemaless.test.js +7 -6
  47. package/lib/test/bulkPulling/sql.test.js +38 -18
  48. package/lib/test/bulkPulling/stmt.func.test.js +71 -55
  49. package/lib/test/bulkPulling/stmt.type.test.js +1 -5
  50. package/lib/test/bulkPulling/tmq.test.js +16 -15
  51. package/lib/test/bulkPulling/wsConnectPool.test.js +9 -2
  52. package/package.json +2 -2
@@ -1,10 +1,16 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseTmqBlock = exports.TopicPartition = exports.CommittedResp = exports.PartitionsResp = exports.SubscriptionResp = exports.AssignmentResp = exports.WSTmqFetchBlockResponse = exports.TaosTmqResult = exports.WsTmqQueryResponse = exports.WsPollResponse = void 0;
6
+ exports.TopicPartition = exports.CommittedResp = exports.PartitionsResp = exports.SubscriptionResp = exports.AssignmentResp = exports.WSTmqFetchBlockInfo = exports.TaosTmqResult = exports.WsTmqQueryResponse = exports.WsPollResponse = void 0;
4
7
  const wsResponse_1 = require("../client/wsResponse");
5
8
  const constant_1 = require("../common/constant");
6
9
  const taosResult_1 = require("../common/taosResult");
7
10
  const wsError_1 = require("../common/wsError");
11
+ const constant_2 = require("./constant");
12
+ const utils_1 = require("../common/utils");
13
+ const log_1 = __importDefault(require("../common/log"));
8
14
  class WsPollResponse {
9
15
  constructor(resp) {
10
16
  this.totalTime = resp.totalTime;
@@ -39,23 +45,220 @@ class WsTmqQueryResponse extends wsResponse_1.WSQueryResponse {
39
45
  }
40
46
  exports.WsTmqQueryResponse = WsTmqQueryResponse;
41
47
  class TaosTmqResult extends taosResult_1.TaosResult {
42
- constructor(resp, pollResp) {
43
- super(resp);
44
- this.table_name = resp.table_name;
45
- // this._affectRows = resp.rows;
46
- this.topic = pollResp.topic;
48
+ constructor(pollResp) {
49
+ super();
50
+ this.setTopic(pollResp.topic);
47
51
  this.database = pollResp.database;
48
52
  this.vgroup_id = pollResp.vgroup_id;
49
53
  }
50
54
  }
51
55
  exports.TaosTmqResult = TaosTmqResult;
52
- class WSTmqFetchBlockResponse {
53
- constructor(resp) {
54
- this.totalTime = resp.totalTime;
55
- this.blockData = resp.msg;
56
+ class WSTmqFetchBlockInfo {
57
+ constructor(dataView, taosResult) {
58
+ // this.totalTime = resp.totalTime
59
+ // this.blockData = resp.msg
60
+ this.textDecoder = new TextDecoder();
61
+ this.taosResult = taosResult;
62
+ this.schema = [];
63
+ this.schemaLen = 0;
64
+ let blockDataView = this.skipHead(dataView);
65
+ this.rows = this.parseBlockInfos(blockDataView);
66
+ }
67
+ getRows() {
68
+ return this.rows;
69
+ }
70
+ skipHead(dataView) {
71
+ let v = dataView.getUint8(0);
72
+ if (v >= 100) {
73
+ let skip = dataView.getUint32(1, true);
74
+ return new DataView(dataView.buffer, dataView.byteOffset + skip + 5);
75
+ }
76
+ let skip1 = this.getTypeSkip(v);
77
+ v = dataView.getUint8(1 + skip1);
78
+ let skip2 = this.getTypeSkip(v);
79
+ return new DataView(dataView.buffer, dataView.byteOffset + skip1 + 2 + skip2);
80
+ }
81
+ getTypeSkip(v) {
82
+ switch (v) {
83
+ case 1:
84
+ return 8;
85
+ case 2:
86
+ case 3:
87
+ return 16;
88
+ default:
89
+ throw (new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_INVALID_FETCH_MESSAGE_DATA, `FetchBlockRawResp getTypeSkip error, type: ${v}`));
90
+ }
91
+ }
92
+ parseBlockInfos(dataView) {
93
+ let blockNum = dataView.getUint32(0, true);
94
+ if (blockNum == 0) {
95
+ return 0;
96
+ }
97
+ this.withTableName = dataView.getUint8(4) == 1 ? true : false;
98
+ this.withSchema = dataView.getUint8(5) == 1 ? true : false;
99
+ // let dataBuffer = dataView.buffer.slice(6)
100
+ let dataBuffer = new DataView(dataView.buffer, dataView.byteOffset + 6);
101
+ let rows = 0;
102
+ // const parseStartTime = new Date().getTime();
103
+ // console.log("parseBlockInfos blockNum="+ blockNum)
104
+ for (let i = 0; i < blockNum; i++) {
105
+ let variableInfo = this.parseVariableByteInteger(dataBuffer);
106
+ this.taosResult.setPrecision(variableInfo[1].getUint8(17));
107
+ dataView = new DataView(variableInfo[1].buffer, variableInfo[1].byteOffset + 17);
108
+ let offset = variableInfo[0] - 17;
109
+ dataBuffer = this.parseSchemaInfo(dataView, offset);
110
+ rows += this.parseTmqBlock(dataView, 1);
111
+ }
112
+ // const parseEndTime = new Date().getTime();
113
+ // console.log("------------->", parseEndTime- parseStartTime, rows);
114
+ log_1.default.info("parseBlockInfos blockNum=" + blockNum + ", withTableName=" + this.withTableName + ", withSchema=" + this.withSchema + ", rows=" + rows);
115
+ return rows;
116
+ }
117
+ parseSchemaInfo(dataBuffer, offset) {
118
+ if (this.withSchema) {
119
+ let isSkip = this.schema.length > 0;
120
+ if (!isSkip) {
121
+ dataBuffer = new DataView(dataBuffer.buffer, dataBuffer.byteOffset + offset);
122
+ let variableInfo = this.parseVariableByteInteger(dataBuffer);
123
+ this.schemaLen = variableInfo[2];
124
+ let cols = (0, utils_1.zigzagDecode)(variableInfo[0]);
125
+ variableInfo = this.parseVariableByteInteger(variableInfo[1]);
126
+ this.schemaLen += variableInfo[2];
127
+ let dataView = variableInfo[1];
128
+ for (let index = 0; index < cols; index++) {
129
+ let schema = new constant_2.TMQRawDataSchema();
130
+ schema.colType = dataView.getInt8(0);
131
+ schema.flag = dataView.getInt8(1);
132
+ variableInfo = this.parseVariableByteInteger(dataView, 2);
133
+ this.schemaLen += 2 + variableInfo[2];
134
+ schema.bytes = BigInt((0, utils_1.zigzagDecode)(variableInfo[0]));
135
+ variableInfo = this.parseVariableByteInteger(variableInfo[1]);
136
+ this.schemaLen += variableInfo[2];
137
+ schema.colID = (0, utils_1.zigzagDecode)(variableInfo[0]);
138
+ variableInfo = this.parseVariableByteInteger(variableInfo[1]);
139
+ this.schemaLen += variableInfo[2];
140
+ schema.name = (0, taosResult_1.getString)(variableInfo[1], 0, variableInfo[0], this.textDecoder);
141
+ if (!isSkip) {
142
+ this.taosResult.setMeta({
143
+ name: schema.name,
144
+ type: schema.colType,
145
+ length: Number(schema.bytes)
146
+ });
147
+ this.schema.push(schema);
148
+ }
149
+ dataView = new DataView(variableInfo[1].buffer, variableInfo[1].byteOffset + variableInfo[0]);
150
+ this.schemaLen += variableInfo[0];
151
+ }
152
+ if (this.withTableName) {
153
+ variableInfo = this.parseVariableByteInteger(dataView);
154
+ this.schemaLen += variableInfo[2];
155
+ this.tableName = (0, taosResult_1.readVarchar)(variableInfo[1].buffer, variableInfo[1].byteOffset, variableInfo[0], this.textDecoder);
156
+ dataView = new DataView(variableInfo[1].buffer, variableInfo[1].byteOffset + variableInfo[0]);
157
+ this.schemaLen += variableInfo[0];
158
+ }
159
+ return dataView;
160
+ }
161
+ else {
162
+ return new DataView(dataBuffer.buffer, dataBuffer.byteOffset + this.schemaLen + offset);
163
+ }
164
+ }
165
+ return dataBuffer;
166
+ }
167
+ parseVariableByteInteger(dataView, offset = 0) {
168
+ let value = 0;
169
+ let multiplier = 1;
170
+ let count = 0;
171
+ while (true) {
172
+ let encodedByte = dataView.getUint8(count + offset);
173
+ value += (encodedByte & 127) * multiplier;
174
+ if ((encodedByte & 128) == 0) {
175
+ break;
176
+ }
177
+ multiplier *= 128;
178
+ count++;
179
+ }
180
+ return [value, new DataView(dataView.buffer, dataView.byteOffset + count + 1 + offset), count + 1];
181
+ }
182
+ parseTmqBlock(dataView, startOffset) {
183
+ // let dataView = new DataView(dataBuffer)
184
+ let rows = dataView.getInt32(8 + startOffset, true);
185
+ if (rows == 0) {
186
+ return rows;
187
+ }
188
+ let taosData = this.taosResult.getData();
189
+ let metaData = this.taosResult.getMeta();
190
+ if (metaData && rows && taosData) {
191
+ let dataList = new Array(rows);
192
+ //get bitmap length
193
+ let bitMapOffset = getBitmapLen(rows);
194
+ //skip data head
195
+ let bufferOffset = 28 + 5 * this.schema.length + startOffset;
196
+ let metaLens = [];
197
+ for (let i = 0; i < this.schema.length; i++) {
198
+ //get data len
199
+ metaLens.push(dataView.getInt32(bufferOffset + i * 4, true));
200
+ }
201
+ bufferOffset += this.schema.length * 4;
202
+ for (let i = 0; i < this.schema.length; i++) {
203
+ let data = [];
204
+ //get type code
205
+ let isVarType = (0, taosResult_1._isVarType)(this.schema[i].colType);
206
+ //fixed length type
207
+ if (isVarType == constant_1.ColumnsBlockType.SOLID) {
208
+ // let bitMapArr = dataBuffer.slice(bufferOffset, bufferOffset + bitMapOffset);
209
+ let bitMapArr = new Uint8Array(dataView.buffer, dataView.byteOffset + bufferOffset, bitMapOffset);
210
+ bufferOffset += bitMapOffset;
211
+ //decode column data, data is array
212
+ data = (0, taosResult_1.readSolidDataToArray)(dataView, bufferOffset, rows, this.schema[i].colType, bitMapArr);
213
+ }
214
+ else {
215
+ //Variable length type
216
+ let start = bufferOffset;
217
+ let offsets = [];
218
+ for (let i = 0; i < rows; i++, start += constant_1.TDengineTypeLength['INT']) {
219
+ //get data length, -1 is null
220
+ offsets.push(dataView.getInt32(start, true));
221
+ }
222
+ for (let i = 0; i < rows; i++) {
223
+ let value = '';
224
+ if (-1 == offsets[i]) {
225
+ value = null;
226
+ }
227
+ else {
228
+ let header = start + offsets[i];
229
+ let dataLength = dataView.getInt16(header, true) & 0xFFFF;
230
+ if (isVarType == constant_1.ColumnsBlockType.VARCHAR) {
231
+ //decode var char
232
+ value = (0, taosResult_1.readVarchar)(dataView.buffer, dataView.byteOffset + header + 2, dataLength, this.textDecoder);
233
+ }
234
+ else if (isVarType == constant_1.ColumnsBlockType.GEOMETRY || isVarType == constant_1.ColumnsBlockType.VARBINARY) {
235
+ //decode binary
236
+ value = (0, taosResult_1.readBinary)(dataView.buffer, dataView.byteOffset + header + 2, dataLength);
237
+ }
238
+ else {
239
+ //decode nchar
240
+ value = (0, taosResult_1.readNchar)(dataView.buffer, dataView.byteOffset + header + 2, dataLength);
241
+ }
242
+ }
243
+ data.push(value);
244
+ }
245
+ bufferOffset += rows * 4;
246
+ }
247
+ bufferOffset += metaLens[i];
248
+ //column data to row data
249
+ for (let row = 0; row < data.length; row++) {
250
+ if (dataList[row] == null) {
251
+ dataList[row] = [];
252
+ }
253
+ dataList[row].push(data[row]);
254
+ }
255
+ }
256
+ taosData.push(...dataList);
257
+ }
258
+ return rows;
56
259
  }
57
260
  }
58
- exports.WSTmqFetchBlockResponse = WSTmqFetchBlockResponse;
261
+ exports.WSTmqFetchBlockInfo = WSTmqFetchBlockInfo;
59
262
  class AssignmentResp {
60
263
  constructor(resp, topic) {
61
264
  this.timing = BigInt(resp.msg.timing);
@@ -121,84 +324,6 @@ class TopicPartition {
121
324
  }
122
325
  }
123
326
  exports.TopicPartition = TopicPartition;
124
- function parseTmqBlock(rows, resp, taosResult) {
125
- let dataList = new Array(rows);
126
- if (!resp || !taosResult) {
127
- return taosResult;
128
- }
129
- let metaList = taosResult.getTaosMeta();
130
- let taosdata = taosResult.getData();
131
- if (metaList && rows && taosdata) {
132
- //get bitmap length
133
- let bitMapOffset = getBitmapLen(rows);
134
- //skip data head
135
- let bufferOffset = 24 + 28 + 5 * metaList.length;
136
- let dataBuffer = resp.blockData.slice(bufferOffset);
137
- let metaLens = [];
138
- for (let i = 0; i < metaList.length; i++) {
139
- //get data len
140
- metaLens.push(new DataView(dataBuffer, i * 4, 4).getInt32(0, true));
141
- }
142
- bufferOffset = metaList.length * 4;
143
- for (let i = 0; i < metaList.length; i++) {
144
- let data = [];
145
- //get type code
146
- let isVarType = (0, taosResult_1._isVarType)(metaList[i]);
147
- //fixed length type
148
- if (isVarType == constant_1.ColumnsBlockType.SOLID) {
149
- let bitMapArr = dataBuffer.slice(bufferOffset, bufferOffset + bitMapOffset);
150
- bufferOffset += bitMapOffset;
151
- //decode column data, data is array
152
- data = (0, taosResult_1.readSolidDataToArray)(dataBuffer, bufferOffset, rows, metaList[i], bitMapArr);
153
- }
154
- else {
155
- //Variable length type
156
- let offset = bufferOffset;
157
- let offsets = [];
158
- for (let i = 0; i < rows; i++, offset += constant_1.TDengineTypeLength['INT']) {
159
- //get data length, -1 is null
160
- offsets.push(new DataView(dataBuffer, offset, 4).getInt32(0, true));
161
- }
162
- let start = offset;
163
- for (let i = 0; i < rows; i++) {
164
- let value = '';
165
- if (-1 == offsets[i]) {
166
- value = null;
167
- }
168
- else {
169
- let header = start + offsets[i];
170
- let dataLength = new DataView(dataBuffer, header, 2).getInt16(0, true) & 0xFFFF;
171
- if (isVarType == constant_1.ColumnsBlockType.VARCHAR) {
172
- //decode var char
173
- value = (0, taosResult_1.readVarchar)(dataBuffer, header + 2, dataLength);
174
- }
175
- else if (isVarType == constant_1.ColumnsBlockType.GEOMETRY || isVarType == constant_1.ColumnsBlockType.VARBINARY) {
176
- //decode binary
177
- value = (0, taosResult_1.readBinary)(dataBuffer, header + 2, dataLength);
178
- }
179
- else {
180
- //decode nchar
181
- value = (0, taosResult_1.readNchar)(dataBuffer, header + 2, dataLength);
182
- }
183
- }
184
- data.push(value);
185
- }
186
- bufferOffset += rows * 4;
187
- }
188
- bufferOffset += metaLens[i];
189
- //column data to row data
190
- for (let row = 0; row < data.length; row++) {
191
- if (dataList[row] == null) {
192
- dataList[row] = [];
193
- }
194
- dataList[row].push(data[row]);
195
- }
196
- }
197
- taosdata.push(...dataList);
198
- }
199
- return taosResult;
200
- }
201
- exports.parseTmqBlock = parseTmqBlock;
202
327
  function getBitmapLen(n) {
203
328
  return (n + 0x7) >> 3;
204
329
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wsTmq.d.ts","sourceRoot":"","sources":["../../../src/tmq/wsTmq.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAkF,cAAc,EAA6E,MAAM,eAAe,CAAC;AAI1M,qBAAa,UAAU;IACnB,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,OAAO,CAAC,CAAU;IAC1B,OAAO,CAAC,WAAW,CAAC,CAAQ;IAC5B,OAAO;YAMO,IAAI;WAML,WAAW,CAAC,QAAQ,EAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAE,OAAO,CAAC,UAAU,CAAC;IAUjE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,EAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB9D,WAAW,CAAC,KAAK,CAAC,EAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUzC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAkBvE,YAAY,CAAC,KAAK,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAYlD,MAAM,CAAC,KAAK,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAK5C,QAAQ;IAYhB,SAAS,CAAC,UAAU,EAAC,KAAK,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IA0BzF,aAAa,CAAC,UAAU,EAAC,KAAK,CAAC,cAAc,CAAC,GAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAc9E,YAAY,CAAC,SAAS,EAAC,cAAc,EAAE,KAAK,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,IAAI,CAAC;IAkBnE,SAAS,CAAC,UAAU,EAAC,KAAK,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IA0BzF,IAAI,CAAC,SAAS,EAAC,cAAc,EAAE,KAAK,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,IAAI,CAAC;IAkB3D,eAAe,CAAC,UAAU,EAAC,KAAK,CAAC,cAAc,CAAC,GAAE,OAAO,CAAC,IAAI,CAAC;IAQ/D,SAAS,CAAC,UAAU,EAAC,KAAK,CAAC,cAAc,CAAC,GAAE,OAAO,CAAC,IAAI,CAAC;IASzD,KAAK,IAAG,OAAO,CAAC,IAAI,CAAC;YAIb,KAAK;YAcL,cAAc;YAed,QAAQ;YAkCR,iBAAiB;IAczB,UAAU,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAoBnD,gBAAgB;CA6BjC"}
1
+ {"version":3,"file":"wsTmq.d.ts","sourceRoot":"","sources":["../../../src/tmq/wsTmq.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAkF,cAAc,EAA0D,MAAM,eAAe,CAAC;AAKvL,qBAAa,UAAU;IACnB,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,OAAO,CAAC,CAAU;IAC1B,OAAO,CAAC,WAAW,CAAC,CAAQ;IAC5B,OAAO;YAMO,IAAI;WAML,WAAW,CAAC,QAAQ,EAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAE,OAAO,CAAC,UAAU,CAAC;IAUjE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,EAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB9D,WAAW,CAAC,KAAK,CAAC,EAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUzC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAgBvE,YAAY,CAAC,KAAK,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAYlD,MAAM,CAAC,KAAK,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAK5C,QAAQ;IAYhB,SAAS,CAAC,UAAU,EAAC,KAAK,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IA0BzF,aAAa,CAAC,UAAU,EAAC,KAAK,CAAC,cAAc,CAAC,GAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAc9E,YAAY,CAAC,SAAS,EAAC,cAAc,EAAE,KAAK,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,IAAI,CAAC;IAkBnE,SAAS,CAAC,UAAU,EAAC,KAAK,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IA0BzF,IAAI,CAAC,SAAS,EAAC,cAAc,EAAE,KAAK,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,IAAI,CAAC;IAkB3D,eAAe,CAAC,UAAU,EAAC,KAAK,CAAC,cAAc,CAAC,GAAE,OAAO,CAAC,IAAI,CAAC;IAQ/D,SAAS,CAAC,UAAU,EAAC,KAAK,CAAC,cAAc,CAAC,GAAE,OAAO,CAAC,IAAI,CAAC;IASzD,KAAK,IAAG,OAAO,CAAC,IAAI,CAAC;YAIb,KAAK;YAcL,cAAc;YA4Bd,QAAQ;YA4BR,iBAAiB;IAczB,UAAU,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAoBnD,gBAAgB;CA6BjC"}
@@ -11,6 +11,7 @@ const wsError_1 = require("../common/wsError");
11
11
  const tmqResponse_1 = require("./tmqResponse");
12
12
  const reqid_1 = require("../common/reqid");
13
13
  const log_1 = __importDefault(require("../common/log"));
14
+ const wsResponse_1 = require("../client/wsResponse");
14
15
  class WsConsumer {
15
16
  constructor(wsConfig) {
16
17
  this._wsConfig = new config_1.TmqConfig(wsConfig);
@@ -211,19 +212,30 @@ class WsConsumer {
211
212
  let result = await this._wsClient.exec(jsonStr, false);
212
213
  return new tmqResponse_1.WsTmqQueryResponse(result);
213
214
  }
214
- async fetchBlockData(fetchResponse, taosResult) {
215
+ async fetchBlockData(pollResp, taosResult) {
215
216
  let fetchMsg = {
216
- action: 'fetch_block',
217
+ action: 'fetch_raw_data',
217
218
  args: {
218
- req_id: fetchResponse.req_id,
219
- message_id: fetchResponse.message_id,
219
+ req_id: reqid_1.ReqId.getReqID(),
220
+ message_id: pollResp.message_id,
220
221
  },
221
222
  };
222
223
  let jsonStr = JSON.stringify(fetchMsg);
223
224
  log_1.default.debug('[wsQueryInterface.fetch.fetchMsg]===>' + jsonStr);
225
+ // const startTime = new Date().getTime();
224
226
  let result = await this._wsClient.sendMsg(jsonStr);
225
- (0, tmqResponse_1.parseTmqBlock)(fetchResponse.rows, new tmqResponse_1.WSTmqFetchBlockResponse(result), taosResult);
226
- return taosResult;
227
+ let wsResponse = new wsResponse_1.WSFetchBlockResponse(result.msg);
228
+ if (wsResponse && wsResponse.data && wsResponse.blockLen > 0) {
229
+ // const parseStartTime = new Date().getTime();
230
+ let wsTmqResponse = new tmqResponse_1.WSTmqFetchBlockInfo(wsResponse.data, taosResult);
231
+ log_1.default.debug('[WSTmqFetchBlockInfo.fetchBlockData]===>' + wsTmqResponse.taosResult);
232
+ if (wsTmqResponse.rows > 0) {
233
+ // const endTime = new Date().getTime();
234
+ // console.log(endTime - parseStartTime, endTime - startTime);
235
+ return true;
236
+ }
237
+ }
238
+ return false;
227
239
  }
228
240
  async pollData(timeoutMs, reqId) {
229
241
  let queryMsg = {
@@ -233,26 +245,17 @@ class WsConsumer {
233
245
  blocking_time: timeoutMs
234
246
  },
235
247
  };
236
- var taosResults = new Map();
237
248
  let resp = await this._wsClient.exec(JSON.stringify(queryMsg), false);
238
249
  let pollResp = new tmqResponse_1.WsPollResponse(resp);
250
+ let taosResult = new tmqResponse_1.TaosTmqResult(pollResp);
251
+ var taosResults = new Map();
252
+ taosResults.set(pollResp.topic, taosResult);
239
253
  if (!pollResp.have_message || pollResp.message_type != constant_1.TMQMessageType.ResDataType) {
240
254
  return taosResults;
241
255
  }
242
- while (true) {
243
- let fetchResp = await this.fetch(pollResp);
244
- if (fetchResp.completed || fetchResp.rows == 0) {
245
- break;
246
- }
247
- let taosResult = taosResults.get(pollResp.topic + pollResp.vgroup_id);
248
- if (taosResult == null) {
249
- taosResult = new tmqResponse_1.TaosTmqResult(fetchResp, pollResp);
250
- taosResults.set(pollResp.topic + pollResp.vgroup_id, taosResult);
251
- }
252
- else {
253
- taosResult.setRowsAndTime(fetchResp.rows);
254
- }
255
- await this.fetchBlockData(fetchResp, taosResult);
256
+ let finish = false;
257
+ while (!finish) {
258
+ finish = await this.fetchBlockData(pollResp, taosResult);
256
259
  }
257
260
  return taosResults;
258
261
  }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=log.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.test.d.ts","sourceRoot":"","sources":["../../../test/bulkPulling/log.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const log_1 = __importStar(require("../../src/common/log"));
27
+ describe('log level print', () => {
28
+ test('normal connect', async () => {
29
+ log_1.default.info('log level is info');
30
+ log_1.default.debug('log level is debug');
31
+ log_1.default.error('log level is error');
32
+ let isLevel = log_1.default.isLevelEnabled("info");
33
+ expect(isLevel).toEqual(true);
34
+ (0, log_1.setLevel)("debug");
35
+ log_1.default.debug('log level is debug');
36
+ isLevel = log_1.default.isLevelEnabled("debug");
37
+ expect(isLevel).toEqual(true);
38
+ (0, log_1.setLevel)("error");
39
+ log_1.default.error('log level is error');
40
+ log_1.default.debug('log level is debug');
41
+ isLevel = log_1.default.isLevelEnabled("error");
42
+ expect(isLevel).toEqual(true);
43
+ });
44
+ });
@@ -10,8 +10,9 @@ beforeAll(async () => {
10
10
  conf.setUser('root');
11
11
  conf.setPwd('taosdata');
12
12
  let wsSql = await wsSql_1.WsSql.open(conf);
13
- await wsSql.exec('create database if not exists power KEEP 3650 DURATION 10 BUFFER 16 WAL_LEVEL 1;');
14
- await wsSql.exec('CREATE STABLE if not exists power.meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int);');
13
+ await wsSql.exec('drop database if exists power_schemaless;');
14
+ await wsSql.exec('create database if not exists power_schemaless KEEP 3650 DURATION 10 BUFFER 16 WAL_LEVEL 1;');
15
+ await wsSql.exec('CREATE STABLE if not exists power_schemaless.meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int);');
15
16
  await wsSql.close();
16
17
  });
17
18
  describe('TDWebSocket.WsSchemaless()', () => {
@@ -23,7 +24,7 @@ describe('TDWebSocket.WsSchemaless()', () => {
23
24
  let conf = new config_1.WSConfig(dns);
24
25
  conf.setUser('root');
25
26
  conf.setPwd('taosdata');
26
- conf.setDb('power');
27
+ conf.setDb('power_schemaless');
27
28
  let wsSchemaless = await wsSql_1.WsSql.open(conf);
28
29
  expect(wsSchemaless.state()).toBeGreaterThan(0);
29
30
  await wsSchemaless.close();
@@ -52,7 +53,7 @@ describe('TDWebSocket.WsSchemaless()', () => {
52
53
  let conf = new config_1.WSConfig(dns);
53
54
  conf.setUser('root');
54
55
  conf.setPwd('taosdata');
55
- conf.setDb('power');
56
+ conf.setDb('power_schemaless');
56
57
  let wsSchemaless = await wsSql_1.WsSql.open(conf);
57
58
  expect(wsSchemaless.state()).toBeGreaterThan(0);
58
59
  await wsSchemaless.schemalessInsert([influxdbData], wsProto_1.SchemalessProto.InfluxDBLineProtocol, wsProto_1.Precision.NANO_SECONDS, 0);
@@ -64,7 +65,7 @@ describe('TDWebSocket.WsSchemaless()', () => {
64
65
  let conf = new config_1.WSConfig(dns);
65
66
  conf.setUser('root');
66
67
  conf.setPwd('taosdata');
67
- conf.setDb('power');
68
+ conf.setDb('power_schemaless');
68
69
  let wsSchemaless = await wsSql_1.WsSql.open(conf);
69
70
  expect(wsSchemaless.state()).toBeGreaterThan(0);
70
71
  await wsSchemaless.schemalessInsert([influxdbData], wsProto_1.SchemalessProto.InfluxDBLineProtocol, wsProto_1.Precision.NOT_CONFIGURED, 0);
@@ -77,7 +78,7 @@ describe('TDWebSocket.WsSchemaless()', () => {
77
78
  let conf = new config_1.WSConfig(dns);
78
79
  conf.setUser('root');
79
80
  conf.setPwd('taosdata');
80
- conf.setDb('power');
81
+ conf.setDb('power_schemaless');
81
82
  let wsSchemaless = await wsSql_1.WsSql.open(conf);
82
83
  expect(wsSchemaless.state()).toBeGreaterThan(0);
83
84
  try {
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const wsConnectorPool_1 = require("../../src/client/wsConnectorPool");
4
4
  const config_1 = require("../../src/common/config");
5
5
  const wsSql_1 = require("../../src/sql/wsSql");
6
+ let dns = 'ws://localhost:6041';
6
7
  beforeAll(async () => {
7
- let dns = 'ws://localhost:6041';
8
8
  let conf = new config_1.WSConfig(dns);
9
9
  conf.setUser('root');
10
10
  conf.setPwd('taosdata');
@@ -17,9 +17,10 @@ beforeAll(async () => {
17
17
  describe('TDWebSocket.WsSql()', () => {
18
18
  jest.setTimeout(20 * 1000);
19
19
  test('normal connect', async () => {
20
- let dsn = 'ws://root:taosdata@localhost:6041';
21
20
  let wsSql = null;
22
- let conf = new config_1.WSConfig(dsn);
21
+ let conf = new config_1.WSConfig(dns);
22
+ conf.setUser('root');
23
+ conf.setPwd('taosdata');
23
24
  conf.setDb('power');
24
25
  wsSql = await wsSql_1.WsSql.open(conf);
25
26
  expect(wsSql.state()).toBeGreaterThan(0);
@@ -29,8 +30,9 @@ describe('TDWebSocket.WsSql()', () => {
29
30
  expect.assertions(1);
30
31
  let wsSql = null;
31
32
  try {
32
- let dsn = 'ws://root:taosdata@localhost:6041';
33
- let conf = new config_1.WSConfig(dsn);
33
+ let conf = new config_1.WSConfig(dns);
34
+ conf.setUser('root');
35
+ conf.setPwd('taosdata');
34
36
  conf.setDb('jest');
35
37
  wsSql = await wsSql_1.WsSql.open(conf);
36
38
  }
@@ -45,8 +47,9 @@ describe('TDWebSocket.WsSql()', () => {
45
47
  }
46
48
  });
47
49
  test('get taosc version', async () => {
48
- let dsn = 'ws://root:taosdata@localhost:6041';
49
- let conf = new config_1.WSConfig(dsn);
50
+ let conf = new config_1.WSConfig(dns);
51
+ conf.setUser('root');
52
+ conf.setPwd('taosdata');
50
53
  let wsSql = await wsSql_1.WsSql.open(conf);
51
54
  let version = await wsSql.version();
52
55
  await wsSql.close();
@@ -54,8 +57,9 @@ describe('TDWebSocket.WsSql()', () => {
54
57
  expect(version).toBeTruthy();
55
58
  });
56
59
  test('show databases', async () => {
57
- let dsn = 'ws://root:taosdata@localhost:6041';
58
- let conf = new config_1.WSConfig(dsn);
60
+ let conf = new config_1.WSConfig(dns);
61
+ conf.setUser('root');
62
+ conf.setPwd('taosdata');
59
63
  let wsSql = await wsSql_1.WsSql.open(conf);
60
64
  let taosResult = await wsSql.exec('show databases');
61
65
  await wsSql.close();
@@ -63,8 +67,9 @@ describe('TDWebSocket.WsSql()', () => {
63
67
  expect(taosResult).toBeTruthy();
64
68
  });
65
69
  test('create databases', async () => {
66
- let dsn = 'ws://root:taosdata@localhost:6041';
67
- let conf = new config_1.WSConfig(dsn);
70
+ let conf = new config_1.WSConfig(dns);
71
+ conf.setUser('root');
72
+ conf.setPwd('taosdata');
68
73
  let wsSql = await wsSql_1.WsSql.open(conf);
69
74
  let taosResult = await wsSql.exec('create database if not exists power KEEP 3650 DURATION 10 BUFFER 16 WAL_LEVEL 1;');
70
75
  await wsSql.close();
@@ -72,8 +77,9 @@ describe('TDWebSocket.WsSql()', () => {
72
77
  expect(taosResult).toBeTruthy();
73
78
  });
74
79
  test('create stable', async () => {
75
- let dsn = 'ws://root:taosdata@localhost:6041';
76
- let conf = new config_1.WSConfig(dsn);
80
+ let conf = new config_1.WSConfig(dns);
81
+ conf.setUser('root');
82
+ conf.setPwd('taosdata');
77
83
  let wsSql = await wsSql_1.WsSql.open(conf);
78
84
  let taosResult = await wsSql.exec('use power');
79
85
  console.log(taosResult);
@@ -84,22 +90,24 @@ describe('TDWebSocket.WsSql()', () => {
84
90
  expect(taosResult).toBeTruthy();
85
91
  });
86
92
  test('insert recoder', async () => {
87
- let dsn = 'ws://root:taosdata@localhost:6041';
88
- let conf = new config_1.WSConfig(dsn);
93
+ let conf = new config_1.WSConfig(dns);
94
+ conf.setUser('root');
95
+ conf.setPwd('taosdata');
89
96
  let wsSql = await wsSql_1.WsSql.open(conf);
90
97
  let taosResult = await wsSql.exec('use power');
91
98
  console.log(taosResult);
92
99
  expect(taosResult).toBeTruthy();
93
100
  taosResult = await wsSql.exec('describe meters');
94
101
  console.log(taosResult);
95
- taosResult = await wsSql.exec('INSERT INTO d1001 USING meters (location, groupid) TAGS ("California.SanFrancisco", 3) VALUES (NOW, 10.2, 219, 0.32)');
102
+ taosResult = await wsSql.exec('INSERT INTO d1001 USING meters (location, groupid) TAGS ("California", 3) VALUES (NOW, 10.2, 219, 0.32)');
96
103
  console.log(taosResult);
97
104
  expect(taosResult.getAffectRows()).toBeGreaterThanOrEqual(1);
98
105
  await wsSql.close();
99
106
  });
100
107
  test('query sql', async () => {
101
- let dsn = 'ws://root:taosdata@localhost:6041';
102
- let conf = new config_1.WSConfig(dsn);
108
+ let conf = new config_1.WSConfig(dns);
109
+ conf.setUser('root');
110
+ conf.setPwd('taosdata');
103
111
  let wsSql = await wsSql_1.WsSql.open(conf);
104
112
  let taosResult = await wsSql.exec('use power');
105
113
  console.log(taosResult);
@@ -118,6 +126,18 @@ describe('TDWebSocket.WsSql()', () => {
118
126
  }
119
127
  await wsSql.close();
120
128
  });
129
+ test('query sql no getdata', async () => {
130
+ let conf = new config_1.WSConfig(dns);
131
+ conf.setUser('root');
132
+ conf.setPwd('taosdata');
133
+ let wsSql = await wsSql_1.WsSql.open(conf);
134
+ let taosResult = await wsSql.exec('use power');
135
+ console.log(taosResult);
136
+ expect(taosResult).toBeTruthy();
137
+ let wsRows = await wsSql.query('select * from meters');
138
+ await wsRows.close();
139
+ await wsSql.close();
140
+ });
121
141
  });
122
142
  afterAll(async () => {
123
143
  wsConnectorPool_1.WebSocketConnectionPool.instance().destroyed();