@milaboratories/pf-driver 1.0.61 → 1.0.63

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.
Files changed (78) hide show
  1. package/dist/_virtual/_@oxc-project_runtime@0.114.0/helpers/usingCtx.cjs +59 -0
  2. package/dist/_virtual/_@oxc-project_runtime@0.114.0/helpers/usingCtx.js +58 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +29 -0
  4. package/dist/data_info_helpers.cjs +20 -19
  5. package/dist/data_info_helpers.cjs.map +1 -1
  6. package/dist/data_info_helpers.d.ts +6 -2
  7. package/dist/data_info_helpers.js +19 -17
  8. package/dist/data_info_helpers.js.map +1 -1
  9. package/dist/driver_decl.d.ts +38 -34
  10. package/dist/driver_double.cjs +98 -97
  11. package/dist/driver_double.cjs.map +1 -1
  12. package/dist/driver_double.d.ts +17 -10
  13. package/dist/driver_double.js +95 -95
  14. package/dist/driver_double.js.map +1 -1
  15. package/dist/driver_impl.cjs +233 -296
  16. package/dist/driver_impl.cjs.map +1 -1
  17. package/dist/driver_impl.d.ts +59 -52
  18. package/dist/driver_impl.js +232 -294
  19. package/dist/driver_impl.js.map +1 -1
  20. package/dist/index.cjs +10 -14
  21. package/dist/index.d.ts +5 -5
  22. package/dist/index.js +5 -4
  23. package/dist/logging.cjs +4 -3
  24. package/dist/logging.cjs.map +1 -1
  25. package/dist/logging.js +4 -2
  26. package/dist/logging.js.map +1 -1
  27. package/dist/pframe_pool.cjs +177 -196
  28. package/dist/pframe_pool.cjs.map +1 -1
  29. package/dist/pframe_pool.d.ts +12 -31
  30. package/dist/pframe_pool.js +177 -194
  31. package/dist/pframe_pool.js.map +1 -1
  32. package/dist/ptable_cache_per_frame.cjs +52 -63
  33. package/dist/ptable_cache_per_frame.cjs.map +1 -1
  34. package/dist/ptable_cache_per_frame.d.ts +16 -23
  35. package/dist/ptable_cache_per_frame.js +51 -61
  36. package/dist/ptable_cache_per_frame.js.map +1 -1
  37. package/dist/ptable_cache_plain.cjs +41 -49
  38. package/dist/ptable_cache_plain.cjs.map +1 -1
  39. package/dist/ptable_cache_plain.d.ts +15 -19
  40. package/dist/ptable_cache_plain.js +40 -47
  41. package/dist/ptable_cache_plain.js.map +1 -1
  42. package/dist/ptable_def_pool.cjs +45 -53
  43. package/dist/ptable_def_pool.cjs.map +1 -1
  44. package/dist/ptable_def_pool.d.ts +3 -20
  45. package/dist/ptable_def_pool.js +45 -51
  46. package/dist/ptable_def_pool.js.map +1 -1
  47. package/dist/ptable_pool.cjs +145 -185
  48. package/dist/ptable_pool.cjs.map +1 -1
  49. package/dist/ptable_pool.d.ts +6 -28
  50. package/dist/ptable_pool.js +145 -183
  51. package/dist/ptable_pool.js.map +1 -1
  52. package/dist/ptable_shared.cjs +6 -5
  53. package/dist/ptable_shared.cjs.map +1 -1
  54. package/dist/ptable_shared.d.ts +1 -17
  55. package/dist/ptable_shared.js +5 -3
  56. package/dist/ptable_shared.js.map +1 -1
  57. package/package.json +10 -10
  58. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.cjs +0 -77
  59. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.cjs.map +0 -1
  60. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.js +0 -74
  61. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.js.map +0 -1
  62. package/dist/data_info_helpers.d.ts.map +0 -1
  63. package/dist/driver_decl.d.ts.map +0 -1
  64. package/dist/driver_double.d.ts.map +0 -1
  65. package/dist/driver_double.test.d.ts +0 -2
  66. package/dist/driver_double.test.d.ts.map +0 -1
  67. package/dist/driver_impl.d.ts.map +0 -1
  68. package/dist/index.cjs.map +0 -1
  69. package/dist/index.d.ts.map +0 -1
  70. package/dist/index.js.map +0 -1
  71. package/dist/logging.d.ts +0 -2
  72. package/dist/logging.d.ts.map +0 -1
  73. package/dist/pframe_pool.d.ts.map +0 -1
  74. package/dist/ptable_cache_per_frame.d.ts.map +0 -1
  75. package/dist/ptable_cache_plain.d.ts.map +0 -1
  76. package/dist/ptable_def_pool.d.ts.map +0 -1
  77. package/dist/ptable_pool.d.ts.map +0 -1
  78. package/dist/ptable_shared.d.ts.map +0 -1
@@ -1,306 +1,243 @@
1
- 'use strict';
2
-
3
- var tslib_es6 = require('./__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.cjs');
4
- var model = require('@platforma-sdk/model');
5
- var tsHelpers = require('@milaboratories/ts-helpers');
6
- var pframesRsNode = require('@milaboratories/pframes-rs-node');
7
- var node_os = require('node:os');
8
- var logging = require('./logging.cjs');
9
- var pframe_pool = require('./pframe_pool.cjs');
10
- var ptable_def_pool = require('./ptable_def_pool.cjs');
11
- var ptable_pool = require('./ptable_pool.cjs');
12
- var ptable_cache_per_frame = require('./ptable_cache_per_frame.cjs');
13
- var ptable_cache_plain = require('./ptable_cache_plain.cjs');
14
- var pframesRsWasm = require('@milaboratories/pframes-rs-wasm');
1
+ const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
2
+ const require_logging = require('./logging.cjs');
3
+ const require_pframe_pool = require('./pframe_pool.cjs');
4
+ const require_ptable_def_pool = require('./ptable_def_pool.cjs');
5
+ const require_ptable_pool = require('./ptable_pool.cjs');
6
+ const require_ptable_cache_per_frame = require('./ptable_cache_per_frame.cjs');
7
+ const require_ptable_cache_plain = require('./ptable_cache_plain.cjs');
8
+ const require_usingCtx = require('./_virtual/_@oxc-project_runtime@0.114.0/helpers/usingCtx.cjs');
9
+ let _platforma_sdk_model = require("@platforma-sdk/model");
10
+ let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
11
+ let _milaboratories_pframes_rs_node = require("@milaboratories/pframes-rs-node");
12
+ let node_os = require("node:os");
13
+ let _milaboratories_pframes_rs_wasm = require("@milaboratories/pframes-rs-wasm");
15
14
 
