@milaboratories/pl-middle-layer 1.32.5 → 1.32.6
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/dist/debug/index.d.ts +0 -1
- package/dist/debug/index.d.ts.map +1 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1071 -1220
- package/dist/index.mjs.map +1 -1
- package/dist/pool/driver.d.ts +0 -2
- package/dist/pool/driver.d.ts.map +1 -1
- package/package.json +11 -12
- package/src/debug/index.ts +0 -2
- package/src/pool/driver.ts +57 -195
package/dist/pool/driver.d.ts
CHANGED
|
@@ -23,8 +23,6 @@ export declare class PFrameDriver implements InternalPFrameDriver {
|
|
|
23
23
|
private readonly pFrames;
|
|
24
24
|
private readonly pTables;
|
|
25
25
|
private readonly blobContentCache;
|
|
26
|
-
/** Limits concurrent requests to PFrame API to prevent deadlock with Node's IO threads */
|
|
27
|
-
private readonly concurrencyLimiter;
|
|
28
26
|
constructor(blobDriver: DownloadDriver, logger: MiLogger);
|
|
29
27
|
createPFrame(def: PFrameDef<PlTreeNodeAccessor | PColumnValues | DataInfo<PlTreeNodeAccessor>>, ctx: ComputableCtx): PFrameHandle;
|
|
30
28
|
createPTable(def: PTableDef<PColumn<PlTreeNodeAccessor | PColumnValues | DataInfo<PlTreeNodeAccessor>>>, ctx: ComputableCtx, signal?: AbortSignal): PTableHandle;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/pool/driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,yBAAyB,CAAC;AAEhF,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,4BAA4B,CAAC;AACzF,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EAEnB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,IAAI,eAAe,EAC/B,OAAO,EACP,SAAS,EAET,SAAS,EAIT,aAAa,EACb,QAAQ,EACT,MAAM,sBAAsB,CAAC;AAW9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/pool/driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,yBAAyB,CAAC;AAEhF,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,4BAA4B,CAAC;AACzF,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EAEnB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,IAAI,eAAe,EAC/B,OAAO,EACP,SAAS,EAET,SAAS,EAIT,aAAa,EACb,QAAQ,EACT,MAAM,sBAAsB,CAAC;AAW9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AA2J3D;;;GAGG;AACH,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,0BAA0B;IAC1B,YAAY,CACV,GAAG,EAAE,SAAS,CAAC,kBAAkB,GAAG,aAAa,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EACjF,GAAG,EAAE,aAAa,GACjB,YAAY,CAAC;IAEhB,0BAA0B;IAC1B,YAAY,CACV,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,kBAAkB,GAAG,aAAa,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAC1F,GAAG,EAAE,aAAa,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,YAAY,CAAC;IAEhB,mFAAmF;IACnF,kBAAkB,CAChB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,EAC7C,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAEvC,yFAAyF;IACzF,eAAe,CACb,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,EAC5B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAClC;AAED,qBAAa,YAAa,YAAW,oBAAoB;IAMrD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IANzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyD;IACjF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoD;IAC5E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA+B;gBAG7C,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,QAAQ;IAuE5B,YAAY,CACjB,GAAG,EAAE,SAAS,CAAC,kBAAkB,GAAG,aAAa,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EACjF,GAAG,EAAE,aAAa,GACjB,YAAY;IAiBR,YAAY,CACjB,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,kBAAkB,GAAG,aAAa,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAC1F,GAAG,EAAE,aAAa,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,YAAY;IAmBF,WAAW,CACtB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IA2BlB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAI9E,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAI9D,kBAAkB,CAC7B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,EAC7C,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,0BAA0B,CAAC;IA8BzB,eAAe,CAC1B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,EAC5B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,oBAAoB,CAAC;IAgBnB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAKpD,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAK1D,OAAO,CAClB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,MAAM,EAAE,EACvB,KAAK,CAAC,EAAE,UAAU,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC;CAI3B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milaboratories/pl-middle-layer",
|
|
3
|
-
"version": "1.32.
|
|
3
|
+
"version": "1.32.6",
|
|
4
4
|
"description": "Pl Middle Layer",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=20.16.0"
|
|
@@ -22,8 +22,7 @@
|
|
|
22
22
|
"keywords": [],
|
|
23
23
|
"license": "UNLICENSED",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@milaboratories/pframes-node": "
|
|
26
|
-
"@milaboratories/pframes-rs-node": "1.0.24",
|
|
25
|
+
"@milaboratories/pframes-rs-node": "1.0.26",
|
|
27
26
|
"canonicalize": "~2.1.0",
|
|
28
27
|
"denque": "^2.1.0",
|
|
29
28
|
"lru-cache": "^11.1.0",
|
|
@@ -34,20 +33,20 @@
|
|
|
34
33
|
"zod": "~3.23.8",
|
|
35
34
|
"@milaboratories/pl-http": "^1.1.2",
|
|
36
35
|
"@milaboratories/computable": "^2.4.2",
|
|
37
|
-
"@milaboratories/resolve-helper": "^1.1.0",
|
|
38
|
-
"@platforma-sdk/block-tools": "^2.5.32",
|
|
39
|
-
"@milaboratories/pl-drivers": "^1.5.38",
|
|
40
|
-
"@milaboratories/pl-model-common": "^1.13.1",
|
|
41
36
|
"@milaboratories/pl-client": "^2.7.14",
|
|
42
|
-
"@milaboratories/
|
|
37
|
+
"@milaboratories/resolve-helper": "^1.1.0",
|
|
38
|
+
"@milaboratories/pl-drivers": "^1.5.39",
|
|
39
|
+
"@platforma-sdk/block-tools": "^2.5.33",
|
|
40
|
+
"@milaboratories/pl-model-common": "^1.13.2",
|
|
43
41
|
"@milaboratories/pl-model-backend": "^1.0.3",
|
|
44
|
-
"@
|
|
42
|
+
"@milaboratories/pl-model-middle-layer": "^1.7.20",
|
|
43
|
+
"@platforma-sdk/model": "^1.27.8",
|
|
45
44
|
"@milaboratories/pl-tree": "^1.5.2",
|
|
45
|
+
"@platforma-sdk/workflow-tengo": "3.2.1",
|
|
46
46
|
"@milaboratories/ts-helpers": "^1.1.5",
|
|
47
|
+
"@milaboratories/pl-errors": "^1.0.3",
|
|
47
48
|
"@milaboratories/pl-config": "^1.4.5",
|
|
48
|
-
"@
|
|
49
|
-
"@milaboratories/pl-deployments": "^1.7.1",
|
|
50
|
-
"@milaboratories/pl-errors": "^1.0.3"
|
|
49
|
+
"@milaboratories/pl-deployments": "^1.7.1"
|
|
51
50
|
},
|
|
52
51
|
"devDependencies": {
|
|
53
52
|
"semver": "^7.6.3",
|
package/src/debug/index.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export type MlDebugFlags = {
|
|
2
2
|
logPFrameRequests: boolean;
|
|
3
|
-
usePFrameRs: boolean;
|
|
4
3
|
logTreeStats?: 'cumulative' | 'per-request';
|
|
5
4
|
dumpInitialTreeState: boolean;
|
|
6
5
|
};
|
|
@@ -10,7 +9,6 @@ export function getDebugFlags() {
|
|
|
10
9
|
if (flags) return flags;
|
|
11
10
|
flags = {
|
|
12
11
|
logPFrameRequests: process.env.MI_LOG_PFRAMES !== undefined,
|
|
13
|
-
usePFrameRs: process.env.MI_USE_PFRAMES_RS !== undefined,
|
|
14
12
|
dumpInitialTreeState: process.env.MI_DUMP_INITIAL_TREE_STATE !== undefined,
|
|
15
13
|
};
|
|
16
14
|
if (process.env.MI_LOG_TREE_STAT)
|
package/src/pool/driver.ts
CHANGED
|
@@ -44,11 +44,9 @@ import { createHash } from 'node:crypto';
|
|
|
44
44
|
import type { MiLogger } from '@milaboratories/ts-helpers';
|
|
45
45
|
import { assertNever } from '@milaboratories/ts-helpers';
|
|
46
46
|
import canonicalize from 'canonicalize';
|
|
47
|
-
import { PFrame } from '@milaboratories/pframes-node';
|
|
48
47
|
import { PFrame as PFrameRs } from '@milaboratories/pframes-rs-node';
|
|
49
48
|
import * as fsp from 'node:fs/promises';
|
|
50
49
|
import { LRUCache } from 'lru-cache';
|
|
51
|
-
import { ConcurrencyLimitingExecutor } from '@milaboratories/ts-helpers';
|
|
52
50
|
import { getDebugFlags } from '../debug';
|
|
53
51
|
|
|
54
52
|
function blobKey(res: ResourceInfo): string {
|
|
@@ -82,48 +80,16 @@ function migrateFilters(filters: PTableRecordFilter[]): PTableRecordFilter[] {
|
|
|
82
80
|
return filtersV2;
|
|
83
81
|
}
|
|
84
82
|
|
|
85
|
-
function pframesDispatch<T>(params: {
|
|
86
|
-
cppCallback: () => Promise<T>;
|
|
87
|
-
rustCallback: () => Promise<T>;
|
|
88
|
-
logger: MiLogger;
|
|
89
|
-
filters?: PTableRecordFilter[];
|
|
90
|
-
signal?: AbortSignal;
|
|
91
|
-
}): Promise<T> {
|
|
92
|
-
if (getDebugFlags().usePFrameRs) return params.rustCallback();
|
|
93
|
-
|
|
94
|
-
return params.rustCallback().catch((error: unknown) => {
|
|
95
|
-
if (params.signal?.aborted === false) {
|
|
96
|
-
if (error instanceof Error) {
|
|
97
|
-
params.logger.warn(`PFrames Rust failed, error: ${error.message}`);
|
|
98
|
-
}
|
|
99
|
-
return params.cppCallback();
|
|
100
|
-
} else {
|
|
101
|
-
throw error;
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
|
|
106
83
|
const bigintReplacer = (_: string, v: unknown) => (typeof v === 'bigint' ? v.toString() : v);
|
|
107
84
|
|
|
108
85
|
class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
|
|
109
|
-
public readonly rustPFrame: PFrameInternal.
|
|
86
|
+
public readonly rustPFrame: PFrameInternal.PFrameV4;
|
|
110
87
|
private readonly blobIdToResource = new Map<string, ResourceInfo>();
|
|
111
88
|
private readonly blobHandleComputables = new Map<
|
|
112
89
|
string,
|
|
113
90
|
ComputableStableDefined<LocalBlobHandleAndSize>
|
|
114
91
|
>();
|
|
115
92
|
|
|
116
|
-
private readonly createDataPFrame: () => PFrameInternal.PFrameV3;
|
|
117
|
-
public get disposableDataPFrame() {
|
|
118
|
-
const dataPFrame = this.createDataPFrame();
|
|
119
|
-
return {
|
|
120
|
-
dataPFrame,
|
|
121
|
-
[Symbol.dispose]: () => {
|
|
122
|
-
dataPFrame.dispose();
|
|
123
|
-
},
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
|
|
127
93
|
constructor(
|
|
128
94
|
private readonly blobDriver: DownloadDriver,
|
|
129
95
|
private readonly logger: MiLogger,
|
|
@@ -156,43 +122,19 @@ class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
|
|
|
156
122
|
)).values(),
|
|
157
123
|
];
|
|
158
124
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
pFrame.setColumnData(column.id, column.data);
|
|
166
|
-
}
|
|
167
|
-
return pFrame;
|
|
168
|
-
} catch (err: unknown) {
|
|
169
|
-
throw new Error(
|
|
170
|
-
`Rust PFrame creation failed, columns: ${JSON.stringify(distinctСolumns)}, error: ${err as Error}`,
|
|
171
|
-
);
|
|
172
|
-
}
|
|
173
|
-
})();
|
|
174
|
-
|
|
175
|
-
this.createDataPFrame = (): PFrameInternal.PFrameV3 => {
|
|
176
|
-
try {
|
|
177
|
-
const pFrame = getDebugFlags().logPFrameRequests ? new PFrame(logFunc) : new PFrame();
|
|
178
|
-
pFrame.setDataSource(this);
|
|
179
|
-
for (const column of distinctСolumns) {
|
|
180
|
-
try {
|
|
181
|
-
pFrame.addColumnSpec(column.id, column.spec);
|
|
182
|
-
pFrame.setColumnData(column.id, column.data);
|
|
183
|
-
} catch (err: unknown) {
|
|
184
|
-
throw new Error(
|
|
185
|
-
`Adding column ${column.id} to PFrame failed: ${err as Error}; Spec: ${JSON.stringify(column.spec)}, DataInfo: ${JSON.stringify(column.data)}.`,
|
|
186
|
-
);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
return pFrame;
|
|
190
|
-
} catch (err: unknown) {
|
|
191
|
-
throw new Error(
|
|
192
|
-
`Data PFrame creation failed, columns: ${JSON.stringify(distinctСolumns)}, error: ${err as Error}`,
|
|
193
|
-
);
|
|
125
|
+
try {
|
|
126
|
+
const pFrame = new PFrameRs(getDebugFlags().logPFrameRequests ? logFunc : undefined);
|
|
127
|
+
pFrame.setDataSource(this);
|
|
128
|
+
for (const column of distinctСolumns) {
|
|
129
|
+
pFrame.addColumnSpec(column.id, column.spec);
|
|
130
|
+
pFrame.setColumnData(column.id, column.data);
|
|
194
131
|
}
|
|
195
|
-
|
|
132
|
+
this.rustPFrame = pFrame;
|
|
133
|
+
} catch (err: unknown) {
|
|
134
|
+
throw new Error(
|
|
135
|
+
`Rust PFrame creation failed, columns: ${JSON.stringify(distinctСolumns)}, error: ${err as Error}`,
|
|
136
|
+
);
|
|
137
|
+
}
|
|
196
138
|
}
|
|
197
139
|
|
|
198
140
|
private getOrCreateComputableForBlob(blobId: string) {
|
|
@@ -291,8 +233,6 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
291
233
|
private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>;
|
|
292
234
|
private readonly pTables: RefCountResourcePool<FullPTableDef, PTableHolder>;
|
|
293
235
|
private readonly blobContentCache: LRUCache<string, Uint8Array>;
|
|
294
|
-
/** Limits concurrent requests to PFrame API to prevent deadlock with Node's IO threads */
|
|
295
|
-
private readonly concurrencyLimiter: ConcurrencyLimitingExecutor;
|
|
296
236
|
|
|
297
237
|
constructor(
|
|
298
238
|
private readonly blobDriver: DownloadDriver,
|
|
@@ -305,9 +245,6 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
305
245
|
});
|
|
306
246
|
this.blobContentCache = blobContentCache;
|
|
307
247
|
|
|
308
|
-
const concurrencyLimiter = new ConcurrencyLimitingExecutor(1);
|
|
309
|
-
this.concurrencyLimiter = concurrencyLimiter;
|
|
310
|
-
|
|
311
248
|
this.pFrames = new (class extends RefCountResourcePool<InternalPFrameData, PFrameHolder> {
|
|
312
249
|
constructor(
|
|
313
250
|
private readonly blobDriver: DownloadDriver,
|
|
@@ -346,41 +283,16 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
346
283
|
`PTable creation (pTableHandle = ${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`,
|
|
347
284
|
);
|
|
348
285
|
}
|
|
349
|
-
const tablePromise =
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
try {
|
|
360
|
-
return await concurrencyLimiter.run(async () => {
|
|
361
|
-
return await table.sort(params.def.sorting, params.signal);
|
|
362
|
-
});
|
|
363
|
-
} finally {
|
|
364
|
-
table.dispose();
|
|
365
|
-
}
|
|
366
|
-
});
|
|
367
|
-
},
|
|
368
|
-
rustCallback: () => {
|
|
369
|
-
return this.pFrames.getByKey(handle).rustPFrame.createTable({
|
|
370
|
-
src: joinEntryToInternal(params.def.src),
|
|
371
|
-
filters: migrateFilters(params.def.filters),
|
|
372
|
-
}, params.signal).then(async (table) => {
|
|
373
|
-
if (params.def.sorting.length === 0) return table;
|
|
374
|
-
try {
|
|
375
|
-
return await table.sort(params.def.sorting, params.signal);
|
|
376
|
-
} finally {
|
|
377
|
-
table.dispose();
|
|
378
|
-
}
|
|
379
|
-
});
|
|
380
|
-
},
|
|
381
|
-
logger,
|
|
382
|
-
filters: params.def.filters,
|
|
383
|
-
signal: params.signal,
|
|
286
|
+
const tablePromise = this.pFrames.getByKey(handle).rustPFrame.createTable({
|
|
287
|
+
src: joinEntryToInternal(params.def.src),
|
|
288
|
+
filters: migrateFilters(params.def.filters),
|
|
289
|
+
}, params.signal).then(async (table) => {
|
|
290
|
+
if (params.def.sorting.length === 0) return table;
|
|
291
|
+
try {
|
|
292
|
+
return await table.sort(params.def.sorting, params.signal);
|
|
293
|
+
} finally {
|
|
294
|
+
table.dispose();
|
|
295
|
+
}
|
|
384
296
|
});
|
|
385
297
|
return new PTableHolder(tablePromise);
|
|
386
298
|
}
|
|
@@ -486,65 +398,27 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
486
398
|
`Call calculateTableData, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,
|
|
487
399
|
);
|
|
488
400
|
}
|
|
489
|
-
return await
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
})
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
async () => await table.getData([...spec.keys()]),
|
|
511
|
-
);
|
|
512
|
-
return spec.map((spec, i) => ({
|
|
513
|
-
spec: spec,
|
|
514
|
-
data: data[i],
|
|
515
|
-
}));
|
|
516
|
-
} finally {
|
|
517
|
-
table.dispose();
|
|
518
|
-
}
|
|
519
|
-
});
|
|
520
|
-
},
|
|
521
|
-
rustCallback: async () => {
|
|
522
|
-
return await this.pFrames.getByKey(handle).rustPFrame.createTable({
|
|
523
|
-
src: joinEntryToInternal(request.src),
|
|
524
|
-
filters: migrateFilters(request.filters),
|
|
525
|
-
}, signal).then(async (table) => {
|
|
526
|
-
if (request.sorting.length === 0) return table;
|
|
527
|
-
try {
|
|
528
|
-
return await table.sort(request.sorting, signal);
|
|
529
|
-
} finally {
|
|
530
|
-
table.dispose();
|
|
531
|
-
}
|
|
532
|
-
}).then(async (table) => {
|
|
533
|
-
try {
|
|
534
|
-
const spec = table.getSpec();
|
|
535
|
-
const data = await table.getData([...spec.keys()]);
|
|
536
|
-
return spec.map((spec, i) => ({
|
|
537
|
-
spec: spec,
|
|
538
|
-
data: data[i],
|
|
539
|
-
}));
|
|
540
|
-
} finally {
|
|
541
|
-
table.dispose();
|
|
542
|
-
}
|
|
543
|
-
});
|
|
544
|
-
},
|
|
545
|
-
logger: this.logger,
|
|
546
|
-
filters: request.filters,
|
|
547
|
-
signal,
|
|
401
|
+
return await this.pFrames.getByKey(handle).rustPFrame.createTable({
|
|
402
|
+
src: joinEntryToInternal(request.src),
|
|
403
|
+
filters: migrateFilters(request.filters),
|
|
404
|
+
}, signal).then(async (table) => {
|
|
405
|
+
if (request.sorting.length === 0) return table;
|
|
406
|
+
try {
|
|
407
|
+
return await table.sort(request.sorting, signal);
|
|
408
|
+
} finally {
|
|
409
|
+
table.dispose();
|
|
410
|
+
}
|
|
411
|
+
}).then(async (table) => {
|
|
412
|
+
try {
|
|
413
|
+
const spec = table.getSpec();
|
|
414
|
+
const data = await table.getData([...spec.keys()]);
|
|
415
|
+
return spec.map((spec, i) => ({
|
|
416
|
+
spec: spec,
|
|
417
|
+
data: data[i],
|
|
418
|
+
}));
|
|
419
|
+
} finally {
|
|
420
|
+
table.dispose();
|
|
421
|
+
}
|
|
548
422
|
});
|
|
549
423
|
}
|
|
550
424
|
|
|
@@ -558,26 +432,10 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
558
432
|
`Call getUniqueValues, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,
|
|
559
433
|
);
|
|
560
434
|
}
|
|
561
|
-
return await
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
return await disposableDataPFrame.dataPFrame.getUniqueValues({
|
|
566
|
-
...request,
|
|
567
|
-
filters: migrateFilters(request.filters),
|
|
568
|
-
}, signal);
|
|
569
|
-
});
|
|
570
|
-
},
|
|
571
|
-
rustCallback: async () => {
|
|
572
|
-
return await this.pFrames.getByKey(handle).rustPFrame.getUniqueValues({
|
|
573
|
-
...request,
|
|
574
|
-
filters: migrateFilters(request.filters),
|
|
575
|
-
}, signal);
|
|
576
|
-
},
|
|
577
|
-
logger: this.logger,
|
|
578
|
-
filters: request.filters,
|
|
579
|
-
signal,
|
|
580
|
-
});
|
|
435
|
+
return await this.pFrames.getByKey(handle).rustPFrame.getUniqueValues({
|
|
436
|
+
...request,
|
|
437
|
+
filters: migrateFilters(request.filters),
|
|
438
|
+
}, signal);
|
|
581
439
|
}
|
|
582
440
|
|
|
583
441
|
//
|
|
@@ -600,19 +458,23 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
600
458
|
range?: TableRange,
|
|
601
459
|
): Promise<PTableVector[]> {
|
|
602
460
|
const pTable = await this.pTables.getByKey(handle).table;
|
|
603
|
-
return await
|
|
604
|
-
async () => await pTable.getData(columnIndices, range),
|
|
605
|
-
);
|
|
461
|
+
return await pTable.getData(columnIndices, range);
|
|
606
462
|
}
|
|
607
463
|
}
|
|
608
464
|
|
|
609
|
-
function joinEntryToInternal(entry: JoinEntry<PObjectId>): PFrameInternal.
|
|
465
|
+
function joinEntryToInternal(entry: JoinEntry<PObjectId>): PFrameInternal.JoinEntryV2 {
|
|
610
466
|
switch (entry.type) {
|
|
611
467
|
case 'column':
|
|
612
468
|
return {
|
|
613
469
|
type: 'column',
|
|
614
470
|
columnId: entry.column,
|
|
615
|
-
|
|
471
|
+
};
|
|
472
|
+
case 'slicedColumn':
|
|
473
|
+
return {
|
|
474
|
+
type: 'slicedColumn',
|
|
475
|
+
columnId: entry.column,
|
|
476
|
+
newId: entry.newId,
|
|
477
|
+
axisFilters: entry.axisFilters,
|
|
616
478
|
};
|
|
617
479
|
case 'inner':
|
|
618
480
|
case 'full':
|