@tdengine/websocket 3.2.3 → 3.3.0
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/package.json +1 -1
- package/lib/src/client/wsClient.d.ts +23 -7
- package/lib/src/client/wsClient.d.ts.map +1 -1
- package/lib/src/client/wsClient.js +154 -139
- package/lib/src/client/wsConnector.d.ts +55 -9
- package/lib/src/client/wsConnector.d.ts.map +1 -1
- package/lib/src/client/wsConnector.js +519 -100
- package/lib/src/client/wsConnectorPool.d.ts +5 -1
- package/lib/src/client/wsConnectorPool.d.ts.map +1 -1
- package/lib/src/client/wsConnectorPool.js +61 -43
- package/lib/src/client/wsEventCallback.d.ts +3 -0
- package/lib/src/client/wsEventCallback.d.ts.map +1 -1
- package/lib/src/client/wsEventCallback.js +67 -8
- package/lib/src/common/addressConnectionTracker.d.ts +11 -0
- package/lib/src/common/addressConnectionTracker.d.ts.map +1 -0
- package/lib/src/common/addressConnectionTracker.js +53 -0
- package/lib/src/common/dsn.d.ts +14 -2
- package/lib/src/common/dsn.d.ts.map +1 -1
- package/lib/src/common/dsn.js +91 -22
- package/lib/src/common/taosResult.d.ts.map +1 -1
- package/lib/src/common/taosResult.js +0 -5
- package/lib/src/common/urlParser.d.ts +32 -0
- package/lib/src/common/urlParser.d.ts.map +1 -0
- package/lib/src/common/urlParser.js +201 -0
- package/lib/src/common/utils.d.ts +2 -1
- package/lib/src/common/utils.d.ts.map +1 -1
- package/lib/src/common/utils.js +35 -34
- package/lib/src/sql/wsSql.js +2 -2
- package/lib/src/stmt/FieldBindParams.d.ts.map +1 -1
- package/lib/src/stmt/wsColumnInfo.d.ts.map +1 -1
- package/lib/src/stmt/wsParams1.d.ts.map +1 -1
- package/lib/src/stmt/wsParams1.js +26 -26
- package/lib/src/stmt/wsParams2.d.ts.map +1 -1
- package/lib/src/stmt/wsParams2.js +0 -3
- package/lib/src/stmt/wsParamsBase.d.ts.map +1 -1
- package/lib/src/stmt/wsProto.d.ts.map +1 -1
- package/lib/src/stmt/wsProto.js +16 -16
- package/lib/src/stmt/wsStmt1.d.ts.map +1 -1
- package/lib/src/stmt/wsStmt2.d.ts +12 -4
- package/lib/src/stmt/wsStmt2.d.ts.map +1 -1
- package/lib/src/stmt/wsStmt2.js +182 -64
- package/lib/src/stmt/wsTableInfo.d.ts.map +1 -1
- package/lib/src/tmq/config.d.ts +3 -2
- package/lib/src/tmq/config.d.ts.map +1 -1
- package/lib/src/tmq/config.js +15 -15
- package/lib/src/tmq/wsTmq.d.ts +4 -1
- package/lib/src/tmq/wsTmq.d.ts.map +1 -1
- package/lib/src/tmq/wsTmq.js +50 -27
- package/lib/test/bulkPulling/a.test.d.ts +2 -0
- package/lib/test/bulkPulling/a.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/a.test.js +166 -0
- package/lib/test/bulkPulling/dsn.test.js +19 -0
- package/lib/test/bulkPulling/retryConfig.test.js +11 -11
- package/lib/test/bulkPulling/sql.failover.test.d.ts +2 -0
- package/lib/test/bulkPulling/sql.failover.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/sql.failover.test.js +338 -0
- package/lib/test/bulkPulling/stmt2.failover.test.d.ts +2 -0
- package/lib/test/bulkPulling/stmt2.failover.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/stmt2.failover.test.js +313 -0
- package/lib/test/bulkPulling/stmt2.init.failover.test.d.ts +2 -0
- package/lib/test/bulkPulling/stmt2.init.failover.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/stmt2.init.failover.test.js +50 -0
- package/lib/test/bulkPulling/tmq.failover.test.d.ts +2 -0
- package/lib/test/bulkPulling/tmq.failover.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/tmq.failover.test.js +404 -0
- package/lib/test/bulkPulling/urlParser.test.d.ts +2 -0
- package/lib/test/bulkPulling/urlParser.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/urlParser.test.js +452 -0
- package/lib/test/bulkPulling/wsClient.reconnect.integration.test.js +2 -2
- package/lib/test/bulkPulling/wsClient.recovery.test.d.ts +2 -0
- package/lib/test/bulkPulling/wsClient.recovery.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/wsClient.recovery.test.js +104 -0
- package/lib/test/bulkPulling/wsConfig.dsn.test.js +2 -0
- package/lib/test/bulkPulling/wsConnector.failover.test.js +396 -27
- package/lib/test/bulkPulling/wsConnectorPool.key.test.js +12 -10
- package/lib/test/bulkPulling/wsConnectorPool.keyAuth.test.d.ts +2 -0
- package/lib/test/bulkPulling/wsConnectorPool.keyAuth.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/wsConnectorPool.keyAuth.test.js +28 -0
- package/lib/test/bulkPulling/wsProxy.failover.integration.test.d.ts +2 -0
- package/lib/test/bulkPulling/wsProxy.failover.integration.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/wsProxy.failover.integration.test.js +120 -0
- package/lib/test/bulkPulling/wsProxy.failover.test.d.ts +2 -0
- package/lib/test/bulkPulling/wsProxy.failover.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/wsProxy.failover.test.js +465 -0
- package/lib/test/client/wsClient.recovery.test.d.ts +2 -0
- package/lib/test/client/wsClient.recovery.test.d.ts.map +1 -0
- package/lib/test/client/wsClient.recovery.test.js +122 -0
- package/lib/test/client/wsConnectPool.test.d.ts +2 -0
- package/lib/test/client/wsConnectPool.test.d.ts.map +1 -0
- package/lib/test/client/wsConnectPool.test.js +147 -0
- package/lib/test/client/wsConnector.failover.test.d.ts +2 -0
- package/lib/test/client/wsConnector.failover.test.d.ts.map +1 -0
- package/lib/test/client/wsConnector.failover.test.js +681 -0
- package/lib/test/client/wsConnector.leastConnections.test.d.ts +2 -0
- package/lib/test/client/wsConnector.leastConnections.test.d.ts.map +1 -0
- package/lib/test/client/wsConnector.leastConnections.test.js +71 -0
- package/lib/test/client/wsConnectorPool.key.test.d.ts +2 -0
- package/lib/test/client/wsConnectorPool.key.test.d.ts.map +1 -0
- package/lib/test/client/wsConnectorPool.key.test.js +127 -0
- package/lib/test/client/wsEventCallback.test.d.ts +2 -0
- package/lib/test/client/wsEventCallback.test.d.ts.map +1 -0
- package/lib/test/client/wsEventCallback.test.js +98 -0
- package/lib/test/common/addressConnectionTracker.test.d.ts +2 -0
- package/lib/test/common/addressConnectionTracker.test.d.ts.map +1 -0
- package/lib/test/common/addressConnectionTracker.test.js +74 -0
- package/lib/test/common/dsn.test.d.ts +2 -0
- package/lib/test/common/dsn.test.d.ts.map +1 -0
- package/lib/test/common/dsn.test.js +406 -0
- package/lib/test/common/log.test.d.ts +2 -0
- package/lib/test/common/log.test.d.ts.map +1 -0
- package/lib/test/common/log.test.js +54 -0
- package/lib/test/common/utils.test.d.ts +2 -0
- package/lib/test/common/utils.test.d.ts.map +1 -0
- package/lib/test/common/utils.test.js +13 -0
- package/lib/test/common/wsConfig.dsn.test.d.ts +2 -0
- package/lib/test/common/wsConfig.dsn.test.d.ts.map +1 -0
- package/lib/test/common/wsConfig.dsn.test.js +39 -0
- package/lib/test/helpers/utils.d.ts +27 -0
- package/lib/test/helpers/utils.d.ts.map +1 -0
- package/lib/test/helpers/utils.js +341 -0
- package/lib/test/helpers/wsFailoverProxy.d.ts +109 -0
- package/lib/test/helpers/wsFailoverProxy.d.ts.map +1 -0
- package/lib/test/helpers/wsFailoverProxy.js +420 -0
- package/lib/test/helpers/wsProxy.d.ts +110 -0
- package/lib/test/helpers/wsProxy.d.ts.map +1 -0
- package/lib/test/helpers/wsProxy.js +429 -0
- package/lib/test/sql/core/decimal.test.d.ts +2 -0
- package/lib/test/sql/core/decimal.test.d.ts.map +1 -0
- package/lib/test/sql/core/decimal.test.js +153 -0
- package/lib/test/sql/core/queryTables.test.d.ts +2 -0
- package/lib/test/sql/core/queryTables.test.d.ts.map +1 -0
- package/lib/test/sql/core/queryTables.test.js +506 -0
- package/lib/test/sql/core/schemaless.test.d.ts +2 -0
- package/lib/test/sql/core/schemaless.test.d.ts.map +1 -0
- package/lib/test/sql/core/schemaless.test.js +102 -0
- package/lib/test/sql/core/sql.test.d.ts +2 -0
- package/lib/test/sql/core/sql.test.d.ts.map +1 -0
- package/lib/test/sql/core/sql.test.js +324 -0
- package/lib/test/sql/decimal.test.d.ts +2 -0
- package/lib/test/sql/decimal.test.d.ts.map +1 -0
- package/lib/test/sql/decimal.test.js +153 -0
- package/lib/test/sql/failover/sql.failover.test.d.ts +2 -0
- package/lib/test/sql/failover/sql.failover.test.d.ts.map +1 -0
- package/lib/test/sql/failover/sql.failover.test.js +341 -0
- package/lib/test/sql/queryTables.test.d.ts +2 -0
- package/lib/test/sql/queryTables.test.d.ts.map +1 -0
- package/lib/test/sql/queryTables.test.js +506 -0
- package/lib/test/sql/schemaless.test.d.ts +2 -0
- package/lib/test/sql/schemaless.test.d.ts.map +1 -0
- package/lib/test/sql/schemaless.test.js +102 -0
- package/lib/test/sql/sql.failover.test.d.ts +2 -0
- package/lib/test/sql/sql.failover.test.d.ts.map +1 -0
- package/lib/test/sql/sql.failover.test.js +341 -0
- package/lib/test/sql/sql.test.d.ts +2 -0
- package/lib/test/sql/sql.test.d.ts.map +1 -0
- package/lib/test/sql/sql.test.js +324 -0
- package/lib/test/stmt/failover/stmt2.failover.mock.test.d.ts +2 -0
- package/lib/test/stmt/failover/stmt2.failover.mock.test.d.ts.map +1 -0
- package/lib/test/stmt/failover/stmt2.failover.mock.test.js +341 -0
- package/lib/test/stmt/failover/stmt2.failover.test.d.ts +2 -0
- package/lib/test/stmt/failover/stmt2.failover.test.d.ts.map +1 -0
- package/lib/test/stmt/failover/stmt2.failover.test.js +384 -0
- package/lib/test/stmt/stmt1.func.test.d.ts +2 -0
- package/lib/test/stmt/stmt1.func.test.d.ts.map +1 -0
- package/lib/test/stmt/stmt1.func.test.js +418 -0
- package/lib/test/stmt/stmt1.type.test.d.ts +2 -0
- package/lib/test/stmt/stmt1.type.test.d.ts.map +1 -0
- package/lib/test/stmt/stmt1.type.test.js +399 -0
- package/lib/test/stmt/stmt2.failover.mock.test.d.ts +2 -0
- package/lib/test/stmt/stmt2.failover.mock.test.d.ts.map +1 -0
- package/lib/test/stmt/stmt2.failover.mock.test.js +341 -0
- package/lib/test/stmt/stmt2.failover.test.d.ts +2 -0
- package/lib/test/stmt/stmt2.failover.test.d.ts.map +1 -0
- package/lib/test/stmt/stmt2.failover.test.js +384 -0
- package/lib/test/stmt/stmt2.func.test.d.ts +2 -0
- package/lib/test/stmt/stmt2.func.test.d.ts.map +1 -0
- package/lib/test/stmt/stmt2.func.test.js +537 -0
- package/lib/test/stmt/stmt2.type.test.d.ts +2 -0
- package/lib/test/stmt/stmt2.type.test.d.ts.map +1 -0
- package/lib/test/stmt/stmt2.type.test.js +401 -0
- package/lib/test/stmt/v1/stmt1.func.test.d.ts +2 -0
- package/lib/test/stmt/v1/stmt1.func.test.d.ts.map +1 -0
- package/lib/test/stmt/v1/stmt1.func.test.js +418 -0
- package/lib/test/stmt/v1/stmt1.type.test.d.ts +2 -0
- package/lib/test/stmt/v1/stmt1.type.test.d.ts.map +1 -0
- package/lib/test/stmt/v1/stmt1.type.test.js +399 -0
- package/lib/test/stmt/v2/stmt2.func.test.d.ts +2 -0
- package/lib/test/stmt/v2/stmt2.func.test.d.ts.map +1 -0
- package/lib/test/stmt/v2/stmt2.func.test.js +537 -0
- package/lib/test/stmt/v2/stmt2.type.test.d.ts +2 -0
- package/lib/test/stmt/v2/stmt2.type.test.d.ts.map +1 -0
- package/lib/test/stmt/v2/stmt2.type.test.js +401 -0
- package/lib/test/tmq/cloud/cloud.tmq.test.d.ts +2 -0
- package/lib/test/tmq/cloud/cloud.tmq.test.d.ts.map +1 -0
- package/lib/test/tmq/cloud/cloud.tmq.test.js +84 -0
- package/lib/test/tmq/cloud/tmq.cloud.test.d.ts +2 -0
- package/lib/test/tmq/cloud/tmq.cloud.test.d.ts.map +1 -0
- package/lib/test/tmq/cloud/tmq.cloud.test.js +82 -0
- package/lib/test/tmq/core/tmq.config.test.d.ts +2 -0
- package/lib/test/tmq/core/tmq.config.test.d.ts.map +1 -0
- package/lib/test/tmq/core/tmq.config.test.js +83 -0
- package/lib/test/tmq/core/tmq.test.d.ts +2 -0
- package/lib/test/tmq/core/tmq.test.d.ts.map +1 -0
- package/lib/test/tmq/core/tmq.test.js +513 -0
- package/lib/test/tmq/failover/tmq.failover.test.d.ts +2 -0
- package/lib/test/tmq/failover/tmq.failover.test.d.ts.map +1 -0
- package/lib/test/tmq/failover/tmq.failover.test.js +404 -0
- package/lib/test/tmq/tmq.cloud.test.d.ts +2 -0
- package/lib/test/tmq/tmq.cloud.test.d.ts.map +1 -0
- package/lib/test/tmq/tmq.cloud.test.js +82 -0
- package/lib/test/tmq/tmq.config.test.d.ts +2 -0
- package/lib/test/tmq/tmq.config.test.d.ts.map +1 -0
- package/lib/test/tmq/tmq.config.test.js +94 -0
- package/lib/test/tmq/tmq.failover.test.d.ts +2 -0
- package/lib/test/tmq/tmq.failover.test.d.ts.map +1 -0
- package/lib/test/tmq/tmq.failover.test.js +404 -0
- package/lib/test/tmq/tmq.test.d.ts +2 -0
- package/lib/test/tmq/tmq.test.d.ts.map +1 -0
- package/lib/test/tmq/tmq.test.js +513 -0
- package/lib/test/unit/connectionManager.test.d.ts +2 -0
- package/lib/test/unit/connectionManager.test.d.ts.map +1 -0
- package/lib/test/unit/connectionManager.test.js +91 -0
- package/package.json +1 -1
- package/readme.md +2 -2
|
@@ -449,7 +449,6 @@ function readSolidData(dataBuffer, colDataHead, meta, fields_scale) {
|
|
|
449
449
|
}
|
|
450
450
|
case constant_1.TDengineTypeCode.TIMESTAMP: {
|
|
451
451
|
return dataBuffer.getBigInt64(colDataHead, true);
|
|
452
|
-
// could change
|
|
453
452
|
}
|
|
454
453
|
case constant_1.TDengineTypeCode.DECIMAL: {
|
|
455
454
|
let decimalHighPart = dataBuffer.getBigInt64(colDataHead + 8, true);
|
|
@@ -471,13 +470,11 @@ function readBinary(dataBuffer, colDataHead, length) {
|
|
|
471
470
|
return buff;
|
|
472
471
|
}
|
|
473
472
|
function readVarchar(dataBuffer, colDataHead, length, textDecoder) {
|
|
474
|
-
// let buff = dataBuffer.slice(colDataHead, colDataHead + length)
|
|
475
473
|
let dataView = new DataView(dataBuffer, colDataHead, length);
|
|
476
474
|
return textDecoder.decode(dataView);
|
|
477
475
|
}
|
|
478
476
|
function readNchar(dataBuffer, colDataHead, length) {
|
|
479
477
|
let data = [];
|
|
480
|
-
// let buff: ArrayBuffer = dataBuffer.slice(colDataHead, colDataHead + length);
|
|
481
478
|
let dataView = new DataView(dataBuffer, colDataHead, length);
|
|
482
479
|
for (let i = 0; i < length / 4; i++) {
|
|
483
480
|
data.push((0, ut8Helper_1.appendRune)(dataView.getUint32(i * 4, true)));
|
|
@@ -485,7 +482,6 @@ function readNchar(dataBuffer, colDataHead, length) {
|
|
|
485
482
|
return data.join("");
|
|
486
483
|
}
|
|
487
484
|
function getString(dataBuffer, colDataHead, length, textDecoder) {
|
|
488
|
-
// let buff = dataBuffer.slice(colDataHead, colDataHead + length - 1)
|
|
489
485
|
let dataView = new Uint8Array(dataBuffer.buffer, dataBuffer.byteOffset + colDataHead, length - 1);
|
|
490
486
|
return textDecoder.decode(dataView);
|
|
491
487
|
}
|
|
@@ -514,7 +510,6 @@ function bitmapLen(n) {
|
|
|
514
510
|
return (n + ((1 << 3) - 1)) >> 3;
|
|
515
511
|
}
|
|
516
512
|
function getScaleFromRowBlock(buffer, colIndex, startOffset) {
|
|
517
|
-
// for decimal: |___bytes___|__empty__|___prec___|__scale___|
|
|
518
513
|
let backupPos = buffer.byteOffset + startOffset + 28 + colIndex * 5 + 1;
|
|
519
514
|
let scaleBuffer = new DataView(buffer.buffer, backupPos);
|
|
520
515
|
let scale = scaleBuffer.getInt32(0, true);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface HostInfo {
|
|
2
|
+
host: string;
|
|
3
|
+
port: number;
|
|
4
|
+
}
|
|
5
|
+
export interface ParsedUrl {
|
|
6
|
+
hosts: HostInfo[];
|
|
7
|
+
scheme: string;
|
|
8
|
+
username: string;
|
|
9
|
+
password: string;
|
|
10
|
+
database: string;
|
|
11
|
+
params: Map<string, string>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Parse a multi-host TDengine WebSocket URL.
|
|
15
|
+
* Format: ws://username:password@host1:port1,host2:port2,[::1]:port3/db?key=value
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseMultiHostUrl(url: string): ParsedUrl;
|
|
18
|
+
/**
|
|
19
|
+
* Build a single-host URL from parsed components + a specific host.
|
|
20
|
+
* Used by ConnectionManager to create WebSocketConnector URLs.
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildHostUrl(parsed: ParsedUrl, host: HostInfo, extraParams?: Map<string, string>): URL;
|
|
23
|
+
/**
|
|
24
|
+
* Extract retry options from parsed URL params.
|
|
25
|
+
*/
|
|
26
|
+
export declare function extractRetryOptions(params: Map<string, string>): {
|
|
27
|
+
retries?: number;
|
|
28
|
+
retryBackoffMs?: number;
|
|
29
|
+
retryBackoffMaxMs?: number;
|
|
30
|
+
resendWrite?: boolean;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=urlParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlParser.d.ts","sourceRoot":"","sources":["../../../src/common/urlParser.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAqFxD;AA0FD;;;GAGG;AACH,wBAAgB,YAAY,CACxB,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,QAAQ,EACd,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,GAAG,CA0BL;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB,CAgBA"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseMultiHostUrl = parseMultiHostUrl;
|
|
4
|
+
exports.buildHostUrl = buildHostUrl;
|
|
5
|
+
exports.extractRetryOptions = extractRetryOptions;
|
|
6
|
+
const wsError_1 = require("./wsError");
|
|
7
|
+
/**
|
|
8
|
+
* Parse a multi-host TDengine WebSocket URL.
|
|
9
|
+
* Format: ws://username:password@host1:port1,host2:port2,[::1]:port3/db?key=value
|
|
10
|
+
*/
|
|
11
|
+
function parseMultiHostUrl(url) {
|
|
12
|
+
if (!url || url.trim().length === 0) {
|
|
13
|
+
throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_INVALID_URL, "URL must not be empty");
|
|
14
|
+
}
|
|
15
|
+
// Extract scheme
|
|
16
|
+
const schemeMatch = url.match(/^(wss?):\/\//i);
|
|
17
|
+
if (!schemeMatch) {
|
|
18
|
+
throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_INVALID_URL, `Invalid URL scheme, expected ws:// or wss://, got: ${url}`);
|
|
19
|
+
}
|
|
20
|
+
const scheme = schemeMatch[1].toLowerCase();
|
|
21
|
+
let remainder = url.slice(schemeMatch[0].length);
|
|
22
|
+
// Extract username:password@ if present
|
|
23
|
+
let username = "";
|
|
24
|
+
let password = "";
|
|
25
|
+
const atIndex = remainder.indexOf("@");
|
|
26
|
+
if (atIndex !== -1) {
|
|
27
|
+
const userInfo = remainder.slice(0, atIndex);
|
|
28
|
+
remainder = remainder.slice(atIndex + 1);
|
|
29
|
+
const colonIndex = userInfo.indexOf(":");
|
|
30
|
+
if (colonIndex !== -1) {
|
|
31
|
+
username = userInfo.slice(0, colonIndex);
|
|
32
|
+
password = userInfo.slice(colonIndex + 1);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
username = userInfo;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Extract query params (after ?)
|
|
39
|
+
let params = new Map();
|
|
40
|
+
const queryIndex = remainder.indexOf("?");
|
|
41
|
+
let queryString = "";
|
|
42
|
+
if (queryIndex !== -1) {
|
|
43
|
+
queryString = remainder.slice(queryIndex + 1);
|
|
44
|
+
remainder = remainder.slice(0, queryIndex);
|
|
45
|
+
const searchParams = new URLSearchParams(queryString);
|
|
46
|
+
searchParams.forEach((value, key) => {
|
|
47
|
+
params.set(key, value);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// Extract database (after /)
|
|
51
|
+
let database = "";
|
|
52
|
+
const pathIndex = remainder.indexOf("/");
|
|
53
|
+
if (pathIndex !== -1) {
|
|
54
|
+
database = remainder.slice(pathIndex + 1);
|
|
55
|
+
remainder = remainder.slice(0, pathIndex);
|
|
56
|
+
}
|
|
57
|
+
// remainder is now the host list: host1:port1,host2:port2,[::1]:port3
|
|
58
|
+
const hosts = parseHostList(remainder);
|
|
59
|
+
if (hosts.length === 0) {
|
|
60
|
+
throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_INVALID_URL, "No hosts found in URL");
|
|
61
|
+
}
|
|
62
|
+
// Deduplicate hosts (preserve order, keep first occurrence)
|
|
63
|
+
const seen = new Set();
|
|
64
|
+
const dedupedHosts = [];
|
|
65
|
+
for (const h of hosts) {
|
|
66
|
+
const key = `${h.host}:${h.port}`;
|
|
67
|
+
if (!seen.has(key)) {
|
|
68
|
+
seen.add(key);
|
|
69
|
+
dedupedHosts.push(h);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
hosts: dedupedHosts,
|
|
74
|
+
scheme,
|
|
75
|
+
username,
|
|
76
|
+
password,
|
|
77
|
+
database,
|
|
78
|
+
params,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const DEFAULT_PORT = 6041;
|
|
82
|
+
/**
|
|
83
|
+
* Parse comma-separated host list. Supports IPv6 in brackets.
|
|
84
|
+
* Examples: "host1:6041,host2:6042", "[::1]:6041,host2:6042"
|
|
85
|
+
*/
|
|
86
|
+
function parseHostList(hostStr) {
|
|
87
|
+
if (!hostStr || hostStr.trim().length === 0) {
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
const hosts = [];
|
|
91
|
+
let i = 0;
|
|
92
|
+
while (i < hostStr.length) {
|
|
93
|
+
// Skip comma separator
|
|
94
|
+
if (hostStr[i] === ",") {
|
|
95
|
+
i++;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (hostStr[i] === "[") {
|
|
99
|
+
// IPv6 address in brackets
|
|
100
|
+
const closeBracket = hostStr.indexOf("]", i);
|
|
101
|
+
if (closeBracket === -1) {
|
|
102
|
+
throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_INVALID_URL, `Unclosed bracket in IPv6 address: ${hostStr.slice(i)}`);
|
|
103
|
+
}
|
|
104
|
+
const ipv6Host = hostStr.slice(i + 1, closeBracket);
|
|
105
|
+
let port = DEFAULT_PORT;
|
|
106
|
+
let next = closeBracket + 1;
|
|
107
|
+
if (next < hostStr.length && hostStr[next] === ":") {
|
|
108
|
+
const portEnd = hostStr.indexOf(",", next);
|
|
109
|
+
const portStr = portEnd === -1
|
|
110
|
+
? hostStr.slice(next + 1)
|
|
111
|
+
: hostStr.slice(next + 1, portEnd);
|
|
112
|
+
port = parsePort(portStr, hostStr);
|
|
113
|
+
i = portEnd === -1 ? hostStr.length : portEnd;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
i = next;
|
|
117
|
+
}
|
|
118
|
+
hosts.push({ host: `[${ipv6Host}]`, port });
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// Regular host or IPv4
|
|
122
|
+
const commaIndex = hostStr.indexOf(",", i);
|
|
123
|
+
const segment = commaIndex === -1
|
|
124
|
+
? hostStr.slice(i)
|
|
125
|
+
: hostStr.slice(i, commaIndex);
|
|
126
|
+
const lastColon = segment.lastIndexOf(":");
|
|
127
|
+
if (lastColon !== -1) {
|
|
128
|
+
const host = segment.slice(0, lastColon);
|
|
129
|
+
const port = parsePort(segment.slice(lastColon + 1), hostStr);
|
|
130
|
+
hosts.push({ host, port });
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
hosts.push({ host: segment, port: DEFAULT_PORT });
|
|
134
|
+
}
|
|
135
|
+
i = commaIndex === -1 ? hostStr.length : commaIndex;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return hosts;
|
|
139
|
+
}
|
|
140
|
+
function parsePort(portStr, context) {
|
|
141
|
+
// If port string is empty, use default port
|
|
142
|
+
if (portStr.length === 0) {
|
|
143
|
+
return DEFAULT_PORT;
|
|
144
|
+
}
|
|
145
|
+
// Validate that port string contains only digits
|
|
146
|
+
if (!/^\d+$/.test(portStr)) {
|
|
147
|
+
throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_INVALID_URL, `Invalid port "${portStr}" in host string: ${context}`);
|
|
148
|
+
}
|
|
149
|
+
const port = parseInt(portStr, 10);
|
|
150
|
+
if (isNaN(port) || port < 1 || port > 65535) {
|
|
151
|
+
throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_INVALID_URL, `Invalid port "${portStr}" in host string: ${context}`);
|
|
152
|
+
}
|
|
153
|
+
return port;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Build a single-host URL from parsed components + a specific host.
|
|
157
|
+
* Used by ConnectionManager to create WebSocketConnector URLs.
|
|
158
|
+
*/
|
|
159
|
+
function buildHostUrl(parsed, host, extraParams) {
|
|
160
|
+
const origin = `${parsed.scheme}://${host.host}:${host.port}`;
|
|
161
|
+
const url = new URL(origin + "/ws");
|
|
162
|
+
if (parsed.username) {
|
|
163
|
+
url.username = parsed.username;
|
|
164
|
+
}
|
|
165
|
+
if (parsed.password) {
|
|
166
|
+
url.password = parsed.password;
|
|
167
|
+
}
|
|
168
|
+
// Copy non-retry params
|
|
169
|
+
const retryParams = new Set(["retries", "retry_backoff_ms", "retry_backoff_max_ms", "resend_write"]);
|
|
170
|
+
parsed.params.forEach((value, key) => {
|
|
171
|
+
if (!retryParams.has(key)) {
|
|
172
|
+
url.searchParams.set(key, value);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
if (extraParams) {
|
|
176
|
+
extraParams.forEach((value, key) => {
|
|
177
|
+
url.searchParams.set(key, value);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
return url;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Extract retry options from parsed URL params.
|
|
184
|
+
*/
|
|
185
|
+
function extractRetryOptions(params) {
|
|
186
|
+
const result = {};
|
|
187
|
+
if (params.has("retries")) {
|
|
188
|
+
result.retries = parseInt(params.get("retries"), 10);
|
|
189
|
+
}
|
|
190
|
+
if (params.has("retry_backoff_ms")) {
|
|
191
|
+
result.retryBackoffMs = parseInt(params.get("retry_backoff_ms"), 10);
|
|
192
|
+
}
|
|
193
|
+
if (params.has("retry_backoff_max_ms")) {
|
|
194
|
+
result.retryBackoffMaxMs = parseInt(params.get("retry_backoff_max_ms"), 10);
|
|
195
|
+
}
|
|
196
|
+
if (params.has("resend_write")) {
|
|
197
|
+
const val = params.get("resend_write").toLowerCase();
|
|
198
|
+
result.resendWrite = val === "true" || val === "1";
|
|
199
|
+
}
|
|
200
|
+
return result;
|
|
201
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { TmqConfig } from "../tmq/config";
|
|
2
2
|
import { WSConfig } from "./config";
|
|
3
|
-
|
|
3
|
+
import { Dsn } from "./dsn";
|
|
4
|
+
export declare function getDsn(wsConfig: WSConfig): Dsn;
|
|
4
5
|
export declare function isEmpty(value: any): boolean;
|
|
5
6
|
export declare function getBinarySql(action: bigint, reqId: bigint, resultId: bigint, sql?: string): ArrayBuffer;
|
|
6
7
|
export declare function zigzagDecode(n: number): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/common/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/common/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,GAAG,EAAS,MAAM,OAAO,CAAC;AAGnC,wBAAgB,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,GAAG,CA0C9C;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAI3C;AAED,wBAAgB,YAAY,CACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,MAAM,GACb,WAAW,CA2Bb;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,UAWjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAW9D;AAkDD,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GAAG,IAAI,GAC5B,MAAM,CAkBR;AAKD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,MAAM,CAcrD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAmB7D"}
|
package/lib/src/common/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getDsn = getDsn;
|
|
4
4
|
exports.isEmpty = isEmpty;
|
|
5
5
|
exports.getBinarySql = getBinarySql;
|
|
6
6
|
exports.zigzagDecode = zigzagDecode;
|
|
@@ -10,44 +10,47 @@ exports.decimalToString = decimalToString;
|
|
|
10
10
|
exports.maskSensitiveForLog = maskSensitiveForLog;
|
|
11
11
|
exports.maskUrlForLog = maskUrlForLog;
|
|
12
12
|
exports.maskTmqConfigForLog = maskTmqConfigForLog;
|
|
13
|
+
const dsn_1 = require("./dsn");
|
|
13
14
|
const wsError_1 = require("./wsError");
|
|
14
|
-
function
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
function getDsn(wsConfig) {
|
|
16
|
+
const dsn = (0, dsn_1.parse)(wsConfig.getUrl());
|
|
17
|
+
const user = wsConfig.getUser();
|
|
18
|
+
if (user) {
|
|
19
|
+
dsn.username = user;
|
|
18
20
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
const password = wsConfig.getPwd();
|
|
22
|
+
if (password) {
|
|
23
|
+
dsn.password = password;
|
|
21
24
|
}
|
|
22
|
-
|
|
25
|
+
const token = wsConfig.getToken();
|
|
23
26
|
if (token) {
|
|
24
|
-
|
|
27
|
+
dsn.params.set("token", token);
|
|
25
28
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
url.searchParams.set("timezone", timezone);
|
|
29
|
-
}
|
|
30
|
-
if (url.pathname && url.pathname !== "/") {
|
|
31
|
-
wsConfig.setDb(url.pathname.slice(1));
|
|
32
|
-
}
|
|
33
|
-
if (url.searchParams.has("timezone")) {
|
|
34
|
-
wsConfig.setTimezone(url.searchParams.get("timezone") || "");
|
|
29
|
+
else if (dsn.params.has("token")) {
|
|
30
|
+
wsConfig.setToken(dsn.params.get("token") || "");
|
|
35
31
|
}
|
|
36
32
|
const bearerToken = wsConfig.getBearerToken();
|
|
37
33
|
if (bearerToken) {
|
|
38
|
-
|
|
34
|
+
dsn.params.set("bearer_token", bearerToken);
|
|
39
35
|
}
|
|
40
|
-
else {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
36
|
+
else if (dsn.params.has("bearer_token")) {
|
|
37
|
+
wsConfig.setBearerToken(dsn.params.get("bearer_token") || "");
|
|
38
|
+
}
|
|
39
|
+
const timezone = wsConfig.getTimezone();
|
|
40
|
+
if (timezone) {
|
|
41
|
+
dsn.params.set("timezone", timezone);
|
|
42
|
+
}
|
|
43
|
+
else if (dsn.params.has("timezone")) {
|
|
44
|
+
wsConfig.setTimezone(dsn.params.get("timezone") || "");
|
|
45
|
+
}
|
|
46
|
+
const db = wsConfig.getDb();
|
|
47
|
+
if (db && db.length > 0) {
|
|
48
|
+
dsn.database = db;
|
|
49
|
+
}
|
|
50
|
+
else if (dsn.database.length > 0) {
|
|
51
|
+
wsConfig.setDb(dsn.database);
|
|
48
52
|
}
|
|
49
|
-
|
|
50
|
-
return url;
|
|
53
|
+
return dsn;
|
|
51
54
|
}
|
|
52
55
|
function isEmpty(value) {
|
|
53
56
|
if (value === null || value === undefined)
|
|
@@ -166,12 +169,10 @@ function decimalToString(valueStr, fields_scale) {
|
|
|
166
169
|
const isNegative = decimalStr.startsWith("-");
|
|
167
170
|
const absStr = isNegative ? decimalStr.slice(1) : decimalStr;
|
|
168
171
|
if (absStr.length <= scale) {
|
|
169
|
-
// If the length of the number is less than or equal to the precision, add 0 before it.
|
|
170
172
|
const paddedStr = absStr.padStart(scale + 1, "0");
|
|
171
173
|
decimalStr = (isNegative ? "-" : "") + "0." + paddedStr.slice(1);
|
|
172
174
|
}
|
|
173
175
|
else {
|
|
174
|
-
// 在指定位置插入小数点
|
|
175
176
|
const integerPart = absStr.slice(0, absStr.length - scale);
|
|
176
177
|
const decimalPart = absStr.slice(absStr.length - scale);
|
|
177
178
|
decimalStr =
|
|
@@ -205,9 +206,9 @@ function maskTmqConfigForLog(config) {
|
|
|
205
206
|
};
|
|
206
207
|
return JSON.stringify(masked, (key, value) => {
|
|
207
208
|
switch (key) {
|
|
208
|
-
case '
|
|
209
|
-
case '
|
|
210
|
-
return
|
|
209
|
+
case 'dsn':
|
|
210
|
+
case 'sqlDsn':
|
|
211
|
+
return value ? value.toString() : value;
|
|
211
212
|
case 'token':
|
|
212
213
|
case 'password':
|
|
213
214
|
case 'bearer_token':
|
package/lib/src/sql/wsSql.js
CHANGED
|
@@ -17,9 +17,9 @@ const wsStmt1_1 = require("../stmt/wsStmt1");
|
|
|
17
17
|
const wsStmt2_1 = require("../stmt/wsStmt2");
|
|
18
18
|
class WsSql {
|
|
19
19
|
constructor(wsConfig) {
|
|
20
|
-
|
|
20
|
+
const dsn = (0, utils_1.getDsn)(wsConfig);
|
|
21
21
|
this.wsConfig = wsConfig;
|
|
22
|
-
this._wsClient = new wsClient_1.WsClient(
|
|
22
|
+
this._wsClient = new wsClient_1.WsClient(dsn, wsConfig.getTimeOut());
|
|
23
23
|
}
|
|
24
24
|
static async open(wsConfig) {
|
|
25
25
|
if (!wsConfig.getUrl()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldBindParams.d.ts","sourceRoot":"","sources":["../../../src/stmt/FieldBindParams.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IACxB,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"FieldBindParams.d.ts","sourceRoot":"","sources":["../../../src/stmt/FieldBindParams.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IACxB,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;gBAGb,MAAM,EAAE,GAAG,EAAE,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM;CAQvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsColumnInfo.d.ts","sourceRoot":"","sources":["../../../src/stmt/wsColumnInfo.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAU;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAK;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"wsColumnInfo.d.ts","sourceRoot":"","sources":["../../../src/stmt/wsColumnInfo.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAU;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAK;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;gBAGpB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EACrC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,UAAU,GAAE,MAAU;CAW7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsParams1.d.ts","sourceRoot":"","sources":["../../../src/stmt/wsParams1.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE9D,qBAAa,eAAgB,SAAQ,cAAe,YAAW,YAAY;gBAC3D,SAAS,CAAC,EAAE,MAAM;IAI9B,MAAM,IAAI,IAAI;IAId,WAAW,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;IAI7C,SAAS,CACL,MAAM,EAAE,GAAG,EAAE,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACnB,IAAI;IA0BP,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;IAwG1B,OAAO,CAAC,kBAAkB;IAkD1B,OAAO,CAAC,qBAAqB;
|
|
1
|
+
{"version":3,"file":"wsParams1.d.ts","sourceRoot":"","sources":["../../../src/stmt/wsParams1.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE9D,qBAAa,eAAgB,SAAQ,cAAe,YAAW,YAAY;gBAC3D,SAAS,CAAC,EAAE,MAAM;IAI9B,MAAM,IAAI,IAAI;IAId,WAAW,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;IAI7C,SAAS,CACL,MAAM,EAAE,GAAG,EAAE,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACnB,IAAI;IA0BP,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;IAwG1B,OAAO,CAAC,kBAAkB;IAkD1B,OAAO,CAAC,qBAAqB;IA+E7B,OAAO,CAAC,0BAA0B;IAmClC,OAAO,CAAC,iBAAiB;IAmFzB,OAAO,CAAC,iBAAiB;CAY5B"}
|
|
@@ -39,14 +39,14 @@ class Stmt1BindParams extends wsParamsBase_1.StmtBindParams {
|
|
|
39
39
|
if (!params || params.length == 0) {
|
|
40
40
|
throw new wsError_1.TaosError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "SeTimestampColumn params is invalid!");
|
|
41
41
|
}
|
|
42
|
-
//computing bitmap length
|
|
42
|
+
// computing bitmap length
|
|
43
43
|
let bitMapLen = (0, taosResult_1.bitmapLen)(params.length);
|
|
44
|
-
//
|
|
44
|
+
// computing the length of data
|
|
45
45
|
let arrayBuffer = new ArrayBuffer(bitMapLen +
|
|
46
46
|
constant_1.TDengineTypeLength[constant_1.TDengineTypeCode.TIMESTAMP] * params.length);
|
|
47
|
-
//bitmap get data range
|
|
47
|
+
// bitmap get data range
|
|
48
48
|
let bitmapBuffer = new DataView(arrayBuffer);
|
|
49
|
-
//skip bitmap get data range
|
|
49
|
+
// skip bitmap get data range
|
|
50
50
|
let dataBuffer = new DataView(arrayBuffer, bitMapLen);
|
|
51
51
|
if (this._rows > 0) {
|
|
52
52
|
if (this._rows !== params.length) {
|
|
@@ -60,7 +60,7 @@ class Stmt1BindParams extends wsParamsBase_1.StmtBindParams {
|
|
|
60
60
|
if (!(0, utils_1.isEmpty)(params[i])) {
|
|
61
61
|
if (params[i] instanceof Date) {
|
|
62
62
|
let date = params[i];
|
|
63
|
-
//node only support milliseconds, need fill 0
|
|
63
|
+
// node only support milliseconds, need fill 0
|
|
64
64
|
if (this.precisionLength == constant_1.PrecisionLength["us"]) {
|
|
65
65
|
let ms = date.getTime() * 1000;
|
|
66
66
|
dataBuffer.setBigInt64(i * 8, BigInt(ms), true);
|
|
@@ -82,9 +82,9 @@ class Stmt1BindParams extends wsParamsBase_1.StmtBindParams {
|
|
|
82
82
|
else {
|
|
83
83
|
data = params[i];
|
|
84
84
|
}
|
|
85
|
-
//statistical bits of digit
|
|
85
|
+
// statistical bits of digit
|
|
86
86
|
let digit = this.countBigintDigits(data);
|
|
87
|
-
//check digit same table Precision
|
|
87
|
+
// check digit same table Precision
|
|
88
88
|
if (this.precisionLength == constant_1.PrecisionLength["ns"]) {
|
|
89
89
|
if (this.precisionLength <= digit) {
|
|
90
90
|
dataBuffer.setBigInt64(i * 8, data, true);
|
|
@@ -104,7 +104,7 @@ class Stmt1BindParams extends wsParamsBase_1.StmtBindParams {
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
else {
|
|
107
|
-
//set bitmap bit is null
|
|
107
|
+
// set bitmap bit is null
|
|
108
108
|
let charOffset = (0, taosResult_1.getCharOffset)(i);
|
|
109
109
|
let nullVal = (0, taosResult_1.setBitmapNull)(dataBuffer.getInt8(charOffset), i);
|
|
110
110
|
bitmapBuffer.setInt8(charOffset, nullVal);
|
|
@@ -135,7 +135,7 @@ class Stmt1BindParams extends wsParamsBase_1.StmtBindParams {
|
|
|
135
135
|
this.writeDataToBuffer(dataBuffer, params[i], dataType, typeLen, columnType, i);
|
|
136
136
|
}
|
|
137
137
|
else {
|
|
138
|
-
//set bitmap bit is null
|
|
138
|
+
// set bitmap bit is null
|
|
139
139
|
let charOffset = (0, taosResult_1.getCharOffset)(i);
|
|
140
140
|
let nullVal = (0, taosResult_1.setBitmapNull)(bitmapBuffer.getUint8(charOffset), i);
|
|
141
141
|
bitmapBuffer.setInt8(charOffset, nullVal);
|
|
@@ -147,7 +147,7 @@ class Stmt1BindParams extends wsParamsBase_1.StmtBindParams {
|
|
|
147
147
|
encodeVarLengthColumn(params, columnType) {
|
|
148
148
|
let data = [];
|
|
149
149
|
let dataLength = 0;
|
|
150
|
-
//create params length buffer
|
|
150
|
+
// create params length buffer
|
|
151
151
|
let paramsLenBuffer = new ArrayBuffer(constant_1.TDengineTypeLength[constant_1.TDengineTypeCode.INT] * params.length);
|
|
152
152
|
let paramsLenView = new DataView(paramsLenBuffer);
|
|
153
153
|
if (this._rows > 0) {
|
|
@@ -159,23 +159,23 @@ class Stmt1BindParams extends wsParamsBase_1.StmtBindParams {
|
|
|
159
159
|
this._rows = params.length;
|
|
160
160
|
}
|
|
161
161
|
for (let i = 0; i < params.length; i++) {
|
|
162
|
-
//get param length offset 4byte
|
|
162
|
+
// get param length offset 4byte
|
|
163
163
|
let offset = constant_1.TDengineTypeLength[constant_1.TDengineTypeCode.INT] * i;
|
|
164
164
|
if (!(0, utils_1.isEmpty)(params[i])) {
|
|
165
|
-
//save param length offset 4byte
|
|
165
|
+
// save param length offset 4byte
|
|
166
166
|
paramsLenView.setInt32(offset, dataLength, true);
|
|
167
167
|
if (typeof params[i] == "string") {
|
|
168
|
-
//string TextEncoder
|
|
168
|
+
// string TextEncoder
|
|
169
169
|
let encode = new TextEncoder();
|
|
170
170
|
let value = encode.encode(params[i]).buffer;
|
|
171
171
|
data.push(value);
|
|
172
|
-
//add offset length
|
|
172
|
+
// add offset length
|
|
173
173
|
dataLength +=
|
|
174
174
|
value.byteLength +
|
|
175
175
|
constant_1.TDengineTypeLength[constant_1.TDengineTypeCode.SMALLINT];
|
|
176
176
|
}
|
|
177
177
|
else if (params[i] instanceof ArrayBuffer) {
|
|
178
|
-
//input arraybuffer, save not need encode
|
|
178
|
+
// input arraybuffer, save not need encode
|
|
179
179
|
let value = params[i];
|
|
180
180
|
dataLength +=
|
|
181
181
|
value.byteLength +
|
|
@@ -188,7 +188,7 @@ class Stmt1BindParams extends wsParamsBase_1.StmtBindParams {
|
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
190
|
else {
|
|
191
|
-
//set length -1, param is null
|
|
191
|
+
// set length -1, param is null
|
|
192
192
|
for (let j = 0; j < constant_1.TDengineTypeLength[constant_1.TDengineTypeCode.INT]; j++) {
|
|
193
193
|
paramsLenView.setInt8(offset + j, 255);
|
|
194
194
|
}
|
|
@@ -200,22 +200,22 @@ class Stmt1BindParams extends wsParamsBase_1.StmtBindParams {
|
|
|
200
200
|
this.getBinaryColumnArrayBuffer(data, paramsLenView.buffer, dataLength),
|
|
201
201
|
], columnType, 0, this._rows);
|
|
202
202
|
}
|
|
203
|
-
//splicing encode params to arraybuffer
|
|
203
|
+
// splicing encode params to arraybuffer
|
|
204
204
|
getBinaryColumnArrayBuffer(data, paramsLenBuffer, dataLength) {
|
|
205
|
-
//create arraybuffer
|
|
205
|
+
// create arraybuffer
|
|
206
206
|
let paramsBuffer = new ArrayBuffer(paramsLenBuffer.byteLength + dataLength);
|
|
207
|
-
//get length data range
|
|
207
|
+
// get length data range
|
|
208
208
|
const paramsUint8 = new Uint8Array(paramsBuffer);
|
|
209
209
|
const paramsLenView = new Uint8Array(paramsLenBuffer);
|
|
210
210
|
paramsUint8.set(paramsLenView, 0);
|
|
211
|
-
//get data range
|
|
211
|
+
// get data range
|
|
212
212
|
const paramsView = new DataView(paramsBuffer, paramsLenBuffer.byteLength);
|
|
213
213
|
let offset = 0;
|
|
214
214
|
for (let i = 0; i < data.length; i++) {
|
|
215
|
-
//save param field length
|
|
215
|
+
// save param field length
|
|
216
216
|
paramsView.setInt16(offset, data[i].byteLength, true);
|
|
217
217
|
const dataView = new DataView(data[i]);
|
|
218
|
-
//save data
|
|
218
|
+
// save data
|
|
219
219
|
for (let j = 0; j < data[i].byteLength; j++) {
|
|
220
220
|
paramsView.setUint8(offset + 2 + j, dataView.getUint8(j));
|
|
221
221
|
}
|
|
@@ -223,7 +223,7 @@ class Stmt1BindParams extends wsParamsBase_1.StmtBindParams {
|
|
|
223
223
|
}
|
|
224
224
|
return paramsBuffer;
|
|
225
225
|
}
|
|
226
|
-
//encode nchar type params
|
|
226
|
+
// encode nchar type params
|
|
227
227
|
encodeNcharColumn(params) {
|
|
228
228
|
let data = [];
|
|
229
229
|
let dataLength = 0;
|
|
@@ -245,13 +245,13 @@ class Stmt1BindParams extends wsParamsBase_1.StmtBindParams {
|
|
|
245
245
|
let codes = [];
|
|
246
246
|
let strNcharParams = params[i];
|
|
247
247
|
for (let j = 0; j < params[i].length; j++) {
|
|
248
|
-
//get char, cn char need 3~4 byte
|
|
248
|
+
// get char, cn char need 3~4 byte
|
|
249
249
|
codes.push(strNcharParams.charCodeAt(j));
|
|
250
250
|
}
|
|
251
251
|
let ncharBuffer = new ArrayBuffer(codes.length * 4);
|
|
252
252
|
let ncharView = new DataView(ncharBuffer);
|
|
253
253
|
for (let j = 0; j < codes.length; j++) {
|
|
254
|
-
//
|
|
254
|
+
// char, save into uint32
|
|
255
255
|
ncharView.setUint32(j * 4, codes[j], true);
|
|
256
256
|
}
|
|
257
257
|
data.push(ncharBuffer);
|
|
@@ -272,7 +272,7 @@ class Stmt1BindParams extends wsParamsBase_1.StmtBindParams {
|
|
|
272
272
|
}
|
|
273
273
|
}
|
|
274
274
|
else {
|
|
275
|
-
//set length -1, param is null
|
|
275
|
+
// set length -1, param is null
|
|
276
276
|
for (let j = 0; j < constant_1.TDengineTypeLength[constant_1.TDengineTypeCode.INT]; j++) {
|
|
277
277
|
indexView.setInt8(offset + j, 255);
|
|
278
278
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsParams2.d.ts","sourceRoot":"","sources":["../../../src/stmt/wsParams2.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAI9D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,qBAAa,eAAgB,SAAQ,cAAe,YAAW,YAAY;IACvE,OAAO,CAAC,OAAO,CAAuB;IACtC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAK;
|
|
1
|
+
{"version":3,"file":"wsParams2.d.ts","sourceRoot":"","sources":["../../../src/stmt/wsParams2.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAI9D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,qBAAa,eAAgB,SAAQ,cAAe,YAAW,YAAY;IACvE,OAAO,CAAC,OAAO,CAAuB;IACtC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAK;gBAG7B,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAMjC,SAAS,CACL,MAAM,EAAE,GAAG,EAAE,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACnB,IAAI;IA6DP,WAAW,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;IA0B7C,MAAM,IAAI,IAAI;IA0Dd,OAAO,CAAC,gBAAgB;IAkDxB,OAAO,CAAC,kBAAkB;IAwD1B,OAAO,CAAC,qBAAqB;CAwChC"}
|
|
@@ -120,7 +120,6 @@ class Stmt2BindParams extends wsParamsBase_1.StmtBindParams {
|
|
|
120
120
|
bytes.push(...encoder);
|
|
121
121
|
}
|
|
122
122
|
else if (params[i] instanceof ArrayBuffer) {
|
|
123
|
-
//input arraybuffer, save not need encode
|
|
124
123
|
let value = params[i];
|
|
125
124
|
totalLength += value.byteLength;
|
|
126
125
|
dataLengths.push(value.byteLength);
|
|
@@ -170,7 +169,6 @@ class Stmt2BindParams extends wsParamsBase_1.StmtBindParams {
|
|
|
170
169
|
let timeStamp = BigInt(0);
|
|
171
170
|
if (params[i] instanceof Date) {
|
|
172
171
|
let date = params[i];
|
|
173
|
-
//node only support milliseconds, need fill 0
|
|
174
172
|
if (this.precisionLength == constant_1.PrecisionLength["us"]) {
|
|
175
173
|
timeStamp = BigInt(date.getTime() * 1000);
|
|
176
174
|
}
|
|
@@ -193,7 +191,6 @@ class Stmt2BindParams extends wsParamsBase_1.StmtBindParams {
|
|
|
193
191
|
timeStamps.push(timeStamp);
|
|
194
192
|
}
|
|
195
193
|
else {
|
|
196
|
-
//set bitmap bit is null
|
|
197
194
|
timeStamps.push(null);
|
|
198
195
|
}
|
|
199
196
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsParamsBase.d.ts","sourceRoot":"","sources":["../../../src/stmt/wsParamsBase.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wsParamsBase.d.ts","sourceRoot":"","sources":["../../../src/stmt/wsParamsBase.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,WAAW,YAAY;IACzB,MAAM,IAAI,IAAI,CAAC;IACf,SAAS,CACL,MAAM,EAAE,GAAG,EAAE,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACnB,IAAI,CAAC;IACR,WAAW,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;CACjD;AAED,8BAAsB,cAAc;IAChC,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAyB;IACnE,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;IACzC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAK;IACpC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAK;IAClC,SAAS,CAAC,KAAK,SAAK;IACpB,SAAS,CAAC,UAAU,SAAK;gBAEb,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IAcpD,QAAQ,CAAC,MAAM,IAAI,IAAI;IAEvB,QAAQ,CAAC,SAAS,CACd,MAAM,EAAE,GAAG,EAAE,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACnB,IAAI;IAEP,kBAAkB,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAsBtD,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;IAEtD,YAAY,IAAI,MAAM;IAItB,WAAW,IAAI,MAAM;IAIrB,eAAe,IAAI,MAAM;IAIlB,SAAS,IAAI,UAAU,EAAE;IAIhC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE;IAexB,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE;IAexB,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE;IAezB,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE;IAezB,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;IAe1B,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE;IAepB,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE;IAerB,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE;IAevB,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE;IAexB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IAetB,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE;IAevB,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE;IAexB,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE;IAUvB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IAUtB,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE;IAUrB,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;IAe1B,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE;IAezB,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;IAe1B,SAAS,CAAC,iBAAiB,CACvB,UAAU,EAAE,QAAQ,EACpB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,MAAM,YAAW,EAC3B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,CAAC,EAAE,MAAM,GACV,IAAI;CAuEV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsProto.d.ts","sourceRoot":"","sources":["../../../src/stmt/wsProto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wsProto.d.ts","sourceRoot":"","sources":["../../../src/stmt/wsProto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,cAAc,CAAC;CACxB;AAED,UAAU,cAAc;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACrC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;CACxC;AAED,qBAAa,mBAAoB,SAAQ,eAAe;IACpD,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;gBAErC,IAAI,EAAE,WAAW;CAOhC;AAED,0BAAkB,YAAY;IAC1B,aAAa,IAAI;IACjB,cAAc,IAAI;CACrB;AAED,wBAAgB,iBAAiB,CAC7B,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACZ,WAAW,CA2Db;AAiDD,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,SAAS,EAAE,EAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAClC,sBAAsB,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EACjD,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,GACzB,WAAW,CA2Nb"}
|