15
+ //#region src/driver_impl.ts
16
16
  const AbstractPFrameDriverOpsDefaults = {
17
- ...ptable_cache_per_frame.PTableCachePerFrameOpsDefaults,
18
- ...ptable_cache_plain.PTableCachePlainOpsDefaults,
19
- pFrameConcurrency: 1, // 1 join is executed in parallel and utilize all RAM and CPU cores
20
- pTableConcurrency: 1, // 1 joined table is read from disk at a time, which matches 1 table the user can view in the UI
17
+ ...require_ptable_cache_per_frame.PTableCachePerFrameOpsDefaults,
18
+ ...require_ptable_cache_plain.PTableCachePlainOpsDefaults,
19
+ pFrameConcurrency: 1,
20
+ pTableConcurrency: 1
21
+ };
22
+ var AbstractPFrameDriver = class {
23
+ logger;
24
+ localBlobProvider;
25
+ remoteBlobProvider;
26
+ resolveDataInfo;
27
+ pFrames;
28
+ pTableDefs;
29
+ pTables;
30
+ pTableCachePerFrame;
31
+ pTableCachePlain;
32
+ frameConcurrencyLimiter;
33
+ tableConcurrencyLimiter;
34
+ async pprofDump() {
35
+ return await _milaboratories_pframes_rs_node.PFrameFactory.pprofDump();
36
+ }
37
+ constructor({ logger = () => {}, localBlobProvider, remoteBlobProvider, spillPath = (0, node_os.tmpdir)(), options = AbstractPFrameDriverOpsDefaults, resolveDataInfo }) {
38
+ this.logger = logger;
39
+ this.localBlobProvider = localBlobProvider;
40
+ this.remoteBlobProvider = remoteBlobProvider;
41
+ this.resolveDataInfo = resolveDataInfo;
42
+ this.frameConcurrencyLimiter = new _milaboratories_ts_helpers.ConcurrencyLimitingExecutor(options.pFrameConcurrency);
43
+ this.tableConcurrencyLimiter = new _milaboratories_ts_helpers.ConcurrencyLimitingExecutor(options.pTableConcurrency);
44
+ this.pFrames = new require_pframe_pool.PFramePool(this.localBlobProvider, this.remoteBlobProvider, this.logger, spillPath);
45
+ this.pTableDefs = new require_ptable_def_pool.PTableDefPool(this.logger);
46
+ this.pTables = new require_ptable_pool.PTablePool(this.pFrames, this.pTableDefs, this.logger);
47
+ this.pTableCachePerFrame = new require_ptable_cache_per_frame.PTableCachePerFrame(this.logger, options);
48
+ this.pTableCachePlain = new require_ptable_cache_plain.PTableCachePlain(this.logger, options);
49
+ }
50
+ async dispose() {
51
+ return await this.remoteBlobProvider[Symbol.asyncDispose]();
52
+ }
53
+ async [Symbol.asyncDispose]() {
54
+ return await this.dispose();
55
+ }
56
+ createPFrame(def) {
57
+ const ValueTypes = new Set(Object.values(_platforma_sdk_model.ValueType));
58
+ const columns = (0, _platforma_sdk_model.uniqueBy)(def.filter((column) => ValueTypes.has(column.spec.valueType)), (column) => column.id).map((c) => (0, _platforma_sdk_model.mapPObjectData)(c, (d) => this.resolveDataInfo(c.spec, d)));
59
+ return this.pFrames.acquire(columns);
60
+ }
61
+ createPTable(rawDef) {
62
+ const pFrameEntry = this.createPFrame((0, _platforma_sdk_model.extractAllColumns)(rawDef.src));
63
+ const sortedDef = (0, _platforma_sdk_model.sortPTableDef)(migrateTableFilter((0, _platforma_sdk_model.mapPTableDef)(rawDef, (c) => c.id), this.logger));
64
+ const pTableEntry = this.pTableDefs.acquire({
65
+ type: "v1",
66
+ def: sortedDef,
67
+ pFrameHandle: pFrameEntry.key
68
+ });
69
+ if (require_logging.logPFrames()) this.logger("info", `Create PTable call (pFrameHandle = ${pFrameEntry.key}; pTableHandle = ${pTableEntry.key})`);
70
+ const unref = () => {
71
+ pTableEntry.unref();
72
+ pFrameEntry.unref();
73
+ };
74
+ return {
75
+ key: pTableEntry.key,
76
+ resource: pTableEntry.resource,
77
+ unref,
78
+ [Symbol.dispose]: unref
79
+ };
80
+ }
81
+ createPTableV2(def) {
82
+ const columns = (0, _platforma_sdk_model.uniqueBy)((0, _platforma_sdk_model.collectSpecQueryColumns)(def.query), (c) => c.id);
83
+ const columnsMap = columns.reduce((acc, col) => (acc[col.id] = col.spec, acc), {});
84
+ const pFrameEntry = this.createPFrame(columns);
85
+ const specFrame = (0, _milaboratories_pframes_rs_wasm.createPFrame)(columnsMap);
86
+ const sortedQuery = (0, _platforma_sdk_model.sortSpecQuery)((0, _platforma_sdk_model.mapSpecQueryColumns)(def.query, (c) => c.id));
87
+ const { tableSpec, dataQuery } = specFrame.evaluateQuery(sortedQuery);
88
+ const pTableEntry = this.pTableDefs.acquire({
89
+ type: "v2",
90
+ pFrameHandle: pFrameEntry.key,
91
+ def: {
92
+ tableSpec,
93
+ dataQuery
94
+ }
95
+ });
96
+ if (require_logging.logPFrames()) this.logger("info", `Create PTable call (pFrameHandle = ${pFrameEntry.key}; pTableHandle = ${pTableEntry.key})`);
97
+ const unref = () => {
98
+ pTableEntry.unref();
99
+ pFrameEntry.unref();
100
+ };
101
+ return {
102
+ key: pTableEntry.key,
103
+ resource: pTableEntry.resource,
104
+ unref,
105
+ [Symbol.dispose]: unref
106
+ };
107
+ }
108
+ async findColumns(handle, request) {
109
+ const iRequest = {
110
+ ...request,
111
+ compatibleWith: request.compatibleWith.length !== 0 ? [{
112
+ axesSpec: [...new Map(request.compatibleWith.map((item) => [(0, _platforma_sdk_model.canonicalizeJson)(item), item])).values()],
113
+ qualifications: []
114
+ }] : []
115
+ };
116
+ const { pFramePromise } = this.pFrames.getByKey(handle);
117
+ return { hits: (await (await pFramePromise).findColumns(iRequest)).hits.filter((h) => h.mappingVariants.length === 0 || h.mappingVariants.some((v) => v.qualifications.forHit.length === 0 && v.qualifications.forQueries.every((q) => q.length === 0))).map((h) => h.hit) };
118
+ }
119
+ async getColumnSpec(handle, columnId) {
120
+ const { pFramePromise } = this.pFrames.getByKey(handle);
121
+ return await (await pFramePromise).getColumnSpec(columnId);
122
+ }
123
+ async listColumns(handle) {
124
+ const { pFramePromise } = this.pFrames.getByKey(handle);
125
+ return await (await pFramePromise).listColumns();
126
+ }
127
+ async calculateTableData(handle, request, range, signal) {
128
+ if (require_logging.logPFrames()) this.logger("info", `Call calculateTableData, handle = ${handle}, request = ${JSON.stringify(request, _platforma_sdk_model.bigintReplacer)}`);
129
+ const table = this.pTables.acquire({
130
+ type: "v1",
131
+ pFrameHandle: handle,
132
+ def: (0, _platforma_sdk_model.sortPTableDef)(migrateTableFilter(request, this.logger))
133
+ });
134
+ const { pTablePromise, disposeSignal } = table.resource;
135
+ const pTable = await pTablePromise;
136
+ const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));
137
+ return await this.frameConcurrencyLimiter.run(async () => {
138
+ try {
139
+ const spec = pTable.getSpec();
140
+ const data = await pTable.getData([...spec.keys()], {
141
+ range,
142
+ signal: combinedSignal
143
+ });
144
+ const overallSize = await pTable.getFootprint({ signal: combinedSignal });
145
+ this.pTableCachePerFrame.cache(table, overallSize);
146
+ return spec.map((spec, i) => ({
147
+ spec,
148
+ data: data[i]
149
+ }));
150
+ } catch (err) {
151
+ table.unref();
152
+ throw err;
153
+ }
154
+ });
155
+ }
156
+ async getUniqueValues(handle, request, signal) {
157
+ if (require_logging.logPFrames()) this.logger("info", `Call getUniqueValues, handle = ${handle}, request = ${JSON.stringify(request, _platforma_sdk_model.bigintReplacer)}`);
158
+ const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);
159
+ const pFrame = await pFramePromise;
160
+ const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));
161
+ return await this.frameConcurrencyLimiter.run(async () => {
162
+ return await pFrame.getUniqueValues({
163
+ ...request,
164
+ filters: migrateFilters(request.filters, this.logger)
165
+ }, { signal: combinedSignal });
166
+ });
167
+ }
168
+ async getSpec(handle) {
169
+ try {
170
+ var _usingCtx$1 = require_usingCtx._usingCtx();
171
+ const { def } = this.pTableDefs.getByKey(handle);
172
+ const { pTablePromise } = _usingCtx$1.u(this.pTables.acquire(def)).resource;
173
+ return (await pTablePromise).getSpec();
174
+ } catch (_) {
175
+ _usingCtx$1.e = _;
176
+ } finally {
177
+ _usingCtx$1.d();
178
+ }
179
+ }
180
+ async getShape(handle, signal) {
181
+ const { def, disposeSignal: defDisposeSignal } = this.pTableDefs.getByKey(handle);
182
+ const table = this.pTables.acquire(def);
183
+ const { pTablePromise, disposeSignal } = table.resource;
184
+ const pTable = await pTablePromise;
185
+ const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));
186
+ const { shape, overallSize } = await this.tableConcurrencyLimiter.run(async () => {
187
+ return {
188
+ shape: await pTable.getShape({ signal: combinedSignal }),
189
+ overallSize: await pTable.getFootprint({ signal: combinedSignal })
190
+ };
191
+ });
192
+ this.pTableCachePlain.cache(table, overallSize, defDisposeSignal);
193
+ return shape;
194
+ }
195
+ async getData(handle, columnIndices, range, signal) {
196
+ const { def, disposeSignal: defDisposeSignal } = this.pTableDefs.getByKey(handle);
197
+ const table = this.pTables.acquire(def);
198
+ const { pTablePromise, disposeSignal } = table.resource;
199
+ const pTable = await pTablePromise;
200
+ const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));
201
+ const { data, overallSize } = await this.tableConcurrencyLimiter.run(async () => {
202
+ return {
203
+ data: await pTable.getData(columnIndices, {
204
+ range,
205
+ signal: combinedSignal
206
+ }),
207
+ overallSize: await pTable.getFootprint({ signal: combinedSignal })
208
+ };
209
+ });
210
+ this.pTableCachePlain.cache(table, overallSize, defDisposeSignal);
211
+ return data;
212
+ }
21
213
  };
