@tdengine/websocket 3.1.7 → 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 +39 -14
- package/lib/src/client/wsConnector.d.ts.map +1 -1
- package/lib/src/client/wsConnector.js +4 -10
- package/lib/src/client/wsConnectorPool.d.ts.map +1 -1
- package/lib/src/client/wsConnectorPool.js +16 -5
- package/lib/src/client/wsResponse.d.ts +2 -16
- package/lib/src/client/wsResponse.d.ts.map +1 -1
- package/lib/src/client/wsResponse.js +3 -11
- 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/wsRows.d.ts.map +1 -1
- package/lib/src/sql/wsRows.js +10 -4
- package/lib/src/sql/wsSql.d.ts.map +1 -1
- package/lib/src/sql/wsSql.js +12 -2
- 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/config.d.ts.map +1 -1
- package/lib/src/tmq/config.js +1 -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.d.ts +2 -0
- package/lib/test/bulkPulling/cloud.tmq.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/cloud.tmq.test.js +79 -0
- 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 +36 -10
- package/lib/test/bulkPulling/stmt.func.test.js +2 -0
- package/lib/test/bulkPulling/stmt.type.test.js +41 -0
- package/lib/test/bulkPulling/tmq.test.js +2 -0
- package/lib/test/bulkPulling/wsConnectPool.test.js +2 -2
- package/package.json +2 -3
|
@@ -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;AAKtB,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;
|
|
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"}
|
|
@@ -11,28 +11,31 @@ const wsResponse_1 = require("./wsResponse");
|
|
|
11
11
|
const reqid_1 = require("../common/reqid");
|
|
12
12
|
const log_1 = __importDefault(require("../common/log"));
|
|
13
13
|
const utils_1 = require("../common/utils");
|
|
14
|
+
const websocket_1 = require("websocket");
|
|
14
15
|
class WsClient {
|
|
15
16
|
constructor(url, timeout) {
|
|
16
17
|
this.checkURL(url);
|
|
17
18
|
this._url = url;
|
|
18
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
|
+
}
|
|
19
24
|
}
|
|
20
25
|
async connect(database) {
|
|
21
|
-
let _db = this._url.pathname.split('/')[3];
|
|
22
|
-
if (database) {
|
|
23
|
-
_db = database;
|
|
24
|
-
}
|
|
25
26
|
let connMsg = {
|
|
26
27
|
action: 'conn',
|
|
27
28
|
args: {
|
|
28
29
|
req_id: reqid_1.ReqId.getReqID(),
|
|
29
30
|
user: (0, utils_1.safeDecodeURIComponent)(this._url.username),
|
|
30
31
|
password: (0, utils_1.safeDecodeURIComponent)(this._url.password),
|
|
31
|
-
db:
|
|
32
|
+
db: database,
|
|
33
|
+
...(this._timezone && { tz: this._timezone }),
|
|
32
34
|
},
|
|
33
35
|
};
|
|
36
|
+
log_1.default.debug("[wsClient.connect.connMsg]===>" + json_bigint_1.default.stringify(connMsg));
|
|
34
37
|
this._wsConnector = await wsConnectorPool_1.WebSocketConnectionPool.instance().getConnection(this._url, this._timeout);
|
|
35
|
-
if (this._wsConnector.readyState()
|
|
38
|
+
if (this._wsConnector.readyState() === websocket_1.w3cwebsocket.OPEN) {
|
|
36
39
|
return;
|
|
37
40
|
}
|
|
38
41
|
try {
|
|
@@ -50,9 +53,31 @@ class WsClient {
|
|
|
50
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}`));
|
|
51
54
|
}
|
|
52
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
|
+
}
|
|
53
78
|
async execNoResp(queryMsg) {
|
|
54
79
|
log_1.default.debug('[wsQueryInterface.query.queryMsg]===>' + queryMsg);
|
|
55
|
-
if (this._wsConnector && this._wsConnector.readyState()
|
|
80
|
+
if (this._wsConnector && this._wsConnector.readyState() === websocket_1.w3cwebsocket.OPEN) {
|
|
56
81
|
await this._wsConnector.sendMsgNoResp(queryMsg);
|
|
57
82
|
return;
|
|
58
83
|
}
|
|
@@ -62,7 +87,7 @@ class WsClient {
|
|
|
62
87
|
async exec(queryMsg, bSqlQuery = true) {
|
|
63
88
|
return new Promise((resolve, reject) => {
|
|
64
89
|
log_1.default.debug('[wsQueryInterface.query.queryMsg]===>' + queryMsg);
|
|
65
|
-
if (this._wsConnector && this._wsConnector.readyState()
|
|
90
|
+
if (this._wsConnector && this._wsConnector.readyState() === websocket_1.w3cwebsocket.OPEN) {
|
|
66
91
|
this._wsConnector.sendMsg(queryMsg).then((e) => {
|
|
67
92
|
if (e.msg.code == 0) {
|
|
68
93
|
if (bSqlQuery) {
|
|
@@ -85,7 +110,7 @@ class WsClient {
|
|
|
85
110
|
// need to construct Response.
|
|
86
111
|
async sendBinaryMsg(reqId, action, message, bSqlQuery = true, bResultBinary = false) {
|
|
87
112
|
return new Promise((resolve, reject) => {
|
|
88
|
-
if (this._wsConnector && this._wsConnector.readyState()
|
|
113
|
+
if (this._wsConnector && this._wsConnector.readyState() === websocket_1.w3cwebsocket.OPEN) {
|
|
89
114
|
this._wsConnector.sendBinaryMsg(reqId, action, message).then((e) => {
|
|
90
115
|
if (bResultBinary) {
|
|
91
116
|
resolve(e);
|
|
@@ -117,7 +142,7 @@ class WsClient {
|
|
|
117
142
|
async ready() {
|
|
118
143
|
try {
|
|
119
144
|
this._wsConnector = await wsConnectorPool_1.WebSocketConnectionPool.instance().getConnection(this._url, this._timeout);
|
|
120
|
-
if (this._wsConnector.readyState()
|
|
145
|
+
if (this._wsConnector.readyState() !== websocket_1.w3cwebsocket.OPEN) {
|
|
121
146
|
await this._wsConnector.ready();
|
|
122
147
|
}
|
|
123
148
|
log_1.default.debug("ready status ", this._url, this._wsConnector.readyState());
|
|
@@ -131,7 +156,7 @@ class WsClient {
|
|
|
131
156
|
async sendMsg(msg) {
|
|
132
157
|
return new Promise((resolve, reject) => {
|
|
133
158
|
log_1.default.debug("[wsQueryInterface.sendMsg]===>" + msg);
|
|
134
|
-
if (this._wsConnector && this._wsConnector.readyState()
|
|
159
|
+
if (this._wsConnector && this._wsConnector.readyState() === websocket_1.w3cwebsocket.OPEN) {
|
|
135
160
|
this._wsConnector.sendMsg(msg).then((e) => {
|
|
136
161
|
resolve(e);
|
|
137
162
|
}).catch((e) => reject(e));
|
|
@@ -152,8 +177,8 @@ class WsClient {
|
|
|
152
177
|
return new Promise((resolve, reject) => {
|
|
153
178
|
let jsonStr = json_bigint_1.default.stringify(freeResultMsg);
|
|
154
179
|
log_1.default.debug("[wsQueryInterface.freeResult.freeResultMsg]===>" + jsonStr);
|
|
155
|
-
if (this._wsConnector && this._wsConnector.readyState()
|
|
156
|
-
this._wsConnector.
|
|
180
|
+
if (this._wsConnector && this._wsConnector.readyState() === websocket_1.w3cwebsocket.OPEN) {
|
|
181
|
+
this._wsConnector.sendMsgNoResp(jsonStr)
|
|
157
182
|
.then((e) => { resolve(e); })
|
|
158
183
|
.catch((e) => reject(e));
|
|
159
184
|
}
|
|
@@ -171,7 +196,7 @@ class WsClient {
|
|
|
171
196
|
};
|
|
172
197
|
if (this._wsConnector) {
|
|
173
198
|
try {
|
|
174
|
-
if (this._wsConnector.readyState()
|
|
199
|
+
if (this._wsConnector.readyState() !== websocket_1.w3cwebsocket.OPEN) {
|
|
175
200
|
await this._wsConnector.ready();
|
|
176
201
|
}
|
|
177
202
|
let result = await this._wsConnector.sendMsg(json_bigint_1.default.stringify(versionMsg));
|
|
@@ -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"}
|
|
@@ -53,12 +53,6 @@ class WebSocketConnector {
|
|
|
53
53
|
let id = new DataView(data, 26, 8).getBigUint64(0, true);
|
|
54
54
|
wsEventCallback_1.WsEventCallback.instance().handleEventCallback({ id: id, action: '', req_id: BigInt(0) }, wsEventCallback_1.OnMessageType.MESSAGE_TYPE_ARRAYBUFFER, data);
|
|
55
55
|
}
|
|
56
|
-
else if (Object.prototype.toString.call(data) === '[object Blob]') {
|
|
57
|
-
data.arrayBuffer().then((d) => {
|
|
58
|
-
let id = new DataView(d, 8, 8).getBigUint64(0, true);
|
|
59
|
-
wsEventCallback_1.WsEventCallback.instance().handleEventCallback({ id: id, action: '', req_id: BigInt(0) }, wsEventCallback_1.OnMessageType.MESSAGE_TYPE_BLOB, d);
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
56
|
else if (Object.prototype.toString.call(data) === '[object String]') {
|
|
63
57
|
let msg = JSON.parse(data);
|
|
64
58
|
log_1.default.debug("[_onmessage.stringType]==>:" + data);
|
|
@@ -86,7 +80,7 @@ class WebSocketConnector {
|
|
|
86
80
|
msg.args.id = BigInt(msg.args.id);
|
|
87
81
|
}
|
|
88
82
|
return new Promise((resolve, reject) => {
|
|
89
|
-
if (this._wsConn && this._wsConn.readyState
|
|
83
|
+
if (this._wsConn && this._wsConn.readyState === websocket_1.w3cwebsocket.OPEN) {
|
|
90
84
|
this._wsConn.send(message);
|
|
91
85
|
resolve();
|
|
92
86
|
}
|
|
@@ -102,12 +96,12 @@ class WebSocketConnector {
|
|
|
102
96
|
msg.args.id = BigInt(msg.args.id);
|
|
103
97
|
}
|
|
104
98
|
return new Promise((resolve, reject) => {
|
|
105
|
-
if (this._wsConn && this._wsConn.readyState
|
|
99
|
+
if (this._wsConn && this._wsConn.readyState === websocket_1.w3cwebsocket.OPEN) {
|
|
106
100
|
if (register) {
|
|
107
101
|
wsEventCallback_1.WsEventCallback.instance().registerCallback({ action: msg.action, req_id: msg.args.req_id,
|
|
108
102
|
timeout: this._timeout, id: msg.args.id === undefined ? msg.args.id : BigInt(msg.args.id) }, resolve, reject);
|
|
109
103
|
}
|
|
110
|
-
log_1.default.debug(
|
|
104
|
+
log_1.default.debug(`[wsClient.sendMessage.msg]===> ${message}`);
|
|
111
105
|
this._wsConn.send(message);
|
|
112
106
|
}
|
|
113
107
|
else {
|
|
@@ -117,7 +111,7 @@ class WebSocketConnector {
|
|
|
117
111
|
}
|
|
118
112
|
async sendBinaryMsg(reqId, action, message, register = true) {
|
|
119
113
|
return new Promise((resolve, reject) => {
|
|
120
|
-
if (this._wsConn && this._wsConn.readyState
|
|
114
|
+
if (this._wsConn && this._wsConn.readyState === websocket_1.w3cwebsocket.OPEN) {
|
|
121
115
|
if (register) {
|
|
122
116
|
wsEventCallback_1.WsEventCallback.instance().registerCallback({ action: action, req_id: reqId,
|
|
123
117
|
timeout: this._timeout, id: reqId }, resolve, reject);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsConnectorPool.d.ts","sourceRoot":"","sources":["../../../src/client/wsConnectorPool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"wsConnectorPool.d.ts","sourceRoot":"","sources":["../../../src/client/wsConnectorPool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AASnD,qBAAa,uBAAuB;IAChC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAyB;IAClD,OAAO,CAAC,IAAI,CAAgD;IAC5D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAoB;IAC/C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAa;IAEvC,OAAO;WAOO,QAAQ,CAAC,cAAc,GAAE,MAAW,GAAE,uBAAuB;IAOrE,aAAa,CAAC,GAAG,EAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuCvF,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,GAAE,OAAO,CAAC,IAAI,CAAC;IA4BpE,SAAS;CAcZ"}
|
|
@@ -8,6 +8,7 @@ const async_mutex_1 = require("async-mutex");
|
|
|
8
8
|
const wsConnector_1 = require("./wsConnector");
|
|
9
9
|
const wsError_1 = require("../common/wsError");
|
|
10
10
|
const log_1 = __importDefault(require("../common/log"));
|
|
11
|
+
const websocket_1 = require("websocket");
|
|
11
12
|
const mutex = new async_mutex_1.Mutex();
|
|
12
13
|
class WebSocketConnectionPool {
|
|
13
14
|
constructor(maxConnections = -1) {
|
|
@@ -29,10 +30,20 @@ class WebSocketConnectionPool {
|
|
|
29
30
|
const unlock = await mutex.acquire();
|
|
30
31
|
try {
|
|
31
32
|
if (this.pool.has(connectAddr)) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
const connectors = this.pool.get(connectAddr);
|
|
34
|
+
while (connectors && connectors.length > 0) {
|
|
35
|
+
const candidate = connectors.pop();
|
|
36
|
+
if (!candidate) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (candidate && candidate.readyState() === websocket_1.w3cwebsocket.OPEN) {
|
|
40
|
+
connector = candidate;
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
else if (candidate) {
|
|
44
|
+
Atomics.add(WebSocketConnectionPool.sharedArray, 0, -1);
|
|
45
|
+
candidate.close();
|
|
46
|
+
log_1.default.error(`getConnection, current connection status fail, url: ${connectAddr}`);
|
|
36
47
|
}
|
|
37
48
|
}
|
|
38
49
|
}
|
|
@@ -55,7 +66,7 @@ class WebSocketConnectionPool {
|
|
|
55
66
|
if (connector) {
|
|
56
67
|
const unlock = await mutex.acquire();
|
|
57
68
|
try {
|
|
58
|
-
if (connector.readyState()
|
|
69
|
+
if (connector.readyState() === websocket_1.w3cwebsocket.OPEN) {
|
|
59
70
|
let url = connector.getWsURL();
|
|
60
71
|
let connectAddr = url.origin.concat(url.pathname).concat(url.search);
|
|
61
72
|
let connectors = this.pool.get(connectAddr);
|
|
@@ -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;
|
|
@@ -42,20 +44,4 @@ export declare class WSFetchBlockResponse {
|
|
|
42
44
|
textDecoder: TextDecoder;
|
|
43
45
|
constructor(msg: ArrayBuffer);
|
|
44
46
|
}
|
|
45
|
-
interface IWSConnResponse {
|
|
46
|
-
code: number;
|
|
47
|
-
message: string;
|
|
48
|
-
action: string;
|
|
49
|
-
req_id: number;
|
|
50
|
-
timing: bigint;
|
|
51
|
-
}
|
|
52
|
-
export declare class WSConnResponse {
|
|
53
|
-
code: number;
|
|
54
|
-
message: string;
|
|
55
|
-
action: string;
|
|
56
|
-
req_id: number;
|
|
57
|
-
timing: bigint;
|
|
58
|
-
constructor(msg: IWSConnResponse);
|
|
59
|
-
}
|
|
60
|
-
export {};
|
|
61
47
|
//# sourceMappingURL=wsResponse.d.ts.map
|
|
@@ -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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* define ws Response type|class, for query?
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.WSFetchBlockResponse = exports.WSQueryResponse = exports.WSVersionResponse = void 0;
|
|
7
7
|
const taosResult_1 = require("../common/taosResult");
|
|
8
8
|
class WSVersionResponse {
|
|
9
9
|
constructor(resp) {
|
|
@@ -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;
|
|
@@ -76,13 +78,3 @@ class WSFetchBlockResponse {
|
|
|
76
78
|
}
|
|
77
79
|
}
|
|
78
80
|
exports.WSFetchBlockResponse = WSFetchBlockResponse;
|
|
79
|
-
class WSConnResponse {
|
|
80
|
-
constructor(msg) {
|
|
81
|
-
this.code = msg.code;
|
|
82
|
-
this.message = msg.message;
|
|
83
|
-
this.action = msg.action;
|
|
84
|
-
this.req_id = msg.req_id;
|
|
85
|
-
this.timing = BigInt(msg.timing);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
exports.WSConnResponse = WSConnResponse;
|
|
@@ -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":"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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, `
|
|
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
|
+
}
|