@milaboratories/pframes-rs-node 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/export/addon-def.ts +27 -39
- package/export/addon.ts +6 -8
- package/export/dump.ts +37 -48
- package/export/export.ts +4 -6
- package/export/index.ts +2 -2
- package/export/node-pre-gyp.d.ts +1 -1
- package/export/tests/pframes.test.ts +279 -333
- package/export/tests/setup.ts +6 -15
- package/export/wrapper.ts +149 -221
- package/package.json +45 -43
- package/export_dist/addon-def.d.ts +0 -43
- package/export_dist/addon-def.d.ts.map +0 -1
- package/export_dist/addon.cjs +0 -24
- package/export_dist/addon.cjs.map +0 -1
- package/export_dist/addon.d.ts +0 -4
- package/export_dist/addon.d.ts.map +0 -1
- package/export_dist/addon.js +0 -21
- package/export_dist/addon.js.map +0 -1
- package/export_dist/dump.cjs +0 -115
- package/export_dist/dump.cjs.map +0 -1
- package/export_dist/dump.d.ts +0 -12
- package/export_dist/dump.d.ts.map +0 -1
- package/export_dist/dump.js +0 -107
- package/export_dist/dump.js.map +0 -1
- package/export_dist/export.cjs +0 -15
- package/export_dist/export.cjs.map +0 -1
- package/export_dist/export.d.ts +0 -3
- package/export_dist/export.d.ts.map +0 -1
- package/export_dist/export.js +0 -13
- package/export_dist/export.js.map +0 -1
- package/export_dist/index.cjs +0 -13
- package/export_dist/index.cjs.map +0 -1
- package/export_dist/index.d.ts +0 -3
- package/export_dist/index.d.ts.map +0 -1
- package/export_dist/index.js +0 -3
- package/export_dist/index.js.map +0 -1
- package/export_dist/tests/pframes.test.d.ts +0 -2
- package/export_dist/tests/pframes.test.d.ts.map +0 -1
- package/export_dist/tests/setup.d.ts +0 -2
- package/export_dist/tests/setup.d.ts.map +0 -1
- package/export_dist/wrapper.cjs +0 -542
- package/export_dist/wrapper.cjs.map +0 -1
- package/export_dist/wrapper.d.ts +0 -54
- package/export_dist/wrapper.d.ts.map +0 -1
- package/export_dist/wrapper.js +0 -539
- package/export_dist/wrapper.js.map +0 -1
package/export/wrapper.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ulid } from
|
|
1
|
+
import { ulid } from "ulid";
|
|
2
2
|
import {
|
|
3
3
|
AbortError,
|
|
4
4
|
type PColumnInfo,
|
|
@@ -15,15 +15,13 @@ import {
|
|
|
15
15
|
type UniqueValuesRequest,
|
|
16
16
|
type UniqueValuesResponse,
|
|
17
17
|
type QueryData,
|
|
18
|
-
type AxisId,
|
|
19
|
-
type PColumnIdAndSpec,
|
|
20
18
|
ensureError,
|
|
21
|
-
isAbortError
|
|
22
|
-
} from
|
|
23
|
-
import type { PFrameInternal } from
|
|
24
|
-
import { PerfTimer } from
|
|
25
|
-
import type { NodeFrameSymbol, NodeTableSymbol } from
|
|
26
|
-
import { AddonSymbol } from
|
|
19
|
+
isAbortError,
|
|
20
|
+
} from "@milaboratories/pl-model-common";
|
|
21
|
+
import type { PFrameInternal } from "@milaboratories/pl-model-middle-layer";
|
|
22
|
+
import { PerfTimer } from "@milaboratories/helpers";
|
|
23
|
+
import type { NodeFrameSymbol, NodeTableSymbol } from "./addon-def";
|
|
24
|
+
import { AddonSymbol } from "./addon";
|
|
27
25
|
import {
|
|
28
26
|
dump,
|
|
29
27
|
hashColumnId,
|
|
@@ -31,8 +29,8 @@ import {
|
|
|
31
29
|
hashFilterColumnId,
|
|
32
30
|
hashUniqueValuesRequestColumnId,
|
|
33
31
|
hashSortingColumnId,
|
|
34
|
-
hashCreateTableRequestColumnId
|
|
35
|
-
} from
|
|
32
|
+
hashCreateTableRequestColumnId,
|
|
33
|
+
} from "./dump";
|
|
36
34
|
|
|
37
35
|
export async function pprofDump(): Promise<Uint8Array> {
|
|
38
36
|
try {
|
|
@@ -63,21 +61,21 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
63
61
|
[`${this.id}`, `${this.id}.json`],
|
|
64
62
|
{
|
|
65
63
|
timeStamp: Date.now(),
|
|
66
|
-
requestType:
|
|
64
|
+
requestType: "create",
|
|
67
65
|
},
|
|
68
|
-
this.#logger
|
|
66
|
+
this.#logger,
|
|
69
67
|
);
|
|
70
68
|
|
|
71
69
|
try {
|
|
72
70
|
this.#frame = AddonSymbol.pFrameCreate(options.spillPath, options.logger);
|
|
73
|
-
this.#logger(
|
|
71
|
+
this.#logger("info", `PFrame ${this.id} created`);
|
|
74
72
|
} catch (err: unknown) {
|
|
75
73
|
const error = new PFrameError(`PFrame creation failed`);
|
|
76
74
|
error.cause = new Error(
|
|
77
75
|
`PFrame ${this.id} creation failed, ` +
|
|
78
76
|
`logger: ${this.#logger?.toString()}, ` +
|
|
79
77
|
`error:\n` +
|
|
80
|
-
`${ensureError(err)}
|
|
78
|
+
`${ensureError(err)}`,
|
|
81
79
|
);
|
|
82
80
|
throw error;
|
|
83
81
|
}
|
|
@@ -89,21 +87,21 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
89
87
|
[`${this.id}`, `${requestId}.json`],
|
|
90
88
|
{
|
|
91
89
|
timeStamp: Date.now(),
|
|
92
|
-
requestType:
|
|
90
|
+
requestType: "addColumnSpec",
|
|
93
91
|
requestData: {
|
|
94
92
|
columnId: hashColumnId(columnId),
|
|
95
|
-
columnSpec
|
|
96
|
-
}
|
|
93
|
+
columnSpec,
|
|
94
|
+
},
|
|
97
95
|
},
|
|
98
|
-
this.#logger
|
|
96
|
+
this.#logger,
|
|
99
97
|
);
|
|
100
98
|
|
|
101
99
|
dump(
|
|
102
100
|
[`${this.id}`, `data`, `${hashColumnId(columnId)}.spec`],
|
|
103
101
|
{
|
|
104
|
-
...columnSpec
|
|
102
|
+
...columnSpec,
|
|
105
103
|
},
|
|
106
|
-
this.#logger
|
|
104
|
+
this.#logger,
|
|
107
105
|
);
|
|
108
106
|
|
|
109
107
|
try {
|
|
@@ -115,7 +113,7 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
115
113
|
`columnId: ${JSON.stringify(columnId)}, ` +
|
|
116
114
|
`columnSpec: ${JSON.stringify(columnSpec)}, ` +
|
|
117
115
|
`error:\n` +
|
|
118
|
-
`${ensureError(err)}
|
|
116
|
+
`${ensureError(err)}`,
|
|
119
117
|
);
|
|
120
118
|
throw error;
|
|
121
119
|
}
|
|
@@ -127,65 +125,61 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
127
125
|
[`${this.id}`, `${requestId}.json`],
|
|
128
126
|
{
|
|
129
127
|
timeStamp: Date.now(),
|
|
130
|
-
requestType:
|
|
128
|
+
requestType: "setDataSource",
|
|
131
129
|
},
|
|
132
|
-
this.#logger
|
|
130
|
+
this.#logger,
|
|
133
131
|
);
|
|
134
132
|
|
|
135
133
|
const wrappedDataSource = {
|
|
136
|
-
preloadBlob: async (
|
|
137
|
-
blobIds: PFrameInternal.PFrameBlobId[]
|
|
138
|
-
): Promise<void> => {
|
|
134
|
+
preloadBlob: async (blobIds: PFrameInternal.PFrameBlobId[]): Promise<void> => {
|
|
139
135
|
const requestId = ulid();
|
|
140
136
|
dump(
|
|
141
137
|
[`${this.id}`, `${requestId}.json`],
|
|
142
138
|
{
|
|
143
139
|
timeStamp: Date.now(),
|
|
144
|
-
requestType:
|
|
140
|
+
requestType: "preloadBlob",
|
|
145
141
|
requestData: {
|
|
146
|
-
blobIds
|
|
147
|
-
}
|
|
142
|
+
blobIds,
|
|
143
|
+
},
|
|
148
144
|
},
|
|
149
|
-
this.#logger
|
|
145
|
+
this.#logger,
|
|
150
146
|
);
|
|
151
147
|
|
|
152
148
|
this.#logger(
|
|
153
|
-
|
|
154
|
-
`PFrame ${this.id} preloadBlob started, blobIds: ${JSON.stringify(blobIds)}
|
|
149
|
+
"info",
|
|
150
|
+
`PFrame ${this.id} preloadBlob started, blobIds: ${JSON.stringify(blobIds)}`,
|
|
155
151
|
);
|
|
156
152
|
const timer = PerfTimer.start();
|
|
157
153
|
try {
|
|
158
154
|
return await dataSource.preloadBlob(blobIds);
|
|
159
155
|
} finally {
|
|
160
156
|
this.#logger(
|
|
161
|
-
|
|
162
|
-
`PFrame ${this.id} preloadBlob finished, took ${timer.elapsed()} (${blobIds.length} blobs)
|
|
157
|
+
"info",
|
|
158
|
+
`PFrame ${this.id} preloadBlob finished, took ${timer.elapsed()} (${blobIds.length} blobs)`,
|
|
163
159
|
);
|
|
164
160
|
}
|
|
165
161
|
},
|
|
166
|
-
resolveBlobContent: async (
|
|
167
|
-
blobId: PFrameInternal.PFrameBlobId
|
|
168
|
-
): Promise<Uint8Array> => {
|
|
162
|
+
resolveBlobContent: async (blobId: PFrameInternal.PFrameBlobId): Promise<Uint8Array> => {
|
|
169
163
|
const requestId = ulid();
|
|
170
164
|
dump(
|
|
171
165
|
[`${this.id}`, `${requestId}.json`],
|
|
172
166
|
{
|
|
173
167
|
timeStamp: Date.now(),
|
|
174
|
-
requestType:
|
|
168
|
+
requestType: "resolveBlobContent",
|
|
175
169
|
requestData: {
|
|
176
|
-
blobId
|
|
177
|
-
}
|
|
170
|
+
blobId,
|
|
171
|
+
},
|
|
178
172
|
},
|
|
179
|
-
this.#logger
|
|
173
|
+
this.#logger,
|
|
180
174
|
);
|
|
181
175
|
|
|
182
176
|
const blob = await dataSource.resolveBlobContent(blobId);
|
|
183
|
-
this.#logger(
|
|
177
|
+
this.#logger("info", `PFrame ${this.id} resolved blob ${blobId}`);
|
|
184
178
|
dump([`${this.id}`, `data`, `${blobId}`], blob, this.#logger);
|
|
185
179
|
|
|
186
180
|
return blob;
|
|
187
181
|
},
|
|
188
|
-
parquetServer: dataSource.parquetServer
|
|
182
|
+
parquetServer: dataSource.parquetServer,
|
|
189
183
|
};
|
|
190
184
|
|
|
191
185
|
try {
|
|
@@ -196,7 +190,7 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
196
190
|
`PFrame ${this.id} setDataSource request ${requestId} failed, ` +
|
|
197
191
|
`dataSource: ${dataSource.toString()}, ` +
|
|
198
192
|
`error:\n` +
|
|
199
|
-
`${ensureError(err)}
|
|
193
|
+
`${ensureError(err)}`,
|
|
200
194
|
);
|
|
201
195
|
throw error;
|
|
202
196
|
}
|
|
@@ -207,38 +201,33 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
207
201
|
dataInfo: PFrameInternal.DataInfo<PFrameInternal.PFrameBlobId>,
|
|
208
202
|
ops?: {
|
|
209
203
|
signal?: AbortSignal;
|
|
210
|
-
}
|
|
204
|
+
},
|
|
211
205
|
): Promise<void> {
|
|
212
206
|
const requestId = ulid();
|
|
213
207
|
dump(
|
|
214
208
|
[`${this.id}`, `${requestId}.json`],
|
|
215
209
|
{
|
|
216
210
|
timeStamp: Date.now(),
|
|
217
|
-
requestType:
|
|
211
|
+
requestType: "setColumnData",
|
|
218
212
|
requestData: {
|
|
219
213
|
columnId: hashColumnId(columnId),
|
|
220
|
-
dataInfo
|
|
221
|
-
}
|
|
214
|
+
dataInfo,
|
|
215
|
+
},
|
|
222
216
|
},
|
|
223
|
-
this.#logger
|
|
217
|
+
this.#logger,
|
|
224
218
|
);
|
|
225
219
|
|
|
226
220
|
dump(
|
|
227
221
|
[`${this.id}`, `data`, `${hashColumnId(columnId)}.datainfo`],
|
|
228
222
|
{
|
|
229
|
-
...dataInfo
|
|
223
|
+
...dataInfo,
|
|
230
224
|
},
|
|
231
|
-
this.#logger
|
|
225
|
+
this.#logger,
|
|
232
226
|
);
|
|
233
227
|
|
|
234
228
|
try {
|
|
235
229
|
ops?.signal?.throwIfAborted();
|
|
236
|
-
return AddonSymbol.pFrameSetColumnData(
|
|
237
|
-
this.#frame,
|
|
238
|
-
columnId,
|
|
239
|
-
dataInfo,
|
|
240
|
-
ops?.signal
|
|
241
|
-
);
|
|
230
|
+
return AddonSymbol.pFrameSetColumnData(this.#frame, columnId, dataInfo, ops?.signal);
|
|
242
231
|
} catch (err: unknown) {
|
|
243
232
|
const error = new PFrameError(`PFrame setColumnData request failed`);
|
|
244
233
|
error.cause = new Error(
|
|
@@ -246,7 +235,7 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
246
235
|
`columnId: ${JSON.stringify(columnId)}, ` +
|
|
247
236
|
`dataInfo: ${JSON.stringify(dataInfo)}, ` +
|
|
248
237
|
`error:\n` +
|
|
249
|
-
`${ensureError(err)}
|
|
238
|
+
`${ensureError(err)}`,
|
|
250
239
|
);
|
|
251
240
|
throw error;
|
|
252
241
|
}
|
|
@@ -258,20 +247,20 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
258
247
|
[`${this.id}`, `${requestId}.json`],
|
|
259
248
|
{
|
|
260
249
|
timeStamp: Date.now(),
|
|
261
|
-
requestType:
|
|
250
|
+
requestType: "dispose",
|
|
262
251
|
},
|
|
263
|
-
this.#logger
|
|
252
|
+
this.#logger,
|
|
264
253
|
);
|
|
265
254
|
|
|
266
255
|
try {
|
|
267
256
|
AddonSymbol.pFrameDispose(this.#frame);
|
|
268
|
-
this.#logger(
|
|
257
|
+
this.#logger("info", `PFrame ${this.id} disposed`);
|
|
269
258
|
} catch (err: unknown) {
|
|
270
259
|
const error = new PFrameError(`PFrame dispose request failed`);
|
|
271
260
|
error.cause = new Error(
|
|
272
261
|
`PFrame ${this.id} dispose request ${requestId} failed, ` +
|
|
273
262
|
`error:\n` +
|
|
274
|
-
`${ensureError(err)}
|
|
263
|
+
`${ensureError(err)}`,
|
|
275
264
|
);
|
|
276
265
|
throw error;
|
|
277
266
|
}
|
|
@@ -282,17 +271,17 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
282
271
|
}
|
|
283
272
|
|
|
284
273
|
async findColumns(
|
|
285
|
-
request: PFrameInternal.FindColumnsRequest
|
|
274
|
+
request: PFrameInternal.FindColumnsRequest,
|
|
286
275
|
): Promise<PFrameInternal.FindColumnsResponse> {
|
|
287
276
|
const requestId = ulid();
|
|
288
277
|
dump(
|
|
289
278
|
[`${this.id}`, `${requestId}.json`],
|
|
290
279
|
{
|
|
291
280
|
timeStamp: Date.now(),
|
|
292
|
-
requestType:
|
|
293
|
-
requestData: request
|
|
281
|
+
requestType: "findColumns",
|
|
282
|
+
requestData: request,
|
|
294
283
|
},
|
|
295
|
-
this.#logger
|
|
284
|
+
this.#logger,
|
|
296
285
|
);
|
|
297
286
|
|
|
298
287
|
const timer = PerfTimer.start();
|
|
@@ -304,29 +293,29 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
304
293
|
`PFrame ${this.id} findColumns request ${requestId} failed, ` +
|
|
305
294
|
`request: ${JSON.stringify(request)}, ` +
|
|
306
295
|
`error:\n` +
|
|
307
|
-
`${ensureError(err)}
|
|
296
|
+
`${ensureError(err)}`,
|
|
308
297
|
);
|
|
309
298
|
throw error;
|
|
310
299
|
} finally {
|
|
311
300
|
this.#logger(
|
|
312
|
-
|
|
313
|
-
`PFrame ${this.id} findColumns request ${requestId} took ${timer.elapsed()}
|
|
301
|
+
"info",
|
|
302
|
+
`PFrame ${this.id} findColumns request ${requestId} took ${timer.elapsed()}`,
|
|
314
303
|
);
|
|
315
304
|
}
|
|
316
305
|
}
|
|
317
306
|
|
|
318
307
|
async deleteColumn(
|
|
319
|
-
request: PFrameInternal.DeleteColumnFromColumnsRequest
|
|
308
|
+
request: PFrameInternal.DeleteColumnFromColumnsRequest,
|
|
320
309
|
): Promise<PFrameInternal.DeleteColumnFromColumnsResponse> {
|
|
321
310
|
const requestId = ulid();
|
|
322
311
|
dump(
|
|
323
312
|
[`${this.id}`, `${requestId}.json`],
|
|
324
313
|
{
|
|
325
314
|
timeStamp: Date.now(),
|
|
326
|
-
requestType:
|
|
327
|
-
requestData: request
|
|
315
|
+
requestType: "deleteColumn",
|
|
316
|
+
requestData: request,
|
|
328
317
|
},
|
|
329
|
-
this.#logger
|
|
318
|
+
this.#logger,
|
|
330
319
|
);
|
|
331
320
|
|
|
332
321
|
const timer = PerfTimer.start();
|
|
@@ -338,13 +327,13 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
338
327
|
`PFrame ${this.id} deleteColumn request ${requestId} failed, ` +
|
|
339
328
|
`request: ${JSON.stringify(request)}, ` +
|
|
340
329
|
`error:\n` +
|
|
341
|
-
`${ensureError(err)}
|
|
330
|
+
`${ensureError(err)}`,
|
|
342
331
|
);
|
|
343
332
|
throw error;
|
|
344
333
|
} finally {
|
|
345
334
|
this.#logger(
|
|
346
|
-
|
|
347
|
-
`PFrame ${this.id} deleteColumn request ${requestId} took ${timer.elapsed()}
|
|
335
|
+
"info",
|
|
336
|
+
`PFrame ${this.id} deleteColumn request ${requestId} took ${timer.elapsed()}`,
|
|
348
337
|
);
|
|
349
338
|
}
|
|
350
339
|
}
|
|
@@ -355,12 +344,12 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
355
344
|
[`${this.id}`, `${requestId}.json`],
|
|
356
345
|
{
|
|
357
346
|
timeStamp: Date.now(),
|
|
358
|
-
requestType:
|
|
347
|
+
requestType: "getColumnSpec",
|
|
359
348
|
requestData: {
|
|
360
|
-
columnId: hashColumnId(columnId)
|
|
361
|
-
}
|
|
349
|
+
columnId: hashColumnId(columnId),
|
|
350
|
+
},
|
|
362
351
|
},
|
|
363
|
-
this.#logger
|
|
352
|
+
this.#logger,
|
|
364
353
|
);
|
|
365
354
|
|
|
366
355
|
try {
|
|
@@ -371,7 +360,7 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
371
360
|
`PFrame ${this.id} getColumnSpec request ${requestId} failed, ` +
|
|
372
361
|
`columnId: ${JSON.stringify(columnId)}, ` +
|
|
373
362
|
`error:\n` +
|
|
374
|
-
`${ensureError(err)}
|
|
363
|
+
`${ensureError(err)}`,
|
|
375
364
|
);
|
|
376
365
|
throw error;
|
|
377
366
|
}
|
|
@@ -383,9 +372,9 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
383
372
|
[`${this.id}`, `${requestId}.json`],
|
|
384
373
|
{
|
|
385
374
|
timeStamp: Date.now(),
|
|
386
|
-
requestType:
|
|
375
|
+
requestType: "listColumns",
|
|
387
376
|
},
|
|
388
|
-
this.#logger
|
|
377
|
+
this.#logger,
|
|
389
378
|
);
|
|
390
379
|
|
|
391
380
|
try {
|
|
@@ -395,7 +384,7 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
395
384
|
error.cause = new Error(
|
|
396
385
|
`PFrame ${this.id} listColumns request ${requestId} failed, ` +
|
|
397
386
|
`error:\n` +
|
|
398
|
-
`${ensureError(err)}
|
|
387
|
+
`${ensureError(err)}`,
|
|
399
388
|
);
|
|
400
389
|
throw error;
|
|
401
390
|
}
|
|
@@ -403,27 +392,19 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
403
392
|
|
|
404
393
|
createTable(
|
|
405
394
|
requestId: PFrameInternal.PTableId,
|
|
406
|
-
request: PFrameInternal.CreateTableRequestV4
|
|
395
|
+
request: PFrameInternal.CreateTableRequestV4,
|
|
407
396
|
): PTable {
|
|
408
397
|
const dumpData = {
|
|
409
398
|
timeStamp: Date.now(),
|
|
410
|
-
requestType:
|
|
411
|
-
requestData: hashCreateTableRequestColumnId(request)
|
|
399
|
+
requestType: "createTable",
|
|
400
|
+
requestData: hashCreateTableRequestColumnId(request),
|
|
412
401
|
};
|
|
413
402
|
dump([`${this.id}`, `${requestId}.json`], dumpData, this.#logger);
|
|
414
|
-
dump(
|
|
415
|
-
[`${this.id}`, `${requestId}`, `${requestId}.json`],
|
|
416
|
-
dumpData,
|
|
417
|
-
this.#logger
|
|
418
|
-
);
|
|
403
|
+
dump([`${this.id}`, `${requestId}`, `${requestId}.json`], dumpData, this.#logger);
|
|
419
404
|
|
|
420
405
|
const timer = PerfTimer.start();
|
|
421
406
|
try {
|
|
422
|
-
const boxed = AddonSymbol.pFrameCreateTable(
|
|
423
|
-
this.#frame,
|
|
424
|
-
requestId,
|
|
425
|
-
request
|
|
426
|
-
);
|
|
407
|
+
const boxed = AddonSymbol.pFrameCreateTable(this.#frame, requestId, request);
|
|
427
408
|
return new PTable(this, requestId, boxed, this.#logger);
|
|
428
409
|
} catch (err: unknown) {
|
|
429
410
|
const error = new PFrameError(`PFrame createTable request failed`);
|
|
@@ -431,49 +412,40 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
431
412
|
`PFrame ${this.id} createTable request ${requestId} failed, ` +
|
|
432
413
|
`request: ${JSON.stringify(request)}, ` +
|
|
433
414
|
`error:\n` +
|
|
434
|
-
`${ensureError(err)}
|
|
415
|
+
`${ensureError(err)}`,
|
|
435
416
|
);
|
|
436
417
|
throw error;
|
|
437
418
|
} finally {
|
|
438
419
|
this.#logger(
|
|
439
|
-
|
|
440
|
-
`PFrame ${this.id} createTable request ${requestId} took ${timer.elapsed()}
|
|
420
|
+
"info",
|
|
421
|
+
`PFrame ${this.id} createTable request ${requestId} took ${timer.elapsed()}`,
|
|
441
422
|
);
|
|
442
423
|
}
|
|
443
424
|
}
|
|
444
425
|
|
|
445
|
-
|
|
426
|
+
createTableV2(
|
|
446
427
|
requestId: PFrameInternal.PTableId,
|
|
447
428
|
request: {
|
|
448
|
-
tableSpec:
|
|
449
|
-
axes: AxisId[];
|
|
450
|
-
columns: PColumnIdAndSpec[];
|
|
451
|
-
};
|
|
429
|
+
tableSpec: PTableColumnSpec[];
|
|
452
430
|
dataQuery: QueryData;
|
|
453
|
-
}
|
|
431
|
+
},
|
|
454
432
|
): PTable {
|
|
455
433
|
const timer = PerfTimer.start();
|
|
456
434
|
try {
|
|
457
|
-
const boxed = AddonSymbol.
|
|
458
|
-
this.#frame,
|
|
459
|
-
requestId,
|
|
460
|
-
request
|
|
461
|
-
);
|
|
435
|
+
const boxed = AddonSymbol.pFrameCreateTableV2(this.#frame, requestId, request);
|
|
462
436
|
return new PTable(this, requestId, boxed, this.#logger);
|
|
463
437
|
} catch (err: unknown) {
|
|
464
|
-
const error = new PFrameError(
|
|
465
|
-
`PFrame createTableByDataQuery request failed`
|
|
466
|
-
);
|
|
438
|
+
const error = new PFrameError(`PFrame createTableV2 request failed`);
|
|
467
439
|
error.cause = new Error(
|
|
468
|
-
`PFrame ${this.id}
|
|
440
|
+
`PFrame ${this.id} createTableV2 request ${requestId} failed, ` +
|
|
469
441
|
`error:\n` +
|
|
470
|
-
`${ensureError(err)}
|
|
442
|
+
`${ensureError(err)}`,
|
|
471
443
|
);
|
|
472
444
|
throw error;
|
|
473
445
|
} finally {
|
|
474
446
|
this.#logger(
|
|
475
|
-
|
|
476
|
-
`PFrame ${this.id}
|
|
447
|
+
"info",
|
|
448
|
+
`PFrame ${this.id} createTableV2 request ${requestId} took ${timer.elapsed()}`,
|
|
477
449
|
);
|
|
478
450
|
}
|
|
479
451
|
}
|
|
@@ -482,50 +454,40 @@ export class PFrame implements PFrameInternal.PFrameV13 {
|
|
|
482
454
|
request: UniqueValuesRequest,
|
|
483
455
|
ops?: {
|
|
484
456
|
signal?: AbortSignal;
|
|
485
|
-
}
|
|
457
|
+
},
|
|
486
458
|
): Promise<UniqueValuesResponse> {
|
|
487
459
|
const requestId = ulid() as PFrameInternal.PTableId;
|
|
488
460
|
dump(
|
|
489
461
|
[`${this.id}`, `${requestId}.json`],
|
|
490
462
|
{
|
|
491
463
|
timeStamp: Date.now(),
|
|
492
|
-
requestType:
|
|
493
|
-
requestData: hashUniqueValuesRequestColumnId(request)
|
|
464
|
+
requestType: "getUniqueValues",
|
|
465
|
+
requestData: hashUniqueValuesRequestColumnId(request),
|
|
494
466
|
},
|
|
495
|
-
this.#logger
|
|
467
|
+
this.#logger,
|
|
496
468
|
);
|
|
497
469
|
|
|
498
|
-
this.#logger(
|
|
499
|
-
'info',
|
|
500
|
-
`PFrame ${this.id} getUniqueValues request ${requestId} started`
|
|
501
|
-
);
|
|
470
|
+
this.#logger("info", `PFrame ${this.id} getUniqueValues request ${requestId} started`);
|
|
502
471
|
const timer = PerfTimer.start();
|
|
503
472
|
try {
|
|
504
473
|
ops?.signal?.throwIfAborted();
|
|
505
|
-
return await AddonSymbol.pFrameGetUniqueValues(
|
|
506
|
-
this.#frame,
|
|
507
|
-
requestId,
|
|
508
|
-
request,
|
|
509
|
-
ops?.signal
|
|
510
|
-
);
|
|
474
|
+
return await AddonSymbol.pFrameGetUniqueValues(this.#frame, requestId, request, ops?.signal);
|
|
511
475
|
} catch (err: unknown) {
|
|
512
476
|
if (isAbortError(err)) {
|
|
513
|
-
throw new AbortError(
|
|
514
|
-
`PFrame ${this.id} getUniqueValues request ${requestId} cancelled`
|
|
515
|
-
);
|
|
477
|
+
throw new AbortError(`PFrame ${this.id} getUniqueValues request ${requestId} cancelled`);
|
|
516
478
|
}
|
|
517
479
|
const error = new PFrameError(`PFrame getUniqueValues request failed`);
|
|
518
480
|
error.cause = new Error(
|
|
519
481
|
`PFrame ${this.id} getUniqueValues request ${requestId} failed, ` +
|
|
520
482
|
`request: ${JSON.stringify(request)}, ` +
|
|
521
483
|
`error:\n` +
|
|
522
|
-
`${ensureError(err)}
|
|
484
|
+
`${ensureError(err)}`,
|
|
523
485
|
);
|
|
524
486
|
throw error;
|
|
525
487
|
} finally {
|
|
526
488
|
this.#logger(
|
|
527
|
-
|
|
528
|
-
`PFrame ${this.id} getUniqueValues request ${requestId} finished, took ${timer.elapsed()}
|
|
489
|
+
"info",
|
|
490
|
+
`PFrame ${this.id} getUniqueValues request ${requestId} finished, took ${timer.elapsed()}`,
|
|
529
491
|
);
|
|
530
492
|
}
|
|
531
493
|
}
|
|
@@ -543,17 +505,12 @@ class PTable implements PFrameInternal.PTableV8 {
|
|
|
543
505
|
|
|
544
506
|
readonly #logger: PFrameInternal.Logger;
|
|
545
507
|
|
|
546
|
-
constructor(
|
|
547
|
-
frame: PFrame,
|
|
548
|
-
id: string,
|
|
549
|
-
table: NodeTableSymbol,
|
|
550
|
-
logger: PFrameInternal.Logger
|
|
551
|
-
) {
|
|
508
|
+
constructor(frame: PFrame, id: string, table: NodeTableSymbol, logger: PFrameInternal.Logger) {
|
|
552
509
|
this.#frame = frame;
|
|
553
510
|
this.#table = table;
|
|
554
511
|
this.#id = id;
|
|
555
512
|
this.#logger = logger;
|
|
556
|
-
this.#logger(
|
|
513
|
+
this.#logger("info", `PTable ${this.id} created`);
|
|
557
514
|
}
|
|
558
515
|
|
|
559
516
|
getSpec(): PTableColumnSpec[] {
|
|
@@ -562,9 +519,9 @@ class PTable implements PFrameInternal.PTableV8 {
|
|
|
562
519
|
[`${this.#frame.id}`, `${this.id}`, `${requestId}.json`],
|
|
563
520
|
{
|
|
564
521
|
timeStamp: Date.now(),
|
|
565
|
-
requestType:
|
|
522
|
+
requestType: "getSpec",
|
|
566
523
|
},
|
|
567
|
-
this.#logger
|
|
524
|
+
this.#logger,
|
|
568
525
|
);
|
|
569
526
|
|
|
570
527
|
try {
|
|
@@ -574,7 +531,7 @@ class PTable implements PFrameInternal.PTableV8 {
|
|
|
574
531
|
error.cause = new Error(
|
|
575
532
|
`PTable ${this.id} getSpec request ${requestId} failed, ` +
|
|
576
533
|
`error:\n` +
|
|
577
|
-
`${ensureError(err)}
|
|
534
|
+
`${ensureError(err)}`,
|
|
578
535
|
);
|
|
579
536
|
throw error;
|
|
580
537
|
}
|
|
@@ -586,12 +543,12 @@ class PTable implements PFrameInternal.PTableV8 {
|
|
|
586
543
|
[`${this.#frame.id}`, `${this.id}`, `${requestId}.json`],
|
|
587
544
|
{
|
|
588
545
|
timeStamp: Date.now(),
|
|
589
|
-
requestType:
|
|
546
|
+
requestType: "getColumnIndices",
|
|
590
547
|
requestData: {
|
|
591
|
-
columnIds: columnIds.map(hashTableColumnId)
|
|
592
|
-
}
|
|
548
|
+
columnIds: columnIds.map(hashTableColumnId),
|
|
549
|
+
},
|
|
593
550
|
},
|
|
594
|
-
this.#logger
|
|
551
|
+
this.#logger,
|
|
595
552
|
);
|
|
596
553
|
|
|
597
554
|
try {
|
|
@@ -602,7 +559,7 @@ class PTable implements PFrameInternal.PTableV8 {
|
|
|
602
559
|
`PTable ${this.id} getColumnIndices request ${requestId} failed, ` +
|
|
603
560
|
`columnIds: ${JSON.stringify(columnIds)}, ` +
|
|
604
561
|
`error:\n` +
|
|
605
|
-
`${ensureError(err)}
|
|
562
|
+
`${ensureError(err)}`,
|
|
606
563
|
);
|
|
607
564
|
throw error;
|
|
608
565
|
}
|
|
@@ -614,9 +571,9 @@ class PTable implements PFrameInternal.PTableV8 {
|
|
|
614
571
|
[`${this.#frame.id}`, `${this.id}`, `${requestId}.json`],
|
|
615
572
|
{
|
|
616
573
|
timeStamp: Date.now(),
|
|
617
|
-
requestType:
|
|
574
|
+
requestType: "getFootprint",
|
|
618
575
|
},
|
|
619
|
-
this.#logger
|
|
576
|
+
this.#logger,
|
|
620
577
|
);
|
|
621
578
|
|
|
622
579
|
try {
|
|
@@ -624,15 +581,13 @@ class PTable implements PFrameInternal.PTableV8 {
|
|
|
624
581
|
return await AddonSymbol.pTableGetFootprint(this.#table, ops?.signal);
|
|
625
582
|
} catch (err: unknown) {
|
|
626
583
|
if (!isAbortError(err)) {
|
|
627
|
-
throw new AbortError(
|
|
628
|
-
`PTable ${this.id} getFootprint request ${requestId} cancelled`
|
|
629
|
-
);
|
|
584
|
+
throw new AbortError(`PTable ${this.id} getFootprint request ${requestId} cancelled`);
|
|
630
585
|
}
|
|
631
586
|
const error = new PFrameError(`PTable getFootprint request failed`);
|
|
632
587
|
error.cause = new Error(
|
|
633
588
|
`PTable ${this.id} getFootprint request ${requestId} failed, ` +
|
|
634
589
|
`error:\n` +
|
|
635
|
-
`${ensureError(err)}
|
|
590
|
+
`${ensureError(err)}`,
|
|
636
591
|
);
|
|
637
592
|
throw error;
|
|
638
593
|
}
|
|
@@ -644,36 +599,31 @@ class PTable implements PFrameInternal.PTableV8 {
|
|
|
644
599
|
[`${this.#frame.id}`, `${this.id}`, `${requestId}.json`],
|
|
645
600
|
{
|
|
646
601
|
timeStamp: Date.now(),
|
|
647
|
-
requestType:
|
|
602
|
+
requestType: "getShape",
|
|
648
603
|
},
|
|
649
|
-
this.#logger
|
|
604
|
+
this.#logger,
|
|
650
605
|
);
|
|
651
606
|
|
|
652
|
-
this.#logger(
|
|
653
|
-
'info',
|
|
654
|
-
`PTable ${this.id} getShape request ${requestId} started`
|
|
655
|
-
);
|
|
607
|
+
this.#logger("info", `PTable ${this.id} getShape request ${requestId} started`);
|
|
656
608
|
const timer = PerfTimer.start();
|
|
657
609
|
try {
|
|
658
610
|
ops?.signal?.throwIfAborted();
|
|
659
611
|
return await AddonSymbol.pTableGetShape(this.#table, ops?.signal);
|
|
660
612
|
} catch (err: unknown) {
|
|
661
613
|
if (isAbortError(err)) {
|
|
662
|
-
throw new AbortError(
|
|
663
|
-
`PTable ${this.id} getShape request ${requestId} cancelled`
|
|
664
|
-
);
|
|
614
|
+
throw new AbortError(`PTable ${this.id} getShape request ${requestId} cancelled`);
|
|
665
615
|
}
|
|
666
616
|
const error = new PFrameError(`PTable getShape request failed`);
|
|
667
617
|
error.cause = new Error(
|
|
668
618
|
`PTable ${this.id} getShape request ${requestId} failed, ` +
|
|
669
619
|
`error:\n` +
|
|
670
|
-
`${ensureError(err)}
|
|
620
|
+
`${ensureError(err)}`,
|
|
671
621
|
);
|
|
672
622
|
throw error;
|
|
673
623
|
} finally {
|
|
674
624
|
this.#logger(
|
|
675
|
-
|
|
676
|
-
`PTable ${this.id} getShape request ${requestId} finished, took ${timer.elapsed()}
|
|
625
|
+
"info",
|
|
626
|
+
`PTable ${this.id} getShape request ${requestId} finished, took ${timer.elapsed()}`,
|
|
677
627
|
);
|
|
678
628
|
}
|
|
679
629
|
}
|
|
@@ -683,26 +633,23 @@ class PTable implements PFrameInternal.PTableV8 {
|
|
|
683
633
|
ops?: {
|
|
684
634
|
range?: TableRange | undefined;
|
|
685
635
|
signal?: AbortSignal | undefined;
|
|
686
|
-
}
|
|
636
|
+
},
|
|
687
637
|
): Promise<PTableVector[]> {
|
|
688
638
|
const requestId = ulid() as PFrameInternal.PTableId;
|
|
689
639
|
dump(
|
|
690
640
|
[`${this.#frame.id}`, `${this.id}`, `${requestId}.json`],
|
|
691
641
|
{
|
|
692
642
|
timeStamp: Date.now(),
|
|
693
|
-
requestType:
|
|
643
|
+
requestType: "getData",
|
|
694
644
|
requestData: {
|
|
695
645
|
columnIndices,
|
|
696
|
-
range: ops?.range ?? null
|
|
697
|
-
}
|
|
646
|
+
range: ops?.range ?? null,
|
|
647
|
+
},
|
|
698
648
|
},
|
|
699
|
-
this.#logger
|
|
649
|
+
this.#logger,
|
|
700
650
|
);
|
|
701
651
|
|
|
702
|
-
this.#logger(
|
|
703
|
-
'info',
|
|
704
|
-
`PTable ${this.id} getData request ${requestId} started`
|
|
705
|
-
);
|
|
652
|
+
this.#logger("info", `PTable ${this.id} getData request ${requestId} started`);
|
|
706
653
|
let rowCount = 0;
|
|
707
654
|
const timer = PerfTimer.start();
|
|
708
655
|
try {
|
|
@@ -712,15 +659,13 @@ class PTable implements PFrameInternal.PTableV8 {
|
|
|
712
659
|
requestId,
|
|
713
660
|
columnIndices,
|
|
714
661
|
ops?.range,
|
|
715
|
-
ops?.signal
|
|
662
|
+
ops?.signal,
|
|
716
663
|
);
|
|
717
664
|
rowCount = result[0].data.length;
|
|
718
665
|
return result;
|
|
719
666
|
} catch (err: unknown) {
|
|
720
667
|
if (isAbortError(err)) {
|
|
721
|
-
throw new AbortError(
|
|
722
|
-
`PTable ${this.id} getData request ${requestId} cancelled`
|
|
723
|
-
);
|
|
668
|
+
throw new AbortError(`PTable ${this.id} getData request ${requestId} cancelled`);
|
|
724
669
|
}
|
|
725
670
|
const error = new PFrameError(`PTable getData request failed`);
|
|
726
671
|
error.cause = new Error(
|
|
@@ -728,35 +673,28 @@ class PTable implements PFrameInternal.PTableV8 {
|
|
|
728
673
|
`columnIndices: ${JSON.stringify(columnIndices)}, ` +
|
|
729
674
|
`range: ${ops?.range ? JSON.stringify(ops.range) : undefined}, ` +
|
|
730
675
|
`error:\n` +
|
|
731
|
-
`${ensureError(err)}
|
|
676
|
+
`${ensureError(err)}`,
|
|
732
677
|
);
|
|
733
678
|
throw error;
|
|
734
679
|
} finally {
|
|
735
680
|
this.#logger(
|
|
736
|
-
|
|
737
|
-
`PTable ${this.id} getData request ${requestId} finished, took ${timer.elapsed()} (${rowCount} rows)
|
|
681
|
+
"info",
|
|
682
|
+
`PTable ${this.id} getData request ${requestId} finished, took ${timer.elapsed()} (${rowCount} rows)`,
|
|
738
683
|
);
|
|
739
684
|
}
|
|
740
685
|
}
|
|
741
686
|
|
|
742
|
-
filter(
|
|
743
|
-
requestId: PFrameInternal.PTableId,
|
|
744
|
-
request: PTableRecordFilter[]
|
|
745
|
-
): PTable {
|
|
687
|
+
filter(requestId: PFrameInternal.PTableId, request: PTableRecordFilter[]): PTable {
|
|
746
688
|
const dumpData = {
|
|
747
689
|
timeStamp: Date.now(),
|
|
748
690
|
table: this.id,
|
|
749
|
-
requestType:
|
|
691
|
+
requestType: "filter",
|
|
750
692
|
requestData: {
|
|
751
|
-
filters: request.map(hashFilterColumnId)
|
|
752
|
-
}
|
|
693
|
+
filters: request.map(hashFilterColumnId),
|
|
694
|
+
},
|
|
753
695
|
};
|
|
754
696
|
dump([`${this.#frame.id}`, `${requestId}.json`], dumpData, this.#logger);
|
|
755
|
-
dump(
|
|
756
|
-
[`${this.#frame.id}`, `${requestId}`, `${requestId}.json`],
|
|
757
|
-
dumpData,
|
|
758
|
-
this.#logger
|
|
759
|
-
);
|
|
697
|
+
dump([`${this.#frame.id}`, `${requestId}`, `${requestId}.json`], dumpData, this.#logger);
|
|
760
698
|
|
|
761
699
|
const timer = PerfTimer.start();
|
|
762
700
|
try {
|
|
@@ -768,14 +706,11 @@ class PTable implements PFrameInternal.PTableV8 {
|
|
|
768
706
|
`PTable ${this.id} filter request ${requestId} failed, ` +
|
|
769
707
|
`request: ${JSON.stringify(request)}, ` +
|
|
770
708
|
`error:\n` +
|
|
771
|
-
`${ensureError(err)}
|
|
709
|
+
`${ensureError(err)}`,
|
|
772
710
|
);
|
|
773
711
|
throw error;
|
|
774
712
|
} finally {
|
|
775
|
-
this.#logger(
|
|
776
|
-
'info',
|
|
777
|
-
`PTable ${this.id} filter request ${requestId} took ${timer.elapsed()}`
|
|
778
|
-
);
|
|
713
|
+
this.#logger("info", `PTable ${this.id} filter request ${requestId} took ${timer.elapsed()}`);
|
|
779
714
|
}
|
|
780
715
|
}
|
|
781
716
|
|
|
@@ -783,15 +718,11 @@ class PTable implements PFrameInternal.PTableV8 {
|
|
|
783
718
|
const dumpData = {
|
|
784
719
|
timeStamp: Date.now(),
|
|
785
720
|
table: this.id,
|
|
786
|
-
requestType:
|
|
787
|
-
requestData: request.map(hashSortingColumnId)
|
|
721
|
+
requestType: "sort",
|
|
722
|
+
requestData: request.map(hashSortingColumnId),
|
|
788
723
|
};
|
|
789
724
|
dump([`${this.#frame.id}`, `${requestId}.json`], dumpData, this.#logger);
|
|
790
|
-
dump(
|
|
791
|
-
[`${this.#frame.id}`, `${requestId}`, `${requestId}.json`],
|
|
792
|
-
dumpData,
|
|
793
|
-
this.#logger
|
|
794
|
-
);
|
|
725
|
+
dump([`${this.#frame.id}`, `${requestId}`, `${requestId}.json`], dumpData, this.#logger);
|
|
795
726
|
|
|
796
727
|
const timer = PerfTimer.start();
|
|
797
728
|
try {
|
|
@@ -803,14 +734,11 @@ class PTable implements PFrameInternal.PTableV8 {
|
|
|
803
734
|
`PTable ${this.id} sort request ${requestId} failed, ` +
|
|
804
735
|
`request: ${JSON.stringify(request)}, ` +
|
|
805
736
|
`error:\n` +
|
|
806
|
-
`${ensureError(err)}
|
|
737
|
+
`${ensureError(err)}`,
|
|
807
738
|
);
|
|
808
739
|
throw error;
|
|
809
740
|
} finally {
|
|
810
|
-
this.#logger(
|
|
811
|
-
'info',
|
|
812
|
-
`PTable ${this.id} sort request ${requestId} took ${timer.elapsed()}`
|
|
813
|
-
);
|
|
741
|
+
this.#logger("info", `PTable ${this.id} sort request ${requestId} took ${timer.elapsed()}`);
|
|
814
742
|
}
|
|
815
743
|
}
|
|
816
744
|
|
|
@@ -820,20 +748,20 @@ class PTable implements PFrameInternal.PTableV8 {
|
|
|
820
748
|
[`${this.#frame.id}`, `${this.id}`, `${requestId}.json`],
|
|
821
749
|
{
|
|
822
750
|
timeStamp: Date.now(),
|
|
823
|
-
requestType:
|
|
751
|
+
requestType: "dispose",
|
|
824
752
|
},
|
|
825
|
-
this.#logger
|
|
753
|
+
this.#logger,
|
|
826
754
|
);
|
|
827
755
|
|
|
828
756
|
try {
|
|
829
757
|
AddonSymbol.pTableDispose(this.#table);
|
|
830
|
-
this.#logger(
|
|
758
|
+
this.#logger("info", `PTable ${this.id} disposed`);
|
|
831
759
|
} catch (err: unknown) {
|
|
832
760
|
const error = new PFrameError(`PTable dispose request failed`);
|
|
833
761
|
error.cause = new Error(
|
|
834
762
|
`PTable ${this.id} dispose request ${requestId} failed, ` +
|
|
835
763
|
`error:\n` +
|
|
836
|
-
`${ensureError(err)}
|
|
764
|
+
`${ensureError(err)}`,
|
|
837
765
|
);
|
|
838
766
|
throw error;
|
|
839
767
|
}
|