dolphindb 3.1.39 → 3.1.42
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/browser.d.ts +10 -14
- package/browser.js +12 -30
- package/browser.js.map +1 -1
- package/common.d.ts +132 -110
- package/common.js +111 -111
- package/common.js.map +1 -1
- package/index.d.ts +11 -15
- package/index.js +13 -29
- package/index.js.map +1 -1
- package/package.json +7 -7
- package/test.js.map +1 -1
- package/unused.js +1 -0
- package/unused.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dolphindb",
|
|
3
3
|
"description": "DolphinDB JavaScript API",
|
|
4
|
-
"version": "3.1.
|
|
4
|
+
"version": "3.1.42",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./index.js",
|
|
7
7
|
"browser": "./browser.js",
|
|
8
8
|
"scripts": {
|
|
9
9
|
"build": "tsc",
|
|
10
|
-
"test": "node
|
|
10
|
+
"test": "node ./test.ts",
|
|
11
11
|
"lint": "eslint \"**/*.{ts,tsx}\"",
|
|
12
12
|
"fix": "eslint --fix \"**/*.{ts,tsx}\"",
|
|
13
13
|
"scan": "i18n-scan --input \"**/*.{ts,tsx}\""
|
|
@@ -29,14 +29,14 @@
|
|
|
29
29
|
"JavaScript"
|
|
30
30
|
],
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@types/node": "^25.
|
|
33
|
-
"eslint": "^10.0
|
|
34
|
-
"typescript": "^
|
|
32
|
+
"@types/node": "^25.5.0",
|
|
33
|
+
"eslint": "^10.1.0",
|
|
34
|
+
"typescript": "^6.0.2"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"dayjs": "^1.11.
|
|
37
|
+
"dayjs": "^1.11.20",
|
|
38
38
|
"ipaddr.js": "^2.3.0",
|
|
39
39
|
"tslib": "^2.8.1",
|
|
40
|
-
"xshell": "^1.3.
|
|
40
|
+
"xshell": "^1.3.51"
|
|
41
41
|
}
|
|
42
42
|
}
|
package/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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","sourcesContent":["import { deepEqual, deepStrictEqual } from 'assert/strict'\n\nimport { assert, check, defer, inspect, MyProxy, ramdisk, set_inspect_options, WebSocketConnectionError } from 'xshell'\n\nimport { keywords } from './language.ts'\n\nimport {\n DDB, DdbConnectionError, DdbDatabaseError, DdbForm, DdbInt, DdbLong, DdbObj, DdbType, \n DdbVectorAny, DdbVectorDouble, DdbVectorSymbol, month2ms, DdbDurationUnit,\n type DdbStringObj, type DdbVectorAnyObj, type DdbDurationVectorValue, type DdbVectorObj, \n type DdbTableObj, DdbTimeStamp, type DdbDictObj, type DdbTableData, type DdbOptions,\n DdbVectorInt, DdbTable, type DdbExtObjValue\n} from './index.ts'\n\n\nset_inspect_options()\n\n\n// const fpd_root = import.meta.dirname.fpd\n\nconst url = 'ws://192.168.0.54:8848' as const\n// const url = 'ws://192.168.0.125:8848' as const\n// const url = 'ws://192.168.0.69:8902' as const\n// const url = 'ws://127.0.0.1:8848' as const\n\nconst ddb_options: DdbOptions = ramdisk ? { proxy: MyProxy.work } : { }\n\n\nconst repl = false\nasync function test_repl (ddb: DDB) {\n \n}\n\n\n;(async function test () {\n console.log('--- 测试开始 ---'.green)\n \n let ddb = new DDB(url, ddb_options)\n \n for (const t of\n repl ? \n [test_repl]\n : [\n test_keywords,\n test_types,\n test_reconnection,\n test_connection_error,\n test_ticket,\n test_print,\n test_time,\n test_streaming,\n test_error,\n test_invoke,\n test_append_table,\n test_cancel\n \n // test_iot_vector,\n // test_extobj,\n ]\n )\n await t(ddb)\n \n ddb.disconnect()\n \n console.log('--- 测试通过 ---'.green)\n})()\n\n\n\nfunction test_keywords () {\n check(new Set(keywords).size === keywords.length, 'keywords 中不能有重复的项')\n}\n\n\nasync function get_printed (ddb: DDB, code: string) {\n return new Promise<string>(async (resolve, reject) => {\n try {\n let resolved = false\n await ddb.eval(\n `print(${code})`,\n {\n listener ({ type, data }) {\n if (type === 'print' && !resolved) {\n resolved = true\n resolve(data)\n }\n }\n })\n \n if (!resolved)\n reject(new Error('未输出 print 消息'))\n } catch (error) {\n reject(error)\n }\n })\n}\n\n\nasync function test_reconnection (ddb: DDB) {\n let _ddb = new DDB(url, ddb_options)\n \n await _ddb.connect()\n _ddb.disconnect()\n \n let error: DdbConnectionError\n \n try {\n await _ddb.connect()\n } catch (_error) {\n error = _error\n }\n \n assert(error && error instanceof DdbConnectionError)\n}\n\n\nasync function test_connection_error (ddb: DDB) {\n let _ddb = new DDB(url, ddb_options)\n \n await _ddb.connect()\n _ddb.disconnect()\n \n let error: DdbConnectionError\n \n try {\n await _ddb.eval('1 + 1')\n } catch (_error) {\n error = _error\n }\n \n assert(error && error instanceof DdbConnectionError)\n}\n\n\nasync function test_error (ddb: DDB) {\n console.log('测试 DdbDatabaseError 和 DdbConnectionError')\n \n const error_message = '错误消息'\n const error_script = `throw ${error_message.quote()}`\n \n let database_error: DdbDatabaseError\n \n try {\n await ddb.eval(error_script)\n } catch (error) {\n database_error = error\n }\n \n assert(database_error)\n assert(database_error instanceof DdbDatabaseError)\n assert(database_error.message === `throw ${error_message.quote('double')} => ${error_message}`)\n assert(database_error.name === 'DdbDatabaseError')\n assert(database_error.url === ddb.url)\n assert(database_error.type === 'script')\n assert(database_error.options.script === error_script)\n assert(database_error.stack.includes('test_error'))\n \n \n let ddbtest = new DDB(url, ddb_options)\n let connection_error: DdbConnectionError\n try {\n await ddbtest.connect()\n ddbtest.disconnect()\n await ddbtest.eval('1')\n } catch (error) {\n connection_error = error\n }\n \n assert(connection_error)\n assert(connection_error instanceof DdbConnectionError)\n assert(connection_error.url === ddbtest.url)\n \n \n // --- 首次连接失败也会抛出 DdbConnectionError\n let ddbtest2 = new DDB('ws://dolphindb123.com/')\n let connection_error2: DdbConnectionError\n try {\n await ddbtest2.connect()\n } catch (error) {\n connection_error2 = error\n }\n \n assert(connection_error2)\n assert(connection_error2 instanceof DdbConnectionError)\n assert(connection_error2.cause && connection_error2.cause instanceof WebSocketConnectionError)\n}\n\n\nasync function test_print (ddb: DDB) {\n console.log('测试 print message')\n \n const str = 'test print message\\n中文'\n \n assert(await get_printed(ddb, str.quote()) === str)\n \n console.log('测试 verbose 输出')\n \n let vddb = new DDB(url, { ...ddb_options, verbose: true })\n \n await vddb.call('typestr', [\n new DdbVectorAny([\n new DdbVectorSymbol(['a', 'b', 'a', 'b', 'a', 'b']),\n new DdbLong(3n)\n ])\n ])\n \n vddb.disconnect()\n}\n\n\nasync function test_streaming (ddb: DDB, ha?: boolean) {\n console.log('测试流数据')\n \n const n = 100\n \n await ddb.eval(\n ha ?\n 'try {\\n' +\n ' try {\\n' +\n \" dropStreamTable('prices')\\n\" +\n ' } catch (error) { }\\n' +\n ' \\n' +\n \" haStreamTable(11, table(10000:0, ['time', 'stock', 'price'], [TIMESTAMP, SYMBOL, DOUBLE]), 'prices', 100000)\\n\" +\n \" print('prices 流表创建成功')\\n\" +\n '} catch (error) {\\n' +\n \" print('prices 流表创建失败')\\n\" +\n ' print(error)\\n' +\n '}\\n'\n :\n 'try {\\n' +\n \" if (!defined('prices', SHARED)) {\\n\" +\n ' share(\\n' +\n ' streamTable(\\n' +\n ' 10000:0,\\n' +\n \" ['time', 'stock', 'price'],\\n\" +\n ' [TIMESTAMP, SYMBOL, DOUBLE]\\n' +\n ' ),\\n' +\n \" 'prices'\\n\" +\n ' )\\n' +\n \" print('prices 流表创建成功')\\n\" +\n ' } else\\n' +\n \" print('prices 流表已存在')\\n\" +\n '} catch (error) {\\n' +\n \" print('prices 流表创建失败')\\n\" +\n ' print(error)\\n' +\n '}\\n'\n )\n \n let total_rows = 0\n \n let first = true\n \n let promise = defer<void>()\n \n let sddb = new DDB(url, {\n ...ddb_options,\n streaming: {\n table: 'prices',\n handler ({ error, data: _data, time, id, window }) {\n if (error)\n throw error\n \n const { columns, data, name, types } = _data\n \n assert(Array.isArray(data))\n \n if (first) {\n assert(data.length === 0, '流订阅应该返回 schema')\n first = false\n } else\n assert(data.length > 0)\n \n deepEqual(columns, ['time', 'stock', 'price'])\n \n assert(name === 'prices')\n assert(typeof id === 'bigint')\n assert(time)\n assert(types.length === 3)\n \n total_rows += data.length\n \n if (total_rows === n * 10)\n promise.resolve()\n },\n }\n })\n \n await sddb.connect()\n \n await ddb.eval(\n `n = ${n}\\n` +\n '\\n' +\n 'for (i in 0..9)\\n' +\n ' append!(\\n' +\n ' prices,\\n' +\n ' table([\\n' +\n ' (now() + 0..(n-1)) as time,\\n' +\n \" take(['MSFT', 'FUTU'], n) as stock,\\n\" +\n ' (0..(n-1) \\\\ 10) as price\\n' +\n ' ])\\n' +\n ' )\\n'\n )\n \n await promise\n console.log('流数据已全部收齐')\n \n sddb.disconnect()\n}\n\n\nasync function test_time (ddb: DDB) {\n console.log('测试时间显示')\n \n await time2str_equal(ddb, '2022-09-01T14:30:01.095')\n await time2str_equal(ddb, '2022-07-01T00:00:00.000')\n await time2str_equal(ddb, '2022-07-02T00:00:00.000')\n await time2str_equal(ddb, '2022-06-30T00:00:00.000')\n await time2str_equal(ddb, '2022-12-22T16:57:30.248')\n \n \n console.log('测试 month2ms')\n check(\n month2ms(\n (\n await ddb.eval<DdbObj<number>>('2022.12M')\n ).value\n ) === new Date('2022.12.01').valueOf())\n}\n\n\nasync function time2str_equal (ddb: DDB, timestr: string) {\n const code = `temporalParse('${timestr}', 'yyyy-MM-ddTHH:mm:sss.SSS')`\n \n assert(\n inspect(\n await ddb.eval(code),\n { colors: false }\n ).slice('timestamp('.length, -1) === \n (\n await get_printed(ddb, code)\n ).replace('T', ' ')\n )\n}\n\n\nasync function test_types (ddb: DDB) {\n console.log('测试通过 ddb.call 调用 getNodeAlias 函数')\n console.log(await ddb.call('getNodeAlias'))\n \n console.log('测试 ddb.call 上传不同类型的变量')\n const result0 = await ddb.call('typestr', [new DdbInt(1)])\n console.log(result0)\n assert(result0.form === DdbForm.scalar)\n assert(result0.type === DdbType.string)\n assert(result0.value === 'INT')\n \n console.log('测试 ddb.call 上传不同类型的变量')\n const result1 = await ddb.call('typestr', [new DdbVectorDouble([0.1, 0.2, 0.3])])\n console.log(result1)\n assert(result1.form === DdbForm.scalar)\n assert(result1.type === DdbType.string)\n assert(result1.value === 'FAST DOUBLE VECTOR')\n \n console.log('测试 array vector')\n const av = await ddb.eval(\n 'av = array(INT[], 0, 3)\\n' +\n 'append!(av, [1..4])\\n' +\n 'append!(av, [1..70000])\\n' +\n 'av\\n'\n )\n \n console.log(av)\n assert(av.form === DdbForm.vector)\n assert(av.type === DdbType.int + 64) // array vector 的 type 比较特殊,需要偏移 64\n assert(av.rows === 2)\n \n // 测试 array vector 格式化\n // console.log(\n // await ddb.eval<DdbVectorObj>(\n // 'av = array(DECIMAL128(2)[], 0, 1)\\n' +\n // 'append!(av, [[92233720368547758.11, NULL, 100000000000000, NULL, -92233720368547758, -100000000000000]])\\n' +\n // 'av\\n'\n // )\n // )\n \n // 测试 Invalid Date\n await ddb.upload(['x'], [new DdbTimeStamp('2024.11.11')])\n \n assert(\n inspect(\n await ddb.eval('x'), \n { colors: false }\n ) === 'timestamp(2024.11.11 00:00:00.000)'\n )\n \n console.log('测试大数据')\n let bigarr = new Float64Array(10)\n bigarr.fill(0.5)\n \n await ddb.call<DdbStringObj>('typestr', [\n new DdbObj({\n form: DdbForm.vector,\n type: DdbType.double,\n length: 0,\n rows: bigarr.length,\n cols: 1,\n value: bigarr\n })\n ])\n \n await ddb.upload(['a'], [\n new DdbObj({\n form: DdbForm.vector,\n type: DdbType.double,\n length: 0,\n rows: bigarr.length,\n cols: 1,\n value: bigarr\n })\n ])\n \n assert((\n await ddb.eval<DdbVectorDouble>('a')\n ).rows === bigarr.length)\n \n \n console.log('测试 datasource')\n \n const ds = (await ddb.eval<DdbVectorAnyObj>(\n 'db_path = \"dfs://test-datasource\"\\n' + \n 'tb_name = \"db\"\\n' + \n 'if (!existsTable(db_path, tb_name))\\n' + \n ' createTable(\\n' + \n ' database(db_path, VALUE , [1]),\\n' +\n ' table(1:0,`id`name, [INT, STRING]),\\n' +\n ' tb_name\\n' +\n ' ).append!(table(1 2 as id, `str1`str2 as name))\\n' +\n '\\n' +\n 'tb = loadTable(db_path, tb_name)\\n' +\n 'sqlDS(<select * from tb where id = 1>)\\n'\n )).value[0] as DdbStringObj\n \n const { type, form, value } = ds\n \n assert(type === DdbType.datasource && form === DdbForm.scalar, '返回的 DdbObj 具有正确的 type 和 form')\n \n assert(value === 'DataSource< select [7] * from tb where id == 1 >')\n \n // 如果直接构造 DdbObj Datasource,将其送入 ddb.call, ddb将仍然认为送入的是一个 STRING \n assert(\n (await ddb.call<DdbStringObj>('typestr', [ds])).value === 'STRING', \n '从 js 构建的 Datasource DdbObj 会被识别为 STRING'\n )\n \n console.log('测试 pair<duration>')\n const dp = await ddb.eval<DdbVectorObj<DdbDurationVectorValue>>(\n 'pair(duration(\"20d\"), duration(\"2H\"))'\n ) \n \n console.log(dp)\n assert(dp.type === DdbType.duration, 'dp 的返回值应该为 Duration')\n assert(dp.value[0].data === 20 && dp.value[0].unit === DdbDurationUnit.d, 'pair<duration> 的 value 应该已解析')\n \n console.log('测试 void vector')\n const table = await ddb.eval<DdbTableObj>('select *, NULL as val from table(1..100 as id)')\n const { value: [ints, voids] } = table\n \n console.log(voids)\n assert(voids.rows === ints.rows, 'void vector 应该具有正常的 vector length')\n assert(voids.length === 10, 'void vector 应该具有正确的数据长度')\n assert(voids.value === null, 'void vector 的值应该为 null')\n \n await ddb.upload(['voidtable'], [table])\n \n console.log('测试 compress 类型')\n \n await ddb.upload(['c'], [\n await ddb.eval<DdbDictObj>('dict([\"a\", \"b\", \"c\"], [compress([1, 2, 3]), 123, \"bbb\"])')\n ])\n}\n\n\nasync function test_from_stdjson (ddb: DDB) {\n console.log('测试 fromStdJson')\n \n console.log(\n await ddb.call('fromStdJson', [JSON.stringify({\n a: 1234,\n b: 'aaa',\n c: {\n e: 1234,\n f: 4321\n },\n f: 'blabla\\n中文\\u4e2d\\u6587'\n })])\n )\n \n console.log(\n await ddb.call('fromStdJson', [JSON.stringify(1234)])\n )\n \n console.log(\n await ddb.call('fromStdJson', [\n JSON.stringify({\n data: {\n code: 'select * from kline where secid == \"230012\"'\n }\n })\n ])\n )\n}\n\nasync function test_iot_vector (ddb: DDB) {\n const obj = await ddb.eval(\n 'if(existsDatabase(\"dfs://testIOT\")) dropDatabase(\"dfs://testIOT\")\\n' +\n 'create database \"dfs://testIOT\" partitioned by HASH([INT, 40]),RANGE(2020.01.01 2022.01.01 2025.01.01), engine=\\'TSDB\\'\\n' +\n 'create table \"dfs://testIOT\".\"pt\"(\\n' +\n ' deviceId INT,\\n' +\n ' timestamp TIMESTAMP,\\n' +\n ' location SYMBOL,\\n' +\n ' value IOTANY,\\n' +\n ')\\n' +\n 'partitioned by deviceId, timestamp,\\n' +\n 'sortColumns=[`deviceId, `location, `timestamp],\\n' +\n 'latestKeyCache=true;\\n' +\n 'pt = loadTable(\"dfs://testIOT\",\"pt\");\\n' +\n 't=table(take(1..100000,100000) as deviceId, take(now()+(0..100), 100000) as timestamp, take(\"bb\"+string(0..100), 100000) as location, take(int(1..100000),100000) as value)\\n' +\n 'pt.append!(t)\\n' +\n 'flushTSDBCache()\\n' +\n 't=table(take(100001..200000,100000) as deviceId, take(now()+(0..100), 100000) as timestamp,take(lpad(string(1), 8, \"0\"), 100000) as location, rand(200.0, 100000) as value)\\n' +\n 'pt.append!(t)\\n' +\n 'flushTSDBCache()\\n' +\n '\\n' +\n 'select * from loadTable(\"dfs://testIOT\",\"pt\")\\n'\n )\n \n console.log('obj:', obj)\n console.log('data:', obj.data())\n await ddb.upload(['a'], [obj])\n await ddb.execute('print(a)')\n deepStrictEqual(\n await ddb.execute('a'),\n obj.data())\n}\n\n\nasync function test_invoke (ddb: DDB) {\n console.log('测试 invoke')\n \n await ddb.eval(\n 'def echo (data) {\\n' +\n // '\tprint(data)\\n' +\n '\treturn data\\n' +\n '}\\n'\n )\n \n const str = 'blabla\\n中文\"\\u4e2d\\u6587\"\\\\\\\"\\\"'\n \n assert(\n (await ddb.invoke('echo', [{\n a: 1234,\n b: 'aaa',\n c: {\n e: 1234,\n f: 4321\n },\n f: str\n }]))\n .f === str\n )\n \n await ddb.execute(\n 'cbool = true false false;\\n' +\n \"cchar = 'a' 'b' 'c';\\n\" +\n 'cshort = 122h 32h 45h;\\n' +\n 'cint = 1 4 9;\\n' +\n 'clong = 17l 39l 72l;\\n' +\n 'cdate = 2013.06.13 2015.07.12 2019.08.15;\\n' +\n 'cmonth = 2011.08M 2014.02M 2019.07M;\\n' +\n 'ctime = 04:15:51.921 09:27:16.095 11:32:28.387;\\n' +\n 'cminute = 03:25m 08:12m 10:15m;\\n' +\n 'csecond = 01:15:20 04:26:45 09:22:59;\\n' +\n 'cdatetime = 1976.09.10 02:31:42 1987.12.13 11:58:31 1999.12.10 20:49:23;\\n' +\n 'ctimestamp = 1997.07.20 21:45:16.339 2002.11.26 12:40:31.783 2008.08.10 23:54:27.629;\\n' +\n 'cnanotime = 01:25:33.365869429 03:47:25.364828475 08:16:22.748395721;\\n' +\n 'cnanotimestamp = 2005.09.23 13:30:35.468385940 2007.12.11 14:54:38.949792731 2009.09.30 16:39:51.973463623;\\n' +\n 'cfloat = 7.5f 0.79f 8.27f;\\n' +\n 'cdouble = 5.7 7.2 3.9;\\n' +\n 'cstring = \"hello\" \"hi\" \"here\";\\n' +\n 'cdatehour = datehour(2012.06.15 15:32:10.158 2012.06.15 17:30:10.008 2014.09.29 23:55:42.693);\\n' +\n 'cblob = blob(\"dolphindb\" \"gaussdb\" \"goldendb\")\\n' +\n 'cdecimal32 = decimal32(12 17 135.2,2)\\n' +\n 'cdecimal64 = decimal64(18 24 33.878,4)\\n' +\n 'cdecimal128 = decimal128(18 24 33.878,18)\\n'\n )\n \n assert(\n // await ddb.invoke<DdbTableData>('defs')\n (await ddb.invoke<DdbTableData>('objs', [true], { table: 'full' }))\n .columns.includes('shared')\n )\n \n const [a, b] = await ddb.invoke<[number, number]>(\n 'def foo (a = 1, b = 2) {\\n' +\n ' return (a, b)\\n' +\n '}\\n', \n [undefined, new DdbInt(3)])\n \n check(a === 1 && b === 3)\n}\n\n\nasync function test_append_table (ddb: DDB) {\n // 在连接对应的会话中加载或创建表\n await ddb.execute('t = table(1..10 as id, take([\"A001\", \"B001\"], 10) as sym, rand(10.0, 10) as val)')\n // await ddb.execute('t = loadTable(database(\"dfs://path-to-db\"), \"table_name\")')\n \n assert(\n // 使用 tableInsert 插入数据\n await ddb.invoke<number>(\n 'tableInsert',\n [\n 't',\n \n // 数据\n new DdbTable([\n // 第一列\n new DdbVectorInt([1, 2, 3]),\n \n // 第二列\n new DdbVectorSymbol(['a', 'b', 'c']),\n \n // 第三列\n new DdbVectorDouble([1.1, 1.2, 1.3]),\n ])\n ]\n ) === 3\n )\n}\n\n\nasync function test_extobj (ddb: DDB) {\n const instrument = await ddb.eval(\n 'parseInstrument({ \\n' +\n ' \"productType\": \"Option\",\\n' +\n ' \"optionType\": \"EuropeanOption\",\\n' +\n ' \"version\": 0,\\n' +\n ' \"instrumentId\": \"0001\",\\n' +\n ' \"nominal\": 100.0,\\n' +\n ' \"strike\": 100.0,\\n' +\n ' \"maturity\": 2022.08.09,\\n' +\n ' \"dayCountConvention\": \"ActualActual\",\\n' +\n ' \"payoffType\": \"Call\",\\n' +\n ' \"priceCurrency\": \"CNY\",\\n' +\n ' \"underlying\": \"EU_0001\"\\n' +\n '})\\n')\n \n // console.log(instrument)\n \n check(instrument.data() === 'ExtObj<instrument>')\n check((instrument.value as DdbExtObjValue).version === 0)\n check((instrument.value as DdbExtObjValue).data.length)\n \n check(\n await ddb.invoke<string>('typestr', [instrument]) === \n 'INSTRUMENT')\n \n const ext_table = await ddb.eval<DdbTableObj>('select * from loadTable(\"dfs://db\", \"pt\")')\n \n check(ext_table.data()[0].value === 'ExtObj<instrument>')\n \n const market_data = await ddb.eval(\n 'aod = 2025.07.01\\n' +\n 'parseMktData({\\n' +\n ' \"mktDataType\": \"Curve\",\\n' +\n ' \"curveType\": \"IrYieldCurve\",\\n' +\n ' \"version\": 0, \\n' +\n ' \"referenceDate\": aod,\\n' +\n ' \"currency\": \"CNY\",\\n' +\n ' \"dayCountConvention\": \"Actual365\",\\n' +\n ' \"compounding\": \"Continuous\",\\n' +\n ' \"interpMethod\": \"LinearInterp\",\\n' +\n ' \"extrapMethod\": \"FlatExtrap\",\\n' +\n ' \"dates\":[2025.07.07,2025.07.10,2025.07.17,2025.07.24,2025.08.04,2025.09.03,2025.10.09,2026.01.05,\\n' +\n ' 2026.04.03,2026.07.03,2027.01.04,2027.07.05,2028.07.03],\\n' +\n ' \"values\":[0.015785,0.015931,0.016183,0.016381,0.016493,0.016503,0.016478,0.016234,0.016321,\\n' +\n ' 0.016378,0.015508,0.015185,0.014901],\\n' +\n ' \"settlement\": aod+2\\n' +\n '})\\n')\n \n check(market_data.data() === 'ExtObj<market_data>')\n check((market_data.value as DdbExtObjValue).version === 0)\n \n // console.log(market_data)\n \n // --- 暂不支持上传 extobj 的 any vector\n // console.log(\n // await ddb.invoke<any>('print', [ext_table.value[3]]))\n \n // console.log(\n // ext_table.value[3].data())\n}\n\n\nasync function test_ticket (ddb: DDB) {\n console.log('测试 ticket 登录')\n \n const ticket = await ddb.invoke('getAuthenticatedUserTicket', undefined, {\n node: await ddb.invoke<string>('getControllerAlias')\n })\n \n let ddb_ = new DDB(url, {\n ...ddb_options,\n ticket,\n username: 'unused',\n password: 'unused'\n })\n \n check(\n (await ddb_.invoke<[bigint, string]>('getCurrentSessionAndUser'))\n [1],\n 'admin')\n \n await ddb_.login_by_ticket()\n \n ddb_.disconnect()\n}\n\n\nasync function test_cancel (ddb: DDB) {\n console.log('测试取消作业')\n \n let t = Date.now()\n \n let cancelled = false\n \n // 完整执行需要 5 秒\n const ptask = ddb.execute(\n 'for (i in 0..50)\\n' +\n ' sleep(100)\\n')\n \n await ddb.cancel()\n \n try {\n await ptask\n \n throw new Error('不应该执行成功')\n } catch (error) {\n if (error instanceof DdbDatabaseError) {\n check(error.message.includes('=> The task was cancelled'), '作业应该取消成功')\n cancelled = true\n } else\n throw error\n }\n \n check(cancelled && Date.now() - t < 1000, '取消作业成功时时间应该小于 1 秒')\n \n console.log('测试取消作业成功')\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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","sourcesContent":["import { deepEqual, deepStrictEqual } from 'node:assert/strict'\n\nimport { assert, check, defer, inspect, MyProxy, ramdisk, set_inspect_options, WebSocketConnectionError } from 'xshell'\n\nimport { keywords } from './language.ts'\n\nimport {\n DDB, DdbConnectionError, DdbDatabaseError, DdbForm, DdbInt, DdbLong, DdbObj, DdbType, \n DdbVectorAny, DdbVectorDouble, DdbVectorSymbol, month2ms, DdbDurationUnit,\n type DdbStringObj, type DdbVectorAnyObj, type DdbDurationVectorValue, type DdbVectorObj, \n type DdbTableObj, DdbTimeStamp, type DdbDictObj, type DdbTableData, type DdbOptions,\n DdbVectorInt, DdbTable, type DdbExtObjValue\n} from './index.ts'\n\n\nset_inspect_options()\n\n\n// const fpd_root = import.meta.dirname.fpd\n\nconst url = 'ws://192.168.0.54:8848' as const\n// const url = 'ws://192.168.0.125:8848' as const\n// const url = 'ws://192.168.0.69:8902' as const\n// const url = 'ws://127.0.0.1:8848' as const\n\nconst ddb_options: DdbOptions = ramdisk ? { proxy: MyProxy.work } : { }\n\n\nconst repl = false\nasync function test_repl (ddb: DDB) {\n \n}\n\n\n(async function test () {\n console.log('--- 测试开始 ---'.green)\n \n let ddb = new DDB(url, ddb_options)\n \n for (const t of\n repl ? \n [test_repl]\n : [\n test_keywords,\n test_types,\n test_reconnection,\n test_connection_error,\n test_ticket,\n test_print,\n test_time,\n test_streaming,\n test_error,\n test_invoke,\n test_append_table,\n test_cancel\n \n // test_iot_vector,\n // test_extobj,\n ]\n )\n await t(ddb)\n \n ddb.disconnect()\n \n console.log('--- 测试通过 ---'.green)\n})()\n\n\n\nfunction test_keywords () {\n check(new Set(keywords).size === keywords.length, 'keywords 中不能有重复的项')\n}\n\n\nasync function get_printed (ddb: DDB, code: string) {\n return new Promise<string>(async (resolve, reject) => {\n try {\n let resolved = false\n await ddb.eval(\n `print(${code})`,\n {\n listener ({ type, data }) {\n if (type === 'print' && !resolved) {\n resolved = true\n resolve(data)\n }\n }\n })\n \n if (!resolved)\n reject(new Error('未输出 print 消息'))\n } catch (error) {\n reject(error)\n }\n })\n}\n\n\nasync function test_reconnection (ddb: DDB) {\n let _ddb = new DDB(url, ddb_options)\n \n await _ddb.connect()\n _ddb.disconnect()\n \n let error: DdbConnectionError\n \n try {\n await _ddb.connect()\n } catch (_error) {\n error = _error\n }\n \n assert(error && error instanceof DdbConnectionError)\n}\n\n\nasync function test_connection_error (ddb: DDB) {\n let _ddb = new DDB(url, ddb_options)\n \n await _ddb.connect()\n _ddb.disconnect()\n \n let error: DdbConnectionError\n \n try {\n await _ddb.eval('1 + 1')\n } catch (_error) {\n error = _error\n }\n \n assert(error && error instanceof DdbConnectionError)\n}\n\n\nasync function test_error (ddb: DDB) {\n console.log('测试 DdbDatabaseError 和 DdbConnectionError')\n \n const error_message = '错误消息'\n const error_script = `throw ${error_message.quote()}`\n \n let database_error: DdbDatabaseError\n \n try {\n await ddb.eval(error_script)\n } catch (error) {\n database_error = error\n }\n \n assert(database_error)\n assert(database_error instanceof DdbDatabaseError)\n assert(database_error.message === `throw ${error_message.quote('double')} => ${error_message}`)\n assert(database_error.name === 'DdbDatabaseError')\n assert(database_error.url === ddb.url)\n assert(database_error.type === 'script')\n assert(database_error.options.script === error_script)\n assert(database_error.stack.includes('test_error'))\n \n \n let ddbtest = new DDB(url, ddb_options)\n let connection_error: DdbConnectionError\n try {\n await ddbtest.connect()\n ddbtest.disconnect()\n await ddbtest.eval('1')\n } catch (error) {\n connection_error = error\n }\n \n assert(connection_error)\n assert(connection_error instanceof DdbConnectionError)\n assert(connection_error.url === ddbtest.url)\n \n \n // --- 首次连接失败也会抛出 DdbConnectionError\n let ddbtest2 = new DDB('ws://dolphindb123.com/')\n let connection_error2: DdbConnectionError\n try {\n await ddbtest2.connect()\n } catch (error) {\n connection_error2 = error\n }\n \n assert(connection_error2)\n assert(connection_error2 instanceof DdbConnectionError)\n assert(connection_error2.cause && connection_error2.cause instanceof WebSocketConnectionError)\n}\n\n\nasync function test_print (ddb: DDB) {\n console.log('测试 print message')\n \n const str = 'test print message\\n中文'\n \n assert(await get_printed(ddb, str.quote()) === str)\n \n console.log('测试 verbose 输出')\n \n let vddb = new DDB(url, { ...ddb_options, verbose: true })\n \n await vddb.call('typestr', [\n new DdbVectorAny([\n new DdbVectorSymbol(['a', 'b', 'a', 'b', 'a', 'b']),\n new DdbLong(3n)\n ])\n ])\n \n vddb.disconnect()\n}\n\n\nasync function test_streaming (ddb: DDB, ha?: boolean) {\n console.log('测试流数据')\n \n const n = 100\n \n await ddb.eval(\n ha ?\n 'try {\\n' +\n ' try {\\n' +\n \" dropStreamTable('prices')\\n\" +\n ' } catch (error) { }\\n' +\n ' \\n' +\n \" haStreamTable(11, table(10000:0, ['time', 'stock', 'price'], [TIMESTAMP, SYMBOL, DOUBLE]), 'prices', 100000)\\n\" +\n \" print('prices 流表创建成功')\\n\" +\n '} catch (error) {\\n' +\n \" print('prices 流表创建失败')\\n\" +\n ' print(error)\\n' +\n '}\\n'\n :\n 'try {\\n' +\n \" if (!defined('prices', SHARED)) {\\n\" +\n ' share(\\n' +\n ' streamTable(\\n' +\n ' 10000:0,\\n' +\n \" ['time', 'stock', 'price'],\\n\" +\n ' [TIMESTAMP, SYMBOL, DOUBLE]\\n' +\n ' ),\\n' +\n \" 'prices'\\n\" +\n ' )\\n' +\n \" print('prices 流表创建成功')\\n\" +\n ' } else\\n' +\n \" print('prices 流表已存在')\\n\" +\n '} catch (error) {\\n' +\n \" print('prices 流表创建失败')\\n\" +\n ' print(error)\\n' +\n '}\\n'\n )\n \n let total_rows = 0\n \n let first = true\n \n let promise = defer<void>()\n \n let sddb = new DDB(url, {\n ...ddb_options,\n streaming: {\n table: 'prices',\n handler ({ error, data: _data, time, id, window }) {\n if (error)\n throw error\n \n const { columns, data, name, types } = _data\n \n assert(Array.isArray(data))\n \n if (first) {\n assert(data.length === 0, '流订阅应该返回 schema')\n first = false\n } else\n assert(data.length > 0)\n \n deepEqual(columns, ['time', 'stock', 'price'])\n \n assert(name === 'prices')\n assert(typeof id === 'bigint')\n assert(time)\n assert(types.length === 3)\n \n total_rows += data.length\n \n if (total_rows === n * 10)\n promise.resolve()\n },\n }\n })\n \n await sddb.connect()\n \n await ddb.eval(\n `n = ${n}\\n` +\n '\\n' +\n 'for (i in 0..9)\\n' +\n ' append!(\\n' +\n ' prices,\\n' +\n ' table([\\n' +\n ' (now() + 0..(n-1)) as time,\\n' +\n \" take(['MSFT', 'FUTU'], n) as stock,\\n\" +\n ' (0..(n-1) \\\\ 10) as price\\n' +\n ' ])\\n' +\n ' )\\n'\n )\n \n await promise\n console.log('流数据已全部收齐')\n \n sddb.disconnect()\n}\n\n\nasync function test_time (ddb: DDB) {\n console.log('测试时间显示')\n \n await time2str_equal(ddb, '2022-09-01T14:30:01.095')\n await time2str_equal(ddb, '2022-07-01T00:00:00.000')\n await time2str_equal(ddb, '2022-07-02T00:00:00.000')\n await time2str_equal(ddb, '2022-06-30T00:00:00.000')\n await time2str_equal(ddb, '2022-12-22T16:57:30.248')\n \n \n console.log('测试 month2ms')\n check(\n month2ms(\n (\n await ddb.eval<DdbObj<number>>('2022.12M')\n ).value\n ) === new Date('2022.12.01').valueOf())\n}\n\n\nasync function time2str_equal (ddb: DDB, timestr: string) {\n const code = `temporalParse('${timestr}', 'yyyy-MM-ddTHH:mm:sss.SSS')`\n \n assert(\n inspect(\n await ddb.eval(code),\n { colors: false }\n ).slice('timestamp('.length, -1) === \n (\n await get_printed(ddb, code)\n ).replace('T', ' ')\n )\n}\n\n\nasync function test_types (ddb: DDB) {\n console.log('测试通过 ddb.call 调用 getNodeAlias 函数')\n console.log(await ddb.call('getNodeAlias'))\n \n console.log('测试 ddb.call 上传不同类型的变量')\n const result0 = await ddb.call('typestr', [new DdbInt(1)])\n console.log(result0)\n assert(result0.form === DdbForm.scalar)\n assert(result0.type === DdbType.string)\n assert(result0.value === 'INT')\n \n console.log('测试 ddb.call 上传不同类型的变量')\n const result1 = await ddb.call('typestr', [new DdbVectorDouble([0.1, 0.2, 0.3])])\n console.log(result1)\n assert(result1.form === DdbForm.scalar)\n assert(result1.type === DdbType.string)\n assert(result1.value === 'FAST DOUBLE VECTOR')\n \n console.log('测试 array vector')\n const av = await ddb.eval(\n 'av = array(INT[], 0, 3)\\n' +\n 'append!(av, [1..4])\\n' +\n 'append!(av, [1..70000])\\n' +\n 'av\\n'\n )\n \n console.log(av)\n assert(av.form === DdbForm.vector)\n assert(av.type === DdbType.int + 64) // array vector 的 type 比较特殊,需要偏移 64\n assert(av.rows === 2)\n \n // 测试 array vector 格式化\n // console.log(\n // await ddb.eval<DdbVectorObj>(\n // 'av = array(DECIMAL128(2)[], 0, 1)\\n' +\n // 'append!(av, [[92233720368547758.11, NULL, 100000000000000, NULL, -92233720368547758, -100000000000000]])\\n' +\n // 'av\\n'\n // )\n // )\n \n // 测试 Invalid Date\n await ddb.upload(['x'], [new DdbTimeStamp('2024.11.11')])\n \n assert(\n inspect(\n await ddb.eval('x'), \n { colors: false }\n ) === 'timestamp(2024.11.11 00:00:00.000)'\n )\n \n console.log('测试大数据')\n let bigarr = new Float64Array(10)\n bigarr.fill(0.5)\n \n await ddb.call<DdbStringObj>('typestr', [\n new DdbObj({\n form: DdbForm.vector,\n type: DdbType.double,\n length: 0,\n rows: bigarr.length,\n cols: 1,\n value: bigarr\n })\n ])\n \n await ddb.upload(['a'], [\n new DdbObj({\n form: DdbForm.vector,\n type: DdbType.double,\n length: 0,\n rows: bigarr.length,\n cols: 1,\n value: bigarr\n })\n ])\n \n assert((\n await ddb.eval<DdbVectorDouble>('a')\n ).rows === bigarr.length)\n \n \n console.log('测试 datasource')\n \n const ds = (await ddb.eval<DdbVectorAnyObj>(\n 'db_path = \"dfs://test-datasource\"\\n' + \n 'tb_name = \"db\"\\n' + \n 'if (!existsTable(db_path, tb_name))\\n' + \n ' createTable(\\n' + \n ' database(db_path, VALUE , [1]),\\n' +\n ' table(1:0,`id`name, [INT, STRING]),\\n' +\n ' tb_name\\n' +\n ' ).append!(table(1 2 as id, `str1`str2 as name))\\n' +\n '\\n' +\n 'tb = loadTable(db_path, tb_name)\\n' +\n 'sqlDS(<select * from tb where id = 1>)\\n'\n )).value[0] as DdbStringObj\n \n const { type, form, value } = ds\n \n assert(type === DdbType.datasource && form === DdbForm.scalar, '返回的 DdbObj 具有正确的 type 和 form')\n \n assert(value === 'DataSource< select [7] * from tb where id == 1 >')\n \n // 如果直接构造 DdbObj Datasource,将其送入 ddb.call, ddb将仍然认为送入的是一个 STRING \n assert(\n (await ddb.call<DdbStringObj>('typestr', [ds])).value === 'STRING', \n '从 js 构建的 Datasource DdbObj 会被识别为 STRING'\n )\n \n console.log('测试 pair<duration>')\n const dp = await ddb.eval<DdbVectorObj<DdbDurationVectorValue>>(\n 'pair(duration(\"20d\"), duration(\"2H\"))'\n ) \n \n console.log(dp)\n assert(dp.type === DdbType.duration, 'dp 的返回值应该为 Duration')\n assert(dp.value[0].data === 20 && dp.value[0].unit === DdbDurationUnit.d, 'pair<duration> 的 value 应该已解析')\n \n console.log('测试 void vector')\n const table = await ddb.eval<DdbTableObj>('select *, NULL as val from table(1..100 as id)')\n const { value: [ints, voids] } = table\n \n console.log(voids)\n assert(voids.rows === ints.rows, 'void vector 应该具有正常的 vector length')\n assert(voids.length === 10, 'void vector 应该具有正确的数据长度')\n assert(voids.value === null, 'void vector 的值应该为 null')\n \n await ddb.upload(['voidtable'], [table])\n \n console.log('测试 compress 类型')\n \n await ddb.upload(['c'], [\n await ddb.eval<DdbDictObj>('dict([\"a\", \"b\", \"c\"], [compress([1, 2, 3]), 123, \"bbb\"])')\n ])\n}\n\n\nasync function test_from_stdjson (ddb: DDB) {\n console.log('测试 fromStdJson')\n \n console.log(\n await ddb.call('fromStdJson', [JSON.stringify({\n a: 1234,\n b: 'aaa',\n c: {\n e: 1234,\n f: 4321\n },\n f: 'blabla\\n中文\\u4e2d\\u6587'\n })])\n )\n \n console.log(\n await ddb.call('fromStdJson', [JSON.stringify(1234)])\n )\n \n console.log(\n await ddb.call('fromStdJson', [\n JSON.stringify({\n data: {\n code: 'select * from kline where secid == \"230012\"'\n }\n })\n ])\n )\n}\n\nasync function test_iot_vector (ddb: DDB) {\n const obj = await ddb.eval(\n 'if(existsDatabase(\"dfs://testIOT\")) dropDatabase(\"dfs://testIOT\")\\n' +\n 'create database \"dfs://testIOT\" partitioned by HASH([INT, 40]),RANGE(2020.01.01 2022.01.01 2025.01.01), engine=\\'TSDB\\'\\n' +\n 'create table \"dfs://testIOT\".\"pt\"(\\n' +\n ' deviceId INT,\\n' +\n ' timestamp TIMESTAMP,\\n' +\n ' location SYMBOL,\\n' +\n ' value IOTANY,\\n' +\n ')\\n' +\n 'partitioned by deviceId, timestamp,\\n' +\n 'sortColumns=[`deviceId, `location, `timestamp],\\n' +\n 'latestKeyCache=true;\\n' +\n 'pt = loadTable(\"dfs://testIOT\",\"pt\");\\n' +\n 't=table(take(1..100000,100000) as deviceId, take(now()+(0..100), 100000) as timestamp, take(\"bb\"+string(0..100), 100000) as location, take(int(1..100000),100000) as value)\\n' +\n 'pt.append!(t)\\n' +\n 'flushTSDBCache()\\n' +\n 't=table(take(100001..200000,100000) as deviceId, take(now()+(0..100), 100000) as timestamp,take(lpad(string(1), 8, \"0\"), 100000) as location, rand(200.0, 100000) as value)\\n' +\n 'pt.append!(t)\\n' +\n 'flushTSDBCache()\\n' +\n '\\n' +\n 'select * from loadTable(\"dfs://testIOT\",\"pt\")\\n'\n )\n \n console.log('obj:', obj)\n console.log('data:', obj.data())\n await ddb.upload(['a'], [obj])\n await ddb.execute('print(a)')\n deepStrictEqual(\n await ddb.execute('a'),\n obj.data())\n}\n\n\nasync function test_invoke (ddb: DDB) {\n console.log('测试 invoke')\n \n await ddb.eval(\n 'def echo (data) {\\n' +\n // ' print(data)\\n' +\n ' return data\\n' +\n '}\\n'\n )\n \n const str = 'blabla\\n中文\"\\u4e2d\\u6587\"\\\\\\\"\\\"'\n \n assert(\n (await ddb.invoke('echo', [{\n a: 1234,\n b: 'aaa',\n c: {\n e: 1234,\n f: 4321\n },\n f: str\n }]))\n .f === str\n )\n \n await ddb.execute(\n 'cbool = true false false;\\n' +\n \"cchar = 'a' 'b' 'c';\\n\" +\n 'cshort = 122h 32h 45h;\\n' +\n 'cint = 1 4 9;\\n' +\n 'clong = 17l 39l 72l;\\n' +\n 'cdate = 2013.06.13 2015.07.12 2019.08.15;\\n' +\n 'cmonth = 2011.08M 2014.02M 2019.07M;\\n' +\n 'ctime = 04:15:51.921 09:27:16.095 11:32:28.387;\\n' +\n 'cminute = 03:25m 08:12m 10:15m;\\n' +\n 'csecond = 01:15:20 04:26:45 09:22:59;\\n' +\n 'cdatetime = 1976.09.10 02:31:42 1987.12.13 11:58:31 1999.12.10 20:49:23;\\n' +\n 'ctimestamp = 1997.07.20 21:45:16.339 2002.11.26 12:40:31.783 2008.08.10 23:54:27.629;\\n' +\n 'cnanotime = 01:25:33.365869429 03:47:25.364828475 08:16:22.748395721;\\n' +\n 'cnanotimestamp = 2005.09.23 13:30:35.468385940 2007.12.11 14:54:38.949792731 2009.09.30 16:39:51.973463623;\\n' +\n 'cfloat = 7.5f 0.79f 8.27f;\\n' +\n 'cdouble = 5.7 7.2 3.9;\\n' +\n 'cstring = \"hello\" \"hi\" \"here\";\\n' +\n 'cdatehour = datehour(2012.06.15 15:32:10.158 2012.06.15 17:30:10.008 2014.09.29 23:55:42.693);\\n' +\n 'cblob = blob(\"dolphindb\" \"gaussdb\" \"goldendb\")\\n' +\n 'cdecimal32 = decimal32(12 17 135.2,2)\\n' +\n 'cdecimal64 = decimal64(18 24 33.878,4)\\n' +\n 'cdecimal128 = decimal128(18 24 33.878,18)\\n'\n )\n \n assert(\n // await ddb.invoke<DdbTableData>('defs')\n (await ddb.invoke<DdbTableData>('objs', [true], { table: 'full' }))\n .columns.includes('shared')\n )\n \n const [a, b] = await ddb.invoke<[number, number]>(\n 'def foo (a = 1, b = 2) {\\n' +\n ' return (a, b)\\n' +\n '}\\n', \n [undefined, new DdbInt(3)])\n \n check(a === 1 && b === 3)\n}\n\n\nasync function test_append_table (ddb: DDB) {\n // 在连接对应的会话中加载或创建表\n await ddb.execute('t = table(1..10 as id, take([\"A001\", \"B001\"], 10) as sym, rand(10.0, 10) as val)')\n // await ddb.execute('t = loadTable(database(\"dfs://path-to-db\"), \"table_name\")')\n \n assert(\n // 使用 tableInsert 插入数据\n await ddb.invoke<number>(\n 'tableInsert',\n [\n 't',\n \n // 数据\n new DdbTable([\n // 第一列\n new DdbVectorInt([1, 2, 3]),\n \n // 第二列\n new DdbVectorSymbol(['a', 'b', 'c']),\n \n // 第三列\n new DdbVectorDouble([1.1, 1.2, 1.3]),\n ])\n ]\n ) === 3\n )\n}\n\n\nasync function test_extobj (ddb: DDB) {\n const instrument = await ddb.eval(\n 'parseInstrument({ \\n' +\n ' \"productType\": \"Option\",\\n' +\n ' \"optionType\": \"EuropeanOption\",\\n' +\n ' \"version\": 0,\\n' +\n ' \"instrumentId\": \"0001\",\\n' +\n ' \"nominal\": 100.0,\\n' +\n ' \"strike\": 100.0,\\n' +\n ' \"maturity\": 2022.08.09,\\n' +\n ' \"dayCountConvention\": \"ActualActual\",\\n' +\n ' \"payoffType\": \"Call\",\\n' +\n ' \"priceCurrency\": \"CNY\",\\n' +\n ' \"underlying\": \"EU_0001\"\\n' +\n '})\\n')\n \n // console.log(instrument)\n \n check(instrument.data() === 'ExtObj<instrument>')\n check((instrument.value as DdbExtObjValue).version === 0)\n check((instrument.value as DdbExtObjValue).data.length)\n \n check(\n await ddb.invoke<string>('typestr', [instrument]) === \n 'INSTRUMENT')\n \n const ext_table = await ddb.eval<DdbTableObj>('select * from loadTable(\"dfs://db\", \"pt\")')\n \n check(ext_table.data()[0].value === 'ExtObj<instrument>')\n \n const market_data = await ddb.eval(\n 'aod = 2025.07.01\\n' +\n 'parseMktData({\\n' +\n ' \"mktDataType\": \"Curve\",\\n' +\n ' \"curveType\": \"IrYieldCurve\",\\n' +\n ' \"version\": 0, \\n' +\n ' \"referenceDate\": aod,\\n' +\n ' \"currency\": \"CNY\",\\n' +\n ' \"dayCountConvention\": \"Actual365\",\\n' +\n ' \"compounding\": \"Continuous\",\\n' +\n ' \"interpMethod\": \"LinearInterp\",\\n' +\n ' \"extrapMethod\": \"FlatExtrap\",\\n' +\n ' \"dates\":[2025.07.07,2025.07.10,2025.07.17,2025.07.24,2025.08.04,2025.09.03,2025.10.09,2026.01.05,\\n' +\n ' 2026.04.03,2026.07.03,2027.01.04,2027.07.05,2028.07.03],\\n' +\n ' \"values\":[0.015785,0.015931,0.016183,0.016381,0.016493,0.016503,0.016478,0.016234,0.016321,\\n' +\n ' 0.016378,0.015508,0.015185,0.014901],\\n' +\n ' \"settlement\": aod+2\\n' +\n '})\\n')\n \n check(market_data.data() === 'ExtObj<market_data>')\n check((market_data.value as DdbExtObjValue).version === 0)\n \n // console.log(market_data)\n \n // --- 暂不支持上传 extobj 的 any vector\n // console.log(\n // await ddb.invoke<any>('print', [ext_table.value[3]]))\n \n // console.log(\n // ext_table.value[3].data())\n}\n\n\nasync function test_ticket (ddb: DDB) {\n console.log('测试 ticket 登录')\n \n const ticket = await ddb.invoke('getAuthenticatedUserTicket', undefined, {\n node: await ddb.invoke<string>('getControllerAlias')\n })\n \n let ddb_ = new DDB(url, {\n ...ddb_options,\n ticket,\n username: 'unused',\n password: 'unused'\n })\n \n check(\n (await ddb_.invoke<[bigint, string]>('getCurrentSessionAndUser'))\n [1],\n 'admin')\n \n await ddb_.login_by_ticket()\n \n ddb_.disconnect()\n}\n\n\nasync function test_cancel (ddb: DDB) {\n console.log('测试取消作业')\n \n let t = Date.now()\n \n let cancelled = false\n \n // 完整执行需要 5 秒\n const ptask = ddb.execute(\n 'for (i in 0..50)\\n' +\n ' sleep(100)\\n')\n \n await ddb.cancel()\n \n try {\n await ptask\n \n throw new Error('不应该执行成功')\n } catch (error) {\n if (error instanceof DdbDatabaseError) {\n check(error.message.includes('=> The task was cancelled'), '作业应该取消成功')\n cancelled = true\n } else\n throw error\n }\n \n check(cancelled && Date.now() - t < 1000, '取消作业成功时时间应该小于 1 秒')\n \n console.log('测试取消作业成功')\n}\n\n"]}
|
package/unused.js
CHANGED
package/unused.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unused.js","sourceRoot":"","sources":["unused.ts"],"names":[],"mappings":"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","sourcesContent":["// import { Socket, createServer as create_socket_server, Server as SocketServer } from 'net'\n// import { TLSSocket, connect as tls_connect } from 'tls'\n// import type { Duplex } from 'stream'\n\n// import { table, getBorderCharacters, type TableUserConfig } from 'table'\n\n// class DdbObj {\n// port = 8848\n \n// /** ddb 连接状态 */\n// state = '未连接'\n \n// socket = null as Socket\n \n// clients = new Set<Duplex>()\n \n \n// /** dolphindb http rpc \n// - code\n// - options\n// - session_id: 20 分钟内无操作服务端会清空 session,删除所有变量\n// */\n// async rpc_json (\n// code: string,\n// {\n// hostname = '127.0.0.1',\n// // hostname = 'localhost',\n \n// port = this.port,\n// tls = false,\n// sid = this.sid,\n \n// // TEST\n// proxy = MyProxy.whistle\n// }: {\n// hostname?: string\n// port?: number\n// tls?: boolean\n// sid?: string\n// proxy?: MyProxy | false\n// } = { }\n// ): Promise<DdbJsonObj> {\n// let result = await request_json(`${tls ? 'https' : 'http'}://${hostname}:${port}/${sid}`, {\n// body: {\n// sessionID: sid,\n// functionName: 'executeCode',\n// params: [{\n// name: 'script',\n// form: 'scalar',\n// type: 'string',\n// value: encodeURIComponent(code)\n// }]\n// },\n// proxy\n// })\n \n// this.sid = result.sessionID\n \n// result.resultCode = Number(result.resultCode)\n \n// // result.userId: 未登录时为 `''`\n \n// if (result.resultCode)\n// throw Object.assign(\n// // result.msg: 成功时为 `''`; 失败时为错误信息\n// new Error((result.msg as string).red),\n// result\n// )\n \n \n// return new DdbJsonObj(result.object[0])\n// }\n \n \n// /** 创建 tcp 连接到 ddb,并完成 connect 请求,读到 chunk 后执行 on_chunk 回调\n// 成功完成后 this.socket, this.sid 会被初始化\n// */\n// async connect_socket () {\n// // --- 创建 socket, attach 状态、异常事件处理\n// this.socket = new Socket({\n// allowHalfOpen: false,\n// readable: true,\n// writable: true\n// })\n \n// this.socket.on('lookup', (error, address, family, host) => {\n// console.log('socket 域名解析 (lookup) 完成', error, address, family, host)\n// })\n \n// this.socket.on('ready', () => {\n// console.log('socket 准备就绪')\n// })\n \n// this.socket.on('close', has_error => {\n// console.log('socket 成功关闭,是否出错?', has_error)\n// })\n \n// this.socket.on('timeout', () => {\n// console.log('socket 超时')\n// })\n \n// this.socket.on('error', error => {\n// console.log('socket 出错了', error)\n// })\n \n \n// // ---\n// console.log('将 socket 连接到 server')\n// await new Promise<void>(resolve => {\n// // callback 会被 socket.once('connect', callback)\n// this.socket.connect({\n// port: this.port,\n \n// // host: 'localhost',\n// host: '127.0.0.1',\n \n// family: 0,\n// }, resolve)\n// })\n \n// console.log(this.state = 'socket 已连接')\n \n \n// // ---\n// console.log('发送 connect 请求到 ddb')\n \n// this.socket.write(\n// `API ${this.sid || '0'} 8\\n` +\n// 'connect\\n'\n// )\n \n// console.log(this.state = '已发送 connect 请求')\n \n \n// // --- 读取流数据,只等到 connect 完成,后续 chunk 交给 callback\n// await new Promise<void>(async (resolve, reject) => {\n// let last_chunk: Buffer\n \n// try {\n// for await (const chunk of this.socket) {\n// last_chunk = chunk\n// console.log('ddb.socket 读取到 chunk, 转发给所有 websocket clients')\n \n// const ck = chunk as Uint8Array\n \n// if (this.state === '已发送 connect 请求') {\n// // --- 读取 sid\n// const i_sid_end = ck.indexOf(0x20)\n \n// this.sid = this.dec.decode(\n// ck.subarray(\n// 0,\n// i_sid_end\n// )\n// )\n// console.log('sid = ', this.sid)\n \n// console.log(this.state = 'connect 完成')\n \n// resolve()\n \n// continue\n// }\n \n// this.on_chunk(ck)\n// }\n \n// console.log('ddb.socket 完美结束 (no more data to read)')\n// } catch (error) {\n// console.log('捕获到 socket 错误', error)\n// console.log('最后一个 chunk', last_chunk)\n// reject(error)\n// }\n// })\n// }\n \n \n// on_chunk (chunk: Uint8Array) {\n// for (let client of this.clients)\n// client.write(chunk)\n// }\n// }\n\n\n// class DdbJsonObj {\n// static ddb_null = { name: '', form: 'scalar', type: 'void', value: null } as const\n \n// static table_config: TableUserConfig = {\n// border: getBorderCharacters('void'),\n// singleLine: true,\n// columnDefault: {\n// paddingLeft: 0,\n// paddingRight: 1,\n// alignment: 'right'\n// },\n// }\n \n \n// name: string\n \n// form: DdbJsonForm\n \n// type?: DdbJsonType\n \n// /** 向量有这个属性 */\n// size?: number\n \n// value: null | boolean | number | string | DdbJsonObj | DdbJsonObj[]\n \n// constructor (data?: {\n// name: string\n// form: DdbJsonForm\n// type?: DdbJsonType\n// size?: string | number\n// value: any\n// }) {\n// const { name, form, type, size, value } = data || DdbJsonObj.ddb_null as DdbJsonObj\n \n// this.name = name\n// this.form = form\n// this.type = type\n \n// if ((typeof size === 'string' && size) || typeof size === 'number')\n// this.size = Number(size)\n \n// this.value = (() => {\n// if (form === 'scalar') {\n// if (type === 'void')\n// return null\n \n// if (type === 'int' || type === 'short' || type === 'float' || type === 'double') {\n// if (value === 'pi' || value === 'e')\n// return value\n \n// return Number(value)\n// }\n \n// if (type === 'long')\n// return BigInt(value)\n \n// if (type === 'bool')\n// return Boolean(value)\n \n// // integral: int128\n// // literal: char | string | uuid\n// // temporal: date | month | time | second | datetime | timestamp | nanotime | nanotimestamp | datehour\n// // system: code | ipaddr | duration\n// // complex | point\n// return value\n// }\n \n// if (form === 'pair')\n// return value\n \n// if (form === 'vector')\n// return value\n \n// if (form === 'set')\n// return value\n \n// if (form === 'matrix')\n// return value\n \n// if (form === 'dictionary')\n// return value\n \n// if (form === 'table')\n// return value\n// })()\n// }\n \n \n// [inspect.custom] () {\n// const { form, type, value, name, size } = this\n \n// if (form === 'scalar')\n// return this.format_scalar(type, value)\n \n// if (form === 'pair') {\n// const [l, r] = value as [any, any]\n// return `${ l === null ? '' : this.format_scalar(type, l) }:${ r === null ? '' : this.format_scalar(type, r) }`\n// }\n \n// if (form === 'vector' || form === 'set') {\n// return (name ? `${name} ` : '') +\n// (\n// (value as any[]).map(x => \n// x && typeof x === 'object' ?\n// inspect(\n// new DdbJsonObj(x), \n// { colors: false }\n// )\n// :\n// this.format_scalar(type, x)\n// ).join(', ') || ' '\n// ).surround(\n// form === 'vector' ? '[' : '{',\n// form === 'vector' ? ']' : '}',\n// )\n// }\n \n// if (form === 'dictionary') {\n// const [keys, values] = value as [any, any]\n// let obj = { } as Record<string, DdbJsonObj | string>\n// const size = Number(keys.size)\n// if (!size) return `dict(${keys.type}, ${values.type})`\n \n// for (let i = 0; i < size; i++) {\n// const key = keys.type === 'string' ? \n// keys.value[i]\n// :\n// this.format_scalar(keys.type, keys.value[i])\n \n// const v = values.value[i]\n// const value = typeof v === 'string' ? \n// v\n// :\n// new DdbJsonObj(v)\n// obj[key] = value\n// }\n \n// return obj\n// }\n \n// if (form === 'matrix') {\n// const nrows = Number(value[1].value)\n// const ncols = Number(value[2].value)\n// const values = value[0].value\n \n// let data = [ ]\n// for (let i = 0; i < nrows; i++)\n// for (let j = 0; j < ncols; j++) {\n// const value = values[nrows * j + i]\n// let row = data[i] || [ ]\n// row[j] = this.format_scalar(type, value)\n// data[i] = row\n// }\n \n// return `matrix <${type}[${ncols}][${nrows}]>\\n` +\n// table(data, DdbJsonObj.table_config)\n// }\n \n// if (form === 'table') {\n// const nrows = Number(size)\n// const ncols = (value as any[]).length\n// const headers = (value as any[]).map(({ name }) => name)\n \n// let data = [ ]\n// for (let i = 0; i < nrows; i++)\n// for (let j = 0; j < ncols; j++) {\n// const col = value[j]\n// const v = col.value[i]\n// let row = data[i] || [ ]\n// row[j] = this.format_scalar(col.type, v)\n// data[i] = row\n// }\n \n// return `table ${ name ? `${name} ` : '' }(${nrows} rows)\\n` +\n// table(\n// [\n// headers,\n// ...data\n// ],\n// DdbJsonObj.table_config,\n// )\n// }\n \n// return this\n// }\n \n \n// format_scalar (type: DdbJsonType, value: any) {\n// // 可以被 js 原生类型表示\n// if (\n// type === 'void' || type === 'bool' ||\n// type === 'int' || type === 'short' || type === 'long' || type === 'float' || type === 'double'\n// )\n// return value\n \n// if (type === 'string')\n// return inspect(value, { colors: false })\n \n// // 可以直接用 <value> 表示\n// if (\n// type === 'code' || type === 'point' || type === 'complex' || \n// type === 'second' || type === 'time' || type === 'nanotime' || type === 'datehour' || type === 'duration'\n// )\n// return value || 'null'\n \n// if (type === 'month') {\n// if (!value)\n// return 'null'\n// return `${value}M`\n// }\n \n// if (type === 'minute') {\n// if (!value)\n// return 'null'\n// return `${value}m`\n// }\n \n// // 用 type('<value>') 表示\n// return `${type}(${(value as string).quote()})`\n// }\n// }\n\n\n// type DdbJsonForm = 'scalar' | 'pair' | 'vector' | 'set' | 'matrix' | 'dictionary' | 'table'\n\n// type DdbJsonType = \n// 'void' | 'bool' | 'char' | \n// 'short' | 'int' | 'long' | \n// 'date' | 'month' | 'time' | 'minute' | 'second' | 'datetime' | 'timestamp' | 'nanotime' | 'nanotimestamp' | \n// 'float' | 'double' | 'symbol' | 'string' | 'uuid' | 'functiondef' | 'handle' | 'code' | \n// 'datasource' | 'resource' | 'any' | 'compress' | 'datehour' | 'ipaddr' | 'int128' | 'blob' | 'complex' | 'point' | 'duration'\n\n\n// type DdbJsonScalar = number | string | any\n\n\n// const ddb_gateway = {\n// server: null as SocketServer,\n \n// clients: new Set<Socket>(),\n \n// port: 8849,\n \n// controllers: {\n// /** alias */\n// c0: {\n// hostname: '127.0.0.1',\n// port: 8850,\n// },\n \n// c1: {\n// hostname: '127.0.0.1',\n// port: 8851,\n// },\n \n// c2: {\n// hostname: '127.0.0.1',\n// port: 8852,\n// }\n// },\n \n// master: '',\n \n// sids: new Map<string, string>(),\n \n// state: 'init',\n \n \n// async start () {\n// for (const alias in this.controllers) {\n// this.master = alias\n// break\n// }\n \n// this.server = create_socket_server(\n// {\n// allowHalfOpen: false,\n// pauseOnConnect: false,\n// },\n// this.accept.bind(this)\n// )\n \n// this.server.on('error', error => {\n// console.log(new Date(), 'gateway 出错:', error)\n// })\n \n// await new Promise<void>(resolve => {\n// this.server.listen(this.port, resolve)\n// })\n \n// this.auto_switch_master()\n \n// console.log(new Date(), 'gateway 成功启动')\n// },\n \n \n// async stop () {\n// this.state = 'stopping'\n// console.log(new Date(), '正在停止 auto_switch_master')\n \n// for (const client of this.clients)\n// client.end()\n \n// await new Promise<void>((resolve, reject) => {\n// this.server.close(error => {\n// if (error) {\n// reject(error)\n// return\n// }\n// resolve()\n// })\n// })\n// },\n \n \n// /** 接收到 client tcp 连接 */\n// async accept (client: Socket) {\n// this.clients.add(client)\n \n// const port = client.remotePort\n \n// // --- \n// console.log(port, new Date(), 'gateway accept client 连接,开始建立管道')\n \n// let controller = new Socket({\n// allowHalfOpen: false,\n// readable: true,\n// writable: true,\n// })\n \n// controller.on('lookup', (error, address, family, host) => {\n// console.log(port, new Date(), 'controller 域名解析 (lookup) 完成', error, address, family, host)\n// })\n \n// controller.on('close', has_error => {\n// console.log(port, new Date(), 'controller 关闭连接,是否出错:', has_error)\n// })\n \n// controller.on('timeout', () => {\n// console.log(port, new Date(), 'controller 超时')\n// })\n \n// controller.on('error', error => {\n// console.log(port, new Date(), 'controller 出错了:', error)\n// client.end()\n// })\n \n \n// // --- client 错误处理\n// client.on('error', error => {\n// console.log(port, new Date(), 'client 出错,关闭与 controller 的连接', error)\n// controller.end()\n// })\n \n// client.on('close', has_error => {\n// this.clients.delete(client)\n// console.log(port, new Date(), 'client 关闭连接,是否出错:', has_error)\n// })\n \n \n// // --- \n// console.log(port, new Date(), 'gateway 开始连接到 controller')\n// const { hostname, port: master_port } = this.controllers[this.master]\n// await new Promise<void>(resolve => {\n// // callback 会被 socket.once('connect', callback)\n// controller.connect({\n// port: master_port,\n \n// host: hostname,\n// // host: '127.0.0.1',\n \n// family: 0,\n// }, resolve)\n// })\n// console.log(port, new Date(), 'gateway 已连接到 controller')\n \n// // --- \n// console.log(port, new Date(), 'gateway 建立 client <-> controller')\n// client.pipe(controller)\n// controller.pipe(client)\n// },\n \n \n// /** https://www.dolphindb.cn/cn/help/FunctionsandCommands/FunctionReferences/g/getActiveMaster.html?highlight=getactivemaster */\n// async get_active_master () {\n// for (const alias in this.controllers) {\n// const { hostname, port } = this.controllers[alias] as { hostname: string, port: number }\n// const sid = this.sids.get(alias)\n// try {\n// const master = (\n// await ddb.rpc_json('getActiveMaster()', { hostname, port, sid })\n// ).value as string\n// console.log(new Date(), `${alias}.getActiveMaster() -> ${this.master}`)\n// this.sids.set(alias, sid)\n// if (!master)\n// throw new Error(`${new Date().toString()} getActiveMaster 得到的 master 为空`)\n// return master\n// } catch (error) {\n// console.log(new Date(), error)\n// }\n// }\n \n// return this.master\n// },\n \n \n// async auto_switch_master () {\n// if (this.state === 'stopping') {\n// this.state = 'running'\n// console.log('gateway 恢复 auto_switch_master')\n// return\n// }\n \n// this.state = 'running'\n \n// for (; this.state === 'running'; ) {\n// const master = this.master\n// const master_ = await this.get_active_master()\n// if (master === master_) {\n// await delay(10 * 1000)\n// continue\n// }\n \n// this.master = master_\n// console.log(new Date(), `master 从 ${master} 切换为 ${master_}, 断开所有 clients`)\n// for (const client of this.clients)\n// client.end()\n// await delay(3 * 1000)\n// }\n \n// console.log(new Date(), `gateway.state === ${this.state}, 停止 auto_switch_master`)\n// this.state = 'stopped'\n// }\n// }\n"]}
|
|
1
|
+
{"version":3,"file":"unused.js","sourceRoot":"","sources":["unused.ts"],"names":[],"mappings":"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","sourcesContent":["// import { Socket, createServer as create_socket_server, Server as SocketServer } from 'net'\n// import { TLSSocket, connect as tls_connect } from 'tls'\n// import type { Duplex } from 'stream'\n\n// import { table, getBorderCharacters, type TableUserConfig } from 'table'\n\n// class DdbObj {\n// port = 8848\n \n// /** ddb 连接状态 */\n// state = '未连接'\n \n// socket = null as Socket\n \n// clients = new Set<Duplex>()\n \n \n// /** dolphindb http rpc \n// - code\n// - options\n// - session_id: 20 分钟内无操作服务端会清空 session,删除所有变量\n// */\n// async rpc_json (\n// code: string,\n// {\n// hostname = '127.0.0.1',\n// // hostname = 'localhost',\n \n// port = this.port,\n// tls = false,\n// sid = this.sid,\n \n// // TEST\n// proxy = MyProxy.whistle\n// }: {\n// hostname?: string\n// port?: number\n// tls?: boolean\n// sid?: string\n// proxy?: MyProxy | false\n// } = { }\n// ): Promise<DdbJsonObj> {\n// let result = await request_json(`${tls ? 'https' : 'http'}://${hostname}:${port}/${sid}`, {\n// body: {\n// sessionID: sid,\n// functionName: 'executeCode',\n// params: [{\n// name: 'script',\n// form: 'scalar',\n// type: 'string',\n// value: encodeURIComponent(code)\n// }]\n// },\n// proxy\n// })\n \n// this.sid = result.sessionID\n \n// result.resultCode = Number(result.resultCode)\n \n// // result.userId: 未登录时为 `''`\n \n// if (result.resultCode)\n// throw Object.assign(\n// // result.msg: 成功时为 `''`; 失败时为错误信息\n// new Error((result.msg as string).red),\n// result\n// )\n \n \n// return new DdbJsonObj(result.object[0])\n// }\n \n \n// /** 创建 tcp 连接到 ddb,并完成 connect 请求,读到 chunk 后执行 on_chunk 回调\n// 成功完成后 this.socket, this.sid 会被初始化\n// */\n// async connect_socket () {\n// // --- 创建 socket, attach 状态、异常事件处理\n// this.socket = new Socket({\n// allowHalfOpen: false,\n// readable: true,\n// writable: true\n// })\n \n// this.socket.on('lookup', (error, address, family, host) => {\n// console.log('socket 域名解析 (lookup) 完成', error, address, family, host)\n// })\n \n// this.socket.on('ready', () => {\n// console.log('socket 准备就绪')\n// })\n \n// this.socket.on('close', has_error => {\n// console.log('socket 成功关闭,是否出错?', has_error)\n// })\n \n// this.socket.on('timeout', () => {\n// console.log('socket 超时')\n// })\n \n// this.socket.on('error', error => {\n// console.log('socket 出错了', error)\n// })\n \n \n// // ---\n// console.log('将 socket 连接到 server')\n// await new Promise<void>(resolve => {\n// // callback 会被 socket.once('connect', callback)\n// this.socket.connect({\n// port: this.port,\n \n// // host: 'localhost',\n// host: '127.0.0.1',\n \n// family: 0,\n// }, resolve)\n// })\n \n// console.log(this.state = 'socket 已连接')\n \n \n// // ---\n// console.log('发送 connect 请求到 ddb')\n \n// this.socket.write(\n// `API ${this.sid || '0'} 8\\n` +\n// 'connect\\n'\n// )\n \n// console.log(this.state = '已发送 connect 请求')\n \n \n// // --- 读取流数据,只等到 connect 完成,后续 chunk 交给 callback\n// await new Promise<void>(async (resolve, reject) => {\n// let last_chunk: Buffer\n \n// try {\n// for await (const chunk of this.socket) {\n// last_chunk = chunk\n// console.log('ddb.socket 读取到 chunk, 转发给所有 websocket clients')\n \n// const ck = chunk as Uint8Array\n \n// if (this.state === '已发送 connect 请求') {\n// // --- 读取 sid\n// const i_sid_end = ck.indexOf(0x20)\n \n// this.sid = this.dec.decode(\n// ck.subarray(\n// 0,\n// i_sid_end\n// )\n// )\n// console.log('sid = ', this.sid)\n \n// console.log(this.state = 'connect 完成')\n \n// resolve()\n \n// continue\n// }\n \n// this.on_chunk(ck)\n// }\n \n// console.log('ddb.socket 完美结束 (no more data to read)')\n// } catch (error) {\n// console.log('捕获到 socket 错误', error)\n// console.log('最后一个 chunk', last_chunk)\n// reject(error)\n// }\n// })\n// }\n \n \n// on_chunk (chunk: Uint8Array) {\n// for (let client of this.clients)\n// client.write(chunk)\n// }\n// }\n\n\n// class DdbJsonObj {\n// static ddb_null = { name: '', form: 'scalar', type: 'void', value: null } as const\n \n// static table_config: TableUserConfig = {\n// border: getBorderCharacters('void'),\n// singleLine: true,\n// columnDefault: {\n// paddingLeft: 0,\n// paddingRight: 1,\n// alignment: 'right'\n// },\n// }\n \n \n// name: string\n \n// form: DdbJsonForm\n \n// type?: DdbJsonType\n \n// /** 向量有这个属性 */\n// size?: number\n \n// value: null | boolean | number | string | DdbJsonObj | DdbJsonObj[]\n \n// constructor (data?: {\n// name: string\n// form: DdbJsonForm\n// type?: DdbJsonType\n// size?: string | number\n// value: any\n// }) {\n// const { name, form, type, size, value } = data || DdbJsonObj.ddb_null as DdbJsonObj\n \n// this.name = name\n// this.form = form\n// this.type = type\n \n// if ((typeof size === 'string' && size) || typeof size === 'number')\n// this.size = Number(size)\n \n// this.value = (() => {\n// if (form === 'scalar') {\n// if (type === 'void')\n// return null\n \n// if (type === 'int' || type === 'short' || type === 'float' || type === 'double') {\n// if (value === 'pi' || value === 'e')\n// return value\n \n// return Number(value)\n// }\n \n// if (type === 'long')\n// return BigInt(value)\n \n// if (type === 'bool')\n// return Boolean(value)\n \n// // integral: int128\n// // literal: char | string | uuid\n// // temporal: date | month | time | second | datetime | timestamp | nanotime | nanotimestamp | datehour\n// // system: code | ipaddr | duration\n// // complex | point\n// return value\n// }\n \n// if (form === 'pair')\n// return value\n \n// if (form === 'vector')\n// return value\n \n// if (form === 'set')\n// return value\n \n// if (form === 'matrix')\n// return value\n \n// if (form === 'dictionary')\n// return value\n \n// if (form === 'table')\n// return value\n// })()\n// }\n \n \n// [inspect.custom] () {\n// const { form, type, value, name, size } = this\n \n// if (form === 'scalar')\n// return this.format_scalar(type, value)\n \n// if (form === 'pair') {\n// const [l, r] = value as [any, any]\n// return `${ l === null ? '' : this.format_scalar(type, l) }:${ r === null ? '' : this.format_scalar(type, r) }`\n// }\n \n// if (form === 'vector' || form === 'set') {\n// return (name ? `${name} ` : '') +\n// (\n// (value as any[]).map(x => \n// x && typeof x === 'object' ?\n// inspect(\n// new DdbJsonObj(x), \n// { colors: false }\n// )\n// :\n// this.format_scalar(type, x)\n// ).join(', ') || ' '\n// ).surround(\n// form === 'vector' ? '[' : '{',\n// form === 'vector' ? ']' : '}',\n// )\n// }\n \n// if (form === 'dictionary') {\n// const [keys, values] = value as [any, any]\n// let obj = { } as Record<string, DdbJsonObj | string>\n// const size = Number(keys.size)\n// if (!size) return `dict(${keys.type}, ${values.type})`\n \n// for (let i = 0; i < size; i++) {\n// const key = keys.type === 'string' ? \n// keys.value[i]\n// :\n// this.format_scalar(keys.type, keys.value[i])\n \n// const v = values.value[i]\n// const value = typeof v === 'string' ? \n// v\n// :\n// new DdbJsonObj(v)\n// obj[key] = value\n// }\n \n// return obj\n// }\n \n// if (form === 'matrix') {\n// const nrows = Number(value[1].value)\n// const ncols = Number(value[2].value)\n// const values = value[0].value\n \n// let data = [ ]\n// for (let i = 0; i < nrows; i++)\n// for (let j = 0; j < ncols; j++) {\n// const value = values[nrows * j + i]\n// let row = data[i] || [ ]\n// row[j] = this.format_scalar(type, value)\n// data[i] = row\n// }\n \n// return `matrix <${type}[${ncols}][${nrows}]>\\n` +\n// table(data, DdbJsonObj.table_config)\n// }\n \n// if (form === 'table') {\n// const nrows = Number(size)\n// const ncols = (value as any[]).length\n// const headers = (value as any[]).map(({ name }) => name)\n \n// let data = [ ]\n// for (let i = 0; i < nrows; i++)\n// for (let j = 0; j < ncols; j++) {\n// const col = value[j]\n// const v = col.value[i]\n// let row = data[i] || [ ]\n// row[j] = this.format_scalar(col.type, v)\n// data[i] = row\n// }\n \n// return `table ${ name ? `${name} ` : '' }(${nrows} rows)\\n` +\n// table(\n// [\n// headers,\n// ...data\n// ],\n// DdbJsonObj.table_config,\n// )\n// }\n \n// return this\n// }\n \n \n// format_scalar (type: DdbJsonType, value: any) {\n// // 可以被 js 原生类型表示\n// if (\n// type === 'void' || type === 'bool' ||\n// type === 'int' || type === 'short' || type === 'long' || type === 'float' || type === 'double'\n// )\n// return value\n \n// if (type === 'string')\n// return inspect(value, { colors: false })\n \n// // 可以直接用 <value> 表示\n// if (\n// type === 'code' || type === 'point' || type === 'complex' || \n// type === 'second' || type === 'time' || type === 'nanotime' || type === 'datehour' || type === 'duration'\n// )\n// return value || 'null'\n \n// if (type === 'month') {\n// if (!value)\n// return 'null'\n// return `${value}M`\n// }\n \n// if (type === 'minute') {\n// if (!value)\n// return 'null'\n// return `${value}m`\n// }\n \n// // 用 type('<value>') 表示\n// return `${type}(${(value as string).quote()})`\n// }\n// }\n\n\n// type DdbJsonForm = 'scalar' | 'pair' | 'vector' | 'set' | 'matrix' | 'dictionary' | 'table'\n\n// type DdbJsonType = \n// 'void' | 'bool' | 'char' | \n// 'short' | 'int' | 'long' | \n// 'date' | 'month' | 'time' | 'minute' | 'second' | 'datetime' | 'timestamp' | 'nanotime' | 'nanotimestamp' | \n// 'float' | 'double' | 'symbol' | 'string' | 'uuid' | 'functiondef' | 'handle' | 'code' | \n// 'datasource' | 'resource' | 'any' | 'compress' | 'datehour' | 'ipaddr' | 'int128' | 'blob' | 'complex' | 'point' | 'duration'\n\n\n// type DdbJsonScalar = number | string | any\n\n\n// const ddb_gateway = {\n// server: null as SocketServer,\n \n// clients: new Set<Socket>(),\n \n// port: 8849,\n \n// controllers: {\n// /** alias */\n// c0: {\n// hostname: '127.0.0.1',\n// port: 8850,\n// },\n \n// c1: {\n// hostname: '127.0.0.1',\n// port: 8851,\n// },\n \n// c2: {\n// hostname: '127.0.0.1',\n// port: 8852,\n// }\n// },\n \n// master: '',\n \n// sids: new Map<string, string>(),\n \n// state: 'init',\n \n \n// async start () {\n// for (const alias in this.controllers) {\n// this.master = alias\n// break\n// }\n \n// this.server = create_socket_server(\n// {\n// allowHalfOpen: false,\n// pauseOnConnect: false,\n// },\n// this.accept.bind(this)\n// )\n \n// this.server.on('error', error => {\n// console.log(new Date(), 'gateway 出错:', error)\n// })\n \n// await new Promise<void>(resolve => {\n// this.server.listen(this.port, resolve)\n// })\n \n// this.auto_switch_master()\n \n// console.log(new Date(), 'gateway 成功启动')\n// },\n \n \n// async stop () {\n// this.state = 'stopping'\n// console.log(new Date(), '正在停止 auto_switch_master')\n \n// for (const client of this.clients)\n// client.end()\n \n// await new Promise<void>((resolve, reject) => {\n// this.server.close(error => {\n// if (error) {\n// reject(error)\n// return\n// }\n// resolve()\n// })\n// })\n// },\n \n \n// /** 接收到 client tcp 连接 */\n// async accept (client: Socket) {\n// this.clients.add(client)\n \n// const port = client.remotePort\n \n// // --- \n// console.log(port, new Date(), 'gateway accept client 连接,开始建立管道')\n \n// let controller = new Socket({\n// allowHalfOpen: false,\n// readable: true,\n// writable: true,\n// })\n \n// controller.on('lookup', (error, address, family, host) => {\n// console.log(port, new Date(), 'controller 域名解析 (lookup) 完成', error, address, family, host)\n// })\n \n// controller.on('close', has_error => {\n// console.log(port, new Date(), 'controller 关闭连接,是否出错:', has_error)\n// })\n \n// controller.on('timeout', () => {\n// console.log(port, new Date(), 'controller 超时')\n// })\n \n// controller.on('error', error => {\n// console.log(port, new Date(), 'controller 出错了:', error)\n// client.end()\n// })\n \n \n// // --- client 错误处理\n// client.on('error', error => {\n// console.log(port, new Date(), 'client 出错,关闭与 controller 的连接', error)\n// controller.end()\n// })\n \n// client.on('close', has_error => {\n// this.clients.delete(client)\n// console.log(port, new Date(), 'client 关闭连接,是否出错:', has_error)\n// })\n \n \n// // --- \n// console.log(port, new Date(), 'gateway 开始连接到 controller')\n// const { hostname, port: master_port } = this.controllers[this.master]\n// await new Promise<void>(resolve => {\n// // callback 会被 socket.once('connect', callback)\n// controller.connect({\n// port: master_port,\n \n// host: hostname,\n// // host: '127.0.0.1',\n \n// family: 0,\n// }, resolve)\n// })\n// console.log(port, new Date(), 'gateway 已连接到 controller')\n \n// // --- \n// console.log(port, new Date(), 'gateway 建立 client <-> controller')\n// client.pipe(controller)\n// controller.pipe(client)\n// },\n \n \n// /** https://www.dolphindb.cn/cn/help/FunctionsandCommands/FunctionReferences/g/getActiveMaster.html?highlight=getactivemaster */\n// async get_active_master () {\n// for (const alias in this.controllers) {\n// const { hostname, port } = this.controllers[alias] as { hostname: string, port: number }\n// const sid = this.sids.get(alias)\n// try {\n// const master = (\n// await ddb.rpc_json('getActiveMaster()', { hostname, port, sid })\n// ).value as string\n// console.log(new Date(), `${alias}.getActiveMaster() -> ${this.master}`)\n// this.sids.set(alias, sid)\n// if (!master)\n// throw new Error(`${new Date().toString()} getActiveMaster 得到的 master 为空`)\n// return master\n// } catch (error) {\n// console.log(new Date(), error)\n// }\n// }\n \n// return this.master\n// },\n \n \n// async auto_switch_master () {\n// if (this.state === 'stopping') {\n// this.state = 'running'\n// console.log('gateway 恢复 auto_switch_master')\n// return\n// }\n \n// this.state = 'running'\n \n// for (; this.state === 'running'; ) {\n// const master = this.master\n// const master_ = await this.get_active_master()\n// if (master === master_) {\n// await delay(10 * 1000)\n// continue\n// }\n \n// this.master = master_\n// console.log(new Date(), `master 从 ${master} 切换为 ${master_}, 断开所有 clients`)\n// for (const client of this.clients)\n// client.end()\n// await delay(3 * 1000)\n// }\n \n// console.log(new Date(), `gateway.state === ${this.state}, 停止 auto_switch_master`)\n// this.state = 'stopped'\n// }\n// }\n"]}
|