@milaboratories/pf-driver 1.0.47 → 1.0.49

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.
@@ -86,15 +86,12 @@ class AbstractPFrameDriver {
86
86
  };
87
87
  }
88
88
  createPTableV2(def) {
89
- const columns = model.uniqueBy(model.collectQueryColumns(def.query), (c) => c.id);
89
+ const columns = model.uniqueBy(model.collectSpecQueryColumns(def.query), (c) => c.id);
90
90
  const columnsMap = columns.reduce((acc, col) => ((acc[col.id] = col.spec), acc), {});
91
91
  const pFrameEntry = this.createPFrame(columns);
92
92
  const specFrame = pframesRsWasm.createPFrame(columnsMap);
93
- const sortedQuery = model.sortQuerySpec(model.mapQuerySpec(def.query, (c) => c.id));
94
- const { tableSpec, dataQuery } = specFrame.evaluateQuery(
95
- // WASM crate expects `columnId` field name, our types use `column`
96
- // @todo: remove it after update wasm package
97
- querySpecToWasm(sortedQuery));
93
+ const sortedQuery = model.sortSpecQuery(model.mapSpecQueryColumns(def.query, (c) => c.id));
94
+ const { tableSpec, dataQuery } = specFrame.evaluateQuery(sortedQuery);
98
95
  const pTableEntry = this.pTableDefs.acquire({
99
96
  type: "v2",
100
97
  pFrameHandle: pFrameEntry.key,
@@ -267,48 +264,6 @@ class AbstractPFrameDriver {
267
264
  return data;
268
265
  }
269
266
  }
270
- /**
271
- * Converts a SpecQuery to the format expected by the WASM crate.
272
- * Renames `column` → `columnId` in leaf nodes (QueryColumn, QuerySparseToDenseColumn).
273
- */
274
- function querySpecToWasm(query) {
275
- switch (query.type) {
276
- case "column":
277
- return { type: "column", columnId: query.column };
278
- case "sparseToDenseColumn": {
279
- const { column, ...rest } = query;
280
- return { ...rest, columnId: column };
281
- }
282
- case "inlineColumn":
283
- return query;
284
- case "innerJoin":
285
- case "fullJoin":
286
- return {
287
- ...query,
288
- entries: query.entries.map((e) => ({
289
- ...e,
290
- entry: querySpecToWasm(e.entry),
291
- })),
292
- };
293
- case "outerJoin":
294
- return {
295
- ...query,
296
- primary: { ...query.primary, entry: querySpecToWasm(query.primary.entry) },
297
- secondary: query.secondary.map((e) => ({
298
- ...e,
299
- entry: querySpecToWasm(e.entry),
300
- })),
301
- };
302
- case "filter":
303
- return { ...query, input: querySpecToWasm(query.input) };
304
- case "sort":
305
- return { ...query, input: querySpecToWasm(query.input) };
306
- case "sliceAxes":
307
- return { ...query, input: querySpecToWasm(query.input) };
308
- default:
309
- tsHelpers.assertNever(query);
310
- }
311
- }
312
267
  function migrateFilters(filters, logger) {
313
268
  const filtersV1 = [];
314
269
  const filtersV2 = [];
@@ -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 type SpecQuery,\n mapQuerySpec,\n collectQueryColumns,\n sortQuerySpec,\n sortPTableDef,\n} from \"@platforma-sdk/model\";\nimport type { PFrameInternal } from \"@milaboratories/pl-model-middle-layer\";\nimport {\n assertNever,\n ConcurrencyLimitingExecutor,\n type PoolEntry,\n} 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(collectQueryColumns(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 = sortQuerySpec(mapQuerySpec(def.query, (c) => c.id));\n const { tableSpec, dataQuery } = specFrame.evaluateQuery(\n // WASM crate expects `columnId` field name, our types use `column`\n // @todo: remove it after update wasm package\n querySpecToWasm(sortedQuery) as SpecQuery,\n );\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\n/**\n * Converts a SpecQuery to the format expected by the WASM crate.\n * Renames `column` → `columnId` in leaf nodes (QueryColumn, QuerySparseToDenseColumn).\n */\nfunction querySpecToWasm(query: SpecQuery): unknown {\n switch (query.type) {\n case \"column\":\n return { type: \"column\", columnId: query.column };\n case \"sparseToDenseColumn\": {\n const { column, ...rest } = query;\n return { ...rest, columnId: column };\n }\n case \"inlineColumn\":\n return query;\n case \"innerJoin\":\n case \"fullJoin\":\n return {\n ...query,\n entries: query.entries.map((e) => ({\n ...e,\n entry: querySpecToWasm(e.entry),\n })),\n };\n case \"outerJoin\":\n return {\n ...query,\n primary: { ...query.primary, entry: querySpecToWasm(query.primary.entry) },\n secondary: query.secondary.map((e) => ({\n ...e,\n entry: querySpecToWasm(e.entry),\n })),\n };\n case \"filter\":\n return { ...query, input: querySpecToWasm(query.input) };\n case \"sort\":\n return { ...query, input: querySpecToWasm(query.input) };\n case \"sliceAxes\":\n return { ...query, input: querySpecToWasm(query.input) };\n default:\n assertNever(query);\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","collectQueryColumns","createSpecFrame","sortQuerySpec","mapQuerySpec","canonicalizeJson","bigintReplacer","__addDisposableResource","assertNever"],"mappings":"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"}
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 +1 @@
1
- {"version":3,"file":"driver_impl.d.ts","sourceRoot":"","sources":["../src/driver_impl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"driver_impl.d.ts","sourceRoot":"","sources":["../src/driver_impl.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { __addDisposableResource, __disposeResources } from './__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';
2
- import { ValueType, uniqueBy, mapPObjectData, extractAllColumns, sortPTableDef, mapPTableDef, collectQueryColumns, sortQuerySpec, mapQuerySpec, canonicalizeJson, bigintReplacer } from '@platforma-sdk/model';
3
- import { ConcurrencyLimitingExecutor, assertNever } from '@milaboratories/ts-helpers';
2
+ import { ValueType, uniqueBy, mapPObjectData, extractAllColumns, sortPTableDef, mapPTableDef, collectSpecQueryColumns, sortSpecQuery, mapSpecQueryColumns, canonicalizeJson, bigintReplacer } from '@platforma-sdk/model';
3
+ import { ConcurrencyLimitingExecutor } from '@milaboratories/ts-helpers';
4
4
  import { PFrameFactory } from '@milaboratories/pframes-rs-node';
5
5
  import { tmpdir } from 'node:os';
6
6
  import { logPFrames } from './logging.js';
@@ -84,15 +84,12 @@ class AbstractPFrameDriver {
84
84
  };
85
85
  }
86
86
  createPTableV2(def) {
87
- const columns = uniqueBy(collectQueryColumns(def.query), (c) => c.id);
87
+ const columns = uniqueBy(collectSpecQueryColumns(def.query), (c) => c.id);
88
88
  const columnsMap = columns.reduce((acc, col) => ((acc[col.id] = col.spec), acc), {});
89
89
  const pFrameEntry = this.createPFrame(columns);
90
90
  const specFrame = createPFrame(columnsMap);
91
- const sortedQuery = sortQuerySpec(mapQuerySpec(def.query, (c) => c.id));
92
- const { tableSpec, dataQuery } = specFrame.evaluateQuery(
93
- // WASM crate expects `columnId` field name, our types use `column`
94
- // @todo: remove it after update wasm package
95
- querySpecToWasm(sortedQuery));
91
+ const sortedQuery = sortSpecQuery(mapSpecQueryColumns(def.query, (c) => c.id));
92
+ const { tableSpec, dataQuery } = specFrame.evaluateQuery(sortedQuery);
96
93
  const pTableEntry = this.pTableDefs.acquire({
97
94
  type: "v2",
98
95
  pFrameHandle: pFrameEntry.key,
@@ -265,48 +262,6 @@ class AbstractPFrameDriver {
265
262
  return data;
266
263
  }
267
264
  }
268
- /**
269
- * Converts a SpecQuery to the format expected by the WASM crate.
270
- * Renames `column` → `columnId` in leaf nodes (QueryColumn, QuerySparseToDenseColumn).
271
- */
272
- function querySpecToWasm(query) {
273
- switch (query.type) {
274
- case "column":
275
- return { type: "column", columnId: query.column };
276
- case "sparseToDenseColumn": {
277
- const { column, ...rest } = query;
278
- return { ...rest, columnId: column };
279
- }
280
- case "inlineColumn":
281
- return query;
282
- case "innerJoin":
283
- case "fullJoin":
284
- return {
285
- ...query,
286
- entries: query.entries.map((e) => ({
287
- ...e,
288
- entry: querySpecToWasm(e.entry),
289
- })),
290
- };
291
- case "outerJoin":
292
- return {
293
- ...query,
294
- primary: { ...query.primary, entry: querySpecToWasm(query.primary.entry) },
295
- secondary: query.secondary.map((e) => ({
296
- ...e,
297
- entry: querySpecToWasm(e.entry),
298
- })),
299
- };
300
- case "filter":
301
- return { ...query, input: querySpecToWasm(query.input) };
302
- case "sort":
303
- return { ...query, input: querySpecToWasm(query.input) };
304
- case "sliceAxes":
305
- return { ...query, input: querySpecToWasm(query.input) };
306
- default:
307
- assertNever(query);
308
- }
309
- }
310
265
  function migrateFilters(filters, logger) {
311
266
  const filtersV1 = [];
312
267
  const filtersV2 = [];
@@ -1 +1 @@
1
- {"version":3,"file":"driver_impl.js","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 type SpecQuery,\n mapQuerySpec,\n collectQueryColumns,\n sortQuerySpec,\n sortPTableDef,\n} from \"@platforma-sdk/model\";\nimport type { PFrameInternal } from \"@milaboratories/pl-model-middle-layer\";\nimport {\n assertNever,\n ConcurrencyLimitingExecutor,\n type PoolEntry,\n} 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(collectQueryColumns(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 = sortQuerySpec(mapQuerySpec(def.query, (c) => c.id));\n const { tableSpec, dataQuery } = specFrame.evaluateQuery(\n // WASM crate expects `columnId` field name, our types use `column`\n // @todo: remove it after update wasm package\n querySpecToWasm(sortedQuery) as SpecQuery,\n );\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\n/**\n * Converts a SpecQuery to the format expected by the WASM crate.\n * Renames `column` → `columnId` in leaf nodes (QueryColumn, QuerySparseToDenseColumn).\n */\nfunction querySpecToWasm(query: SpecQuery): unknown {\n switch (query.type) {\n case \"column\":\n return { type: \"column\", columnId: query.column };\n case \"sparseToDenseColumn\": {\n const { column, ...rest } = query;\n return { ...rest, columnId: column };\n }\n case \"inlineColumn\":\n return query;\n case \"innerJoin\":\n case \"fullJoin\":\n return {\n ...query,\n entries: query.entries.map((e) => ({\n ...e,\n entry: querySpecToWasm(e.entry),\n })),\n };\n case \"outerJoin\":\n return {\n ...query,\n primary: { ...query.primary, entry: querySpecToWasm(query.primary.entry) },\n secondary: query.secondary.map((e) => ({\n ...e,\n entry: querySpecToWasm(e.entry),\n })),\n };\n case \"filter\":\n return { ...query, input: querySpecToWasm(query.input) };\n case \"sort\":\n return { ...query, input: querySpecToWasm(query.input) };\n case \"sliceAxes\":\n return { ...query, input: querySpecToWasm(query.input) };\n default:\n assertNever(query);\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":["createSpecFrame"],"mappings":"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"}
1
+ {"version":3,"file":"driver_impl.js","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":["createSpecFrame"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/pf-driver",
3
- "version": "1.0.47",
3
+ "version": "1.0.49",
4
4
  "description": "PFrameDriver implementation abstracted from Middle Layer",
5
5
  "keywords": [],
6
6
  "license": "UNLICENSED",
@@ -20,12 +20,12 @@
20
20
  }
21
21
  },
22
22
  "dependencies": {
23
- "@milaboratories/pframes-rs-node": "1.1.3",
24
- "@milaboratories/pframes-rs-wasm": "0.1.2",
23
+ "@milaboratories/pframes-rs-node": "1.1.7",
24
+ "@milaboratories/pframes-rs-wasm": "1.1.7",
25
25
  "es-toolkit": "^1.39.10",
26
26
  "lru-cache": "^11.2.2",
27
- "@milaboratories/pl-model-middle-layer": "1.11.11",
28
- "@platforma-sdk/model": "1.54.9",
27
+ "@platforma-sdk/model": "1.54.13",
28
+ "@milaboratories/pl-model-middle-layer": "1.11.13",
29
29
  "@milaboratories/ts-helpers": "1.7.2"
30
30
  },
31
31
  "devDependencies": {
@@ -33,9 +33,9 @@
33
33
  "@vitest/coverage-istanbul": "^4.0.16",
34
34
  "typescript": "~5.6.3",
35
35
  "vitest": "^4.0.16",
36
- "@milaboratories/build-configs": "1.4.4",
36
+ "@milaboratories/ts-builder": "1.2.10",
37
37
  "@milaboratories/ts-configs": "1.2.1",
38
- "@milaboratories/ts-builder": "1.2.10"
38
+ "@milaboratories/build-configs": "1.4.4"
39
39
  },
40
40
  "engines": {
41
41
  "node": ">=22.19.0"
@@ -28,18 +28,13 @@ import {
28
28
  type PTableRecordFilter,
29
29
  type JsonSerializable,
30
30
  type PTableDefV2,
31
- type SpecQuery,
32
- mapQuerySpec,
33
- collectQueryColumns,
34
- sortQuerySpec,
31
+ mapSpecQueryColumns,
32
+ collectSpecQueryColumns,
33
+ sortSpecQuery,
35
34
  sortPTableDef,
36
35
  } from "@platforma-sdk/model";
37
36
  import type { PFrameInternal } from "@milaboratories/pl-model-middle-layer";
38
- import {
39
- assertNever,
40
- ConcurrencyLimitingExecutor,
41
- type PoolEntry,
42
- } from "@milaboratories/ts-helpers";
37
+ import { ConcurrencyLimitingExecutor, type PoolEntry } from "@milaboratories/ts-helpers";
43
38
  import { PFrameFactory } from "@milaboratories/pframes-rs-node";
44
39
  import { tmpdir } from "node:os";
45
40
  import type { AbstractInternalPFrameDriver } from "./driver_decl";
@@ -210,7 +205,7 @@ export class AbstractPFrameDriver<
210
205
  }
211
206
 
212
207
  public createPTableV2(def: PTableDefV2<PColumn<PColumnData>>): PoolEntry<PTableHandle> {
213
- const columns = uniqueBy(collectQueryColumns(def.query), (c) => c.id);
208
+ const columns = uniqueBy(collectSpecQueryColumns(def.query), (c) => c.id);
214
209
  const columnsMap = columns.reduce(
215
210
  (acc, col) => ((acc[col.id] = col.spec), acc),
216
211
  {} as Record<string, PColumnSpec>,
@@ -218,12 +213,8 @@ export class AbstractPFrameDriver<
218
213
 
219
214
  const pFrameEntry = this.createPFrame(columns);
220
215
  const specFrame = createSpecFrame(columnsMap);
221
- const sortedQuery = sortQuerySpec(mapQuerySpec(def.query, (c) => c.id));
222
- const { tableSpec, dataQuery } = specFrame.evaluateQuery(
223
- // WASM crate expects `columnId` field name, our types use `column`
224
- // @todo: remove it after update wasm package
225
- querySpecToWasm(sortedQuery) as SpecQuery,
226
- );
216
+ const sortedQuery = sortSpecQuery(mapSpecQueryColumns(def.query, (c) => c.id));
217
+ const { tableSpec, dataQuery } = specFrame.evaluateQuery(sortedQuery);
227
218
 
228
219
  const pTableEntry = this.pTableDefs.acquire({
229
220
  type: "v2",
@@ -459,49 +450,6 @@ export class AbstractPFrameDriver<
459
450
  }
460
451
  }
461
452
 
462
- /**
463
- * Converts a SpecQuery to the format expected by the WASM crate.
464
- * Renames `column` → `columnId` in leaf nodes (QueryColumn, QuerySparseToDenseColumn).
465
- */
466
- function querySpecToWasm(query: SpecQuery): unknown {
467
- switch (query.type) {
468
- case "column":
469
- return { type: "column", columnId: query.column };
470
- case "sparseToDenseColumn": {
471
- const { column, ...rest } = query;
472
- return { ...rest, columnId: column };
473
- }
474
- case "inlineColumn":
475
- return query;
476
- case "innerJoin":
477
- case "fullJoin":
478
- return {
479
- ...query,
480
- entries: query.entries.map((e) => ({
481
- ...e,
482
- entry: querySpecToWasm(e.entry),
483
- })),
484
- };
485
- case "outerJoin":
486
- return {
487
- ...query,
488
- primary: { ...query.primary, entry: querySpecToWasm(query.primary.entry) },
489
- secondary: query.secondary.map((e) => ({
490
- ...e,
491
- entry: querySpecToWasm(e.entry),
492
- })),
493
- };
494
- case "filter":
495
- return { ...query, input: querySpecToWasm(query.input) };
496
- case "sort":
497
- return { ...query, input: querySpecToWasm(query.input) };
498
- case "sliceAxes":
499
- return { ...query, input: querySpecToWasm(query.input) };
500
- default:
501
- assertNever(query);
502
- }
503
- }
504
-
505
453
  function migrateFilters(
506
454
  filters: PTableRecordFilter[],
507
455
  logger: PFrameInternal.Logger,