@tdengine/websocket 3.1.8 → 3.1.9

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 (42) hide show
  1. package/lib/src/client/wsClient.d.ts +3 -0
  2. package/lib/src/client/wsClient.d.ts.map +1 -1
  3. package/lib/src/client/wsClient.js +29 -5
  4. package/lib/src/client/wsConnector.d.ts.map +1 -1
  5. package/lib/src/client/wsResponse.d.ts +2 -0
  6. package/lib/src/client/wsResponse.d.ts.map +1 -1
  7. package/lib/src/client/wsResponse.js +2 -0
  8. package/lib/src/common/config.d.ts +3 -0
  9. package/lib/src/common/config.d.ts.map +1 -1
  10. package/lib/src/common/config.js +6 -0
  11. package/lib/src/common/constant.d.ts +9 -1
  12. package/lib/src/common/constant.d.ts.map +1 -1
  13. package/lib/src/common/constant.js +10 -1
  14. package/lib/src/common/taosResult.d.ts +5 -2
  15. package/lib/src/common/taosResult.d.ts.map +1 -1
  16. package/lib/src/common/taosResult.js +59 -5
  17. package/lib/src/common/utils.d.ts +1 -0
  18. package/lib/src/common/utils.d.ts.map +1 -1
  19. package/lib/src/common/utils.js +31 -0
  20. package/lib/src/sql/wsSql.d.ts.map +1 -1
  21. package/lib/src/sql/wsSql.js +10 -0
  22. package/lib/src/stmt/wsProto.d.ts +3 -3
  23. package/lib/src/stmt/wsProto.js +2 -2
  24. package/lib/src/stmt/wsStmt.d.ts +1 -1
  25. package/lib/src/stmt/wsStmt.d.ts.map +1 -1
  26. package/lib/src/stmt/wsStmt.js +2 -1
  27. package/lib/src/tmq/constant.d.ts +2 -0
  28. package/lib/src/tmq/constant.d.ts.map +1 -1
  29. package/lib/src/tmq/constant.js +2 -0
  30. package/lib/src/tmq/tmqResponse.d.ts +5 -5
  31. package/lib/src/tmq/tmqResponse.js +7 -7
  32. package/lib/src/tmq/wsTmq.d.ts +1 -0
  33. package/lib/src/tmq/wsTmq.d.ts.map +1 -1
  34. package/lib/src/tmq/wsTmq.js +9 -5
  35. package/lib/test/bulkPulling/cloud.tmq.test.js +0 -1
  36. package/lib/test/bulkPulling/decimal.test.d.ts +2 -0
  37. package/lib/test/bulkPulling/decimal.test.d.ts.map +1 -0
  38. package/lib/test/bulkPulling/decimal.test.js +129 -0
  39. package/lib/test/bulkPulling/sql.test.js +33 -9
  40. package/lib/test/bulkPulling/stmt.type.test.js +41 -0
  41. package/lib/test/bulkPulling/tmq.test.js +2 -0
  42. package/package.json +1 -1
@@ -1,11 +1,14 @@
1
1
  import { WSQueryResponse } from './wsResponse';
2
+ import { TSDB_OPTION_CONNECTION } from '../common/constant';
2
3
  export declare class WsClient {
3
4
  private _wsConnector?;
4
5
  private _timeout?;
6
+ private _timezone?;
5
7
  private readonly _url;
6
8
  private static readonly _minVersion;
7
9
  constructor(url: URL, timeout?: number | undefined | null);
8
10
  connect(database?: string | undefined | null): Promise<void>;
11
+ setOptionConnection(option: TSDB_OPTION_CONNECTION, value: string | null): Promise<void>;
9
12
  execNoResp(queryMsg: string): Promise<void>;
10
13
  exec(queryMsg: string, bSqlQuery?: boolean): Promise<any>;
11
14
  sendBinaryMsg(reqId: bigint, action: string, message: ArrayBuffer, bSqlQuery?: boolean, bResultBinary?: boolean): Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"wsClient.d.ts","sourceRoot":"","sources":["../../../src/client/wsClient.ts"],"names":[],"mappings":"AAIA,OAAO,EAEH,eAAe,EAClB,MAAM,cAAc,CAAC;AAMtB,qBAAa,QAAQ;IACjB,OAAO,CAAC,YAAY,CAAC,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,CAA2B;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAK;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAa;gBAEpC,GAAG,EAAE,GAAG,EAAE,OAAQ,CAAC,EAAC,MAAM,GAAG,SAAS,GAAG,IAAI;IAOnD,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC5D,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3C,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAC,OAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IAuB9D,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,GAAC,OAAc,EAAE,aAAa,GAAE,OAAe,GAAG,OAAO,CAAC,GAAG,CAAC;IA0B/I,QAAQ;IAQF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAetB,OAAO,CAAC,GAAG,EAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAajC,UAAU,CAAC,GAAG,EAAE,eAAe;IAqB/B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA4B1B,KAAK,IAAG,OAAO,CAAC,IAAI,CAAC;IAS3B,QAAQ,CAAC,GAAG,EAAE,GAAG;IASX,YAAY;CAQrB"}
1
+ {"version":3,"file":"wsClient.d.ts","sourceRoot":"","sources":["../../../src/client/wsClient.ts"],"names":[],"mappings":"AAIA,OAAO,EAEH,eAAe,EAClB,MAAM,cAAc,CAAC;AAKtB,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,qBAAa,QAAQ;IACjB,OAAO,CAAC,YAAY,CAAC,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,CAA2B;IAC5C,OAAO,CAAC,SAAS,CAAC,CAA2B;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAK;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAa;gBAEpC,GAAG,EAAE,GAAG,EAAE,OAAQ,CAAC,EAAC,MAAM,GAAG,SAAS,GAAG,IAAI;IAWnD,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC5D,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBxF,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3C,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAC,OAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IAuB9D,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,GAAC,OAAc,EAAE,aAAa,GAAE,OAAe,GAAG,OAAO,CAAC,GAAG,CAAC;IA0B/I,QAAQ;IAQF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAetB,OAAO,CAAC,GAAG,EAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAajC,UAAU,CAAC,GAAG,EAAE,eAAe;IAqB/B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA0B1B,KAAK,IAAG,OAAO,CAAC,IAAI,CAAC;IAQ3B,QAAQ,CAAC,GAAG,EAAE,GAAG;IASX,YAAY;CAQrB"}
@@ -17,21 +17,23 @@ class WsClient {
17
17
  this.checkURL(url);
18
18
  this._url = url;
19
19
  this._timeout = timeout;
20
+ if (this._url.searchParams.has("timezone")) {
21
+ this._timezone = this._url.searchParams.get("timezone") || undefined;
22
+ this._url.searchParams.delete("timezone");
23
+ }
20
24
  }
21
25
  async connect(database) {
22
- let _db = this._url.pathname.split('/')[3];
23
- if (database) {
24
- _db = database;
25
- }
26
26
  let connMsg = {
27
27
  action: 'conn',
28
28
  args: {
29
29
  req_id: reqid_1.ReqId.getReqID(),
30
30
  user: (0, utils_1.safeDecodeURIComponent)(this._url.username),
31
31
  password: (0, utils_1.safeDecodeURIComponent)(this._url.password),
32
- db: _db,
32
+ db: database,
33
+ ...(this._timezone && { tz: this._timezone }),
33
34
  },
34
35
  };
36
+ log_1.default.debug("[wsClient.connect.connMsg]===>" + json_bigint_1.default.stringify(connMsg));
35
37
  this._wsConnector = await wsConnectorPool_1.WebSocketConnectionPool.instance().getConnection(this._url, this._timeout);
36
38
  if (this._wsConnector.readyState() === websocket_1.w3cwebsocket.OPEN) {
37
39
  return;
@@ -51,6 +53,28 @@ class WsClient {
51
53
  throw (new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_WEBSOCKET_CONNECTION_FAIL, `connection creation failed, url: ${this._url}, code:${e.code}, msg:${e.message}`));
52
54
  }
53
55
  }