22
- class AbstractPFrameDriver {
23
- logger;
24
- localBlobProvider;
25
- remoteBlobProvider;
26
- resolveDataInfo;
27
- pFrames;
28
- pTableDefs;
29
- pTables;
30
- pTableCachePerFrame;
31
- pTableCachePlain;
32
- frameConcurrencyLimiter;
33
- tableConcurrencyLimiter;
34
- async pprofDump() {
35
- return await pframesRsNode.PFrameFactory.pprofDump();
36
- }
37
- constructor({ logger = () => { }, localBlobProvider, remoteBlobProvider, spillPath = node_os.tmpdir(), options = AbstractPFrameDriverOpsDefaults, resolveDataInfo, }) {
38
- this.logger = logger;
39
- this.localBlobProvider = localBlobProvider;
40
- this.remoteBlobProvider = remoteBlobProvider;
41
- this.resolveDataInfo = resolveDataInfo;
42
- this.frameConcurrencyLimiter = new tsHelpers.ConcurrencyLimitingExecutor(options.pFrameConcurrency);
43
- this.tableConcurrencyLimiter = new tsHelpers.ConcurrencyLimitingExecutor(options.pTableConcurrency);
44
- this.pFrames = new pframe_pool.PFramePool(this.localBlobProvider, this.remoteBlobProvider, this.logger, spillPath);
45
- this.pTableDefs = new ptable_def_pool.PTableDefPool(this.logger);
46
- this.pTables = new ptable_pool.PTablePool(this.pFrames, this.pTableDefs, this.logger);
47
- this.pTableCachePerFrame = new ptable_cache_per_frame.PTableCachePerFrame(this.logger, options);
48
- this.pTableCachePlain = new ptable_cache_plain.PTableCachePlain(this.logger, options);
49
- }
50
- async dispose() {
51
- return await this.remoteBlobProvider[Symbol.asyncDispose]();
52
- }
53
- async [Symbol.asyncDispose]() {
54
- return await this.dispose();
55
- }
56
- //
57
- // Internal / Config API Methods
58
- //
59
- createPFrame(def) {
60
- const ValueTypes = new Set(Object.values(model.ValueType));
61
- const supportedColumns = def.filter((column) => ValueTypes.has(column.spec.valueType));
62
- const uniqueColumns = model.uniqueBy(supportedColumns, (column) => column.id);
63
- const columns = uniqueColumns.map((c) => model.mapPObjectData(c, (d) => this.resolveDataInfo(c.spec, d)));
64
- return this.pFrames.acquire(columns);
65
- }
66
- createPTable(rawDef) {
67
- const pFrameEntry = this.createPFrame(model.extractAllColumns(rawDef.src));
68
- const sortedDef = model.sortPTableDef(migrateTableFilter(model.mapPTableDef(rawDef, (c) => c.id), this.logger));
69
- const pTableEntry = this.pTableDefs.acquire({
70
- type: "v1",
71
- def: sortedDef,
72
- pFrameHandle: pFrameEntry.key,
73
- });
74
- if (logging.logPFrames()) {
75
- this.logger("info", `Create PTable call (pFrameHandle = ${pFrameEntry.key}; pTableHandle = ${pTableEntry.key})`);
76
- }
77
- const unref = () => {
78
- pTableEntry.unref();
79
- pFrameEntry.unref();
80
- };
81
- return {
82
- key: pTableEntry.key,
83
- resource: pTableEntry.resource,
84
- unref,
85
- [Symbol.dispose]: unref,
86
- };
87
- }
88
- createPTableV2(def) {
89
- const columns = model.uniqueBy(model.collectSpecQueryColumns(def.query), (c) => c.id);
90
- const columnsMap = columns.reduce((acc, col) => ((acc[col.id] = col.spec), acc), {});
91
- const pFrameEntry = this.createPFrame(columns);
92
- const specFrame = pframesRsWasm.createPFrame(columnsMap);
93
- const sortedQuery = model.sortSpecQuery(model.mapSpecQueryColumns(def.query, (c) => c.id));
94
- const { tableSpec, dataQuery } = specFrame.evaluateQuery(sortedQuery);
95
- const pTableEntry = this.pTableDefs.acquire({
96
- type: "v2",
97
- pFrameHandle: pFrameEntry.key,
98
- def: {
99
- tableSpec,
100
- dataQuery,
101
- },
102
- });
103
- if (logging.logPFrames()) {
104
- this.logger("info", `Create PTable call (pFrameHandle = ${pFrameEntry.key}; pTableHandle = ${pTableEntry.key})`);
105
- }
106
- const unref = () => {
107
- pTableEntry.unref();
108
- pFrameEntry.unref();
109
- };
110
- return {
111
- key: pTableEntry.key,
112
- resource: pTableEntry.resource,
113
- unref,
114
- [Symbol.dispose]: unref,
115
- };
116
- }
117
- //
118
- // PFrame instance methods
119
- //
120
- async findColumns(handle, request) {
121
- const iRequest = {
122
- ...request,
123
- compatibleWith: request.compatibleWith.length !== 0
124
- ? [
125
- {
126
- axesSpec: [
127
- ...new Map(request.compatibleWith.map((item) => [model.canonicalizeJson(item), item])).values(),
128
- ],
129
- qualifications: [],
130
- },
131
- ]
132
- : [],
133
- };
134
- const { pFramePromise } = this.pFrames.getByKey(handle);
135
- const pFrame = await pFramePromise;
136
- const response = await pFrame.findColumns(iRequest);
137
- return {
138
- hits: response.hits
139
- .filter((h) =>
140
- // only exactly matching columns
141
- h.mappingVariants.length === 0 ||
142
- h.mappingVariants.some((v) => v.qualifications.forHit.length === 0 &&
143
- v.qualifications.forQueries.every((q) => q.length === 0)))
144
- .map((h) => h.hit),
145
- };
146
- }
147
- async getColumnSpec(handle, columnId) {
148
- const { pFramePromise } = this.pFrames.getByKey(handle);
149
- const pFrame = await pFramePromise;
150
- return await pFrame.getColumnSpec(columnId);
151
- }
152
- async listColumns(handle) {
153
- const { pFramePromise } = this.pFrames.getByKey(handle);
154
- const pFrame = await pFramePromise;
155
- return await pFrame.listColumns();
156
- }
157
- async calculateTableData(handle, request, range, signal) {
158
- if (logging.logPFrames()) {
159
- this.logger("info", `Call calculateTableData, handle = ${handle}, request = ${JSON.stringify(request, model.bigintReplacer)}`);
160
- }
161
- const table = this.pTables.acquire({
162
- type: "v1",
163
- pFrameHandle: handle,
164
- def: model.sortPTableDef(migrateTableFilter(request, this.logger)),
165
- });
166
- const { pTablePromise, disposeSignal } = table.resource;
167
- const pTable = await pTablePromise;
168
- const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));
169
- return await this.frameConcurrencyLimiter.run(async () => {
170
- try {
171
- // TODO: throw error when more then 150k rows is requested
172
- // after pf-plots migration to stream API
173
- const spec = pTable.getSpec();
174
- const data = await pTable.getData([...spec.keys()], {
175
- range,
176
- signal: combinedSignal,
177
- });
178
- const overallSize = await pTable.getFootprint({
179
- signal: combinedSignal,
180
- });
181
- this.pTableCachePerFrame.cache(table, overallSize);
182
- return spec.map((spec, i) => ({
183
- spec: spec,
184
- data: data[i],
185
- }));
186
- }
187
- catch (err) {
188
- table.unref();
189
- throw err;
190
- }
191
- });
192
- }
193
- async getUniqueValues(handle, request, signal) {
194
- if (logging.logPFrames()) {
195
- this.logger("info", `Call getUniqueValues, handle = ${handle}, request = ${JSON.stringify(request, model.bigintReplacer)}`);
196
- }
197
- const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);
198
- const pFrame = await pFramePromise;
199
- const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));
200
- return await this.frameConcurrencyLimiter.run(async () => {
201
- return await pFrame.getUniqueValues({
202
- ...request,
203
- filters: migrateFilters(request.filters, this.logger),
204
- }, {
205
- signal: combinedSignal,
206
- });
207
- });
208
- }
209
- //
210
- // PTable instance methods
211
- //
212
- async getSpec(handle) {
213
- const env_1 = { stack: [], error: void 0, hasError: false };
214
- try {
215
- const { def } = this.pTableDefs.getByKey(handle);
216
- const table = tslib_es6.__addDisposableResource(env_1, this.pTables.acquire(def), false);
217
- const { pTablePromise } = table.resource;
218
- const pTable = await pTablePromise;
219
- return pTable.getSpec();
220
- }
221
- catch (e_1) {
222
- env_1.error = e_1;
223
- env_1.hasError = true;
224
- }
225
- finally {
226
- tslib_es6.__disposeResources(env_1);
227
- }
228
- }
229
- async getShape(handle, signal) {
230
- const { def, disposeSignal: defDisposeSignal } = this.pTableDefs.getByKey(handle);
231
- const table = this.pTables.acquire(def);
232
- const { pTablePromise, disposeSignal } = table.resource;
233
- const pTable = await pTablePromise;
234
- const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));
235
- const { shape, overallSize } = await this.tableConcurrencyLimiter.run(async () => {
236
- const shape = await pTable.getShape({
237
- signal: combinedSignal,
238
- });
239
- const overallSize = await pTable.getFootprint({
240
- signal: combinedSignal,
241
- });
242
- return { shape, overallSize };
243
- });
244
- this.pTableCachePlain.cache(table, overallSize, defDisposeSignal);
245
- return shape;
246
- }
247
- async getData(handle, columnIndices, range, signal) {
248
- const { def, disposeSignal: defDisposeSignal } = this.pTableDefs.getByKey(handle);
249
- const table = this.pTables.acquire(def);
250
- const { pTablePromise, disposeSignal } = table.resource;
251
- const pTable = await pTablePromise;
252
- const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));
253
- const { data, overallSize } = await this.tableConcurrencyLimiter.run(async () => {
254
- const data = await pTable.getData(columnIndices, {
255
- range,
256
- signal: combinedSignal,
257
- });
258
- const overallSize = await pTable.getFootprint({
259
- signal: combinedSignal,
260
- });
261
- return { data, overallSize };
262
- });
263
- this.pTableCachePlain.cache(table, overallSize, defDisposeSignal);
264
- return data;
265
- }
266
- }
267
214
  function migrateFilters(filters, logger) {
268
- const filtersV1 = [];
269
- const filtersV2 = [];
270
- for (const filter of filters) {
271
- if (filter.type === "bySingleColumn") {
272
- filtersV1.push(filter);
273
- filtersV2.push({
274
- ...filter,
275
- type: "bySingleColumnV2",
276
- });
277
- }
278
- else {
279
- filtersV2.push(filter);
280
- }
281
- }
282
- if (filtersV1.length > 0) {
283
- const filtersV1Json = JSON.stringify(filtersV1);
284
- logger("warn", `type overwritten from 'bySingleColumn' to 'bySingleColumnV2' for filters: ${filtersV1Json}`);
285
- }
286
- return filtersV2;
215
+ const filtersV1 = [];
216
+ const filtersV2 = [];
217
+ for (const filter of filters) if (filter.type === "bySingleColumn") {
218
+ filtersV1.push(filter);
219
+ filtersV2.push({
220
+ ...filter,
221
+ type: "bySingleColumnV2"
222
+ });
223
+ } else filtersV2.push(filter);
224
+ if (filtersV1.length > 0) logger("warn", `type overwritten from 'bySingleColumn' to 'bySingleColumnV2' for filters: ${JSON.stringify(filtersV1)}`);
225
+ return filtersV2;
287
226
  }
