dolphindb 3.1.27 → 3.1.28

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dolphindb",
3
3
  "description": "DolphinDB JavaScript API",
4
- "version": "3.1.27",
4
+ "version": "3.1.28",
5
5
  "type": "module",
6
6
  "main": "./index.js",
7
7
  "browser": "./browser.js",
@@ -29,7 +29,7 @@
29
29
  "JavaScript"
30
30
  ],
31
31
  "devDependencies": {
32
- "@types/node": "^25.0.0",
32
+ "@types/node": "^25.0.1",
33
33
  "eslint": "^9.39.1",
34
34
  "typescript": "^5.9.3"
35
35
  },
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_print,\n test_time,\n test_streaming,\n test_error,\n test_invoke,\n test_append_table\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"]}
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 \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"]}