56
+ async setOptionConnection(option, value) {
57
+ log_1.default.debug("[wsClient.setOptionConnection]===>" + option + ", " + value);
58
+ let connMsg = {
59
+ action: 'options_connection',
60
+ args: {
61
+ req_id: reqid_1.ReqId.getReqID(),
62
+ options: [
63
+ {
64
+ option: option,
65
+ value: value
66
+ }
67
+ ]
68
+ }
69
+ };
70
+ try {
71
+ await this.exec(json_bigint_1.default.stringify(connMsg), false);
72
+ }
73
+ catch (e) {
74
+ log_1.default.error("[wsClient.setOptionConnection] failed: " + e.message);
75
+ throw e;
76
+ }
77
+ }
54
78
  async execNoResp(queryMsg) {
55
79
  log_1.default.debug('[wsQueryInterface.query.queryMsg]===>' + queryMsg);
56
80
  if (this._wsConnector && this._wsConnector.readyState() === websocket_1.w3cwebsocket.OPEN) {
@@ -1 +1 @@
1
- {"version":3,"file":"wsConnector.d.ts","sourceRoot":"","sources":["../../../src/client/wsConnector.ts"],"names":[],"mappings":"AAMA,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAAM;IACpB,QAAQ,SAAQ;gBAGJ,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAsBlD,KAAK;YAcG,QAAQ;IAKtB,OAAO,CAAC,UAAU;IAmBlB,KAAK;IASL,UAAU,IAAI,MAAM;IAId,aAAa,CAAC,OAAO,EAAE,MAAM,GAAE,OAAO,CAAC,IAAI,CAAC;IAmB5C,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAc;IAuBjD,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,GAAE,OAAc;IAgBzF,QAAQ,IAAI,GAAG;CAGzB"}
1
+ {"version":3,"file":"wsConnector.d.ts","sourceRoot":"","sources":["../../../src/client/wsConnector.ts"],"names":[],"mappings":"AAMA,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAAM;IACpB,QAAQ,SAAQ;gBAGJ,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAsBlD,KAAK;YAcG,QAAQ;IAKtB,OAAO,CAAC,UAAU;IAkBlB,KAAK;IASL,UAAU,IAAI,MAAM;IAId,aAAa,CAAC,OAAO,EAAE,MAAM,GAAE,OAAO,CAAC,IAAI,CAAC;IAmB5C,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAc;IAuBjD,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,GAAE,OAAc;IAgBzF,QAAQ,IAAI,GAAG;CAGzB"}
@@ -24,6 +24,8 @@ export declare class WSQueryResponse {
24
24
  fields_names?: Array<string> | null;
25
25
  fields_types?: Array<number> | null;
26
26
  fields_lengths?: Array<number> | null;
27
+ fields_precisions?: Array<bigint> | null;
28
+ fields_scales?: Array<bigint> | null;
27
29
  precision?: number;
28
30
  constructor(resp: MessageResp);
29
31
  private initMsg;
@@ -1 +1 @@
1
- {"version":3,"file":"wsResponse.d.ts","sourceRoot":"","sources":["../../../src/client/wsResponse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAe,MAAM,sBAAsB,CAAC;AAEhE,qBAAa,iBAAiB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;gBACN,IAAI,EAAC,WAAW;CAO/B;AAED,qBAAa,eAAe;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEP,IAAI,EAAC,WAAW;IAI5B,OAAO,CAAC,OAAO;CAoBlB;AAED,qBAAa,oBAAoB;IAC7B,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,WAAW,EAAE,WAAW,CAAA;gBACZ,GAAG,EAAE,WAAW;CAgC/B"}
1
+ {"version":3,"file":"wsResponse.d.ts","sourceRoot":"","sources":["../../../src/client/wsResponse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAe,MAAM,sBAAsB,CAAC;AAEhE,qBAAa,iBAAiB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;gBACN,IAAI,EAAC,WAAW;CAO/B;AAED,qBAAa,eAAe;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACtC,iBAAiB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEP,IAAI,EAAC,WAAW;IAI5B,OAAO,CAAC,OAAO;CAsBlB;AAED,qBAAa,oBAAoB;IAC7B,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,WAAW,EAAE,WAAW,CAAA;gBACZ,GAAG,EAAE,WAAW;CAgC/B"}
@@ -39,6 +39,8 @@ class WSQueryResponse {
39
39
  this.fields_types = msg.fields_types;
40
40
  this.fields_lengths = msg.fields_lengths;
41
41
  this.precision = msg.precision;
42
+ this.fields_precisions = msg.fields_precisions ? msg.fields_precisions.map((p) => BigInt(p)) : [];
43
+ this.fields_scales = msg.fields_scales ? msg.fields_scales.map((s) => BigInt(s)) : [];
42
44
  }
43
45
  }
44
46
  exports.WSQueryResponse = WSQueryResponse;
@@ -5,6 +5,7 @@ export declare class WSConfig {
5
5
  private _url;
6
6
  private _timeout;
7
7
  private _token;
8
+ private _timezone;
8
9
  constructor(url: string);
9
10
  getToken(): string | undefined | null;
10
11
  setToken(token: string): void;
@@ -18,5 +19,7 @@ export declare class WSConfig {
18
19
  setUrl(url: string): void;
19
20
  setTimeOut(ms: number): void;
20
21
  getTimeOut(): number | undefined | null;
22
+ setTimezone(timezone: string): void;
23
+ getTimezone(): string | undefined | null;
21
24
  }
22
25
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/common/config.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAQ;IACjB,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,MAAM,CAA2B;gBAE7B,GAAG,EAAC,MAAM;IAIf,QAAQ,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAGrC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAItB,OAAO,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAGpC,OAAO,CAAC,IAAI,EAAE,MAAM;IAIpB,MAAM,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAGnC,MAAM,CAAC,GAAG,EAAC,MAAM;IAIjB,KAAK,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAGlC,KAAK,CAAC,EAAE,EAAE,MAAM;IAIhB,MAAM,IAAI,MAAM;IAIhB,MAAM,CAAC,GAAG,EAAE,MAAM;IAIlB,UAAU,CAAC,EAAE,EAAG,MAAM;IAGtB,UAAU,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;CAKjD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/common/config.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAQ;IACjB,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,SAAS,CAA2B;gBAEhC,GAAG,EAAC,MAAM;IAIf,QAAQ,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAGrC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAItB,OAAO,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAGpC,OAAO,CAAC,IAAI,EAAE,MAAM;IAIpB,MAAM,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAGnC,MAAM,CAAC,GAAG,EAAC,MAAM;IAIjB,KAAK,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAGlC,KAAK,CAAC,EAAE,EAAE,MAAM;IAIhB,MAAM,IAAI,MAAM;IAIhB,MAAM,CAAC,GAAG,EAAE,MAAM;IAIlB,UAAU,CAAC,EAAE,EAAG,MAAM;IAGtB,UAAU,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAGvC,WAAW,CAAC,QAAQ,EAAE,MAAM;IAG5B,WAAW,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;CAGlD"}
@@ -41,5 +41,11 @@ class WSConfig {
41
41
  getTimeOut() {
42
42
  return this._timeout;
43
43
  }
44
+ setTimezone(timezone) {
45
+ this._timezone = timezone;
46
+ }
47
+ getTimezone() {
48
+ return this._timezone;
49
+ }
44
50
  }
45
51
  exports.WSConfig = WSConfig;
@@ -27,7 +27,15 @@ export declare enum TDengineTypeCode {
27
27
  BIGINT_UNSIGNED = 14,
28
28
  JSON = 15,
29
29
  VARBINARY = 16,
30
- GEOMETRY = 20
30
+ DECIMAL = 17,
31
+ GEOMETRY = 20,
32
+ DECIMAL64 = 21
33
+ }
34
+ export declare enum TSDB_OPTION_CONNECTION {
35
+ TSDB_OPTION_CONNECTION_CHARSET = 0,// charset, Same as the scope supported by the system
36
+ TSDB_OPTION_CONNECTION_TIMEZONE = 1,// timezone, Same as the scope supported by the system
37
+ TSDB_OPTION_CONNECTION_USER_IP = 2,// user ip
38
+ TSDB_OPTION_CONNECTION_USER_APP = 3
31
39
  }
32
40
  export declare const TDenginePrecision: IndexableString;
33
41
  export declare const TDengineTypeLength: StringIndexable;
@@ -1 +1 @@
1
- {"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../../../src/common/constant.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC5B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe;IAC5B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAC1B;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAkB,CAAC;AACpD,eAAO,MAAM,oBAAoB,EAAE,MAAkB,CAAC;AAEtD,eAAO,MAAM,gBAAgB,EAAE,eAmB9B,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,eAM9B,CAAA;AAGD,oBAAY,gBAAgB;IACxB,IAAI,IAAI;IACR,IAAI,IAAI;IACR,OAAO,IAAI;IACX,QAAQ,IAAI;IACZ,GAAG,IAAI;IACP,MAAM,IAAI;IACV,KAAK,IAAI;IACT,MAAM,IAAI;IACV,MAAM,IAAI;IACV,OAAO,IAAI;IACX,SAAS,IAAI;IACb,KAAK,KAAK;IACV,gBAAgB,KAAK;IACrB,iBAAiB,KAAK;IACtB,YAAY,KAAK;IACjB,eAAe,KAAK;IACpB,IAAI,KAAK;IACT,SAAS,KAAK;IACd,QAAQ,KAAK;CAChB;AAED,eAAO,MAAM,iBAAiB,EAAE,eAI/B,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,eAahC,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,eAI7B,CAAA"}
1
+ {"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../../../src/common/constant.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC5B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe;IAC5B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAC1B;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAkB,CAAC;AACpD,eAAO,MAAM,oBAAoB,EAAE,MAAkB,CAAC;AAEtD,eAAO,MAAM,gBAAgB,EAAE,eAmB9B,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,eAM9B,CAAA;AAGD,oBAAY,gBAAgB;IACxB,IAAI,IAAI;IACR,IAAI,IAAI;IACR,OAAO,IAAI;IACX,QAAQ,IAAI;IACZ,GAAG,IAAI;IACP,MAAM,IAAI;IACV,KAAK,IAAI;IACT,MAAM,IAAI;IACV,MAAM,IAAI;IACV,OAAO,IAAI;IACX,SAAS,IAAI;IACb,KAAK,KAAK;IACV,gBAAgB,KAAK;IACrB,iBAAiB,KAAK;IACtB,YAAY,KAAK;IACjB,eAAe,KAAK;IACpB,IAAI,KAAK;IACT,SAAS,KAAK;IACd,OAAO,KAAK;IACZ,QAAQ,KAAK;IACb,SAAS,KAAK;CACjB;AAED,oBAAY,sBAAsB;IAChC,8BAA8B,IAAA,CAAS,qDAAqD;IAC5F,+BAA+B,IAAA,CAAQ,sDAAsD;IAC7F,8BAA8B,IAAA,CAAS,UAAU;IACjD,+BAA+B,IAAA;CAChC;AAED,eAAO,MAAM,iBAAiB,EAAE,eAI/B,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,eAahC,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,eAI7B,CAAA"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PrecisionLength = exports.TDengineTypeLength = exports.TDenginePrecision = exports.TDengineTypeCode = exports.ColumnsBlockType = exports.TDengineTypeName = exports.FetchRawBlockMessage = exports.BinaryQueryMessage = void 0;
3
+ exports.PrecisionLength = exports.TDengineTypeLength = exports.TDenginePrecision = exports.TSDB_OPTION_CONNECTION = exports.TDengineTypeCode = exports.ColumnsBlockType = exports.TDengineTypeName = exports.FetchRawBlockMessage = exports.BinaryQueryMessage = void 0;
4
4
  exports.BinaryQueryMessage = BigInt(6);
5
5
  exports.FetchRawBlockMessage = BigInt(7);
6
6
  exports.TDengineTypeName = {
@@ -50,8 +50,17 @@ var TDengineTypeCode;
50
50
  TDengineTypeCode[TDengineTypeCode["BIGINT_UNSIGNED"] = 14] = "BIGINT_UNSIGNED";
51
51
  TDengineTypeCode[TDengineTypeCode["JSON"] = 15] = "JSON";
52
52
  TDengineTypeCode[TDengineTypeCode["VARBINARY"] = 16] = "VARBINARY";
53
+ TDengineTypeCode[TDengineTypeCode["DECIMAL"] = 17] = "DECIMAL";
53
54
  TDengineTypeCode[TDengineTypeCode["GEOMETRY"] = 20] = "GEOMETRY";
55
+ TDengineTypeCode[TDengineTypeCode["DECIMAL64"] = 21] = "DECIMAL64";
54
56
  })(TDengineTypeCode || (exports.TDengineTypeCode = TDengineTypeCode = {}));
57
+ var TSDB_OPTION_CONNECTION;
58
+ (function (TSDB_OPTION_CONNECTION) {
59
+ TSDB_OPTION_CONNECTION[TSDB_OPTION_CONNECTION["TSDB_OPTION_CONNECTION_CHARSET"] = 0] = "TSDB_OPTION_CONNECTION_CHARSET";
60
+ TSDB_OPTION_CONNECTION[TSDB_OPTION_CONNECTION["TSDB_OPTION_CONNECTION_TIMEZONE"] = 1] = "TSDB_OPTION_CONNECTION_TIMEZONE";
61
+ TSDB_OPTION_CONNECTION[TSDB_OPTION_CONNECTION["TSDB_OPTION_CONNECTION_USER_IP"] = 2] = "TSDB_OPTION_CONNECTION_USER_IP";
62
+ TSDB_OPTION_CONNECTION[TSDB_OPTION_CONNECTION["TSDB_OPTION_CONNECTION_USER_APP"] = 3] = "TSDB_OPTION_CONNECTION_USER_APP";
63
+ })(TSDB_OPTION_CONNECTION || (exports.TSDB_OPTION_CONNECTION = TSDB_OPTION_CONNECTION = {}));
55
64
  exports.TDenginePrecision = {
56
65
  0: 'MILLISECOND',
57
66
  1: "MICROSECOND",
@@ -20,6 +20,8 @@ export declare class TaosResult {
20
20
  private _precision;
21
21
  protected _affectRows: number | null | undefined;
22
22
  private _totalTime;
23
+ private fields_precisions?;
24
+ private fields_scales?;
23
25
  /** unit nano seconds */
24
26
  private _timing;
25
27
  constructor(queryResponse?: WSQueryResponse);
@@ -37,6 +39,7 @@ export declare class TaosResult {
37
39
  getTotalTime(): number;
38
40
  addTotalTime(totalTime: number): void;
39
41
  setTiming(timing?: bigint): void;
42
+ getFieldsScales(index: number): bigint | null;
40
43
  /**
41
44
  * Mapping the WebSocket response type code to TDengine's type name.
42
45
  */
@@ -44,8 +47,8 @@ export declare class TaosResult {
44
47
  }
45
48
  export declare function parseBlock(blocks: WSFetchBlockResponse, taosResult: TaosResult): TaosResult;
46
49
  export declare function _isVarType(metaType: number): Number;
47
- export declare function readSolidDataToArray(dataBuffer: DataView, colBlockHead: number, rows: number, metaType: number, bitMapArr: Uint8Array): any[];
48
- export declare function readSolidData(dataBuffer: DataView, colDataHead: number, meta: ResponseMeta): Number | Boolean | BigInt;
50
+ export declare function readSolidDataToArray(dataBuffer: DataView, colBlockHead: number, rows: number, metaType: number, bitMapArr: Uint8Array, startOffset: number, colIndex: number): any[];
51
+ export declare function readSolidData(dataBuffer: DataView, colDataHead: number, meta: ResponseMeta, fields_scale: bigint | null): Number | Boolean | BigInt | string;
49
52
  export declare function readBinary(dataBuffer: ArrayBuffer, colDataHead: number, length: number): ArrayBuffer;
50
53
  export declare function readVarchar(dataBuffer: ArrayBuffer, colDataHead: number, length: number, textDecoder: TextDecoder): string;
51
54
  export declare function readNchar(dataBuffer: ArrayBuffer, colDataHead: number, length: number): string;
@@ -1 +1 @@
1
- {"version":3,"file":"taosResult.d.ts","sourceRoot":"","sources":["../../../src/common/taosResult.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taosResult.d.ts","sourceRoot":"","sources":["../../../src/common/taosResult.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ const constant_1 = require("./constant");
19
19
  const wsError_1 = require("./wsError");
20
20
  const ut8Helper_1 = require("./ut8Helper");
21
21
  const log_1 = __importDefault(require("./log"));
22
+ const utils_1 = require("./utils");
22
23
  class TaosResult {
23
24
  constructor(queryResponse) {
24
25
  this._totalTime = 0;
@@ -53,6 +54,8 @@ class TaosResult {
53
54
  this._timing = queryResponse.timing;
54
55
  this._precision = queryResponse.precision;
55
56
  this._totalTime = queryResponse.totalTime;
57
+ this.fields_precisions = queryResponse.fields_precisions;
58
+ this.fields_scales = queryResponse.fields_scales;
56
59
  }
57
60
  setPrecision(precision) {
58
61
  this._precision = precision;
@@ -114,6 +117,12 @@ class TaosResult {
114
117
  this._timing = this._timing + timing;
115
118
  }
116
119
  }
120
+ getFieldsScales(index) {
121
+ if (this.fields_scales) {
122
+ return this.fields_scales[index];
123
+ }
124
+ return null;
125
+ }
117
126
  /**
118
127
  * Mapping the WebSocket response type code to TDengine's type name.
119
128
  */
@@ -175,7 +184,7 @@ function parseBlock(blocks, taosResult) {
175
184
  row.push("NULL");
176
185
  }
177
186
  else {
178
- row.push(readSolidData(dataView, colDataHead, metaList[j]));
187
+ row.push(readSolidData(dataView, colDataHead, metaList[j], taosResult.getFieldsScales(j)));
179
188
  }
180
189
  colBlockHead = colBlockHead + bitMapSize + dataView.getInt32(INT_32_SIZE * j, true);
181
190
  }
@@ -235,7 +244,7 @@ function _isVarType(metaType) {
235
244
  }
236
245
  }
237
246
  }
238
- function readSolidDataToArray(dataBuffer, colBlockHead, rows, metaType, bitMapArr) {
247
+ function readSolidDataToArray(dataBuffer, colBlockHead, rows, metaType, bitMapArr, startOffset, colIndex) {
239
248
  let result = [];
240
249
  switch (metaType) {
241
250
  case constant_1.TDengineTypeCode.BOOL:
@@ -350,13 +359,41 @@ function readSolidDataToArray(dataBuffer, colBlockHead, rows, metaType, bitMapAr
350
359
  }
351
360
  break;
352
361
  }
362
+ case constant_1.TDengineTypeCode.DECIMAL64: {
363
+ let scale = getScaleFromRowBlock(dataBuffer, colIndex, startOffset);
364
+ for (let i = 0; i < rows; i++, colBlockHead += 8) {
365
+ if (isNull(bitMapArr, i)) {
366
+ result.push(null);
367
+ }
368
+ else {
369
+ let decimalVal = dataBuffer.getBigInt64(colBlockHead, true);
370
+ result.push((0, utils_1.decimalToString)(decimalVal.toString(), BigInt(scale)));
371
+ }
372
+ }
373
+ break;
374
+ }
375
+ case constant_1.TDengineTypeCode.DECIMAL: {
376
+ let scale = getScaleFromRowBlock(dataBuffer, colIndex, startOffset);
377
+ for (let i = 0; i < rows; i++, colBlockHead += 16) {
378
+ if (isNull(bitMapArr, i)) {
379
+ result.push(null);
380
+ }
381
+ else {
382
+ let decimalHighPart = dataBuffer.getBigInt64(colBlockHead + 8, true);
383
+ const decimalLowPart = dataBuffer.getBigUint64(colBlockHead, true);
384
+ const decimalCombined = (decimalHighPart << 64n) | decimalLowPart;
385
+ result.push((0, utils_1.decimalToString)(decimalCombined.toString(), BigInt(scale)));
386
+ }
387
+ }
388
+ break;
389
+ }
353
390
  default: {
354
- throw new wsError_1.WebSocketQueryInterFaceError(wsError_1.ErrorCode.ERR_UNSUPPORTED_TDENGINE_TYPE, `unspported type ${metaType}`);
391
+ throw new wsError_1.WebSocketQueryInterFaceError(wsError_1.ErrorCode.ERR_UNSUPPORTED_TDENGINE_TYPE, `unsupported type ${metaType}`);
355
392
  }
356
393
  }
357
394
  return result;
358
395
  }
359
- function readSolidData(dataBuffer, colDataHead, meta) {
396
+ function readSolidData(dataBuffer, colDataHead, meta, fields_scale) {
360
397
  switch (meta.type) {
361
398
  case constant_1.TDengineTypeCode.BOOL: {
362
399
  return (Boolean)(dataBuffer.getInt8(colDataHead));
@@ -395,8 +432,18 @@ function readSolidData(dataBuffer, colDataHead, meta) {
395
432
  return dataBuffer.getBigInt64(colDataHead, true);
396
433
  // could change
397
434
  }
435
+ case constant_1.TDengineTypeCode.DECIMAL: {
436
+ let decimalHighPart = dataBuffer.getBigInt64(colDataHead + 8, true);
437
+ const decimalLowPart = dataBuffer.getBigUint64(colDataHead, true);
438
+ const decimalCombined = (decimalHighPart << 64n) | decimalLowPart;
439
+ return (0, utils_1.decimalToString)(decimalCombined.toString(), fields_scale);
440
+ }
441
+ case constant_1.TDengineTypeCode.DECIMAL64: {
442
+ let decimalVal = dataBuffer.getBigInt64(colDataHead, true);
443
+ return (0, utils_1.decimalToString)(decimalVal.toString(), fields_scale);
444
+ }
398
445
  default: {
399
- throw new wsError_1.WebSocketQueryInterFaceError(wsError_1.ErrorCode.ERR_UNSUPPORTED_TDENGINE_TYPE, `unspported type ${meta.type} for column ${meta.name}`);
446
+ throw new wsError_1.WebSocketQueryInterFaceError(wsError_1.ErrorCode.ERR_UNSUPPORTED_TDENGINE_TYPE, `unsupported type ${meta.type} for column ${meta.name}`);
400
447
  }
401
448
  }
402
449
  }
@@ -447,3 +494,10 @@ function bitPos(n) {
447
494
  function bitmapLen(n) {
448
495
  return ((n) + ((1 << 3) - 1)) >> 3;
449
496
  }
497
+ function getScaleFromRowBlock(buffer, colIndex, startOffset) {
498
+ // for decimal: |___bytes___|__empty__|___prec___|__scale___|
499
+ let backupPos = buffer.byteOffset + startOffset + 28 + colIndex * 5 + 1;
500
+ let scaleBuffer = new DataView(buffer.buffer, backupPos);
501
+ let scale = scaleBuffer.getInt32(0, true);
502
+ return scale & 0xFF;
503
+ }
@@ -14,4 +14,5 @@ export declare function safeDecodeURIComponent(str: string): string;
14
14
  * 0 -> v1 === v2
15
15
  */
16
16
  export declare function compareVersions(v1: string, v2: string): number;
17
+ export declare function decimalToString(valueStr: string, fields_scale: bigint | null): string;
17
18
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/common/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGpC,wBAAgB,MAAM,CAAC,QAAQ,EAAC,QAAQ,GAAE,GAAG,CAe5C;AAGD,wBAAgB,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAM3C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAC,MAAM,EAAE,KAAK,EAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,EAAE,GAAG,CAAC,EAAC,MAAM,GAAG,WAAW,CA6BnG;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,UAQjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAW9D"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/common/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGpC,wBAAgB,MAAM,CAAC,QAAQ,EAAC,QAAQ,GAAE,GAAG,CA6B5C;AAGD,wBAAgB,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAM3C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAC,MAAM,EAAE,KAAK,EAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,EAAE,GAAG,CAAC,EAAC,MAAM,GAAG,WAAW,CA6BnG;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,UAQjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAW9D;AAkDD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAmBrF"}
@@ -6,6 +6,7 @@ exports.getBinarySql = getBinarySql;
6
6
  exports.zigzagDecode = zigzagDecode;
7
7
  exports.safeDecodeURIComponent = safeDecodeURIComponent;
8
8
  exports.compareVersions = compareVersions;
9
+ exports.decimalToString = decimalToString;
9
10
  const wsError_1 = require("./wsError");
10
11
  function getUrl(wsConfig) {
11
12
  let url = new URL(wsConfig.getUrl());
@@ -19,6 +20,16 @@ function getUrl(wsConfig) {
19
20
  if (token) {
20
21
  url.searchParams.set("token", token);
21
22
  }
23
+ let timezone = wsConfig.getTimezone();
24
+ if (timezone) {
25
+ url.searchParams.set("timezone", timezone);
26
+ }
27
+ if (url.pathname && url.pathname !== '/') {
28
+ wsConfig.setDb(url.pathname.slice(1));
29
+ }
30
+ if (url.searchParams.has("timezone")) {
31
+ wsConfig.setTimezone(url.searchParams.get("timezone") || '');
32
+ }
22
33
  url.pathname = '/ws';
23
34
  return url;
24
35
  }
@@ -135,3 +146,23 @@ function comparePreReleases(pre1, pre2) {
135
146
  // compare pre release tag strings
136
147
  return pre1.localeCompare(pre2);
137
148
  }
149
+ function decimalToString(valueStr, fields_scale) {
150
+ let decimalStr = valueStr;
151
+ if (fields_scale && fields_scale > 0) {
152
+ const scale = Number(fields_scale);
153
+ const isNegative = decimalStr.startsWith('-');
154
+ const absStr = isNegative ? decimalStr.slice(1) : decimalStr;
155
+ if (absStr.length <= scale) {
156
+ // If the length of the number is less than or equal to the precision, add 0 before it.
157
+ const paddedStr = absStr.padStart(scale + 1, '0');
158
+ decimalStr = (isNegative ? '-' : '') + '0.' + paddedStr.slice(1);
159
+ }
160
+ else {
161
+ // 在指定位置插入小数点
162
+ const integerPart = absStr.slice(0, absStr.length - scale);
163
+ const decimalPart = absStr.slice(absStr.length - scale);
164
+ decimalStr = (isNegative ? '-' : '') + integerPart + '.' + decimalPart;
165
+ }
166
+ }
167
+ return decimalStr;
168
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"wsSql.d.ts","sourceRoot":"","sources":["../../../src/sql/wsSql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAc,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAG3C,OAAO,EAAE,SAAS,EAAyB,eAAe,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAKvC,qBAAa,KAAK;IACd,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,SAAS,CAAW;gBAChB,QAAQ,EAAC,QAAQ;WAMhB,IAAI,CAAC,QAAQ,EAAC,QAAQ,GAAE,OAAO,CAAC,KAAK,CAAC;IAuBnD,KAAK;IAIL;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAI1B,KAAK,IAAG,OAAO,CAAC,IAAI,CAAC;IAIrB,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BnI,QAAQ,CAAC,KAAK,CAAC,EAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBxC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,GAAC,MAAuB,GAAG,OAAO,CAAC,UAAU,CAAC;YA4C9E,uBAAuB;IAa/B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAW3D"}
1
+ {"version":3,"file":"wsSql.d.ts","sourceRoot":"","sources":["../../../src/sql/wsSql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAc,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAG3C,OAAO,EAAE,SAAS,EAAyB,eAAe,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAKvC,qBAAa,KAAK;IACd,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,SAAS,CAAW;gBAChB,QAAQ,EAAC,QAAQ;WAMhB,IAAI,CAAC,QAAQ,EAAC,QAAQ,GAAE,OAAO,CAAC,KAAK,CAAC;IAgCnD,KAAK;IAIL;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAI1B,KAAK,IAAG,OAAO,CAAC,IAAI,CAAC;IAIrB,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BnI,QAAQ,CAAC,KAAK,CAAC,EAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBxC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,GAAC,MAAuB,GAAG,OAAO,CAAC,UAAU,CAAC;YA4C9E,uBAAuB;IAa/B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAW3D"}
@@ -32,6 +32,16 @@ class WsSql {
32
32
  if (database && database.length > 0) {
33
33
  await wsSql.exec(`use ${database}`);
34
34
  }
35
+ else {
36
+ await wsSql.exec('use information_schema');
37
+ }
38
+ let timezone = wsConfig.getTimezone();
39
+ if (timezone && timezone.length > 0) {
40
+ await wsSql._wsClient.setOptionConnection(constant_1.TSDB_OPTION_CONNECTION.TSDB_OPTION_CONNECTION_TIMEZONE, timezone);
41
+ }
42
+ else {
43
+ await wsSql._wsClient.setOptionConnection(constant_1.TSDB_OPTION_CONNECTION.TSDB_OPTION_CONNECTION_TIMEZONE, null);
44
+ }
35
45
  return wsSql;
36
46
  }
37
47
  catch (e) {
@@ -8,20 +8,20 @@ export interface StmtMessageInfo {
8
8
  interface StmtParamsInfo {
9
9
  req_id: number;
10
10
  sql?: string | undefined | null;
11
- stmt_id?: number | undefined | null;
11
+ stmt_id?: bigint | undefined | null;
12
12
  name?: string | undefined | null;
13
13
  tags?: Array<any> | undefined | null;
14
14
  paramArray?: Array<Array<any>> | undefined | null;
15
15
  }
16
16
  export declare class WsStmtQueryResponse extends WSQueryResponse {
17
17
  affected: number | undefined | null;
18
- stmt_id?: number | undefined | null;
18
+ stmt_id?: bigint | undefined | null;
19
19
  constructor(resp: MessageResp);
20
20
  }
21
21
  export declare const enum StmtBindType {
22
22
  STMT_TYPE_TAG = 1,
23
23
  STMT_TYPE_BIND = 2
24
24
  }
25
- export declare function binaryBlockEncode(bindParams: StmtBindParams, bindType: StmtBindType, stmtId: number, reqId: bigint, row: number): ArrayBuffer;
25
+ export declare function binaryBlockEncode(bindParams: StmtBindParams, bindType: StmtBindType, stmtId: bigint, reqId: bigint, row: number): ArrayBuffer;
26
26
  export {};
27
27
  //# sourceMappingURL=wsProto.d.ts.map
@@ -7,7 +7,7 @@ const constant_1 = require("../common/constant");
7
7
  class WsStmtQueryResponse extends wsResponse_1.WSQueryResponse {
8
8
  constructor(resp) {
9
9
  super(resp);
10
- this.stmt_id = resp.msg.stmt_id;
10
+ this.stmt_id = BigInt(resp.msg.stmt_id);
11
11
  this.affected = resp.msg.affected;
12
12
  }
13
13
  }
@@ -22,7 +22,7 @@ function binaryBlockEncode(bindParams, bindType, stmtId, reqId, row) {
22
22
  let arrayBuffer = new ArrayBuffer(length);
23
23
  let arrayView = new DataView(arrayBuffer);
24
24
  arrayView.setBigUint64(0, reqId, true);
25
- arrayView.setBigUint64(8, BigInt(stmtId), true);
25
+ arrayView.setBigUint64(8, stmtId, true);
26
26
  arrayView.setBigUint64(16, BigInt(bindType), true);
27
27
  //version int32
28
28
  arrayView.setUint32(24, 1, true);
@@ -18,7 +18,7 @@ export declare class WsStmt {
18
18
  exec(): Promise<void>;
19
19
  getLastAffected(): number | null | undefined;
20
20
  close(): Promise<void>;
21
- getStmtId(): number | undefined | null;
21
+ getStmtId(): bigint | undefined | null;
22
22
  private execute;
23
23
  private sendBinaryMsg;
24
24
  private init;
@@ -1 +1 @@
1
- {"version":3,"file":"wsStmt.d.ts","sourceRoot":"","sources":["../../../src/stmt/wsStmt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAK9C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,qBAAa,MAAM;IACf,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,UAAU,CAAgC;IAElD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO;WAOM,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAC,MAAM,EAAE,KAAK,CAAC,EAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWrF,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY9C,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlD,YAAY,IAAG,cAAc;IAIvB,OAAO,CAAC,WAAW,EAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAclD,IAAI,CAAC,WAAW,EAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/C,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,eAAe;IAIT,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,SAAS,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;YAI/B,OAAO;YA2BP,aAAa;YAeb,IAAI;CAwBrB"}
1
+ {"version":3,"file":"wsStmt.d.ts","sourceRoot":"","sources":["../../../src/stmt/wsStmt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAK9C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,qBAAa,MAAM;IACf,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,UAAU,CAAgC;IAElD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO;WAOM,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAC,MAAM,EAAE,KAAK,CAAC,EAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWrF,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY9C,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlD,YAAY,IAAG,cAAc;IAIvB,OAAO,CAAC,WAAW,EAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAclD,IAAI,CAAC,WAAW,EAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/C,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,eAAe;IAIT,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,SAAS,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;YAI/B,OAAO;YA2BP,aAAa;YAeb,IAAI;CAwBrB"}
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.WsStmt = void 0;
7
+ const json_bigint_1 = __importDefault(require("json-bigint"));
7
8
  const wsError_1 = require("../common/wsError");
8
9
  const wsProto_1 = require("./wsProto");
9
10
  const reqid_1 = require("../common/reqid");
@@ -140,7 +141,7 @@ class WsStmt {
140
141
  if (this._wsClient.getState() <= 0) {
141
142
  throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_CONNECTION_CLOSED, "websocket connect has closed!");
142
143
  }
143
- let reqMsg = JSON.stringify(queryMsg);
144
+ let reqMsg = json_bigint_1.default.stringify(queryMsg);
144
145
  if (register) {
145
146
  let result = await this._wsClient.exec(reqMsg, false);
146
147
  let resp = new wsProto_1.WsStmtQueryResponse(result);
@@ -95,6 +95,8 @@ export declare class TMQRawDataSchema {
95
95
  bytes: bigint;
96
96
  colID: number;
97
97
  name: string;
98
+ precision: number;
99
+ scale: number;
98
100
  constructor();
99
101
  }
100
102
  //# sourceMappingURL=constant.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../../../src/tmq/constant.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;IACrB,OAAc,QAAQ,EAAE,MAAM,CAAc;IAE5C,OAAc,SAAS,EAAE,MAAM,CAAe;IAE9C;;OAEG;IACH,OAAc,kBAAkB,EAAE,MAAM,CAAwB;IAEhE;;OAEG;IACH,OAAc,uBAAuB,EAAE,MAAM,CAA6B;IAE1E;;OAEG;IACH,OAAc,iBAAiB,EAAE,MAAM,CAAuB;IAE9D;;OAEG;IACH,OAAc,mBAAmB,EAAE,MAAM,CAAyB;IAElE;;OAEG;IACH,OAAc,iBAAiB,EAAE,MAAM,CAAuB;IAE9D;;OAEG;IACH,OAAc,kBAAkB,EAAE,MAAM,CAAwB;IAEhE;;OAEG;IACH,OAAc,2BAA2B,EAAE,MAAM,CAAiC;IAElF;;OAEG;IACH,OAAc,UAAU,EAAE,MAAM,CAAmB;IAEnD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;;;OAIG;IACH,OAAc,MAAM,EAAE,MAAM,CAAY;IAExC;;;;OAIG;IACH,OAAc,eAAe,EAAE,MAAM,CAAwB;IAE7D;;;OAGG;IACH,OAAc,uBAAuB,EAAE,MAAM,CAAwB;CAExE;AAED,qBAAa,cAAc;IACvB,OAAc,SAAS,EAAE,MAAM,CAAe;IAC9C,OAAc,IAAI,EAAE,MAAM,CAAU;IACpC,OAAc,QAAQ,EAAE,MAAM,CAAe;IAC7C,OAAc,aAAa,EAAE,MAAM,CAAqB;IACxD,OAAc,MAAM,EAAE,MAAM,CAAY;IACxC,OAAc,WAAW,EAAE,MAAM,CAAiB;IAClD,OAAc,kBAAkB,EAAE,MAAM,CAAgB;IACxD,OAAc,IAAI,EAAE,MAAM,CAAU;IACpC,OAAc,YAAY,EAAE,MAAM,CAAmB;IACrD,OAAc,SAAS,EAAE,MAAM,CAAe;IAC9C,OAAc,QAAQ,EAAE,MAAM,CAAc;IAC5C,OAAc,UAAU,EAAE,MAAM,CAAiB;IACjD,OAAc,WAAW,EAAE,MAAM,CAAK;CACzC;AAED,qBAAa,YAAY;IACxB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;;CAInB;AAED,qBAAa,gBAAgB;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAI,MAAM,CAAC;IACf,KAAK,EAAG,MAAM,CAAC;IACf,KAAK,EAAG,MAAM,CAAA;IACd,IAAI,EAAG,MAAM,CAAC;;CASd"}
1
+ {"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../../../src/tmq/constant.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;IACrB,OAAc,QAAQ,EAAE,MAAM,CAAc;IAE5C,OAAc,SAAS,EAAE,MAAM,CAAe;IAE9C;;OAEG;IACH,OAAc,kBAAkB,EAAE,MAAM,CAAwB;IAEhE;;OAEG;IACH,OAAc,uBAAuB,EAAE,MAAM,CAA6B;IAE1E;;OAEG;IACH,OAAc,iBAAiB,EAAE,MAAM,CAAuB;IAE9D;;OAEG;IACH,OAAc,mBAAmB,EAAE,MAAM,CAAyB;IAElE;;OAEG;IACH,OAAc,iBAAiB,EAAE,MAAM,CAAuB;IAE9D;;OAEG;IACH,OAAc,kBAAkB,EAAE,MAAM,CAAwB;IAEhE;;OAEG;IACH,OAAc,2BAA2B,EAAE,MAAM,CAAiC;IAElF;;OAEG;IACH,OAAc,UAAU,EAAE,MAAM,CAAmB;IAEnD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAqB;IAEvD;;;;OAIG;IACH,OAAc,MAAM,EAAE,MAAM,CAAY;IAExC;;;;OAIG;IACH,OAAc,eAAe,EAAE,MAAM,CAAwB;IAE7D;;;OAGG;IACH,OAAc,uBAAuB,EAAE,MAAM,CAAwB;CAExE;AAED,qBAAa,cAAc;IACvB,OAAc,SAAS,EAAE,MAAM,CAAe;IAC9C,OAAc,IAAI,EAAE,MAAM,CAAU;IACpC,OAAc,QAAQ,EAAE,MAAM,CAAe;IAC7C,OAAc,aAAa,EAAE,MAAM,CAAqB;IACxD,OAAc,MAAM,EAAE,MAAM,CAAY;IACxC,OAAc,WAAW,EAAE,MAAM,CAAiB;IAClD,OAAc,kBAAkB,EAAE,MAAM,CAAgB;IACxD,OAAc,IAAI,EAAE,MAAM,CAAU;IACpC,OAAc,YAAY,EAAE,MAAM,CAAmB;IACrD,OAAc,SAAS,EAAE,MAAM,CAAe;IAC9C,OAAc,QAAQ,EAAE,MAAM,CAAc;IAC5C,OAAc,UAAU,EAAE,MAAM,CAAiB;IACjD,OAAc,WAAW,EAAE,MAAM,CAAK;CACzC;AAED,qBAAa,YAAY;IACrB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;;CAItB;AAED,qBAAa,gBAAgB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAI,MAAM,CAAC;IACf,KAAK,EAAG,MAAM,CAAC;IACf,KAAK,EAAG,MAAM,CAAA;IACd,IAAI,EAAG,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;;CAWjB"}
@@ -100,6 +100,8 @@ class TMQRawDataSchema {
100
100
  this.colType = -1;
101
101
  this.flag = -1;
102
102
  this.name = "";
103
+ this.scale = 0;
104
+ this.precision = 0;
103
105
  }
104
106
  }
105
107
  exports.TMQRawDataSchema = TMQRawDataSchema;
@@ -10,7 +10,7 @@ export declare class WsPollResponse {
10
10
  topic: string;
11
11
  database: string;
12
12
  vgroup_id: number;
13
- message_id: number;
13
+ message_id: bigint;
14
14
  id: bigint;
15
15
  message_type: number;
16
16
  totalTime: number;
@@ -74,7 +74,7 @@ export declare class PartitionsResp {
74
74
  action: string;
75
75
  totalTime: number;
76
76
  timing: bigint;
77
- positions: number[];
77
+ positions: bigint[];
78
78
  constructor(resp: MessageResp);
79
79
  setTopicPartitions(topicPartitions: TopicPartition[]): TopicPartition[];
80
80
  }
@@ -84,9 +84,9 @@ export declare class CommittedResp extends PartitionsResp {
84
84
  export declare class TopicPartition {
85
85
  topic: string;
86
86
  vgroup_id: number;
87
- offset?: number;
88
- begin?: number;
89
- end?: number;
87
+ offset?: bigint;
88
+ begin?: bigint;
89
+ end?: bigint;
90
90
  constructor(msg: any);
91
91
  }
92
92
  //# sourceMappingURL=tmqResponse.d.ts.map
@@ -22,7 +22,7 @@ class WsPollResponse {
22
22
  this.topic = resp.msg.topic;
23
23
  this.database = resp.msg.database;
24
24
  this.vgroup_id = resp.msg.vgroup_id;
25
- this.message_id = resp.msg.message_id;
25
+ this.message_id = BigInt(resp.msg.message_id);
26
26
  this.message_type = resp.msg.message_type;
27
27
  if (resp.msg.id) {
28
28
  this.id = BigInt(resp.msg.id);
@@ -209,7 +209,7 @@ class WSTmqFetchBlockInfo {
209
209
  let bitMapArr = new Uint8Array(dataView.buffer, dataView.byteOffset + bufferOffset, bitMapOffset);
210
210
  bufferOffset += bitMapOffset;
211
211
  //decode column data, data is array
212
- data = (0, taosResult_1.readSolidDataToArray)(dataView, bufferOffset, rows, this.schema[i].colType, bitMapArr);
212
+ data = (0, taosResult_1.readSolidDataToArray)(dataView, bufferOffset, rows, this.schema[i].colType, bitMapArr, startOffset, i);
213
213
  }
214
214
  else {
215
215
  //Variable length type
@@ -294,7 +294,7 @@ class PartitionsResp {
294
294
  this.req_id = resp.msg.req_id;
295
295
  this.action = resp.msg.action;
296
296
  this.totalTime = resp.totalTime;
297
- this.positions = resp.msg.position;
297
+ this.positions = resp.msg.position ? resp.msg.position.map((pos) => BigInt(pos)) : [];
298
298
  }
299
299
  setTopicPartitions(topicPartitions) {
300
300
  if (topicPartitions.length != this.positions.length) {
@@ -310,16 +310,16 @@ exports.PartitionsResp = PartitionsResp;
310
310
  class CommittedResp extends PartitionsResp {
311
311
  constructor(resp) {
312
312
  super(resp);
313
- this.positions = resp.msg.committed;
313
+ this.positions = resp.msg.committed ? resp.msg.committed.map((pos) => BigInt(pos)) : [];
314
314
  }
315
315
  }
316
316
  exports.CommittedResp = CommittedResp;
317
317
  class TopicPartition {
318
318
  constructor(msg) {
319
319
  this.vgroup_id = msg.vgroup_id;
320
- this.offset = msg.offset;
321
- this.begin = msg.begin;
322
- this.end = msg.end;
320
+ this.offset = BigInt(msg.offset);
321
+ this.begin = BigInt(msg.begin);
322
+ this.end = BigInt(msg.end);
323
323
  this.topic = '';
324
324
  }
325
325
  }
@@ -5,6 +5,7 @@ export declare class WsConsumer {
5
5
  private _wsConfig;
6
6
  private _topics?;
7
7
  private _commitTime?;
8
+ private _lastMessageID?;
8
9
  private constructor();
9
10
  private init;
10
11
  static newConsumer(wsConfig: Map<string, any>): Promise<WsConsumer>;
@@ -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,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;YAWO,IAAI;WAuBL,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;IAyB9D,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,cAAc;YAwBd,QAAQ;YA4BR,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":"AAIA,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,CAAC,cAAc,CAAC,CAAQ;IAC/B,OAAO;YAWO,IAAI;WAuBL,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;IAyB9D,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,cAAc;YAuBd,QAAQ;YA6BR,iBAAiB;IAczB,UAAU,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAoBnD,gBAAgB;CA6BjC"}
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.WsConsumer = void 0;
7
+ const json_bigint_1 = __importDefault(require("json-bigint"));
7
8
  const config_1 = require("./config");
8
9
  const constant_1 = require("./constant");
9
10
  const wsClient_1 = require("../client/wsClient");
@@ -20,6 +21,7 @@ class WsConsumer {
20
21
  throw new wsError_1.WebSocketInterfaceError(wsError_1.ErrorCode.ERR_INVALID_URL, 'invalid url, password or username needed.');
21
22
  }
22
23
  this._wsClient = new wsClient_1.WsClient(this._wsConfig.url, this._wsConfig.timeout);
24
+ this._lastMessageID = BigInt(0);
23
25
  }
24
26
  async init() {
25
27
  let wsSql = null;
@@ -142,7 +144,7 @@ class WsConsumer {
142
144
  topic_vgroup_ids: offsets
143
145
  },
144
146
  };
145
- let resp = await this._wsClient.exec(JSON.stringify(queryMsg), false);
147
+ let resp = await this._wsClient.exec(json_bigint_1.default.stringify(queryMsg), false);
146
148
  return new tmqResponse_1.CommittedResp(resp).setTopicPartitions(offsets);
147
149
  }
148
150
  async commitOffsets(partitions) {
@@ -169,7 +171,7 @@ class WsConsumer {
169
171
  offset: partition.offset,
170
172
  },
171
173
  };
172
- return await this._wsClient.exec(JSON.stringify(queryMsg));
174
+ return await this._wsClient.exec(json_bigint_1.default.stringify(queryMsg));
173
175
  }
174
176
  async positions(partitions, reqId) {
175
177
  if (!partitions || partitions.length == 0) {
@@ -231,7 +233,7 @@ class WsConsumer {
231
233
  message_id: pollResp.message_id,
232
234
  },
233
235
  };
234
- let jsonStr = JSON.stringify(fetchMsg);
236
+ let jsonStr = json_bigint_1.default.stringify(fetchMsg);
235
237
  log_1.default.debug('[wsQueryInterface.fetch.fetchMsg]===>' + jsonStr);
236
238
  let result = await this._wsClient.sendMsg(jsonStr);
237
239
  let wsResponse = new wsResponse_1.WSFetchBlockResponse(result.msg);
@@ -249,10 +251,11 @@ class WsConsumer {
249
251
  action: constant_1.TMQMessageType.Poll,
250
252
  args: {
251
253
  req_id: reqid_1.ReqId.getReqID(reqId),
252
- blocking_time: timeoutMs
254
+ blocking_time: timeoutMs,
255
+ message_id: this._lastMessageID,
253
256
  },
254
257
  };
255
- let resp = await this._wsClient.exec(JSON.stringify(queryMsg), false);
258
+ let resp = await this._wsClient.exec(json_bigint_1.default.stringify(queryMsg), false);
256
259
  let pollResp = new tmqResponse_1.WsPollResponse(resp);
257
260
  let taosResult = new tmqResponse_1.TaosTmqResult(pollResp);
258
261
  var taosResults = new Map();
@@ -260,6 +263,7 @@ class WsConsumer {
260
263
  if (!pollResp.have_message || pollResp.message_type != constant_1.TMQMessageType.ResDataType) {
261
264
  return taosResults;
262
265
  }
266
+ this._lastMessageID = pollResp.message_id;
263
267
  let finish = false;
264
268
  while (!finish) {
265
269
  finish = await this.fetchBlockData(pollResp, taosResult);
@@ -35,7 +35,6 @@ describe('TDWebSocket.Tmq()', () => {
35
35
  jest.setTimeout(20 * 1000);
36
36
  test('normal connect', async () => {
37
37
  const url = `wss://${process.env.TDENGINE_CLOUD_URL}?token=${process.env.TDENGINE_CLOUD_TOKEN}`;
38
- // const TDENGINE_CLOUD_URL = 'wss://gw.cloud.taosdata.com?token=1eb78307be0681ac2fc07c2817ba8a9719641fb9';
39
38
  const topic = 'topic_meters';
40
39
  const topics = [topic];
41
40
  const groupId = 'group1';
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=decimal.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decimal.test.d.ts","sourceRoot":"","sources":["../../../test/bulkPulling/decimal.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const wsConnectorPool_1 = require("../../src/client/wsConnectorPool");
4
+ const config_1 = require("../../src/common/config");
5
+ const wsSql_1 = require("../../src/sql/wsSql");
6
+ const utils_1 = require("../utils");
7
+ const log_1 = require("../../src/common/log");
8
+ const constant_1 = require("../../src/tmq/constant");
9
+ const wsTmq_1 = require("../../src/tmq/wsTmq");
10
+ let dns = 'ws://localhost:6041';
11
+ let createTopic = `create topic if not exists topic_decimal_test as select * from power.decimal_test`;
12
+ let dropTopic = `DROP TOPIC IF EXISTS topic_decimal_test;`;
13
+ (0, log_1.setLevel)("debug");
14
+ beforeAll(async () => {
15
+ let conf = new config_1.WSConfig(dns);
16
+ conf.setUser('root');
17
+ conf.setPwd('taosdata');
18
+ let wsSql = await wsSql_1.WsSql.open(conf);
19
+ await wsSql.exec(dropTopic);
20
+ await wsSql.exec('drop database if exists power');
21
+ await wsSql.exec('create database if not exists power KEEP 3650 DURATION 10 BUFFER 16 WAL_LEVEL 1;');
22
+ await (0, utils_1.Sleep)(100);
23
+ await wsSql.exec('use power');
24
+ await wsSql.exec('CREATE STABLE if not exists decimal_test (ts timestamp, dec64 decimal(10,6), dec128 decimal(24,10), int1 int) TAGS (location binary(64), groupId int);');
25
+ await wsSql.exec(createTopic);
26
+ await wsSql.close();
27
+ });
28
+ const expectedResultsMap = new Map([
29
+ ['-1234.654321', { dec128: '-123456789012.0987654321', int1: 3, location: 'California', groupId: 3 }],
30
+ ['-0.000654', { dec128: '-0.0009876543', int1: 2, location: 'California', groupId: 3 }],
31
+ ['9876.123456', { dec128: '1234567890.0987654321', int1: 1, location: 'California', groupId: 3 }]
32
+ ]);
33
+ describe('TDWebSocket.WsSql()', () => {
34
+ jest.setTimeout(20 * 1000);
35
+ test('insert recoder', async () => {
36
+ let conf = new config_1.WSConfig(dns);
37
+ conf.setUser('root');
38
+ conf.setPwd('taosdata');
39
+ let wsSql = await wsSql_1.WsSql.open(conf);
40
+ let taosResult = await wsSql.exec('use power');
41
+ console.log(taosResult);
42
+ expect(taosResult).toBeTruthy();
43
+ taosResult = await wsSql.exec('describe decimal_test');
44
+ console.log(taosResult);
45
+ taosResult = await wsSql.exec('INSERT INTO d1001 USING decimal_test (location, groupid) TAGS ("California", 3) VALUES (NOW, "9876.123456", "1234567890.0987654321", 1) (NOW + 1a, "-0.000654", "-0.0009876543", 2) (NOW + 2a, "-1234.654321", "-123456789012.0987654321", 3)');
46
+ console.log(taosResult);
47
+ expect(taosResult.getAffectRows()).toBeGreaterThanOrEqual(3);
48
+ let wsRows = await wsSql.query('select * from decimal_test');
49
+ expect(wsRows).toBeTruthy();
50
+ let meta = wsRows.getMeta();
51
+ expect(meta).toBeTruthy();
52
+ console.log("wsRow:meta:=>", meta);
53
+ let count = 0;
54
+ while (await wsRows.next()) {
55
+ let result = wsRows.getData();
56
+ if (result != null && result.length > 0) {
57
+ if (expectedResultsMap.has(result[1])) {
58
+ console.log("result:=>", result);
59
+ const expected = expectedResultsMap.get(result[1]);
60
+ expect(result[2]).toBe(expected?.dec128);
61
+ expect(result[3]).toBe(expected?.int1);
62
+ expect(result[4]).toBe(expected?.location);
63
+ expect(result[5]).toBe(expected?.groupId);
64
+ count++;
65
+ }
66
+ }
67
+ }
68
+ await wsSql.close();
69
+ expect(count).toBe(3);
70
+ });
71
+ });
72
+ test('normal Subscribe', async () => {
73
+ let configMap = new Map([
74
+ [constant_1.TMQConstants.GROUP_ID, "gId"],
75
+ [constant_1.TMQConstants.CONNECT_USER, "root"],
76
+ [constant_1.TMQConstants.CONNECT_PASS, "taosdata"],
77
+ [constant_1.TMQConstants.AUTO_OFFSET_RESET, "earliest"],
78
+ [constant_1.TMQConstants.CLIENT_ID, 'test_tmq_client'],
79
+ [constant_1.TMQConstants.WS_URL, dns],
80
+ [constant_1.TMQConstants.ENABLE_AUTO_COMMIT, 'true'],
81
+ [constant_1.TMQConstants.AUTO_COMMIT_INTERVAL_MS, '1000'],
82
+ ["session.timeout.ms", "10000"],
83
+ ["max.poll.interval.ms", "30000"],
84
+ ["msg.with.table.name", "true"]
85
+ ]);
86
+ let consumer = await wsTmq_1.WsConsumer.newConsumer(configMap);
87
+ await consumer.subscribe(['topic_decimal_test']);
88
+ let assignment = await consumer.assignment();
89
+ console.log(assignment);
90
+ let useTime = [];
91
+ let count = 0;
92
+ for (let i = 0; i < 5; i++) {
93
+ let startTime = new Date().getTime();
94
+ let res = await consumer.poll(500);
95
+ let currTime = new Date().getTime();
96
+ useTime.push(Math.abs(currTime - startTime));
97
+ for (let [key, value] of res) {
98
+ console.log(key, value.getMeta());
99
+ let data = value.getData();
100
+ if (data == null || data.length == 0) {
101
+ break;
102
+ }
103
+ for (let record of data) {
104
+ console.log("record:=----------->", record);
105
+ if (expectedResultsMap.has(record[1])) {
106
+ const expected = expectedResultsMap.get(record[1]);
107
+ expect(record[2]).toBe(expected?.dec128);
108
+ expect(record[3]).toBe(expected?.int1);
109
+ expect(record[4]).toBe(expected?.location);
110
+ expect(record[5]).toBe(expected?.groupId);
111
+ count++;
112
+ }
113
+ }
114
+ }
115
+ }
116
+ await consumer.unsubscribe();
117
+ await consumer.close();
118
+ expect(count).toBe(3);
119
+ });
120
+ afterAll(async () => {
121
+ let conf = new config_1.WSConfig(dns);
122
+ conf.setUser('root');
123
+ conf.setPwd('taosdata');
124
+ let wsSql = await wsSql_1.WsSql.open(conf);
125
+ await wsSql.exec(dropTopic);
126
+ await wsSql.exec('drop database power');
127
+ await wsSql.close();
128
+ wsConnectorPool_1.WebSocketConnectionPool.instance().destroyed();
129
+ });
@@ -16,9 +16,9 @@ beforeAll(async () => {
16
16
  let wsSql = await wsSql_1.WsSql.open(conf);
17
17
  await wsSql.exec(`CREATE USER user1 PASS '${password1}'`);
18
18
  await wsSql.exec(`CREATE USER user2 PASS '${password2}'`);
19
- await wsSql.exec('create database if not exists power KEEP 3650 DURATION 10 BUFFER 16 WAL_LEVEL 1;');
19
+ await wsSql.exec('create database if not exists sql_test KEEP 3650 DURATION 10 BUFFER 16 WAL_LEVEL 1;');
20
20
  await (0, utils_1.Sleep)(100);
21
- await wsSql.exec('use power');
21
+ await wsSql.exec('use sql_test');
22
22
  await wsSql.exec('CREATE STABLE if not exists meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int);');
23
23
  await wsSql.close();
24
24
  });
@@ -30,10 +30,18 @@ describe('TDWebSocket.WsSql()', () => {
30
30
  conf.setUrl(dns);
31
31
  conf.setUser('root');
32
32
  conf.setPwd('taosdata');
33
- conf.setDb('power');
33
+ conf.setDb('sql_test');
34
+ conf.setTimezone('America/New_York');
34
35
  conf.setTimeOut(6000);
35
36
  wsSql = await wsSql_1.WsSql.open(conf);
36
37
  expect(wsSql.state()).toBeGreaterThan(0);
38
+ let wsRows = await wsSql.query('select timezone()');
39
+ while (await wsRows.next()) {
40
+ let result = wsRows.getData();
41
+ console.log(result);
42
+ expect(result).toBeTruthy();
43
+ expect(JSON.stringify(result)).toContain('America/New_York');
44
+ }
37
45
  await wsSql.close();
38
46
  });
39
47
  test('special characters connect1', async () => {
@@ -80,6 +88,22 @@ describe('TDWebSocket.WsSql()', () => {
80
88
  }
81
89
  }
82
90
  });
91
+ test('connect url', async () => {
92
+ let url = 'ws://root:taosdata@localhost:6041/information_schema?timezone=Asia/Shanghai';
93
+ let conf = new config_1.WSConfig(url);
94
+ let wsSql = await wsSql_1.WsSql.open(conf);
95
+ let version = await wsSql.version();
96
+ console.log(version);
97
+ expect(version).toBeTruthy();
98
+ let wsRows = await wsSql.query('select timezone()');
99
+ while (await wsRows.next()) {
100
+ let result = wsRows.getData();
101
+ console.log(result);
102
+ expect(result).toBeTruthy();
103
+ expect(JSON.stringify(result)).toContain('Asia/Shanghai');
104
+ }
105
+ await wsSql.close();
106
+ });
83
107
  test('get taosc version', async () => {
84
108
  let conf = new config_1.WSConfig(dns);
85
109
  conf.setUser('root');
@@ -105,7 +129,7 @@ describe('TDWebSocket.WsSql()', () => {
105
129
  conf.setUser('root');
106
130
  conf.setPwd('taosdata');
107
131
  let wsSql = await wsSql_1.WsSql.open(conf);
108
- let taosResult = await wsSql.exec('create database if not exists power KEEP 3650 DURATION 10 BUFFER 16 WAL_LEVEL 1;');
132
+ let taosResult = await wsSql.exec('create database if not exists sql_create KEEP 3650 DURATION 10 BUFFER 16 WAL_LEVEL 1;');
109
133
  await wsSql.close();
110
134
  console.log(taosResult);
111
135
  expect(taosResult).toBeTruthy();
@@ -115,7 +139,7 @@ describe('TDWebSocket.WsSql()', () => {
115
139
  conf.setUser('root');
116
140
  conf.setPwd('taosdata');
117
141
  let wsSql = await wsSql_1.WsSql.open(conf);
118
- let taosResult = await wsSql.exec('use power');
142
+ let taosResult = await wsSql.exec('use sql_test');
119
143
  console.log(taosResult);
120
144
  expect(taosResult).toBeTruthy();
121
145
  taosResult = await wsSql.exec('CREATE STABLE if not exists meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int);');
@@ -128,7 +152,7 @@ describe('TDWebSocket.WsSql()', () => {
128
152
  conf.setUser('root');
129
153
  conf.setPwd('taosdata');
130
154
  let wsSql = await wsSql_1.WsSql.open(conf);
131
- let taosResult = await wsSql.exec('use power');
155
+ let taosResult = await wsSql.exec('use sql_test');
132
156
  console.log(taosResult);
133
157
  expect(taosResult).toBeTruthy();
134
158
  taosResult = await wsSql.exec('describe meters');
@@ -143,7 +167,7 @@ describe('TDWebSocket.WsSql()', () => {
143
167
  conf.setUser('root');
144
168
  conf.setPwd('taosdata');
145
169
  let wsSql = await wsSql_1.WsSql.open(conf);
146
- let taosResult = await wsSql.exec('use power');
170
+ let taosResult = await wsSql.exec('use sql_test');
147
171
  console.log(taosResult);
148
172
  expect(taosResult).toBeTruthy();
149
173
  for (let i = 0; i < 10; i++) {
@@ -165,7 +189,7 @@ describe('TDWebSocket.WsSql()', () => {
165
189
  conf.setUser('root');
166
190
  conf.setPwd('taosdata');
167
191
  let wsSql = await wsSql_1.WsSql.open(conf);
168
- let taosResult = await wsSql.exec('use power');
192
+ let taosResult = await wsSql.exec('use sql_test');
169
193
  console.log(taosResult);
170
194
  expect(taosResult).toBeTruthy();
171
195
  let wsRows = await wsSql.query('select * from meters');
@@ -178,7 +202,7 @@ afterAll(async () => {
178
202
  conf.setUser('root');
179
203
  conf.setPwd('taosdata');
180
204
  let wsSql = await wsSql_1.WsSql.open(conf);
181
- await wsSql.exec('drop database power');
205
+ await wsSql.exec('drop database sql_test');
182
206
  await wsSql.exec('DROP USER user1;');
183
207
  await wsSql.exec('DROP USER user2;');
184
208
  await wsSql.close();
@@ -264,6 +264,47 @@ describe('TDWebSocket.Stmt()', () => {
264
264
  await connector.close();
265
265
  });
266
266
  });
267
+ test('test bind exception cases', async () => {
268
+ let wsConf = new config_1.WSConfig(dsn);
269
+ let connector = await wsSql_1.WsSql.open(wsConf);
270
+ let stmt = await connector.stmtInit();
271
+ const params = stmt.newStmtParam();
272
+ const emptyArrayMethods = [
273
+ { method: 'setBoolean', name: 'SetBooleanColumn' },
274
+ { method: 'setTinyInt', name: 'SetTinyIntColumn' },
275
+ { method: 'setUTinyInt', name: 'SetUTinyIntColumn' },
276
+ { method: 'setSmallInt', name: 'SetSmallIntColumn' },
277
+ { method: 'setUSmallInt', name: 'SetSmallIntColumn' },
278
+ { method: 'setInt', name: 'SetIntColumn' },
279
+ { method: 'setUInt', name: 'SetUIntColumn' },
280
+ { method: 'setBigint', name: 'SetBigIntColumn' },
281
+ { method: 'setUBigint', name: 'SetUBigIntColumn' },
282
+ { method: 'setFloat', name: 'SetFloatColumn' },
283
+ { method: 'setDouble', name: 'SetDoubleColumn' },
284
+ { method: 'setTimestamp', name: 'SeTimestampColumn' }
285
+ ];
286
+ emptyArrayMethods.forEach(({ method, name }) => {
287
+ expect(() => {
288
+ params[method]([]);
289
+ }).toThrow(`${name} params is invalid!`);
290
+ expect(() => {
291
+ params[method](null);
292
+ }).toThrow(`${name} params is invalid!`);
293
+ expect(() => {
294
+ params[method](undefined);
295
+ }).toThrow(`${name} params is invalid!`);
296
+ });
297
+ expect(() => {
298
+ params.setBoolean(['not boolean']);
299
+ }).toThrow('SetTinyIntColumn params is invalid!');
300
+ expect(() => {
301
+ params.setTinyInt(['not number']);
302
+ }).toThrow('SetTinyIntColumn params is invalid!');
303
+ expect(() => {
304
+ params.setBigint(['not bigint']);
305
+ }).toThrow('SetTinyIntColumn params is invalid!');
306
+ await connector.close();
307
+ });
267
308
  afterAll(async () => {
268
309
  let conf = new config_1.WSConfig(dsn);
269
310
  let ws = await wsSql_1.WsSql.open(conf);
@@ -6,6 +6,8 @@ const config_1 = require("../../src/common/config");
6
6
  const wsSql_1 = require("../../src/sql/wsSql");
7
7
  const utils_1 = require("../utils");
8
8
  const wsConnectorPool_1 = require("../../src/client/wsConnectorPool");
9
+ const log_1 = require("../../src/common/log");
10
+ (0, log_1.setLevel)("debug");
9
11
  const stable = 'st';
10
12
  const db = 'ws_tmq_test';
11
13
  const topics = ['topic_ws_bean'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tdengine/websocket",
3
- "version": "3.1.8",
3
+ "version": "3.1.9",
4
4
  "description": "The websocket Node.js connector for TDengine. TDengine versions 3.3.2.0 and above are recommended to use this connector.",
5
5
  "source": "index.ts",
6
6
  "main": "lib/index.js",