288
227
  function migrateTableFilter(def, logger) {
289
- if (!("partitionFilters" in def)) {
290
- // For old blocks assume all axes filters to be partition filters
291
- return {
292
- ...def,
293
- partitionFilters: migrateFilters(def.filters.filter((f) => f.column.type === "axis"), logger),
294
- filters: migrateFilters(def.filters.filter((f) => f.column.type === "column"), logger),
295
- };
296
- }
297
- return {
298
- ...def,
299
- partitionFilters: migrateFilters(def.partitionFilters, logger),
300
- filters: migrateFilters(def.filters, logger),
301
- };
228
+ if (!("partitionFilters" in def)) return {
229
+ ...def,
230
+ partitionFilters: migrateFilters(def.filters.filter((f) => f.column.type === "axis"), logger),
231
+ filters: migrateFilters(def.filters.filter((f) => f.column.type === "column"), logger)
232
+ };
233
+ return {
234
+ ...def,
235
+ partitionFilters: migrateFilters(def.partitionFilters, logger),
236
+ filters: migrateFilters(def.filters, logger)
237
+ };
302
238
  }
303
239
 
240
+ //#endregion
304
241
  exports.AbstractPFrameDriver = AbstractPFrameDriver;
305
242
  exports.AbstractPFrameDriverOpsDefaults = AbstractPFrameDriverOpsDefaults;
