dolphindb 2.0.600 → 2.0.603
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/README.md +1 -0
- package/browser.d.ts +19 -1
- package/browser.js +127 -39
- package/browser.js.map +1 -1
- package/docs.en.json +955 -182
- package/docs.zh.json +3105 -268
- package/index.d.ts +14 -0
- package/index.js +125 -38
- package/index.js.map +1 -1
- package/language.d.ts +1 -1
- package/language.js +0 -2
- package/language.js.map +1 -1
- package/package.json +3 -3
package/index.d.ts
CHANGED
|
@@ -123,6 +123,15 @@ export interface DdbChartValue {
|
|
|
123
123
|
/** original: chartType */
|
|
124
124
|
type: DdbChartType;
|
|
125
125
|
stacking: boolean;
|
|
126
|
+
/** 直方图 (Histogram), plotHist 函数返回的 chart 可能具有该属性
|
|
127
|
+
原属性 binStart
|
|
128
|
+
数值类型的 DdbObj 都有可能?
|
|
129
|
+
*/
|
|
130
|
+
bin_start?: DdbObj;
|
|
131
|
+
/** 原属性 binEnd */
|
|
132
|
+
bin_end?: DdbObj;
|
|
133
|
+
/** 原属性 binCount */
|
|
134
|
+
bin_count?: DdbObj;
|
|
126
135
|
titles: {
|
|
127
136
|
chart: string;
|
|
128
137
|
x_axis: string;
|
|
@@ -229,7 +238,10 @@ export declare class DdbObj<T extends DdbValue = DdbValue> {
|
|
|
229
238
|
deep?: boolean;
|
|
230
239
|
}): T;
|
|
231
240
|
}
|
|
241
|
+
/** Formats a single element (value) as a string according to DdbType, null returns a 'null' string */
|
|
232
242
|
export declare function format(type: DdbType, value: DdbValue, le: boolean, options: InspectOptions): string;
|
|
243
|
+
/** formatted vector, the index-th item in the collection is a string, a null value returns a 'null' string */
|
|
244
|
+
export declare function formati(obj: DdbObj<DdbVectorValue>, index: number, options: InspectOptions): string;
|
|
233
245
|
export declare class DdbVoid extends DdbObj<undefined> {
|
|
234
246
|
constructor();
|
|
235
247
|
}
|
|
@@ -379,9 +391,11 @@ export declare class DDB {
|
|
|
379
391
|
print_object_buffer: boolean;
|
|
380
392
|
print_message: boolean;
|
|
381
393
|
parse_object: boolean;
|
|
394
|
+
pnode_run_defined: boolean;
|
|
382
395
|
/** DdbMessage listeners */
|
|
383
396
|
listeners: DdbMessageListener[];
|
|
384
397
|
pconnect: Promise<void>;
|
|
398
|
+
ppnoderun: Promise<void>;
|
|
385
399
|
presult: Promise<any>;
|
|
386
400
|
get connected(): boolean;
|
|
387
401
|
/**
|
package/index.js
CHANGED
|
@@ -267,7 +267,7 @@ export class DdbObj {
|
|
|
267
267
|
if (form === DdbForm.dict)
|
|
268
268
|
return dict;
|
|
269
269
|
else {
|
|
270
|
-
const { chartType: type, stacking, title: titles, extras, data, ...others } = dict.to_dict();
|
|
270
|
+
const { chartType: type, stacking, binStart: bin_start, binEnd: bin_end, binCount: bin_count, title: titles, extras, data, ...others } = dict.to_dict();
|
|
271
271
|
const [chart, x_axis, y_axis] = titles.value;
|
|
272
272
|
dict.form = DdbForm.chart;
|
|
273
273
|
dict.value = {
|
|
@@ -278,6 +278,8 @@ export class DdbObj {
|
|
|
278
278
|
x_axis,
|
|
279
279
|
y_axis,
|
|
280
280
|
},
|
|
281
|
+
...bin_start ? { bin_start, bin_end, } : {},
|
|
282
|
+
...bin_count ? { bin_count } : {},
|
|
281
283
|
...extras ? (() => {
|
|
282
284
|
const { multiYAxes: multi_y_axes = false, ...extras_others } = extras.to_dict({ strip: true });
|
|
283
285
|
return {
|
|
@@ -865,10 +867,17 @@ export class DdbObj {
|
|
|
865
867
|
value[1].pack(),
|
|
866
868
|
];
|
|
867
869
|
case DdbForm.chart: {
|
|
868
|
-
const { type, stacking, titles: { chart, x_axis, y_axis, }, extras, data } = this.value;
|
|
870
|
+
const { type, stacking, bin_start, bin_end, bin_count, titles: { chart, x_axis, y_axis, }, extras, data } = this.value;
|
|
869
871
|
const { value: [keys, values] } = new DdbDict({
|
|
870
872
|
chartType: new DdbInt(type),
|
|
871
873
|
stacking,
|
|
874
|
+
...bin_start ? {
|
|
875
|
+
binStart: bin_start,
|
|
876
|
+
binEnd: bin_end
|
|
877
|
+
} : {},
|
|
878
|
+
...bin_count ? {
|
|
879
|
+
binCount: bin_count
|
|
880
|
+
} : {},
|
|
872
881
|
title: new DdbVectorString([chart, x_axis, y_axis]),
|
|
873
882
|
...extras ? (() => {
|
|
874
883
|
const { multi_y_axes, ...extras_other } = extras;
|
|
@@ -1100,7 +1109,7 @@ export class DdbObj {
|
|
|
1100
1109
|
case DdbForm.table:
|
|
1101
1110
|
return `table[${this.rows}r][${this.cols}c]`;
|
|
1102
1111
|
case DdbForm.dict:
|
|
1103
|
-
return `dict<${DdbType[this.value[0].type]}, ${DdbType[this.value[1].type]}
|
|
1112
|
+
return `dict<${DdbType[this.value[0].type]}, ${DdbType[this.value[1].type]}>[${this.rows}]`;
|
|
1104
1113
|
case DdbForm.chart:
|
|
1105
1114
|
return `chart<${DdbChartType[this.value.type]}>`;
|
|
1106
1115
|
case DdbForm.matrix:
|
|
@@ -1179,6 +1188,7 @@ export class DdbObj {
|
|
|
1179
1188
|
return obj;
|
|
1180
1189
|
}
|
|
1181
1190
|
}
|
|
1191
|
+
/** Formats a single element (value) as a string according to DdbType, null returns a 'null' string */
|
|
1182
1192
|
export function format(type, value, le, options) {
|
|
1183
1193
|
switch (type) {
|
|
1184
1194
|
case DdbType.bool:
|
|
@@ -1364,6 +1374,66 @@ export function format(type, value, le, options) {
|
|
|
1364
1374
|
return inspect(value, options);
|
|
1365
1375
|
}
|
|
1366
1376
|
}
|
|
1377
|
+
/** formatted vector, the index-th item in the collection is a string, a null value returns a 'null' string */
|
|
1378
|
+
export function formati(obj, index, options) {
|
|
1379
|
+
if (64 <= obj.type && obj.type < 128) { // array vector
|
|
1380
|
+
// 因为 array vector 目前只支持:Logical, Integral(不包括 INT128, COMPRESS 类型), Floating, Temporal
|
|
1381
|
+
// 都对应 TypedArray 中的一格,所以 lengths.length 等于 block 中的 row 的个数
|
|
1382
|
+
// av = array(INT[], 0, 5)
|
|
1383
|
+
// append!(av, [1..1])
|
|
1384
|
+
// append!(av, [1..70000])
|
|
1385
|
+
// append!(av, [1..1])
|
|
1386
|
+
// append!(av, [1..500])
|
|
1387
|
+
// ...
|
|
1388
|
+
// av
|
|
1389
|
+
const _type = obj.type - 64;
|
|
1390
|
+
let offset = 0;
|
|
1391
|
+
for (const { lengths, data, rows } of obj.value) {
|
|
1392
|
+
let acc_len = 0;
|
|
1393
|
+
if (offset + rows <= index) {
|
|
1394
|
+
offset += rows;
|
|
1395
|
+
continue; // 跳过这个 block
|
|
1396
|
+
}
|
|
1397
|
+
for (const length of lengths) {
|
|
1398
|
+
if (offset < index) {
|
|
1399
|
+
offset++;
|
|
1400
|
+
acc_len += length;
|
|
1401
|
+
continue;
|
|
1402
|
+
}
|
|
1403
|
+
const limit = 10;
|
|
1404
|
+
let items = new Array(Math.min(limit, length));
|
|
1405
|
+
for (let i = 0; i < items.length; i++)
|
|
1406
|
+
items[i] = format(_type, data[acc_len + i], obj.le, options);
|
|
1407
|
+
return (items.join(', ') + (length > limit ? ', ...' : '')).bracket('square');
|
|
1408
|
+
}
|
|
1409
|
+
}
|
|
1410
|
+
}
|
|
1411
|
+
switch (obj.type) {
|
|
1412
|
+
case DdbType.string:
|
|
1413
|
+
case DdbType.symbol:
|
|
1414
|
+
return obj.value[index];
|
|
1415
|
+
case DdbType.symbol_extended: {
|
|
1416
|
+
const { base, data } = obj.value;
|
|
1417
|
+
return base[data[index]];
|
|
1418
|
+
}
|
|
1419
|
+
case DdbType.uuid:
|
|
1420
|
+
case DdbType.int128:
|
|
1421
|
+
case DdbType.ipaddr:
|
|
1422
|
+
return format(obj.type, obj.value.subarray(16 * index, 16 * (index + 1)), obj.le, options);
|
|
1423
|
+
case DdbType.blob: {
|
|
1424
|
+
const value = obj.value[index];
|
|
1425
|
+
return value.length > 100 ?
|
|
1426
|
+
DdbObj.dec.decode(value.subarray(0, 98)) + '…'
|
|
1427
|
+
:
|
|
1428
|
+
DdbObj.dec.decode(value);
|
|
1429
|
+
}
|
|
1430
|
+
case DdbType.complex:
|
|
1431
|
+
case DdbType.point:
|
|
1432
|
+
return format(obj.type, obj.value.subarray(2 * index, 2 * (index + 1)), obj.le, options);
|
|
1433
|
+
default:
|
|
1434
|
+
return format(obj.type, obj.value[index], obj.le, options);
|
|
1435
|
+
}
|
|
1436
|
+
}
|
|
1367
1437
|
export class DdbVoid extends DdbObj {
|
|
1368
1438
|
constructor() {
|
|
1369
1439
|
super({
|
|
@@ -1907,13 +1977,16 @@ export class DDB {
|
|
|
1907
1977
|
password = '123456';
|
|
1908
1978
|
/** python session flag (2048) */
|
|
1909
1979
|
python = false;
|
|
1980
|
+
// --- 内部选项, 状态
|
|
1910
1981
|
print_message_buffer = false;
|
|
1911
1982
|
print_object_buffer = false;
|
|
1912
1983
|
print_message = true;
|
|
1913
1984
|
parse_object = true;
|
|
1985
|
+
pnode_run_defined = false;
|
|
1914
1986
|
/** DdbMessage listeners */
|
|
1915
1987
|
listeners = [];
|
|
1916
1988
|
pconnect = Promise.resolve();
|
|
1989
|
+
ppnoderun = Promise.resolve();
|
|
1917
1990
|
presult = Promise.resolve(null);
|
|
1918
1991
|
get connected() {
|
|
1919
1992
|
return this.websocket?.readyState === WebSocket.OPEN;
|
|
@@ -1981,41 +2054,6 @@ export class DDB {
|
|
|
1981
2054
|
this.on_message(event);
|
|
1982
2055
|
}
|
|
1983
2056
|
});
|
|
1984
|
-
await this.eval(this.python ?
|
|
1985
|
-
'def pnode_run (nodes, func_name, args, add_node_alias):\n' +
|
|
1986
|
-
' nargs = size(args)\n' +
|
|
1987
|
-
' func = funcByName(func_name)\n' +
|
|
1988
|
-
' \n' +
|
|
1989
|
-
' if not nargs:\n' +
|
|
1990
|
-
' return pnodeRun(func, nodes, add_node_alias)\n' +
|
|
1991
|
-
' \n' +
|
|
1992
|
-
' args_partial = [ ]\n' +
|
|
1993
|
-
' args_partial.append(func)\n' +
|
|
1994
|
-
' for a in args:\n' +
|
|
1995
|
-
' args_partial.append(a)\n' +
|
|
1996
|
-
' \n' +
|
|
1997
|
-
' return pnodeRun(\n' +
|
|
1998
|
-
' unifiedCall(partial, args_partial),\n' +
|
|
1999
|
-
' nodes,\n' +
|
|
2000
|
-
' add_node_alias\n' +
|
|
2001
|
-
' )\n'
|
|
2002
|
-
:
|
|
2003
|
-
'def pnode_run (nodes, func_name, args, add_node_alias = true) {\n' +
|
|
2004
|
-
' nargs = size(args)\n' +
|
|
2005
|
-
' func = funcByName(func_name)\n' +
|
|
2006
|
-
' \n' +
|
|
2007
|
-
' if (!nargs)\n' +
|
|
2008
|
-
' return pnodeRun(func, nodes, add_node_alias)\n' +
|
|
2009
|
-
' \n' +
|
|
2010
|
-
' args_partial = array(any, 1 + nargs, 1 + nargs)\n' +
|
|
2011
|
-
' args_partial[0] = func\n' +
|
|
2012
|
-
' args_partial[1:] = args\n' +
|
|
2013
|
-
' return pnodeRun(\n' +
|
|
2014
|
-
' unifiedCall(partial, args_partial),\n' +
|
|
2015
|
-
' nodes,\n' +
|
|
2016
|
-
' add_node_alias\n' +
|
|
2017
|
-
' )\n' +
|
|
2018
|
-
'}\n', { urgent: true });
|
|
2019
2057
|
if (this.autologin)
|
|
2020
2058
|
if (this.python)
|
|
2021
2059
|
await this.eval(`login(${this.username.quote('double')}, ${this.password.quote('double')})`, { urgent: true });
|
|
@@ -2087,6 +2125,55 @@ export class DDB {
|
|
|
2087
2125
|
}
|
|
2088
2126
|
if (!this.connected)
|
|
2089
2127
|
throw new Error(`${this.url} is already disconnected`);
|
|
2128
|
+
if (func === 'pnode_run' && !this.pnode_run_defined) {
|
|
2129
|
+
const ptail = this.ppnoderun;
|
|
2130
|
+
let resolve;
|
|
2131
|
+
this.ppnoderun = new Promise((_resolve, _reject) => {
|
|
2132
|
+
resolve = _resolve;
|
|
2133
|
+
});
|
|
2134
|
+
await ptail;
|
|
2135
|
+
try {
|
|
2136
|
+
if (!this.pnode_run_defined)
|
|
2137
|
+
await this.eval(this.python ?
|
|
2138
|
+
'def pnode_run (nodes, func_name, args, add_node_alias):\n' +
|
|
2139
|
+
' nargs = size(args)\n' +
|
|
2140
|
+
' func = funcByName(func_name)\n' +
|
|
2141
|
+
' \n' +
|
|
2142
|
+
' if not nargs:\n' +
|
|
2143
|
+
' return pnodeRun(func, nodes, add_node_alias)\n' +
|
|
2144
|
+
' \n' +
|
|
2145
|
+
' args_partial = [ ]\n' +
|
|
2146
|
+
' args_partial.append(func)\n' +
|
|
2147
|
+
' for a in args:\n' +
|
|
2148
|
+
' args_partial.append(a)\n' +
|
|
2149
|
+
' \n' +
|
|
2150
|
+
' return pnodeRun(\n' +
|
|
2151
|
+
' unifiedCall(partial, args_partial),\n' +
|
|
2152
|
+
' nodes,\n' +
|
|
2153
|
+
' add_node_alias\n' +
|
|
2154
|
+
' )\n'
|
|
2155
|
+
:
|
|
2156
|
+
'def pnode_run (nodes, func_name, args, add_node_alias = true) {\n' +
|
|
2157
|
+
' nargs = size(args)\n' +
|
|
2158
|
+
' func = funcByName(func_name)\n' +
|
|
2159
|
+
' \n' +
|
|
2160
|
+
' if (!nargs)\n' +
|
|
2161
|
+
' return pnodeRun(func, nodes, add_node_alias)\n' +
|
|
2162
|
+
' \n' +
|
|
2163
|
+
' args_partial = array(any, 1 + nargs, 1 + nargs)\n' +
|
|
2164
|
+
' args_partial[0] = func\n' +
|
|
2165
|
+
' args_partial[1:] = args\n' +
|
|
2166
|
+
' return pnodeRun(\n' +
|
|
2167
|
+
' unifiedCall(partial, args_partial),\n' +
|
|
2168
|
+
' nodes,\n' +
|
|
2169
|
+
' add_node_alias\n' +
|
|
2170
|
+
' )\n' +
|
|
2171
|
+
'}\n', { urgent: true });
|
|
2172
|
+
}
|
|
2173
|
+
finally {
|
|
2174
|
+
resolve();
|
|
2175
|
+
}
|
|
2176
|
+
}
|
|
2090
2177
|
// this 上的当前配置需要在 message 到达后使用,先保存起来
|
|
2091
2178
|
const _handlers = [...this.listeners].reverse();
|
|
2092
2179
|
// 临界区:保证多个 rpc 并发时形成 promise 链
|