@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.
- package/lib/src/client/wsClient.d.ts +3 -0
- package/lib/src/client/wsClient.d.ts.map +1 -1
- package/lib/src/client/wsClient.js +29 -5
- package/lib/src/client/wsConnector.d.ts.map +1 -1
- package/lib/src/client/wsResponse.d.ts +2 -0
- package/lib/src/client/wsResponse.d.ts.map +1 -1
- package/lib/src/client/wsResponse.js +2 -0
- package/lib/src/common/config.d.ts +3 -0
- package/lib/src/common/config.d.ts.map +1 -1
- package/lib/src/common/config.js +6 -0
- package/lib/src/common/constant.d.ts +9 -1
- package/lib/src/common/constant.d.ts.map +1 -1
- package/lib/src/common/constant.js +10 -1
- package/lib/src/common/taosResult.d.ts +5 -2
- package/lib/src/common/taosResult.d.ts.map +1 -1
- package/lib/src/common/taosResult.js +59 -5
- package/lib/src/common/utils.d.ts +1 -0
- package/lib/src/common/utils.d.ts.map +1 -1
- package/lib/src/common/utils.js +31 -0
- package/lib/src/sql/wsSql.d.ts.map +1 -1
- package/lib/src/sql/wsSql.js +10 -0
- package/lib/src/stmt/wsProto.d.ts +3 -3
- package/lib/src/stmt/wsProto.js +2 -2
- package/lib/src/stmt/wsStmt.d.ts +1 -1
- package/lib/src/stmt/wsStmt.d.ts.map +1 -1
- package/lib/src/stmt/wsStmt.js +2 -1
- package/lib/src/tmq/constant.d.ts +2 -0
- package/lib/src/tmq/constant.d.ts.map +1 -1
- package/lib/src/tmq/constant.js +2 -0
- package/lib/src/tmq/tmqResponse.d.ts +5 -5
- package/lib/src/tmq/tmqResponse.js +7 -7
- package/lib/src/tmq/wsTmq.d.ts +1 -0
- package/lib/src/tmq/wsTmq.d.ts.map +1 -1
- package/lib/src/tmq/wsTmq.js +9 -5
- package/lib/test/bulkPulling/cloud.tmq.test.js +0 -1
- package/lib/test/bulkPulling/decimal.test.d.ts +2 -0
- package/lib/test/bulkPulling/decimal.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/decimal.test.js +129 -0
- package/lib/test/bulkPulling/sql.test.js +33 -9
- package/lib/test/bulkPulling/stmt.type.test.js +41 -0
- package/lib/test/bulkPulling/tmq.test.js +2 -0
- 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;
|
|
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:
|
|
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;
|
|
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;
|
|
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;
|
|
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"}
|
package/lib/src/common/config.js
CHANGED
|
@@ -27,7 +27,15 @@ export declare enum TDengineTypeCode {
|
|
|
27
27
|
BIGINT_UNSIGNED = 14,
|
|
28
28
|
JSON = 15,
|
|
29
29
|
VARBINARY = 16,
|
|
30
|
-
|
|
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;
|
|
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":"AAAA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"taosResult.d.ts","sourceRoot":"","sources":["../../../src/common/taosResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAQ7E,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,YAAY;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAC,GAAG,CAAC;CACX;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,KAAK,CAA2B;IAExC,OAAO,CAAC,UAAU,CAA4B;IAC9C,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,iBAAiB,CAAC,CAAuB;IACjD,OAAO,CAAC,aAAa,CAAC,CAAuB;IAE7C,wBAAwB;IACxB,OAAO,CAAC,OAAO,CAA4B;gBAC/B,aAAa,CAAC,EAAE,eAAe;IAqCpC,YAAY,CAAC,SAAS,EAAE,MAAM;IAI9B,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAC,MAAM;IAW3C,QAAQ,IAAI,MAAM;IAMlB,QAAQ,CAAC,KAAK,GAAE,MAAW;IAG3B,OAAO,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,IAAI;IAIrC,OAAO,CAAC,QAAQ,EAAE,YAAY;IAM9B,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;IAGnC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;IAGvC,aAAa,IAAI,MAAM,GAAG,IAAI,GAAG,SAAS;IAI1C,WAAW,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,IAAI;IAIzC,YAAY,IAAG,MAAM,GAAG,IAAI,GAAG,SAAS;IAGxC,YAAY;IAGZ,YAAY,CAAC,SAAS,EAAC,MAAM;IAI7B,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;IAUzB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOpD;;OAEG;IACH,OAAO,CAAC,eAAe;CAc1B;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,CAgF3F;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAwBnD;AACD,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAC,MAAM,EAC1E,IAAI,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,EAAE,CA4ItG;AACD,wBAAgB,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAsD5J;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAGpG;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CAI1H;AAED,wBAAgB,SAAS,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAS9F;AAED,wBAAgB,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CAIrH;AAkBD,wBAAgB,aAAa,CAAC,CAAC,EAAC,MAAM,GAAE,MAAM,CAE7C;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAC,MAAM,EAAE,CAAC,EAAC,MAAM,GAAE,MAAM,CAEvD;AAMD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3C"}
|
|
@@ -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, `
|
|
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, `
|
|
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,
|
|
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"}
|
package/lib/src/common/utils.js
CHANGED
|
@@ -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;
|
|
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"}
|
package/lib/src/sql/wsSql.js
CHANGED
|
@@ -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?:
|
|
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?:
|
|
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:
|
|
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
|
package/lib/src/stmt/wsProto.js
CHANGED
|
@@ -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,
|
|
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);
|
package/lib/src/stmt/wsStmt.d.ts
CHANGED
|
@@ -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():
|
|
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":"
|
|
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"}
|
package/lib/src/stmt/wsStmt.js
CHANGED
|
@@ -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 =
|
|
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);
|
|
@@ -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;
|
|
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"}
|
package/lib/src/tmq/constant.js
CHANGED
|
@@ -10,7 +10,7 @@ export declare class WsPollResponse {
|
|
|
10
10
|
topic: string;
|
|
11
11
|
database: string;
|
|
12
12
|
vgroup_id: number;
|
|
13
|
-
message_id:
|
|
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:
|
|
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?:
|
|
88
|
-
begin?:
|
|
89
|
-
end?:
|
|
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
|
}
|
package/lib/src/tmq/wsTmq.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsTmq.d.ts","sourceRoot":"","sources":["../../../src/tmq/wsTmq.ts"],"names":[],"mappings":"
|
|
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"}
|
package/lib/src/tmq/wsTmq.js
CHANGED
|
@@ -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(
|
|
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(
|
|
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 =
|
|
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(
|
|
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 @@
|
|
|
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
|
|
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
|
|
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('
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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",
|