306
- //# sourceMappingURL=driver_impl.cjs.map
243
+ //# sourceMappingURL=driver_impl.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"driver_impl.cjs","sources":["../src/driver_impl.ts"],"sourcesContent":["import {\n mapPObjectData,\n mapPTableDef,\n extractAllColumns,\n uniqueBy,\n canonicalizeJson,\n bigintReplacer,\n ValueType,\n type CalculateTableDataRequest,\n type CalculateTableDataResponse,\n type FindColumnsRequest,\n type FindColumnsResponse,\n type PColumnIdAndSpec,\n type PColumnSpec,\n type PFrameHandle,\n type PObjectId,\n type PTableColumnSpec,\n type PTableHandle,\n type PTableShape,\n type PTableVector,\n type TableRange,\n type UniqueValuesRequest,\n type UniqueValuesResponse,\n type PColumn,\n type PFrameDef,\n type PTableDef,\n type PTableRecordSingleValueFilterV2,\n type PTableRecordFilter,\n type JsonSerializable,\n type PTableDefV2,\n mapSpecQueryColumns,\n collectSpecQueryColumns,\n sortSpecQuery,\n sortPTableDef,\n} from \"@platforma-sdk/model\";\nimport type { PFrameInternal } from \"@milaboratories/pl-model-middle-layer\";\nimport { ConcurrencyLimitingExecutor, type PoolEntry } from \"@milaboratories/ts-helpers\";\nimport { PFrameFactory } from \"@milaboratories/pframes-rs-node\";\nimport { tmpdir } from \"node:os\";\nimport type { AbstractInternalPFrameDriver } from \"./driver_decl\";\nimport { logPFrames } from \"./logging\";\nimport {\n PFramePool,\n type LocalBlobProvider as PoolLocalBlobProvider,\n type RemoteBlobProvider as PoolRemoteBlobProvider,\n} from \"./pframe_pool\";\nimport { PTableDefPool } from \"./ptable_def_pool\";\nimport { PTablePool } from \"./ptable_pool\";\nimport {\n PTableCachePerFrame,\n PTableCachePerFrameOpsDefaults,\n type PTableCachePerFrameOps,\n} from \"./ptable_cache_per_frame\";\nimport {\n PTableCachePlain,\n PTableCachePlainOpsDefaults,\n type PTableCachePlainOps,\n} from \"./ptable_cache_plain\";\nimport { createPFrame as createSpecFrame } from \"@milaboratories/pframes-rs-wasm\";\n\nexport interface LocalBlobProvider<\n TreeEntry extends JsonSerializable,\n> extends PoolLocalBlobProvider<TreeEntry> {}\n\nexport interface RemoteBlobProvider<TreeEntry extends JsonSerializable>\n extends PoolRemoteBlobProvider<TreeEntry>, AsyncDisposable {}\n\nexport type AbstractPFrameDriverOps = PTableCachePerFrameOps &\n PTableCachePlainOps & {\n /** Concurrency limits for `getUniqueValues` and `calculateTableData` requests */\n pFrameConcurrency: number;\n /** Concurrency limits for `getShape` and `getData` requests */\n pTableConcurrency: number;\n };\n\nexport const AbstractPFrameDriverOpsDefaults: AbstractPFrameDriverOps = {\n ...PTableCachePerFrameOpsDefaults,\n ...PTableCachePlainOpsDefaults,\n pFrameConcurrency: 1, // 1 join is executed in parallel and utilize all RAM and CPU cores\n pTableConcurrency: 1, // 1 joined table is read from disk at a time, which matches 1 table the user can view in the UI\n};\n\nexport type DataInfoResolver<PColumnData, TreeEntry extends JsonSerializable> = (\n spec: PColumnSpec,\n data: PColumnData,\n) => PFrameInternal.DataInfo<TreeEntry>;\n\nexport class AbstractPFrameDriver<\n PColumnData,\n TreeEntry extends JsonSerializable,\n> implements AbstractInternalPFrameDriver<PColumnData> {\n private readonly logger: PFrameInternal.Logger;\n\n private readonly localBlobProvider: LocalBlobProvider<TreeEntry>;\n private readonly remoteBlobProvider: RemoteBlobProvider<TreeEntry>;\n\n private readonly resolveDataInfo: DataInfoResolver<PColumnData, TreeEntry>;\n\n private readonly pFrames: PFramePool<TreeEntry>;\n private readonly pTableDefs: PTableDefPool;\n private readonly pTables: PTablePool<TreeEntry>;\n\n private readonly pTableCachePerFrame: PTableCachePerFrame;\n private readonly pTableCachePlain: PTableCachePlain;\n\n private readonly frameConcurrencyLimiter: ConcurrencyLimitingExecutor;\n private readonly tableConcurrencyLimiter: ConcurrencyLimitingExecutor;\n\n public async pprofDump(): Promise<Uint8Array> {\n return await PFrameFactory.pprofDump();\n }\n\n public constructor({\n logger = () => {},\n localBlobProvider,\n remoteBlobProvider,\n spillPath = tmpdir(),\n options = AbstractPFrameDriverOpsDefaults,\n resolveDataInfo,\n }: {\n logger?: PFrameInternal.Logger;\n localBlobProvider: LocalBlobProvider<TreeEntry>;\n remoteBlobProvider: RemoteBlobProvider<TreeEntry>;\n spillPath?: string;\n options?: AbstractPFrameDriverOps;\n resolveDataInfo: DataInfoResolver<PColumnData, TreeEntry>;\n }) {\n this.logger = logger;\n\n this.localBlobProvider = localBlobProvider;\n this.remoteBlobProvider = remoteBlobProvider;\n\n this.resolveDataInfo = resolveDataInfo;\n\n this.frameConcurrencyLimiter = new ConcurrencyLimitingExecutor(options.pFrameConcurrency);\n this.tableConcurrencyLimiter = new ConcurrencyLimitingExecutor(options.pTableConcurrency);\n\n this.pFrames = new PFramePool(\n this.localBlobProvider,\n this.remoteBlobProvider,\n this.logger,\n spillPath,\n );\n this.pTableDefs = new PTableDefPool(this.logger);\n this.pTables = new PTablePool(this.pFrames, this.pTableDefs, this.logger);\n\n this.pTableCachePerFrame = new PTableCachePerFrame(this.logger, options);\n this.pTableCachePlain = new PTableCachePlain(this.logger, options);\n }\n\n async dispose(): Promise<void> {\n return await this.remoteBlobProvider[Symbol.asyncDispose]();\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n return await this.dispose();\n }\n\n //\n // Internal / Config API Methods\n //\n\n public createPFrame(def: PFrameDef<PColumn<PColumnData>>): PoolEntry<PFrameHandle> {\n const ValueTypes = new Set(Object.values(ValueType));\n\n const supportedColumns = def.filter((column) => ValueTypes.has(column.spec.valueType));\n const uniqueColumns = uniqueBy(supportedColumns, (column) => column.id);\n const columns = uniqueColumns.map((c) =>\n mapPObjectData(c, (d) => this.resolveDataInfo(c.spec, d)),\n );\n\n return this.pFrames.acquire(columns);\n }\n\n public createPTable(rawDef: PTableDef<PColumn<PColumnData>>): PoolEntry<PTableHandle> {\n const pFrameEntry = this.createPFrame(extractAllColumns(rawDef.src));\n const sortedDef = sortPTableDef(\n migrateTableFilter(\n mapPTableDef(rawDef, (c) => c.id),\n this.logger,\n ),\n );\n const pTableEntry = this.pTableDefs.acquire({\n type: \"v1\",\n def: sortedDef,\n pFrameHandle: pFrameEntry.key,\n });\n if (logPFrames()) {\n this.logger(\n \"info\",\n `Create PTable call (pFrameHandle = ${pFrameEntry.key}; pTableHandle = ${pTableEntry.key})`,\n );\n }\n\n const unref = () => {\n pTableEntry.unref();\n pFrameEntry.unref();\n };\n return {\n key: pTableEntry.key,\n resource: pTableEntry.resource,\n unref,\n [Symbol.dispose]: unref,\n };\n }\n\n public createPTableV2(def: PTableDefV2<PColumn<PColumnData>>): PoolEntry<PTableHandle> {\n const columns = uniqueBy(collectSpecQueryColumns(def.query), (c) => c.id);\n const columnsMap = columns.reduce(\n (acc, col) => ((acc[col.id] = col.spec), acc),\n {} as Record<string, PColumnSpec>,\n );\n\n const pFrameEntry = this.createPFrame(columns);\n const specFrame = createSpecFrame(columnsMap);\n const sortedQuery = sortSpecQuery(mapSpecQueryColumns(def.query, (c) => c.id));\n const { tableSpec, dataQuery } = specFrame.evaluateQuery(sortedQuery);\n\n const pTableEntry = this.pTableDefs.acquire({\n type: \"v2\",\n pFrameHandle: pFrameEntry.key,\n def: {\n tableSpec,\n dataQuery,\n },\n });\n if (logPFrames()) {\n this.logger(\n \"info\",\n `Create PTable call (pFrameHandle = ${pFrameEntry.key}; pTableHandle = ${pTableEntry.key})`,\n );\n }\n\n const unref = () => {\n pTableEntry.unref();\n pFrameEntry.unref();\n };\n return {\n key: pTableEntry.key,\n resource: pTableEntry.resource,\n unref,\n [Symbol.dispose]: unref,\n };\n }\n\n //\n // PFrame instance methods\n //\n\n public async findColumns(\n handle: PFrameHandle,\n request: FindColumnsRequest,\n ): Promise<FindColumnsResponse> {\n const iRequest: PFrameInternal.FindColumnsRequest = {\n ...request,\n compatibleWith:\n request.compatibleWith.length !== 0\n ? [\n {\n axesSpec: [\n ...new Map(\n request.compatibleWith.map((item) => [canonicalizeJson(item), item] as const),\n ).values(),\n ],\n qualifications: [],\n },\n ]\n : [],\n };\n\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n\n const response = await pFrame.findColumns(iRequest);\n return {\n hits: response.hits\n .filter(\n (h) =>\n // only exactly matching columns\n h.mappingVariants.length === 0 ||\n h.mappingVariants.some(\n (v) =>\n v.qualifications.forHit.length === 0 &&\n v.qualifications.forQueries.every((q) => q.length === 0),\n ),\n )\n .map((h) => h.hit),\n };\n }\n\n public async getColumnSpec(\n handle: PFrameHandle,\n columnId: PObjectId,\n ): Promise<PColumnSpec | null> {\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n return await pFrame.getColumnSpec(columnId);\n }\n\n public async listColumns(handle: PFrameHandle): Promise<PColumnIdAndSpec[]> {\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n return await pFrame.listColumns();\n }\n\n public async calculateTableData(\n handle: PFrameHandle,\n request: CalculateTableDataRequest<PObjectId>,\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<CalculateTableDataResponse> {\n if (logPFrames()) {\n this.logger(\n \"info\",\n `Call calculateTableData, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,\n );\n }\n\n const table = this.pTables.acquire({\n type: \"v1\",\n pFrameHandle: handle,\n def: sortPTableDef(migrateTableFilter(request, this.logger)),\n });\n const { pTablePromise, disposeSignal } = table.resource;\n const pTable = await pTablePromise;\n\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n return await this.frameConcurrencyLimiter.run(async () => {\n try {\n // TODO: throw error when more then 150k rows is requested\n // after pf-plots migration to stream API\n\n const spec = pTable.getSpec();\n const data = await pTable.getData([...spec.keys()], {\n range,\n signal: combinedSignal,\n });\n\n const overallSize = await pTable.getFootprint({\n signal: combinedSignal,\n });\n this.pTableCachePerFrame.cache(table, overallSize);\n\n return spec.map((spec, i) => ({\n spec: spec,\n data: data[i],\n }));\n } catch (err: unknown) {\n table.unref();\n throw err;\n }\n });\n }\n\n public async getUniqueValues(\n handle: PFrameHandle,\n request: UniqueValuesRequest,\n signal?: AbortSignal,\n ): Promise<UniqueValuesResponse> {\n if (logPFrames()) {\n this.logger(\n \"info\",\n `Call getUniqueValues, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,\n );\n }\n\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n return await this.frameConcurrencyLimiter.run(async () => {\n return await pFrame.getUniqueValues(\n {\n ...request,\n filters: migrateFilters(request.filters, this.logger),\n },\n {\n signal: combinedSignal,\n },\n );\n });\n }\n\n //\n // PTable instance methods\n //\n\n public async getSpec(handle: PTableHandle): Promise<PTableColumnSpec[]> {\n const { def } = this.pTableDefs.getByKey(handle);\n using table = this.pTables.acquire(def);\n\n const { pTablePromise } = table.resource;\n const pTable = await pTablePromise;\n\n return pTable.getSpec();\n }\n\n public async getShape(handle: PTableHandle, signal?: AbortSignal): Promise<PTableShape> {\n const { def, disposeSignal: defDisposeSignal } = this.pTableDefs.getByKey(handle);\n const table = this.pTables.acquire(def);\n\n const { pTablePromise, disposeSignal } = table.resource;\n const pTable = await pTablePromise;\n\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n const { shape, overallSize } = await this.tableConcurrencyLimiter.run(async () => {\n const shape = await pTable.getShape({\n signal: combinedSignal,\n });\n\n const overallSize = await pTable.getFootprint({\n signal: combinedSignal,\n });\n\n return { shape, overallSize };\n });\n\n this.pTableCachePlain.cache(table, overallSize, defDisposeSignal);\n return shape;\n }\n\n public async getData(\n handle: PTableHandle,\n columnIndices: number[],\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<PTableVector[]> {\n const { def, disposeSignal: defDisposeSignal } = this.pTableDefs.getByKey(handle);\n const table = this.pTables.acquire(def);\n\n const { pTablePromise, disposeSignal } = table.resource;\n const pTable = await pTablePromise;\n\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n const { data, overallSize } = await this.tableConcurrencyLimiter.run(async () => {\n const data = await pTable.getData(columnIndices, {\n range,\n signal: combinedSignal,\n });\n\n const overallSize = await pTable.getFootprint({\n signal: combinedSignal,\n });\n\n return { data, overallSize };\n });\n\n this.pTableCachePlain.cache(table, overallSize, defDisposeSignal);\n return data;\n }\n}\n\nfunction migrateFilters(\n filters: PTableRecordFilter[],\n logger: PFrameInternal.Logger,\n): PTableRecordFilter[] {\n const filtersV1 = [];\n const filtersV2: PTableRecordSingleValueFilterV2[] = [];\n for (const filter of filters) {\n if ((filter.type as unknown) === \"bySingleColumn\") {\n filtersV1.push(filter);\n filtersV2.push({\n ...filter,\n type: \"bySingleColumnV2\",\n });\n } else {\n filtersV2.push(filter);\n }\n }\n if (filtersV1.length > 0) {\n const filtersV1Json = JSON.stringify(filtersV1);\n logger(\n \"warn\",\n `type overwritten from 'bySingleColumn' to 'bySingleColumnV2' for filters: ${filtersV1Json}`,\n );\n }\n return filtersV2;\n}\n\nfunction migrateTableFilter<T>(\n def: Omit<PTableDef<T>, \"partitionFilters\"> | PTableDef<T>,\n logger: PFrameInternal.Logger,\n): PTableDef<T> {\n if (!(\"partitionFilters\" in def)) {\n // For old blocks assume all axes filters to be partition filters\n return {\n ...def,\n partitionFilters: migrateFilters(\n def.filters.filter((f) => f.column.type === \"axis\"),\n logger,\n ),\n filters: migrateFilters(\n def.filters.filter((f) => f.column.type === \"column\"),\n logger,\n ),\n };\n }\n return {\n ...def,\n partitionFilters: migrateFilters(def.partitionFilters, logger),\n filters: migrateFilters(def.filters, logger),\n };\n}\n"],"names":["PTableCachePerFrameOpsDefaults","PTableCachePlainOpsDefaults","PFrameFactory","tmpdir","ConcurrencyLimitingExecutor","PFramePool","PTableDefPool","PTablePool","PTableCachePerFrame","PTableCachePlain","ValueType","uniqueBy","mapPObjectData","extractAllColumns","sortPTableDef","mapPTableDef","logPFrames","collectSpecQueryColumns","createSpecFrame","sortSpecQuery","mapSpecQueryColumns","canonicalizeJson","bigintReplacer","__addDisposableResource"],"mappings":"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"}
1
+ {"version":3,"file":"driver_impl.cjs","names":["PTableCachePerFrameOpsDefaults","PTableCachePlainOpsDefaults","PFrameFactory","ConcurrencyLimitingExecutor","PFramePool","PTableDefPool","PTablePool","PTableCachePerFrame","PTableCachePlain","ValueType","logPFrames","bigintReplacer"],"sources":["../src/driver_impl.ts"],"sourcesContent":["import {\n mapPObjectData,\n mapPTableDef,\n extractAllColumns,\n uniqueBy,\n canonicalizeJson,\n bigintReplacer,\n ValueType,\n type CalculateTableDataRequest,\n type CalculateTableDataResponse,\n type FindColumnsRequest,\n type FindColumnsResponse,\n type PColumnIdAndSpec,\n type PColumnSpec,\n type PFrameHandle,\n type PObjectId,\n type PTableColumnSpec,\n type PTableHandle,\n type PTableShape,\n type PTableVector,\n type TableRange,\n type UniqueValuesRequest,\n type UniqueValuesResponse,\n type PColumn,\n type PFrameDef,\n type PTableDef,\n type PTableRecordSingleValueFilterV2,\n type PTableRecordFilter,\n type JsonSerializable,\n type PTableDefV2,\n mapSpecQueryColumns,\n collectSpecQueryColumns,\n sortSpecQuery,\n sortPTableDef,\n} from \"@platforma-sdk/model\";\nimport type { PFrameInternal } from \"@milaboratories/pl-model-middle-layer\";\nimport { ConcurrencyLimitingExecutor, type PoolEntry } from \"@milaboratories/ts-helpers\";\nimport { PFrameFactory } from \"@milaboratories/pframes-rs-node\";\nimport { tmpdir } from \"node:os\";\nimport type { AbstractInternalPFrameDriver } from \"./driver_decl\";\nimport { logPFrames } from \"./logging\";\nimport {\n PFramePool,\n type LocalBlobProvider as PoolLocalBlobProvider,\n type RemoteBlobProvider as PoolRemoteBlobProvider,\n} from \"./pframe_pool\";\nimport { PTableDefPool } from \"./ptable_def_pool\";\nimport { PTablePool } from \"./ptable_pool\";\nimport {\n PTableCachePerFrame,\n PTableCachePerFrameOpsDefaults,\n type PTableCachePerFrameOps,\n} from \"./ptable_cache_per_frame\";\nimport {\n PTableCachePlain,\n PTableCachePlainOpsDefaults,\n type PTableCachePlainOps,\n} from \"./ptable_cache_plain\";\nimport { createPFrame as createSpecFrame } from \"@milaboratories/pframes-rs-wasm\";\n\nexport interface LocalBlobProvider<\n TreeEntry extends JsonSerializable,\n> extends PoolLocalBlobProvider<TreeEntry> {}\n\nexport interface RemoteBlobProvider<TreeEntry extends JsonSerializable>\n extends PoolRemoteBlobProvider<TreeEntry>, AsyncDisposable {}\n\nexport type AbstractPFrameDriverOps = PTableCachePerFrameOps &\n PTableCachePlainOps & {\n /** Concurrency limits for `getUniqueValues` and `calculateTableData` requests */\n pFrameConcurrency: number;\n /** Concurrency limits for `getShape` and `getData` requests */\n pTableConcurrency: number;\n };\n\nexport const AbstractPFrameDriverOpsDefaults: AbstractPFrameDriverOps = {\n ...PTableCachePerFrameOpsDefaults,\n ...PTableCachePlainOpsDefaults,\n pFrameConcurrency: 1, // 1 join is executed in parallel and utilize all RAM and CPU cores\n pTableConcurrency: 1, // 1 joined table is read from disk at a time, which matches 1 table the user can view in the UI\n};\n\nexport type DataInfoResolver<PColumnData, TreeEntry extends JsonSerializable> = (\n spec: PColumnSpec,\n data: PColumnData,\n) => PFrameInternal.DataInfo<TreeEntry>;\n\nexport class AbstractPFrameDriver<\n PColumnData,\n TreeEntry extends JsonSerializable,\n> implements AbstractInternalPFrameDriver<PColumnData> {\n private readonly logger: PFrameInternal.Logger;\n\n private readonly localBlobProvider: LocalBlobProvider<TreeEntry>;\n private readonly remoteBlobProvider: RemoteBlobProvider<TreeEntry>;\n\n private readonly resolveDataInfo: DataInfoResolver<PColumnData, TreeEntry>;\n\n private readonly pFrames: PFramePool<TreeEntry>;\n private readonly pTableDefs: PTableDefPool;\n private readonly pTables: PTablePool<TreeEntry>;\n\n private readonly pTableCachePerFrame: PTableCachePerFrame;\n private readonly pTableCachePlain: PTableCachePlain;\n\n private readonly frameConcurrencyLimiter: ConcurrencyLimitingExecutor;\n private readonly tableConcurrencyLimiter: ConcurrencyLimitingExecutor;\n\n public async pprofDump(): Promise<Uint8Array> {\n return await PFrameFactory.pprofDump();\n }\n\n public constructor({\n logger = () => {},\n localBlobProvider,\n remoteBlobProvider,\n spillPath = tmpdir(),\n options = AbstractPFrameDriverOpsDefaults,\n resolveDataInfo,\n }: {\n logger?: PFrameInternal.Logger;\n localBlobProvider: LocalBlobProvider<TreeEntry>;\n remoteBlobProvider: RemoteBlobProvider<TreeEntry>;\n spillPath?: string;\n options?: AbstractPFrameDriverOps;\n resolveDataInfo: DataInfoResolver<PColumnData, TreeEntry>;\n }) {\n this.logger = logger;\n\n this.localBlobProvider = localBlobProvider;\n this.remoteBlobProvider = remoteBlobProvider;\n\n this.resolveDataInfo = resolveDataInfo;\n\n this.frameConcurrencyLimiter = new ConcurrencyLimitingExecutor(options.pFrameConcurrency);\n this.tableConcurrencyLimiter = new ConcurrencyLimitingExecutor(options.pTableConcurrency);\n\n this.pFrames = new PFramePool(\n this.localBlobProvider,\n this.remoteBlobProvider,\n this.logger,\n spillPath,\n );\n this.pTableDefs = new PTableDefPool(this.logger);\n this.pTables = new PTablePool(this.pFrames, this.pTableDefs, this.logger);\n\n this.pTableCachePerFrame = new PTableCachePerFrame(this.logger, options);\n this.pTableCachePlain = new PTableCachePlain(this.logger, options);\n }\n\n async dispose(): Promise<void> {\n return await this.remoteBlobProvider[Symbol.asyncDispose]();\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n return await this.dispose();\n }\n\n //\n // Internal / Config API Methods\n //\n\n public createPFrame(def: PFrameDef<PColumn<PColumnData>>): PoolEntry<PFrameHandle> {\n const ValueTypes = new Set(Object.values(ValueType));\n\n const supportedColumns = def.filter((column) => ValueTypes.has(column.spec.valueType));\n const uniqueColumns = uniqueBy(supportedColumns, (column) => column.id);\n const columns = uniqueColumns.map((c) =>\n mapPObjectData(c, (d) => this.resolveDataInfo(c.spec, d)),\n );\n\n return this.pFrames.acquire(columns);\n }\n\n public createPTable(rawDef: PTableDef<PColumn<PColumnData>>): PoolEntry<PTableHandle> {\n const pFrameEntry = this.createPFrame(extractAllColumns(rawDef.src));\n const sortedDef = sortPTableDef(\n migrateTableFilter(\n mapPTableDef(rawDef, (c) => c.id),\n this.logger,\n ),\n );\n const pTableEntry = this.pTableDefs.acquire({\n type: \"v1\",\n def: sortedDef,\n pFrameHandle: pFrameEntry.key,\n });\n if (logPFrames()) {\n this.logger(\n \"info\",\n `Create PTable call (pFrameHandle = ${pFrameEntry.key}; pTableHandle = ${pTableEntry.key})`,\n );\n }\n\n const unref = () => {\n pTableEntry.unref();\n pFrameEntry.unref();\n };\n return {\n key: pTableEntry.key,\n resource: pTableEntry.resource,\n unref,\n [Symbol.dispose]: unref,\n };\n }\n\n public createPTableV2(def: PTableDefV2<PColumn<PColumnData>>): PoolEntry<PTableHandle> {\n const columns = uniqueBy(collectSpecQueryColumns(def.query), (c) => c.id);\n const columnsMap = columns.reduce(\n (acc, col) => ((acc[col.id] = col.spec), acc),\n {} as Record<string, PColumnSpec>,\n );\n\n const pFrameEntry = this.createPFrame(columns);\n const specFrame = createSpecFrame(columnsMap);\n const sortedQuery = sortSpecQuery(mapSpecQueryColumns(def.query, (c) => c.id));\n const { tableSpec, dataQuery } = specFrame.evaluateQuery(sortedQuery);\n\n const pTableEntry = this.pTableDefs.acquire({\n type: \"v2\",\n pFrameHandle: pFrameEntry.key,\n def: {\n tableSpec,\n dataQuery,\n },\n });\n if (logPFrames()) {\n this.logger(\n \"info\",\n `Create PTable call (pFrameHandle = ${pFrameEntry.key}; pTableHandle = ${pTableEntry.key})`,\n );\n }\n\n const unref = () => {\n pTableEntry.unref();\n pFrameEntry.unref();\n };\n return {\n key: pTableEntry.key,\n resource: pTableEntry.resource,\n unref,\n [Symbol.dispose]: unref,\n };\n }\n\n //\n // PFrame instance methods\n //\n\n public async findColumns(\n handle: PFrameHandle,\n request: FindColumnsRequest,\n ): Promise<FindColumnsResponse> {\n const iRequest: PFrameInternal.FindColumnsRequest = {\n ...request,\n compatibleWith:\n request.compatibleWith.length !== 0\n ? [\n {\n axesSpec: [\n ...new Map(\n request.compatibleWith.map((item) => [canonicalizeJson(item), item] as const),\n ).values(),\n ],\n qualifications: [],\n },\n ]\n : [],\n };\n\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n\n const response = await pFrame.findColumns(iRequest);\n return {\n hits: response.hits\n .filter(\n (h) =>\n // only exactly matching columns\n h.mappingVariants.length === 0 ||\n h.mappingVariants.some(\n (v) =>\n v.qualifications.forHit.length === 0 &&\n v.qualifications.forQueries.every((q) => q.length === 0),\n ),\n )\n .map((h) => h.hit),\n };\n }\n\n public async getColumnSpec(\n handle: PFrameHandle,\n columnId: PObjectId,\n ): Promise<PColumnSpec | null> {\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n return await pFrame.getColumnSpec(columnId);\n }\n\n public async listColumns(handle: PFrameHandle): Promise<PColumnIdAndSpec[]> {\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n return await pFrame.listColumns();\n }\n\n public async calculateTableData(\n handle: PFrameHandle,\n request: CalculateTableDataRequest<PObjectId>,\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<CalculateTableDataResponse> {\n if (logPFrames()) {\n this.logger(\n \"info\",\n `Call calculateTableData, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,\n );\n }\n\n const table = this.pTables.acquire({\n type: \"v1\",\n pFrameHandle: handle,\n def: sortPTableDef(migrateTableFilter(request, this.logger)),\n });\n const { pTablePromise, disposeSignal } = table.resource;\n const pTable = await pTablePromise;\n\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n return await this.frameConcurrencyLimiter.run(async () => {\n try {\n // TODO: throw error when more then 150k rows is requested\n // after pf-plots migration to stream API\n\n const spec = pTable.getSpec();\n const data = await pTable.getData([...spec.keys()], {\n range,\n signal: combinedSignal,\n });\n\n const overallSize = await pTable.getFootprint({\n signal: combinedSignal,\n });\n this.pTableCachePerFrame.cache(table, overallSize);\n\n return spec.map((spec, i) => ({\n spec: spec,\n data: data[i],\n }));\n } catch (err: unknown) {\n table.unref();\n throw err;\n }\n });\n }\n\n public async getUniqueValues(\n handle: PFrameHandle,\n request: UniqueValuesRequest,\n signal?: AbortSignal,\n ): Promise<UniqueValuesResponse> {\n if (logPFrames()) {\n this.logger(\n \"info\",\n `Call getUniqueValues, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,\n );\n }\n\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n return await this.frameConcurrencyLimiter.run(async () => {\n return await pFrame.getUniqueValues(\n {\n ...request,\n filters: migrateFilters(request.filters, this.logger),\n },\n {\n signal: combinedSignal,\n },\n );\n });\n }\n\n //\n // PTable instance methods\n //\n\n public async getSpec(handle: PTableHandle): Promise<PTableColumnSpec[]> {\n const { def } = this.pTableDefs.getByKey(handle);\n using table = this.pTables.acquire(def);\n\n const { pTablePromise } = table.resource;\n const pTable = await pTablePromise;\n\n return pTable.getSpec();\n }\n\n public async getShape(handle: PTableHandle, signal?: AbortSignal): Promise<PTableShape> {\n const { def, disposeSignal: defDisposeSignal } = this.pTableDefs.getByKey(handle);\n const table = this.pTables.acquire(def);\n\n const { pTablePromise, disposeSignal } = table.resource;\n const pTable = await pTablePromise;\n\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n const { shape, overallSize } = await this.tableConcurrencyLimiter.run(async () => {\n const shape = await pTable.getShape({\n signal: combinedSignal,\n });\n\n const overallSize = await pTable.getFootprint({\n signal: combinedSignal,\n });\n\n return { shape, overallSize };\n });\n\n this.pTableCachePlain.cache(table, overallSize, defDisposeSignal);\n return shape;\n }\n\n public async getData(\n handle: PTableHandle,\n columnIndices: number[],\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<PTableVector[]> {\n const { def, disposeSignal: defDisposeSignal } = this.pTableDefs.getByKey(handle);\n const table = this.pTables.acquire(def);\n\n const { pTablePromise, disposeSignal } = table.resource;\n const pTable = await pTablePromise;\n\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n const { data, overallSize } = await this.tableConcurrencyLimiter.run(async () => {\n const data = await pTable.getData(columnIndices, {\n range,\n signal: combinedSignal,\n });\n\n const overallSize = await pTable.getFootprint({\n signal: combinedSignal,\n });\n\n return { data, overallSize };\n });\n\n this.pTableCachePlain.cache(table, overallSize, defDisposeSignal);\n return data;\n }\n}\n\nfunction migrateFilters(\n filters: PTableRecordFilter[],\n logger: PFrameInternal.Logger,\n): PTableRecordFilter[] {\n const filtersV1 = [];\n const filtersV2: PTableRecordSingleValueFilterV2[] = [];\n for (const filter of filters) {\n if ((filter.type as unknown) === \"bySingleColumn\") {\n filtersV1.push(filter);\n filtersV2.push({\n ...filter,\n type: \"bySingleColumnV2\",\n });\n } else {\n filtersV2.push(filter);\n }\n }\n if (filtersV1.length > 0) {\n const filtersV1Json = JSON.stringify(filtersV1);\n logger(\n \"warn\",\n `type overwritten from 'bySingleColumn' to 'bySingleColumnV2' for filters: ${filtersV1Json}`,\n );\n }\n return filtersV2;\n}\n\nfunction migrateTableFilter<T>(\n def: Omit<PTableDef<T>, \"partitionFilters\"> | PTableDef<T>,\n logger: PFrameInternal.Logger,\n): PTableDef<T> {\n if (!(\"partitionFilters\" in def)) {\n // For old blocks assume all axes filters to be partition filters\n return {\n ...def,\n partitionFilters: migrateFilters(\n def.filters.filter((f) => f.column.type === \"axis\"),\n logger,\n ),\n filters: migrateFilters(\n def.filters.filter((f) => f.column.type === \"column\"),\n logger,\n ),\n };\n }\n return {\n ...def,\n partitionFilters: migrateFilters(def.partitionFilters, logger),\n filters: migrateFilters(def.filters, logger),\n };\n}\n"],"mappings":"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"}