@milaboratories/pl-middle-layer 1.42.38 → 1.42.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/pool/data.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { PFrameDriverError } from '@platforma-sdk/model';
2
2
  import canonicalize from 'canonicalize';
3
- import { resourceType, resourceTypesEqual, resourceTypeToString, isNullResourceId } from '@milaboratories/pl-client';
3
+ import { resourceType, isNullResourceId, resourceTypesEqual, resourceTypeToString } from '@milaboratories/pl-client';
4
4
  import { createHash } from 'node:crypto';
5
5
 
6
6
  const PColumnDataJsonPartitioned = resourceType('PColumnData/JsonPartitioned', '1');
@@ -10,6 +10,9 @@ const PColumnDataBinarySuperPartitioned = resourceType('PColumnData/Partitioned/
10
10
  const PColumnDataParquetPartitioned = resourceType('PColumnData/ParquetPartitioned', '1');
11
11
  const PColumnDataParquetSuperPartitioned = resourceType('PColumnData/Partitioned/ParquetPartitioned', '1');
12
12
  const PColumnDataJson = resourceType('PColumnData/Json', '1');
13
+ const ParquetChunkResourceType = resourceType('ParquetChunk', '1');
14
+ const BinaryPartitionedIndexFieldSuffix = '.index';
15
+ const BinaryPartitionedValuesFieldSuffix = '.values';
13
16
  function parseDataInfoResource(data) {
14
17
  if (!data.getIsReadyOrError())
15
18
  throw new PFrameDriverError('Data not ready.');
@@ -62,8 +65,8 @@ function parseDataInfoResource(data) {
62
65
  const parts = {};
63
66
  // parsing the structure
64
67
  for (const field of data.listInputFields()) {
65
- if (field.endsWith('.index')) {
66
- const partKey = field.slice(0, field.length - 6);
68
+ if (field.endsWith(BinaryPartitionedIndexFieldSuffix)) {
69
+ const partKey = field.slice(0, -BinaryPartitionedIndexFieldSuffix.length);
67
70
  let part = parts[partKey];
68
71
  if (part === undefined) {
69
72
  part = {};
@@ -71,8 +74,8 @@ function parseDataInfoResource(data) {
71
74
  }
72
75
  part.index = data.traverse({ field, errorIfFieldNotSet: true }).persist();
73
76
  }
74
- else if (field.endsWith('.values')) {
75
- const partKey = field.slice(0, field.length - 7);
77
+ else if (field.endsWith(BinaryPartitionedValuesFieldSuffix)) {
78
+ const partKey = field.slice(0, -BinaryPartitionedValuesFieldSuffix.length);
76
79
  let part = parts[partKey];
77
80
  if (part === undefined) {
78
81
  part = {};
@@ -105,8 +108,8 @@ function parseDataInfoResource(data) {
105
108
  if (keys === undefined)
106
109
  throw new PFrameDriverError(`no partition keys for super key ${superKey}`);
107
110
  for (const field of keys) {
108
- if (field.endsWith('.index')) {
109
- const key = field.slice(0, field.length - 6);
111
+ if (field.endsWith(BinaryPartitionedIndexFieldSuffix)) {
112
+ const key = field.slice(0, -BinaryPartitionedIndexFieldSuffix.length);
110
113
  const partKey = JSON.stringify([
111
114
  ...JSON.parse(superKey),
112
115
  ...JSON.parse(key)
@@ -121,8 +124,8 @@ function parseDataInfoResource(data) {
121
124
  errorIfFieldNotSet: true,
122
125
  }).persist();
123
126
  }
124
- else if (field.endsWith('.values')) {
125
- const key = field.slice(0, field.length - 7);
127
+ else if (field.endsWith(BinaryPartitionedValuesFieldSuffix)) {
128
+ const key = field.slice(0, -BinaryPartitionedValuesFieldSuffix.length);
126
129
  const partKey = JSON.stringify([
127
130
  ...JSON.parse(superKey),
128
131
  ...JSON.parse(key)
@@ -152,7 +155,7 @@ function parseDataInfoResource(data) {
152
155
  const parts = {};
153
156
  for (const key of data.listInputFields()) {
154
157
  const resource = data.traverse({ field: key, assertFieldType: 'Input', errorIfFieldNotSet: true });
155
- parts[key] = traverseParquetPartitionedResource(resource);
158
+ parts[key] = traverseParquetChunkResource(resource);
156
159
  }
157
160
  return {
158
161
  type: 'ParquetPartitioned',
@@ -174,7 +177,7 @@ function parseDataInfoResource(data) {
174
177
  ...JSON.parse(superKey),
175
178
  ...JSON.parse(key),
176
179
  ]);
177
- parts[partKey] = traverseParquetPartitionedResource(resource);
180
+ parts[partKey] = traverseParquetChunkResource(resource);
178
181
  }
179
182
  }
180
183
  return {
@@ -185,7 +188,11 @@ function parseDataInfoResource(data) {
185
188
  }
186
189
  throw new PFrameDriverError(`unsupported resource type: ${resourceTypeToString(data.resourceType)}`);
187
190
  }
188
- function traverseParquetPartitionedResource(resource) {
191
+ function traverseParquetChunkResource(resource) {
192
+ if (!resourceTypesEqual(resource.resourceType, ParquetChunkResourceType)) {
193
+ throw new PFrameDriverError(`unknown resource type: ${resourceTypeToString(resource.resourceType)}, `
194
+ + `expected: ${resourceTypeToString(ParquetChunkResourceType)}`);
195
+ }
189
196
  const blob = resource.traverse({ field: 'blob', assertFieldType: 'Service', errorIfFieldNotSet: true }).persist();
190
197
  const partInfo = resource.getDataAsJson();
191
198
  const mapping = resource.traverse({ field: 'mapping', assertFieldType: 'Service', errorIfFieldNotSet: true }).getDataAsJson();
@@ -222,5 +229,5 @@ function deriveLocalPObjectId(resolvePath, outputName) {
222
229
  return canonicalize({ resolvePath, name: outputName });
223
230
  }
224
231
 
225
- export { PColumnDataBinaryPartitioned, PColumnDataBinarySuperPartitioned, PColumnDataJson, PColumnDataJsonPartitioned, PColumnDataJsonSuperPartitioned, PColumnDataParquetPartitioned, PColumnDataParquetSuperPartitioned, deriveGlobalPObjectId, deriveLegacyPObjectId, deriveLocalPObjectId, makeDataInfoFromPColumnValues, parseDataInfoResource, traverseParquetPartitionedResource };
232
+ export { PColumnDataBinaryPartitioned, PColumnDataBinarySuperPartitioned, PColumnDataJson, PColumnDataJsonPartitioned, PColumnDataJsonSuperPartitioned, PColumnDataParquetPartitioned, PColumnDataParquetSuperPartitioned, ParquetChunkResourceType, deriveGlobalPObjectId, deriveLegacyPObjectId, deriveLocalPObjectId, makeDataInfoFromPColumnValues, parseDataInfoResource, traverseParquetChunkResource };
226
233
  //# sourceMappingURL=data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sources":["../../src/pool/data.ts"],"sourcesContent":["import {\n PFrameDriverError,\n type BinaryChunk,\n type JsonDataInfo,\n type ParquetChunk,\n type ParquetChunkMapping,\n type ParquetChunkMetadata,\n type PColumnSpec,\n type PColumnValue,\n type PColumnValues,\n type PlRef,\n type PObjectId,\n type PObjectSpec,\n} from '@platforma-sdk/model';\nimport type { PlTreeEntry, PlTreeNodeAccessor } from '@milaboratories/pl-tree';\nimport canonicalize from 'canonicalize';\nimport {\n isNullResourceId,\n resourceType,\n resourceTypeToString,\n resourceTypesEqual,\n} from '@milaboratories/pl-client';\nimport type { Writable } from 'utility-types';\nimport { createHash } from 'node:crypto';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\n\nexport const PColumnDataJsonPartitioned = resourceType('PColumnData/JsonPartitioned', '1');\nexport const PColumnDataJsonSuperPartitioned = resourceType(\n 'PColumnData/Partitioned/JsonPartitioned',\n '1',\n);\nexport const PColumnDataBinaryPartitioned = resourceType('PColumnData/BinaryPartitioned', '1');\nexport const PColumnDataBinarySuperPartitioned = resourceType(\n 'PColumnData/Partitioned/BinaryPartitioned',\n '1',\n);\nexport const PColumnDataParquetPartitioned = resourceType('PColumnData/ParquetPartitioned', '1');\nexport const PColumnDataParquetSuperPartitioned = resourceType(\n 'PColumnData/Partitioned/ParquetPartitioned',\n '1',\n);\nexport const PColumnDataJson = resourceType('PColumnData/Json', '1');\n\nexport type PColumnDataJsonResourceValue = {\n keyLength: number;\n data: Record<string, PColumnValue>;\n};\n\nexport type PColumnDataPartitionedResourceValue = {\n partitionKeyLength: number;\n};\n\nexport type PColumnDataSuperPartitionedResourceValue = {\n superPartitionKeyLength: number;\n partitionKeyLength: number;\n};\n\nexport function parseDataInfoResource(\n data: PlTreeNodeAccessor,\n): PFrameInternal.DataInfo<PlTreeEntry> {\n if (!data.getIsReadyOrError()) throw new PFrameDriverError('Data not ready.');\n\n const resourceData = data.getDataAsJson();\n if (resourceData === undefined)\n throw new PFrameDriverError('unexpected data info structure, no resource data');\n\n if (resourceTypesEqual(data.resourceType, PColumnDataJson)) {\n const dataContent = resourceData as PColumnDataJsonResourceValue;\n\n return {\n type: 'Json',\n keyLength: dataContent.keyLength,\n data: dataContent.data,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataJsonPartitioned)) {\n const meta = resourceData as PColumnDataPartitionedResourceValue;\n\n const parts = Object.fromEntries(\n data\n .listInputFields()\n .map((field) => [field, data.traverse({ field, errorIfFieldNotSet: true }).persist()]),\n );\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataJsonSuperPartitioned)) {\n const meta = resourceData as PColumnDataSuperPartitionedResourceValue;\n\n const parts: Record<string, PlTreeEntry> = {};\n for (const superKey of data.listInputFields()) {\n const superPart = data.traverse({ field: superKey, errorIfFieldNotSet: true });\n const keys = superPart.listInputFields();\n if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);\n\n for (const key of keys) {\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[]]);\n parts[partKey] = superPart.traverse({ field: key, errorIfFieldNotSet: true }).persist();\n }\n }\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,\n parts,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataBinaryPartitioned)) {\n const meta = resourceData as PColumnDataPartitionedResourceValue;\n\n const parts: Record<\n string,\n Partial<Writable<BinaryChunk<PlTreeEntry>>>\n > = {};\n\n // parsing the structure\n for (const field of data.listInputFields()) {\n if (field.endsWith('.index')) {\n const partKey = field.slice(0, field.length - 6);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n part.index = data.traverse({ field, errorIfFieldNotSet: true }).persist();\n } else if (field.endsWith('.values')) {\n const partKey = field.slice(0, field.length - 7);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n part.values = data.traverse({ field, errorIfFieldNotSet: true }).persist();\n } else throw new PFrameDriverError(`unrecognized part field name: ${field}`);\n }\n\n // structure validation\n for (const [key, part] of Object.entries(parts)) {\n if (part.index === undefined) throw new PFrameDriverError(`no index for part ${key}`);\n if (part.values === undefined) throw new PFrameDriverError(`no values for part ${key}`);\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts: parts as Record<string, BinaryChunk<PlTreeEntry>>,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataBinarySuperPartitioned)) {\n const meta = resourceData as PColumnDataSuperPartitionedResourceValue;\n\n const parts: Record<\n string,\n Partial<Writable<BinaryChunk<PlTreeEntry>>>\n > = {};\n for (const superKey of data.listInputFields()) {\n const superData = data.traverse({ field: superKey, errorIfFieldNotSet: true });\n const keys = superData.listInputFields();\n if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);\n\n for (const field of keys) {\n if (field.endsWith('.index')) {\n const key = field.slice(0, field.length - 6);\n\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[]]);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n parts[partKey].index = superData.traverse({\n field,\n errorIfFieldNotSet: true,\n }).persist();\n } else if (field.endsWith('.values')) {\n const key = field.slice(0, field.length - 7);\n\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[]]);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n parts[partKey].values = superData.traverse({\n field,\n errorIfFieldNotSet: true,\n }).persist();\n } else throw new PFrameDriverError(`unrecognized part field name: ${field}`);\n }\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,\n parts: parts as Record<string, BinaryChunk<PlTreeEntry>>,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataParquetPartitioned)) {\n const meta = resourceData as PColumnDataPartitionedResourceValue;\n\n const parts: Record<string, ParquetChunk<PlTreeEntry>> = {};\n for (const key of data.listInputFields()) {\n const resource = data.traverse({ field: key, assertFieldType: 'Input', errorIfFieldNotSet: true });\n\n parts[key] = traverseParquetPartitionedResource(resource);\n }\n\n return {\n type: 'ParquetPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataParquetSuperPartitioned)) {\n const meta = resourceData as PColumnDataSuperPartitionedResourceValue;\n\n const parts: Record<string, ParquetChunk<PlTreeEntry>> = {};\n for (const superKey of data.listInputFields()) {\n const superPart = data.traverse({ field: superKey, errorIfFieldNotSet: true });\n const keys = superPart.listInputFields();\n if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);\n\n for (const key of keys) {\n const resource = data.traverse({ field: key, errorIfFieldNotSet: true });\n\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[],\n ]);\n parts[partKey] = traverseParquetPartitionedResource(resource);\n }\n }\n\n return {\n type: 'ParquetPartitioned',\n partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,\n parts,\n };\n }\n\n throw new PFrameDriverError(`unsupported resource type: ${resourceTypeToString(data.resourceType)}`);\n}\n\nexport function traverseParquetPartitionedResource(resource: PlTreeNodeAccessor): ParquetChunk<PlTreeEntry> {\n const blob = resource.traverse(\n { field: 'blob', assertFieldType: 'Service', errorIfFieldNotSet: true },\n ).persist();\n const partInfo = resource.getDataAsJson() as ParquetChunkMetadata;\n const mapping = resource.traverse(\n { field: 'mapping', assertFieldType: 'Service', errorIfFieldNotSet: true },\n ).getDataAsJson() as ParquetChunkMapping;\n\n return {\n data: blob,\n ...partInfo,\n ...mapping,\n };\n}\n\nexport function makeDataInfoFromPColumnValues(\n spec: PColumnSpec,\n data: PColumnValues,\n): JsonDataInfo {\n const keyLength = spec.axesSpec.length;\n const jsonData: Record<string, PColumnValue> = {};\n for (const { key, val } of data) {\n if (key.length !== keyLength)\n throw new PFrameDriverError(`inline column key length ${key.length} differs from axes count ${keyLength}`);\n jsonData[JSON.stringify(key)] = val;\n }\n\n return {\n type: 'Json',\n keyLength,\n data: jsonData,\n };\n}\n\nexport function deriveLegacyPObjectId(spec: PObjectSpec, data: PlTreeNodeAccessor): PObjectId {\n const hash = createHash('sha256');\n hash.update(canonicalize(spec)!);\n hash.update(String(!isNullResourceId(data.originalId) ? data.originalId : data.id));\n return hash.digest().toString('hex') as PObjectId;\n}\n\nexport function deriveGlobalPObjectId(blockId: string, exportName: string): PObjectId {\n return canonicalize({ __isRef: true, blockId, name: exportName } satisfies PlRef)! as PObjectId;\n}\n\nexport function deriveLocalPObjectId(resolvePath: string[], outputName: string): PObjectId {\n return canonicalize({ resolvePath, name: outputName })! as PObjectId;\n}\n"],"names":[],"mappings":";;;;;AA0BO,MAAM,0BAA0B,GAAG,YAAY,CAAC,6BAA6B,EAAE,GAAG;AAClF,MAAM,+BAA+B,GAAG,YAAY,CACzD,yCAAyC,EACzC,GAAG;AAEE,MAAM,4BAA4B,GAAG,YAAY,CAAC,+BAA+B,EAAE,GAAG;AACtF,MAAM,iCAAiC,GAAG,YAAY,CAC3D,2CAA2C,EAC3C,GAAG;AAEE,MAAM,6BAA6B,GAAG,YAAY,CAAC,gCAAgC,EAAE,GAAG;AACxF,MAAM,kCAAkC,GAAG,YAAY,CAC5D,4CAA4C,EAC5C,GAAG;AAEE,MAAM,eAAe,GAAG,YAAY,CAAC,kBAAkB,EAAE,GAAG;AAgB7D,SAAU,qBAAqB,CACnC,IAAwB,EAAA;AAExB,IAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAAE,QAAA,MAAM,IAAI,iBAAiB,CAAC,iBAAiB,CAAC;AAE7E,IAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;IACzC,IAAI,YAAY,KAAK,SAAS;AAC5B,QAAA,MAAM,IAAI,iBAAiB,CAAC,kDAAkD,CAAC;IAEjF,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,EAAE;QAC1D,MAAM,WAAW,GAAG,YAA4C;QAEhE,OAAO;AACL,YAAA,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,IAAI,EAAE,WAAW,CAAC,IAAI;SACvB;IACH;SAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,0BAA0B,CAAC,EAAE;QAC5E,MAAM,IAAI,GAAG,YAAmD;AAEhE,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAC9B;AACG,aAAA,eAAe;aACf,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CACzF;QAED,OAAO;AACL,YAAA,IAAI,EAAE,iBAAiB;YACvB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,KAAK;SACN;IACH;SAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,+BAA+B,CAAC,EAAE;QACjF,MAAM,IAAI,GAAG,YAAwD;QAErE,MAAM,KAAK,GAAgC,EAAE;QAC7C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC7C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;AAC9E,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,eAAe,EAAE;YACxC,IAAI,IAAI,KAAK,SAAS;AAAE,gBAAA,MAAM,IAAI,iBAAiB,CAAC,mCAAmC,QAAQ,CAAA,CAAE,CAAC;AAElG,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;AAC7B,oBAAA,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAmB;AACzC,oBAAA,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG;AAAoB,iBAAA,CAAC;gBACxC,KAAK,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;YACzF;QACF;QAEA,OAAO;AACL,YAAA,IAAI,EAAE,iBAAiB;AACvB,YAAA,kBAAkB,EAAE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,kBAAkB;YAC1E,KAAK;SACN;IACH;SAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,4BAA4B,CAAC,EAAE;QAC9E,MAAM,IAAI,GAAG,YAAmD;QAEhE,MAAM,KAAK,GAGP,EAAE;;QAGN,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC1C,YAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC5B,gBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,gBAAA,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;AACzB,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;oBACtB,IAAI,GAAG,EAAE;AACT,oBAAA,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI;gBACvB;AACA,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;YAC3E;AAAO,iBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACpC,gBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,gBAAA,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;AACzB,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;oBACtB,IAAI,GAAG,EAAE;AACT,oBAAA,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI;gBACvB;AACA,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;YAC5E;;AAAO,gBAAA,MAAM,IAAI,iBAAiB,CAAC,iCAAiC,KAAK,CAAA,CAAE,CAAC;QAC9E;;AAGA,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC/C,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,gBAAA,MAAM,IAAI,iBAAiB,CAAC,qBAAqB,GAAG,CAAA,CAAE,CAAC;AACrF,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;AAAE,gBAAA,MAAM,IAAI,iBAAiB,CAAC,sBAAsB,GAAG,CAAA,CAAE,CAAC;QACzF;QAEA,OAAO;AACL,YAAA,IAAI,EAAE,mBAAmB;YACzB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;AAC3C,YAAA,KAAK,EAAE,KAAiD;SACzD;IACH;SAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,iCAAiC,CAAC,EAAE;QACnF,MAAM,IAAI,GAAG,YAAwD;QAErE,MAAM,KAAK,GAGP,EAAE;QACN,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC7C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;AAC9E,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,eAAe,EAAE;YACxC,IAAI,IAAI,KAAK,SAAS;AAAE,gBAAA,MAAM,IAAI,iBAAiB,CAAC,mCAAmC,QAAQ,CAAA,CAAE,CAAC;AAElG,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE;AACxB,gBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC5B,oBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAE5C,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;AAC7B,wBAAA,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAmB;AACzC,wBAAA,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG;AAAoB,qBAAA,CAAC;AACxC,oBAAA,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;AACzB,oBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,IAAI,GAAG,EAAE;AACT,wBAAA,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI;oBACvB;oBACA,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC;wBACxC,KAAK;AACL,wBAAA,kBAAkB,EAAE,IAAI;qBACzB,CAAC,CAAC,OAAO,EAAE;gBACd;AAAO,qBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACpC,oBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAE5C,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;AAC7B,wBAAA,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAmB;AACzC,wBAAA,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG;AAAoB,qBAAA,CAAC;AACxC,oBAAA,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;AACzB,oBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,IAAI,GAAG,EAAE;AACT,wBAAA,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI;oBACvB;oBACA,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC;wBACzC,KAAK;AACL,wBAAA,kBAAkB,EAAE,IAAI;qBACzB,CAAC,CAAC,OAAO,EAAE;gBACd;;AAAO,oBAAA,MAAM,IAAI,iBAAiB,CAAC,iCAAiC,KAAK,CAAA,CAAE,CAAC;YAC9E;QACF;QAEA,OAAO;AACL,YAAA,IAAI,EAAE,mBAAmB;AACzB,YAAA,kBAAkB,EAAE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,kBAAkB;AAC1E,YAAA,KAAK,EAAE,KAAiD;SACzD;IACH;SAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,6BAA6B,CAAC,EAAE;QAC/E,MAAM,IAAI,GAAG,YAAmD;QAEhE,MAAM,KAAK,GAA8C,EAAE;QAC3D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;YAElG,KAAK,CAAC,GAAG,CAAC,GAAG,kCAAkC,CAAC,QAAQ,CAAC;QAC3D;QAEA,OAAO;AACL,YAAA,IAAI,EAAE,oBAAoB;YAC1B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,KAAK;SACN;IACH;SAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,kCAAkC,CAAC,EAAE;QACpF,MAAM,IAAI,GAAG,YAAwD;QAErE,MAAM,KAAK,GAA8C,EAAE;QAC3D,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC7C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;AAC9E,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,eAAe,EAAE;YACxC,IAAI,IAAI,KAAK,SAAS;AAAE,gBAAA,MAAM,IAAI,iBAAiB,CAAC,mCAAmC,QAAQ,CAAA,CAAE,CAAC;AAElG,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;AAExE,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;AAC7B,oBAAA,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAmB;AACzC,oBAAA,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB;AACrC,iBAAA,CAAC;gBACF,KAAK,CAAC,OAAO,CAAC,GAAG,kCAAkC,CAAC,QAAQ,CAAC;YAC/D;QACF;QAEA,OAAO;AACL,YAAA,IAAI,EAAE,oBAAoB;AAC1B,YAAA,kBAAkB,EAAE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,kBAAkB;YAC1E,KAAK;SACN;IACH;AAEA,IAAA,MAAM,IAAI,iBAAiB,CAAC,CAAA,2BAAA,EAA8B,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA,CAAE,CAAC;AACtG;AAEM,SAAU,kCAAkC,CAAC,QAA4B,EAAA;IAC7E,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAC5B,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE,IAAI,EAAE,CACxE,CAAC,OAAO,EAAE;AACX,IAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,EAA0B;IACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAC/B,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAC3E,CAAC,aAAa,EAAyB;IAExC,OAAO;AACL,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,GAAG,QAAQ;AACX,QAAA,GAAG,OAAO;KACX;AACH;AAEM,SAAU,6BAA6B,CAC3C,IAAiB,EACjB,IAAmB,EAAA;AAEnB,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;IACtC,MAAM,QAAQ,GAAiC,EAAE;IACjD,KAAK,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE;AAC/B,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;YAC1B,MAAM,IAAI,iBAAiB,CAAC,CAAA,yBAAA,EAA4B,GAAG,CAAC,MAAM,CAAA,yBAAA,EAA4B,SAAS,CAAA,CAAE,CAAC;QAC5G,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;IACrC;IAEA,OAAO;AACL,QAAA,IAAI,EAAE,MAAM;QACZ,SAAS;AACT,QAAA,IAAI,EAAE,QAAQ;KACf;AACH;AAEM,SAAU,qBAAqB,CAAC,IAAiB,EAAE,IAAwB,EAAA;AAC/E,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAE,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACnF,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAc;AACnD;AAEM,SAAU,qBAAqB,CAAC,OAAe,EAAE,UAAkB,EAAA;AACvE,IAAA,OAAO,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAkB,CAAe;AACjG;AAEM,SAAU,oBAAoB,CAAC,WAAqB,EAAE,UAAkB,EAAA;IAC5E,OAAO,YAAY,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,CAAe;AACtE;;;;"}
1
+ {"version":3,"file":"data.js","sources":["../../src/pool/data.ts"],"sourcesContent":["import {\n PFrameDriverError,\n type BinaryChunk,\n type JsonDataInfo,\n type ParquetChunk,\n type ParquetChunkMapping,\n type ParquetChunkMetadata,\n type PColumnSpec,\n type PColumnValue,\n type PColumnValues,\n type PlRef,\n type PObjectId,\n type PObjectSpec,\n} from '@platforma-sdk/model';\nimport type { PlTreeEntry, PlTreeNodeAccessor } from '@milaboratories/pl-tree';\nimport canonicalize from 'canonicalize';\nimport {\n isNullResourceId,\n resourceType,\n resourceTypeToString,\n resourceTypesEqual,\n} from '@milaboratories/pl-client';\nimport type { Writable } from 'utility-types';\nimport { createHash } from 'node:crypto';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\n\nexport const PColumnDataJsonPartitioned = resourceType('PColumnData/JsonPartitioned', '1');\nexport const PColumnDataJsonSuperPartitioned = resourceType(\n 'PColumnData/Partitioned/JsonPartitioned',\n '1',\n);\nexport const PColumnDataBinaryPartitioned = resourceType('PColumnData/BinaryPartitioned', '1');\nexport const PColumnDataBinarySuperPartitioned = resourceType(\n 'PColumnData/Partitioned/BinaryPartitioned',\n '1',\n);\nexport const PColumnDataParquetPartitioned = resourceType('PColumnData/ParquetPartitioned', '1');\nexport const PColumnDataParquetSuperPartitioned = resourceType(\n 'PColumnData/Partitioned/ParquetPartitioned',\n '1',\n);\nexport const PColumnDataJson = resourceType('PColumnData/Json', '1');\n\nexport const ParquetChunkResourceType = resourceType('ParquetChunk', '1');\n\nexport type PColumnDataJsonResourceValue = {\n keyLength: number;\n data: Record<string, PColumnValue>;\n};\n\nexport type PColumnDataPartitionedResourceValue = {\n partitionKeyLength: number;\n};\n\nexport type PColumnDataSuperPartitionedResourceValue = {\n superPartitionKeyLength: number;\n partitionKeyLength: number;\n};\n\nconst BinaryPartitionedIndexFieldSuffix = '.index';\nconst BinaryPartitionedValuesFieldSuffix = '.values';\n\nexport function parseDataInfoResource(\n data: PlTreeNodeAccessor,\n): PFrameInternal.DataInfo<PlTreeEntry> {\n if (!data.getIsReadyOrError()) throw new PFrameDriverError('Data not ready.');\n\n const resourceData = data.getDataAsJson();\n if (resourceData === undefined)\n throw new PFrameDriverError('unexpected data info structure, no resource data');\n\n if (resourceTypesEqual(data.resourceType, PColumnDataJson)) {\n const dataContent = resourceData as PColumnDataJsonResourceValue;\n\n return {\n type: 'Json',\n keyLength: dataContent.keyLength,\n data: dataContent.data,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataJsonPartitioned)) {\n const meta = resourceData as PColumnDataPartitionedResourceValue;\n\n const parts = Object.fromEntries(\n data\n .listInputFields()\n .map((field) => [field, data.traverse({ field, errorIfFieldNotSet: true }).persist()]),\n );\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataJsonSuperPartitioned)) {\n const meta = resourceData as PColumnDataSuperPartitionedResourceValue;\n\n const parts: Record<string, PlTreeEntry> = {};\n for (const superKey of data.listInputFields()) {\n const superPart = data.traverse({ field: superKey, errorIfFieldNotSet: true });\n const keys = superPart.listInputFields();\n if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);\n\n for (const key of keys) {\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[]]);\n parts[partKey] = superPart.traverse({ field: key, errorIfFieldNotSet: true }).persist();\n }\n }\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,\n parts,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataBinaryPartitioned)) {\n const meta = resourceData as PColumnDataPartitionedResourceValue;\n\n const parts: Record<\n string,\n Partial<Writable<BinaryChunk<PlTreeEntry>>>\n > = {};\n\n // parsing the structure\n for (const field of data.listInputFields()) {\n if (field.endsWith(BinaryPartitionedIndexFieldSuffix)) {\n const partKey = field.slice(0, -BinaryPartitionedIndexFieldSuffix.length);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n part.index = data.traverse({ field, errorIfFieldNotSet: true }).persist();\n } else if (field.endsWith(BinaryPartitionedValuesFieldSuffix)) {\n const partKey = field.slice(0, -BinaryPartitionedValuesFieldSuffix.length);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n part.values = data.traverse({ field, errorIfFieldNotSet: true }).persist();\n } else throw new PFrameDriverError(`unrecognized part field name: ${field}`);\n }\n\n // structure validation\n for (const [key, part] of Object.entries(parts)) {\n if (part.index === undefined) throw new PFrameDriverError(`no index for part ${key}`);\n if (part.values === undefined) throw new PFrameDriverError(`no values for part ${key}`);\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts: parts as Record<string, BinaryChunk<PlTreeEntry>>,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataBinarySuperPartitioned)) {\n const meta = resourceData as PColumnDataSuperPartitionedResourceValue;\n\n const parts: Record<\n string,\n Partial<Writable<BinaryChunk<PlTreeEntry>>>\n > = {};\n for (const superKey of data.listInputFields()) {\n const superData = data.traverse({ field: superKey, errorIfFieldNotSet: true });\n const keys = superData.listInputFields();\n if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);\n\n for (const field of keys) {\n if (field.endsWith(BinaryPartitionedIndexFieldSuffix)) {\n const key = field.slice(0, -BinaryPartitionedIndexFieldSuffix.length);\n\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[]]);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n parts[partKey].index = superData.traverse({\n field,\n errorIfFieldNotSet: true,\n }).persist();\n } else if (field.endsWith(BinaryPartitionedValuesFieldSuffix)) {\n const key = field.slice(0, -BinaryPartitionedValuesFieldSuffix.length);\n\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[]]);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n parts[partKey].values = superData.traverse({\n field,\n errorIfFieldNotSet: true,\n }).persist();\n } else throw new PFrameDriverError(`unrecognized part field name: ${field}`);\n }\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,\n parts: parts as Record<string, BinaryChunk<PlTreeEntry>>,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataParquetPartitioned)) {\n const meta = resourceData as PColumnDataPartitionedResourceValue;\n\n const parts: Record<string, ParquetChunk<PlTreeEntry>> = {};\n for (const key of data.listInputFields()) {\n const resource = data.traverse({ field: key, assertFieldType: 'Input', errorIfFieldNotSet: true });\n\n parts[key] = traverseParquetChunkResource(resource);\n }\n\n return {\n type: 'ParquetPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataParquetSuperPartitioned)) {\n const meta = resourceData as PColumnDataSuperPartitionedResourceValue;\n\n const parts: Record<string, ParquetChunk<PlTreeEntry>> = {};\n for (const superKey of data.listInputFields()) {\n const superPart = data.traverse({ field: superKey, errorIfFieldNotSet: true });\n const keys = superPart.listInputFields();\n if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);\n\n for (const key of keys) {\n const resource = data.traverse({ field: key, errorIfFieldNotSet: true });\n\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[],\n ]);\n parts[partKey] = traverseParquetChunkResource(resource);\n }\n }\n\n return {\n type: 'ParquetPartitioned',\n partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,\n parts,\n };\n }\n\n throw new PFrameDriverError(`unsupported resource type: ${resourceTypeToString(data.resourceType)}`);\n}\n\nexport function traverseParquetChunkResource(resource: PlTreeNodeAccessor): ParquetChunk<PlTreeEntry> {\n if (!resourceTypesEqual(resource.resourceType, ParquetChunkResourceType)) {\n throw new PFrameDriverError(\n `unknown resource type: ${resourceTypeToString(resource.resourceType)}, `\n + `expected: ${resourceTypeToString(ParquetChunkResourceType)}`,\n );\n }\n\n const blob = resource.traverse(\n { field: 'blob', assertFieldType: 'Service', errorIfFieldNotSet: true },\n ).persist();\n const partInfo = resource.getDataAsJson() as ParquetChunkMetadata;\n const mapping = resource.traverse(\n { field: 'mapping', assertFieldType: 'Service', errorIfFieldNotSet: true },\n ).getDataAsJson() as ParquetChunkMapping;\n\n return {\n data: blob,\n ...partInfo,\n ...mapping,\n };\n}\n\nexport function makeDataInfoFromPColumnValues(\n spec: PColumnSpec,\n data: PColumnValues,\n): JsonDataInfo {\n const keyLength = spec.axesSpec.length;\n const jsonData: Record<string, PColumnValue> = {};\n for (const { key, val } of data) {\n if (key.length !== keyLength)\n throw new PFrameDriverError(`inline column key length ${key.length} differs from axes count ${keyLength}`);\n jsonData[JSON.stringify(key)] = val;\n }\n\n return {\n type: 'Json',\n keyLength,\n data: jsonData,\n };\n}\n\nexport function deriveLegacyPObjectId(spec: PObjectSpec, data: PlTreeNodeAccessor): PObjectId {\n const hash = createHash('sha256');\n hash.update(canonicalize(spec)!);\n hash.update(String(!isNullResourceId(data.originalId) ? data.originalId : data.id));\n return hash.digest().toString('hex') as PObjectId;\n}\n\nexport function deriveGlobalPObjectId(blockId: string, exportName: string): PObjectId {\n return canonicalize({ __isRef: true, blockId, name: exportName } satisfies PlRef)! as PObjectId;\n}\n\nexport function deriveLocalPObjectId(resolvePath: string[], outputName: string): PObjectId {\n return canonicalize({ resolvePath, name: outputName })! as PObjectId;\n}\n"],"names":[],"mappings":"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"}
@@ -503,7 +503,7 @@ class PFrameDriver {
503
503
  ? data.parseDataInfoResource(d)
504
504
  : model.isDataInfo(d)
505
505
  ? d.type === 'ParquetPartitioned'
506
- ? model.mapDataInfo(d, (a) => data.traverseParquetPartitionedResource(a))
506
+ ? model.mapDataInfo(d, (a) => data.traverseParquetChunkResource(a))
507
507
  : model.mapDataInfo(d, (a) => a.persist())
508
508
  : data.makeDataInfoFromPColumnValues(c.spec, d)));
509
509
  const distinctColumns = model.uniqueBy(columns, (column) => column.id);
@@ -1 +1 @@
1
- {"version":3,"file":"driver.cjs","sources":["../../src/pool/driver.ts"],"sourcesContent":["import type { DownloadDriver } from '@milaboratories/pl-drivers';\nimport { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport type { PlTreeEntry, PlTreeNodeAccessor } from '@milaboratories/pl-tree';\nimport { isPlTreeNodeAccessor } from '@milaboratories/pl-tree';\nimport type {\n Computable,\n ComputableCtx,\n ComputableStableDefined,\n} from '@milaboratories/computable';\nimport type {\n CalculateTableDataRequest,\n CalculateTableDataResponse,\n FindColumnsRequest,\n FindColumnsResponse,\n LocalBlobHandleAndSize,\n PColumnIdAndSpec,\n PColumnSpec,\n PFrameHandle,\n PObjectId,\n PTableColumnSpec,\n PTableHandle,\n PTableShape,\n PTableVector,\n TableRange,\n UniqueValuesRequest,\n UniqueValuesResponse,\n PFrameDriver as SdkPFrameDriver,\n PColumn,\n PFrameDef,\n JoinEntry,\n PTableDef,\n ValueType,\n PTableRecordSingleValueFilterV2,\n PTableRecordFilter,\n PColumnValues,\n DataInfo,\n PColumnValue,\n RemoteBlobHandleAndSize,\n RemoteBlobHandle,\n ContentHandler,\n} from '@platforma-sdk/model';\nimport {\n mapPObjectData,\n mapPTableDef,\n extractAllColumns,\n mapDataInfo,\n isDataInfo,\n ensureError,\n PFrameDriverError,\n isAbortError,\n isPFrameDriverError,\n uniqueBy,\n} from '@platforma-sdk/model';\nimport { LRUCache } from 'lru-cache';\nimport {\n makeDataInfoFromPColumnValues,\n parseDataInfoResource,\n traverseParquetPartitionedResource,\n} from './data';\nimport { createHash } from 'node:crypto';\nimport { type MiLogger } from '@milaboratories/ts-helpers';\nimport { mapValues } from 'es-toolkit';\nimport {\n assertNever,\n emptyDir,\n ConcurrencyLimitingExecutor,\n RefCountResourcePool,\n type PollResource,\n} from '@milaboratories/ts-helpers';\nimport canonicalize from 'canonicalize';\nimport { PFrameFactory, HttpHelpers } from '@milaboratories/pframes-rs-node';\nimport path from 'node:path';\nimport { getDebugFlags } from '../debug';\nimport { Readable } from 'node:stream';\n\ntype PColumnDataUniversal = PlTreeNodeAccessor | DataInfo<PlTreeNodeAccessor> | PColumnValues;\n\nfunction makeBlobId(res: PlTreeEntry): string {\n return String(res.rid);\n}\n\ntype LocalBlobPoolEntry = PollResource<ComputableStableDefined<LocalBlobHandleAndSize>>;\n\nclass LocalBlobPool\n extends RefCountResourcePool<PlTreeEntry, ComputableStableDefined<LocalBlobHandleAndSize>>\n implements PFrameInternal.PFrameDataSourceV2 {\n constructor(private readonly blobDriver: DownloadDriver) {\n super();\n }\n\n protected calculateParamsKey(params: PlTreeEntry): string {\n return makeBlobId(params);\n }\n\n protected createNewResource(params: PlTreeEntry): ComputableStableDefined<LocalBlobHandleAndSize> {\n // precalculation of value tree will trigger the download process right away\n return this.blobDriver.getDownloadedBlob(params).withPreCalculatedValueTree();\n }\n\n public getByKey(blobId: string): ComputableStableDefined<LocalBlobHandleAndSize> {\n const resource = super.tryGetByKey(blobId);\n if (!resource) throw new PFrameDriverError(`Blob with id ${blobId} not found.`);\n return resource;\n }\n\n public async preloadBlob(blobIds: string[], signal?: AbortSignal): Promise<void> {\n try {\n await Promise.all(blobIds.map((blobId) => this.getByKey(blobId).awaitStableFullValue(signal)));\n } catch (err: unknown) {\n if (!isAbortError(err)) throw err;\n }\n };\n\n public async resolveBlobContent(blobId: string, signal?: AbortSignal): Promise<Uint8Array> {\n const computable = this.getByKey(blobId);\n const blob = await computable.awaitStableValue(signal);\n return await this.blobDriver.getContent(blob.handle, { signal });\n };\n}\n\ntype RemoteBlobPoolEntry = PollResource<Computable<RemoteBlobHandleAndSize>>;\n\nclass RemoteBlobPool\n extends RefCountResourcePool<PlTreeEntry, Computable<RemoteBlobHandleAndSize>> {\n constructor(private readonly blobDriver: DownloadDriver) {\n super();\n }\n\n protected calculateParamsKey(params: PlTreeEntry): string {\n return String(params.rid);\n }\n\n protected createNewResource(params: PlTreeEntry): Computable<RemoteBlobHandleAndSize> {\n return this.blobDriver.getOnDemandBlob(params);\n }\n\n public async withContent<T>(\n handle: RemoteBlobHandle,\n options: {\n range: PFrameInternal.FileRange;\n signal: AbortSignal;\n handler: ContentHandler<T>;\n },\n ): Promise<T> {\n return await this.blobDriver.withContent(handle, {\n range: {\n from: options.range.start,\n to: options.range.end + 1,\n },\n signal: options.signal,\n handler: options.handler,\n });\n }\n}\n\ninterface BlobStoreOptions extends PFrameInternal.ObjectStoreOptions {\n remoteBlobPool: RemoteBlobPool;\n};\n\nclass BlobStore extends PFrameInternal.BaseObjectStore {\n private readonly remoteBlobPool: RemoteBlobPool;\n\n constructor(options: BlobStoreOptions) {\n super(options);\n this.remoteBlobPool = options.remoteBlobPool;\n }\n\n public override async request(\n filename: PFrameInternal.ParquetFileName,\n params: {\n method: PFrameInternal.HttpMethod;\n range?: PFrameInternal.HttpRange;\n signal: AbortSignal;\n callback: (response: PFrameInternal.ObjectStoreResponse) => Promise<void>;\n },\n ): Promise<void> {\n const blobId = filename.slice(0, -PFrameInternal.ParquetExtension.length);\n const respond = async (response: PFrameInternal.ObjectStoreResponse): Promise<void> => {\n try {\n await params.callback(response);\n } catch (error: unknown) {\n this.logger(\n 'warn',\n `PFrames blob store received unhandled rejection from HTTP handler: ${ensureError(error)}`,\n );\n }\n };\n\n try {\n const computable = this.remoteBlobPool.tryGetByKey(blobId);\n if (!computable) return await respond({ type: 'NotFound' });\n\n let blob: RemoteBlobHandleAndSize;\n try {\n blob = await computable.getValue();\n } catch (error: unknown) {\n this.logger(\n 'error',\n `PFrames blob store failed to get blob from computable: ${ensureError(error)}`,\n );\n return await respond({ type: 'InternalError' });\n }\n params.signal.throwIfAborted();\n\n const translatedRange = this.translate(blob.size, params.range);\n if (!translatedRange) {\n return await respond({\n type: 'RangeNotSatisfiable',\n size: blob.size,\n });\n }\n\n if (params.method === 'HEAD') {\n return await respond({\n type: 'Ok',\n size: blob.size,\n range: translatedRange,\n });\n }\n\n this.logger(\n 'info',\n `PFrames blob store requesting content for ${blobId}, range [${translatedRange.start}..=${translatedRange.end}]`,\n );\n return await this.remoteBlobPool.withContent(blob.handle, {\n range: translatedRange,\n signal: params.signal,\n handler: async (data) => {\n return await respond({\n type: 'Ok',\n size: blob.size,\n range: translatedRange,\n // eslint-disable-next-line n/no-unsupported-features/node-builtins\n data: Readable.fromWeb(data),\n });\n },\n });\n } catch (error: unknown) {\n if (!isAbortError(error)) {\n this.logger(\n 'warn',\n `PFrames blob store unhandled error: ${ensureError(error)}`,\n );\n }\n return await respond({ type: 'InternalError' });\n }\n }\n}\n\ntype InternalPFrameData = PFrameDef<PFrameInternal.DataInfo<PlTreeEntry>>;\n\nconst valueTypes: ValueType[] = ['Int', 'Long', 'Float', 'Double', 'String', 'Bytes'] as const;\n\nfunction migrateFilters(filters: PTableRecordFilter[]): 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 console.warn(\n `type overriten from 'bySingleColumn' to 'bySingleColumnV2' for filters: ${filtersV1Json}`,\n );\n }\n return filtersV2;\n}\n\nfunction migratePTableFilters<T>(\n def: Omit<PTableDef<T>, 'partitionFilters'> | PTableDef<T>,\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(def.filters.filter((f) => f.column.type === 'axis')),\n filters: migrateFilters(def.filters.filter((f) => f.column.type === 'column')),\n };\n }\n return {\n ...def,\n partitionFilters: migrateFilters(def.partitionFilters),\n filters: migrateFilters(def.filters),\n };\n}\n\nconst bigintReplacer = (_: string, v: unknown) => (typeof v === 'bigint' ? v.toString() : v);\n\nclass PTableCache {\n private readonly perFrame = new Map<PFrameHandle, LRUCache<PTableHandle, PollResource<PTableHolder>>>();\n private readonly global: LRUCache<PTableHandle, PollResource<PTableHolder>>;\n private readonly disposeListeners = new Map<PTableHandle, () => void>();\n\n constructor(\n private readonly logger: PFrameInternal.Logger,\n private readonly ops: PFrameDriverOps,\n ) {\n this.global = new LRUCache<PTableHandle, PollResource<PTableHolder>>({\n maxSize: this.ops.pFramesCacheMaxSize,\n dispose: (resource, key, reason) => {\n if (reason === 'evict') {\n this.perFrame.get(resource.resource.pFrame)?.delete(key);\n }\n\n if (this.perFrame.get(resource.resource.pFrame)?.size === 0) {\n this.perFrame.delete(resource.resource.pFrame);\n }\n\n const disposeListener = this.disposeListeners.get(key)!;\n this.disposeListeners.delete(key);\n resource.resource.disposeSignal.removeEventListener('abort', disposeListener);\n\n resource.unref();\n if (getDebugFlags().logPFrameRequests) {\n this.logger('info', `calculateTableData cache - removed PTable ${key}`);\n }\n },\n });\n }\n\n public cache(resource: PollResource<PTableHolder>, size: number): void {\n const key = resource.key as PTableHandle;\n if (getDebugFlags().logPFrameRequests) {\n this.logger('info', `calculateTableData cache - added PTable ${key} with size ${size}`);\n }\n\n this.global.set(key, resource, { size });\n\n let perFrame = this.perFrame.get(resource.resource.pFrame);\n if (!perFrame) {\n perFrame = new LRUCache<PTableHandle, PollResource<PTableHolder>>({\n max: this.ops.pFrameCacheMaxCount,\n dispose: (_resource, key, reason) => {\n if (reason === 'evict') {\n this.global.delete(key);\n }\n },\n });\n this.perFrame.set(resource.resource.pFrame, perFrame);\n }\n perFrame.set(key, resource);\n\n const disposeListener = () => {\n this.perFrame.get(resource.resource.pFrame)?.delete(key);\n this.global.delete(key);\n };\n this.disposeListeners.set(key, disposeListener);\n resource.resource.disposeSignal.addEventListener('abort', disposeListener);\n }\n}\n\nclass PFrameHolder implements PFrameInternal.PFrameDataSourceV2, AsyncDisposable {\n public readonly pFramePromise: Promise<PFrameInternal.PFrameV12>;\n private readonly abortController = new AbortController();\n private readonly localBlobs: LocalBlobPoolEntry[] = [];\n private readonly remoteBlobs: RemoteBlobPoolEntry[] = [];\n\n constructor(\n public readonly parquetServer: PFrameInternal.HttpServerInfo,\n private readonly localBlobPool: LocalBlobPool,\n private readonly remoteBlobPool: RemoteBlobPool,\n logger: PFrameInternal.Logger,\n private readonly spillPath: string,\n columns: InternalPFrameData,\n ) {\n const makeLocalBlobId = (blob: PlTreeEntry): string => {\n const localBlob = this.localBlobPool.acquire(blob);\n this.localBlobs.push(localBlob);\n return localBlob.key;\n };\n\n const makeRemoteBlobId = (blob: PlTreeEntry): string => {\n const remoteBlob = this.remoteBlobPool.acquire(blob);\n this.remoteBlobs.push(remoteBlob);\n return remoteBlob.key + PFrameInternal.ParquetExtension;\n };\n\n const mapColumnData = (data: PFrameInternal.DataInfo<PlTreeEntry>): PFrameInternal.DataInfo<string> => {\n switch (data.type) {\n case 'Json':\n return { ...data };\n case 'JsonPartitioned':\n return {\n ...data,\n parts: mapValues(data.parts, makeLocalBlobId),\n };\n case 'BinaryPartitioned':\n return {\n ...data,\n parts: mapValues(data.parts, (v) => ({\n index: makeLocalBlobId(v.index),\n values: makeLocalBlobId(v.values),\n })),\n };\n case 'ParquetPartitioned':\n return {\n ...data,\n parts: mapValues(data.parts, (v) => ({\n ...v,\n data: makeRemoteBlobId(v.data),\n })),\n };\n default:\n assertNever(data);\n }\n };\n\n const jsonifiedColumns = columns.map((column) => ({\n ...column,\n data: mapColumnData(column.data),\n }));\n\n try {\n const pFrame = PFrameFactory.createPFrame({ spillPath: this.spillPath, logger });\n pFrame.setDataSource(this);\n\n const promises: Promise<void>[] = [];\n for (const column of jsonifiedColumns) {\n pFrame.addColumnSpec(column.id, column.spec);\n promises.push(pFrame.setColumnData(column.id, column.data, { signal: this.disposeSignal }));\n }\n\n this.pFramePromise = Promise.all(promises)\n .then(() => pFrame)\n .catch((err) => {\n this.dispose();\n pFrame.dispose();\n throw new PFrameDriverError(\n `PFrame creation failed asynchronously, columns: ${JSON.stringify(jsonifiedColumns)}, error: ${ensureError(err)}`,\n );\n });\n } catch (err: unknown) {\n throw new PFrameDriverError(\n `PFrame creation failed synchronously, columns: ${JSON.stringify(jsonifiedColumns)}, error: ${ensureError(err)}`,\n );\n }\n }\n\n public readonly preloadBlob = async (blobIds: string[]): Promise<void> => {\n return await this.localBlobPool.preloadBlob(blobIds, this.disposeSignal);\n };\n\n public readonly resolveBlobContent = async (blobId: string): Promise<Uint8Array> => {\n return await this.localBlobPool.resolveBlobContent(blobId, this.disposeSignal);\n };\n\n public get disposeSignal(): AbortSignal {\n return this.abortController.signal;\n }\n\n private dispose(): void {\n this.abortController.abort();\n this.localBlobs.forEach((entry) => entry.unref());\n this.remoteBlobs.forEach((entry) => entry.unref());\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n this.dispose();\n await this.pFramePromise\n .then((pFrame) => pFrame.dispose())\n .catch(() => { /* mute error */ });\n }\n}\n\nclass PTableHolder implements AsyncDisposable {\n private readonly abortController = new AbortController();\n private readonly combinedDisposeSignal: AbortSignal;\n\n constructor(\n public readonly pFrame: PFrameHandle,\n pFrameDisposeSignal: AbortSignal,\n public readonly pTablePromise: Promise<PFrameInternal.PTableV7>,\n public readonly predecessor?: PollResource<PTableHolder>,\n ) {\n this.combinedDisposeSignal = AbortSignal.any([pFrameDisposeSignal, this.abortController.signal]);\n }\n\n public get disposeSignal(): AbortSignal {\n return this.combinedDisposeSignal;\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n this.abortController.abort();\n await this.pTablePromise\n .then((pTable) => pTable.dispose())\n .catch(() => { /* mute error */ });\n this.predecessor?.unref();\n }\n}\n\ntype FullPTableDef = {\n pFrameHandle: PFrameHandle;\n def: PTableDef<PObjectId>;\n};\n\nexport type PFrameDriverOps = {\n /** Port to run parquet HTTP server on. */\n parquetServerPort: number;\n /** Concurrency limits for `getUniqueValues` and `calculateTableData` requests */\n pFrameConcurrency: number;\n /** Concurrency limits for `getShape` and `getData` requests */\n pTableConcurrency: number;\n /** Maximum number of `calculateTableData` results cached for each PFrame */\n pFrameCacheMaxCount: number;\n /**\n * Maximum size of `calculateTableData` results cached for PFrames overall.\n * The limit is soft, as the same table could be materialized with other requests and will not be deleted in such case.\n * Also each table has predeccessors, overlapping predecessors will be counted twice, so the effective limit is smaller.\n */\n pFramesCacheMaxSize: number;\n};\n\n/**\n * Extends public and safe SDK's driver API with methods used internally in the middle\n * layer and in tests.\n */\nexport interface InternalPFrameDriver extends SdkPFrameDriver, AsyncDisposable {\n /** Dispose the driver and all its resources. */\n dispose(): Promise<void>;\n\n /**\n * Dump active PFrames allocations in pprof format.\n * The result of this function should be saved as `profile.pb.gz`.\n * Use {@link https://pprof.me/} or {@link https://www.speedscope.app/}\n * to view the allocation flamechart.\n * @warning This method will always reject on Windows!\n */\n pprofDump(): Promise<Uint8Array>;\n\n /** Create a new PFrame */\n createPFrame(\n def: PFrameDef<PColumnDataUniversal>,\n ctx: ComputableCtx,\n ): PFrameHandle;\n\n /** Create a new PTable */\n createPTable(\n def: PTableDef<PColumn<PColumnDataUniversal>>,\n ctx: ComputableCtx,\n ): PTableHandle;\n\n /** Calculates data for the table and returns complete data representation of it */\n calculateTableData(\n handle: PFrameHandle,\n request: CalculateTableDataRequest<PObjectId>,\n range: TableRange | undefined,\n signal?: AbortSignal\n ): Promise<CalculateTableDataResponse>;\n\n /** Calculate set of unique values for a specific axis for the filtered set of records */\n getUniqueValues(\n handle: PFrameHandle,\n request: UniqueValuesRequest,\n signal?: AbortSignal\n ): Promise<UniqueValuesResponse>;\n\n /** Unified table shape */\n getShape(\n handle: PTableHandle,\n signal?: AbortSignal,\n ): Promise<PTableShape>;\n\n /**\n * Retrieve the data from the table. To retrieve only data required, it can be\n * sliced both horizontally ({@link columnIndices}) and vertically\n * ({@link range}).\n *\n * @param columnIndices unified indices of columns to be retrieved\n * @param range optionally limit the range of records to retrieve\n * */\n getData(\n handle: PTableHandle,\n columnIndices: number[],\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<PTableVector[]>;\n}\n\nexport class PFrameDriver implements InternalPFrameDriver {\n private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>;\n private readonly pTables: RefCountResourcePool<FullPTableDef, PTableHolder>;\n private readonly pTableCache: PTableCache;\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 static async init(\n blobDriver: DownloadDriver,\n miLogger: MiLogger,\n spillPath: string,\n ops: PFrameDriverOps,\n ): Promise<PFrameDriver> {\n const resolvedSpillPath = path.resolve(spillPath);\n await emptyDir(resolvedSpillPath);\n\n const logger: PFrameInternal.Logger = (level, message) => miLogger[level](message);\n const localBlobPool = new LocalBlobPool(blobDriver);\n const remoteBlobPool = new RemoteBlobPool(blobDriver);\n\n const store = new BlobStore({ remoteBlobPool, logger });\n const handler = HttpHelpers.createRequestHandler({ store: store });\n const server = await HttpHelpers.createHttpServer({ handler, port: ops.parquetServerPort });\n\n return new PFrameDriver(logger, server, localBlobPool, remoteBlobPool, resolvedSpillPath, ops);\n }\n\n private constructor(\n private readonly logger: PFrameInternal.Logger,\n private readonly server: PFrameInternal.HttpServer,\n localBlobPool: LocalBlobPool,\n remoteBlobPool: RemoteBlobPool,\n spillPath: string,\n ops: PFrameDriverOps,\n ) {\n const concurrencyLimiter = new ConcurrencyLimitingExecutor(ops.pFrameConcurrency);\n this.frameConcurrencyLimiter = concurrencyLimiter;\n this.tableConcurrencyLimiter = new ConcurrencyLimitingExecutor(ops.pTableConcurrency);\n\n this.pTableCache = new PTableCache(logger, ops);\n\n this.pFrames = new (class extends RefCountResourcePool<InternalPFrameData, PFrameHolder> {\n constructor(\n private readonly parquetServer: PFrameInternal.HttpServerInfo,\n private readonly localBlobPool: LocalBlobPool,\n private readonly remoteBlobPool: RemoteBlobPool,\n private readonly logger: PFrameInternal.Logger,\n private readonly spillPath: string,\n ) {\n super();\n }\n\n public acquire(params: InternalPFrameData): PollResource<PFrameHolder> {\n return super.acquire(params);\n }\n\n public getByKey(key: PFrameHandle): PFrameHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) throw new PFrameDriverError(`PFrame not found, handle = ${key}`);\n return resource;\n }\n\n protected createNewResource(params: InternalPFrameData): PFrameHolder {\n if (getDebugFlags().logPFrameRequests)\n this.logger('info',\n `PFrame creation (pFrameHandle = ${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`,\n );\n return new PFrameHolder(this.parquetServer, this.localBlobPool, this.remoteBlobPool, this.logger, this.spillPath, params);\n }\n\n protected calculateParamsKey(params: InternalPFrameData): string {\n try {\n return stableKeyFromPFrameData(params);\n } catch (err: unknown) {\n if (isPFrameDriverError(err)) throw err;\n throw new PFrameDriverError(`PFrame handle calculation failed, request: ${JSON.stringify(params, bigintReplacer)}, error: ${ensureError(err)}`);\n }\n }\n })(server.info, localBlobPool, remoteBlobPool, logger, spillPath);\n\n this.pTables = new (class extends RefCountResourcePool<\n FullPTableDef,\n PTableHolder\n > {\n constructor(\n private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>,\n private readonly logger: PFrameInternal.Logger,\n ) {\n super();\n }\n\n public getByKey(key: PTableHandle): PTableHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) throw new PFrameDriverError(`PTable not found, handle = ${key}`);\n return resource;\n }\n\n protected createNewResource(params: FullPTableDef): PTableHolder {\n if (getDebugFlags().logPFrameRequests) {\n this.logger('info',\n `PTable creation (pTableHandle = ${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`,\n );\n }\n\n const handle = params.pFrameHandle;\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);\n\n // 3. Sort\n if (params.def.sorting.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...params.def,\n sorting: [],\n },\n });\n const { resource: { pTablePromise } } = predecessor;\n const sortedTable = pTablePromise.then((pTable) => pTable.sort(params.def.sorting));\n return new PTableHolder(handle, disposeSignal, sortedTable, predecessor);\n }\n\n // 2. Filter\n if (params.def.filters.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...params.def,\n filters: [],\n },\n });\n const { resource: { pTablePromise } } = predecessor;\n const filteredTable = pTablePromise.then((pTable) => pTable.filter(params.def.filters));\n return new PTableHolder(handle, disposeSignal, filteredTable, predecessor);\n }\n\n // 1. Join\n const table = pFramePromise.then((pFrame) => pFrame.createTable({\n src: joinEntryToInternal(params.def.src),\n filters: params.def.partitionFilters,\n }));\n return new PTableHolder(handle, disposeSignal, table);\n }\n\n protected calculateParamsKey(params: FullPTableDef): string {\n try {\n return stableKeyFromFullPTableDef(params);\n } catch (err: unknown) {\n throw new PFrameDriverError(`PTable handle calculation failed, request: ${JSON.stringify(params)}, error: ${ensureError(err)}`);\n }\n }\n })(this.pFrames, logger);\n }\n\n async dispose(): Promise<void> {\n return await this.server.stop();\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(\n def: PFrameDef<PColumnDataUniversal>,\n ctx: ComputableCtx,\n ): PFrameHandle {\n const columns: InternalPFrameData = def\n .filter((c) => valueTypes.find((t) => t === c.spec.valueType))\n .map((c) =>\n mapPObjectData(c, (d) =>\n isPlTreeNodeAccessor(d)\n ? parseDataInfoResource(d)\n : isDataInfo(d)\n ? d.type === 'ParquetPartitioned'\n ? mapDataInfo(d, (a) => traverseParquetPartitionedResource(a))\n : mapDataInfo(d, (a) => a.persist())\n : makeDataInfoFromPColumnValues(c.spec, d),\n ),\n );\n const distinctColumns = uniqueBy(columns, (column) => column.id);\n\n const res = this.pFrames.acquire(distinctColumns);\n ctx.addOnDestroy(res.unref);\n return res.key as PFrameHandle;\n }\n\n public createPTable(\n rawDef: PTableDef<PColumn<PColumnDataUniversal>>,\n ctx: ComputableCtx,\n ): PTableHandle {\n const def = migratePTableFilters(rawDef);\n const pFrameHandle = this.createPFrame(extractAllColumns(def.src), ctx);\n const defIds = mapPTableDef(def, (c) => c.id);\n\n const res = this.pTables.acquire({ def: defIds, pFrameHandle });\n if (getDebugFlags().logPFrameRequests)\n this.logger('info',\n `Create PTable call (pFrameHandle = ${pFrameHandle}; pTableHandle = ${JSON.stringify(res)}): ${JSON.stringify(\n mapPTableDef(def, (c) => c.spec),\n bigintReplacer,\n )}`,\n );\n ctx.addOnDestroy(res.unref); // in addition to pframe unref added in createPFrame above\n return res.key as PTableHandle;\n }\n\n //\n // PFrame istance 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 axesSpec: [\n ...new Map(request.compatibleWith.map(\n (item) => [canonicalize(item)!, item] as const,\n )).values(),\n ],\n qualifications: [],\n }]\n : [],\n };\n\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n\n const responce = await pFrame.findColumns(iRequest);\n return {\n hits: responce.hits\n .filter((h) => // only exactly matching columns\n h.mappingVariants.length === 0\n || h.mappingVariants.some((v) =>\n v.qualifications.forHit.length === 0\n && v.qualifications.forQueries.every((q) => q.length === 0)))\n .map((h) => h.hit),\n };\n }\n\n public async getColumnSpec(handle: PFrameHandle, columnId: PObjectId): Promise<PColumnSpec> {\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 (getDebugFlags().logPFrameRequests) {\n this.logger('info',\n `Call calculateTableData, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,\n );\n }\n\n const table = this.pTables.acquire({\n pFrameHandle: handle,\n def: migratePTableFilters(request),\n });\n const { resource: { pTablePromise, disposeSignal } } = table;\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.frameConcurrencyLimiter.run(async () => {\n try {\n const spec = pTable.getSpec();\n const data = await pTable.getData([...spec.keys()], {\n range,\n signal: combinedSignal,\n });\n\n const resultSize = await pTable.getFootprint({\n withPredecessors: false,\n signal: combinedSignal,\n });\n if (resultSize >= 2 * 1024 * 1024 * 1024) {\n throw new PFrameDriverError(`Join results exceed 2GB, please add filters to shrink the result size`);\n }\n\n const overallSize = await pTable.getFootprint({\n withPredecessors: true,\n signal: combinedSignal,\n });\n this.pTableCache.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 (getDebugFlags().logPFrameRequests) {\n this.logger('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 const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.frameConcurrencyLimiter.run(async () => {\n return await pFrame.getUniqueValues({\n ...request,\n filters: migrateFilters(request.filters),\n }, {\n signal: combinedSignal,\n });\n });\n }\n\n //\n // PTable istance methods\n //\n\n public async getSpec(handle: PTableHandle): Promise<PTableColumnSpec[]> {\n const { pTablePromise } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n return pTable.getSpec();\n }\n\n public async getShape(handle: PTableHandle, signal?: AbortSignal): Promise<PTableShape> {\n const { pTablePromise, disposeSignal } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.tableConcurrencyLimiter.run(async () => {\n return await pTable.getShape({\n signal: combinedSignal,\n });\n });\n }\n\n public async getData(\n handle: PTableHandle,\n columnIndices: number[],\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<PTableVector[]> {\n const { pTablePromise, disposeSignal } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.tableConcurrencyLimiter.run(async () => {\n return await pTable.getData(columnIndices, {\n range,\n signal: combinedSignal,\n });\n });\n }\n}\n\nfunction joinEntryToInternal(entry: JoinEntry<PObjectId>): PFrameInternal.JoinEntryV4 {\n const type = entry.type;\n switch (type) {\n case 'column':\n return {\n type: 'column',\n columnId: entry.column,\n };\n case 'slicedColumn':\n return {\n type: 'slicedColumn',\n columnId: entry.column,\n newId: entry.newId,\n axisFilters: entry.axisFilters,\n };\n case 'artificialColumn':\n return {\n type: 'artificialColumn',\n columnId: entry.column,\n newId: entry.newId,\n axesIndices: entry.axesIndices,\n };\n case 'inlineColumn':\n return {\n type: 'inlineColumn',\n newId: entry.column.id,\n spec: entry.column.spec,\n dataInfo: {\n type: 'Json',\n keyLength: entry.column.spec.axesSpec.length,\n data: entry.column.data.reduce((acc, row) => {\n acc[JSON.stringify(row.key)] = row.val;\n return acc;\n }, {} as Record<string, PColumnValue>),\n },\n };\n case 'inner':\n case 'full':\n return {\n type: entry.type,\n entries: entry.entries.map((col) => joinEntryToInternal(col)),\n };\n case 'outer':\n return {\n type: 'outer',\n primary: joinEntryToInternal(entry.primary),\n secondary: entry.secondary.map((col) => joinEntryToInternal(col)),\n };\n default:\n throw new PFrameDriverError(`unsupported PFrame join entry type: ${type}`);\n }\n}\n\nfunction stableKeyFromFullPTableDef(data: FullPTableDef): string {\n const hash = createHash('sha256');\n hash.update(canonicalize(data)!);\n return hash.digest().toString('hex');\n}\n\nfunction stableKeyFromPFrameData(data: PColumn<PFrameInternal.DataInfo<PlTreeEntry>>[]): string {\n const orderedData = [...data].map((column) =>\n mapPObjectData(column, (r) => {\n let result: {\n type: string;\n keyLength: number;\n payload: {\n key: string;\n value: null | number | string | [string, string];\n }[];\n };\n const type = r.type;\n switch (type) {\n case 'Json':\n result = {\n type: r.type,\n keyLength: r.keyLength,\n payload: Object.entries(r.data).map(([part, value]) => ({\n key: part,\n value,\n })),\n };\n break;\n case 'JsonPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: makeBlobId(info),\n })),\n };\n break;\n case 'BinaryPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: [makeBlobId(info.index), makeBlobId(info.values)] as const,\n })),\n };\n break;\n case 'ParquetPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: info.dataDigest || [\n makeBlobId(info.data),\n JSON.stringify({ axes: info.axes, column: info.column }),\n ] as const,\n })),\n };\n break;\n default:\n throw new PFrameDriverError(`unsupported resource type: ${JSON.stringify(type satisfies never)}`);\n }\n result.payload.sort((lhs, rhs) => lhs.key.localeCompare(rhs.key));\n return result;\n }),\n );\n orderedData.sort((lhs, rhs) => lhs.id.localeCompare(rhs.id));\n\n const hash = createHash('sha256');\n hash.update(canonicalize(orderedData)!);\n return hash.digest().toString('hex');\n}\n"],"names":["RefCountResourcePool","PFrameDriverError","isAbortError","PFrameInternal","ensureError","Readable","LRUCache","getDebugFlags","mapValues","assertNever","PFrameFactory","emptyDir","HttpHelpers","ConcurrencyLimitingExecutor","isPFrameDriverError","mapPObjectData","isPlTreeNodeAccessor","parseDataInfoResource","isDataInfo","mapDataInfo","traverseParquetPartitionedResource","makeDataInfoFromPColumnValues","uniqueBy","extractAllColumns","mapPTableDef","createHash"],"mappings":"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"}
1
+ {"version":3,"file":"driver.cjs","sources":["../../src/pool/driver.ts"],"sourcesContent":["import type { DownloadDriver } from '@milaboratories/pl-drivers';\nimport { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport type { PlTreeEntry, PlTreeNodeAccessor } from '@milaboratories/pl-tree';\nimport { isPlTreeNodeAccessor } from '@milaboratories/pl-tree';\nimport type {\n Computable,\n ComputableCtx,\n ComputableStableDefined,\n} from '@milaboratories/computable';\nimport type {\n CalculateTableDataRequest,\n CalculateTableDataResponse,\n FindColumnsRequest,\n FindColumnsResponse,\n LocalBlobHandleAndSize,\n PColumnIdAndSpec,\n PColumnSpec,\n PFrameHandle,\n PObjectId,\n PTableColumnSpec,\n PTableHandle,\n PTableShape,\n PTableVector,\n TableRange,\n UniqueValuesRequest,\n UniqueValuesResponse,\n PFrameDriver as SdkPFrameDriver,\n PColumn,\n PFrameDef,\n JoinEntry,\n PTableDef,\n ValueType,\n PTableRecordSingleValueFilterV2,\n PTableRecordFilter,\n PColumnValues,\n DataInfo,\n PColumnValue,\n RemoteBlobHandleAndSize,\n RemoteBlobHandle,\n ContentHandler,\n} from '@platforma-sdk/model';\nimport {\n mapPObjectData,\n mapPTableDef,\n extractAllColumns,\n mapDataInfo,\n isDataInfo,\n ensureError,\n PFrameDriverError,\n isAbortError,\n isPFrameDriverError,\n uniqueBy,\n} from '@platforma-sdk/model';\nimport { LRUCache } from 'lru-cache';\nimport {\n makeDataInfoFromPColumnValues,\n parseDataInfoResource,\n traverseParquetChunkResource,\n} from './data';\nimport { createHash } from 'node:crypto';\nimport { type MiLogger } from '@milaboratories/ts-helpers';\nimport { mapValues } from 'es-toolkit';\nimport {\n assertNever,\n emptyDir,\n ConcurrencyLimitingExecutor,\n RefCountResourcePool,\n type PollResource,\n} from '@milaboratories/ts-helpers';\nimport canonicalize from 'canonicalize';\nimport { PFrameFactory, HttpHelpers } from '@milaboratories/pframes-rs-node';\nimport path from 'node:path';\nimport { getDebugFlags } from '../debug';\nimport { Readable } from 'node:stream';\n\ntype PColumnDataUniversal = PlTreeNodeAccessor | DataInfo<PlTreeNodeAccessor> | PColumnValues;\n\nfunction makeBlobId(res: PlTreeEntry): string {\n return String(res.rid);\n}\n\ntype LocalBlobPoolEntry = PollResource<ComputableStableDefined<LocalBlobHandleAndSize>>;\n\nclass LocalBlobPool\n extends RefCountResourcePool<PlTreeEntry, ComputableStableDefined<LocalBlobHandleAndSize>>\n implements PFrameInternal.PFrameDataSourceV2 {\n constructor(private readonly blobDriver: DownloadDriver) {\n super();\n }\n\n protected calculateParamsKey(params: PlTreeEntry): string {\n return makeBlobId(params);\n }\n\n protected createNewResource(params: PlTreeEntry): ComputableStableDefined<LocalBlobHandleAndSize> {\n // precalculation of value tree will trigger the download process right away\n return this.blobDriver.getDownloadedBlob(params).withPreCalculatedValueTree();\n }\n\n public getByKey(blobId: string): ComputableStableDefined<LocalBlobHandleAndSize> {\n const resource = super.tryGetByKey(blobId);\n if (!resource) throw new PFrameDriverError(`Blob with id ${blobId} not found.`);\n return resource;\n }\n\n public async preloadBlob(blobIds: string[], signal?: AbortSignal): Promise<void> {\n try {\n await Promise.all(blobIds.map((blobId) => this.getByKey(blobId).awaitStableFullValue(signal)));\n } catch (err: unknown) {\n if (!isAbortError(err)) throw err;\n }\n };\n\n public async resolveBlobContent(blobId: string, signal?: AbortSignal): Promise<Uint8Array> {\n const computable = this.getByKey(blobId);\n const blob = await computable.awaitStableValue(signal);\n return await this.blobDriver.getContent(blob.handle, { signal });\n };\n}\n\ntype RemoteBlobPoolEntry = PollResource<Computable<RemoteBlobHandleAndSize>>;\n\nclass RemoteBlobPool\n extends RefCountResourcePool<PlTreeEntry, Computable<RemoteBlobHandleAndSize>> {\n constructor(private readonly blobDriver: DownloadDriver) {\n super();\n }\n\n protected calculateParamsKey(params: PlTreeEntry): string {\n return String(params.rid);\n }\n\n protected createNewResource(params: PlTreeEntry): Computable<RemoteBlobHandleAndSize> {\n return this.blobDriver.getOnDemandBlob(params);\n }\n\n public async withContent<T>(\n handle: RemoteBlobHandle,\n options: {\n range: PFrameInternal.FileRange;\n signal: AbortSignal;\n handler: ContentHandler<T>;\n },\n ): Promise<T> {\n return await this.blobDriver.withContent(handle, {\n range: {\n from: options.range.start,\n to: options.range.end + 1,\n },\n signal: options.signal,\n handler: options.handler,\n });\n }\n}\n\ninterface BlobStoreOptions extends PFrameInternal.ObjectStoreOptions {\n remoteBlobPool: RemoteBlobPool;\n};\n\nclass BlobStore extends PFrameInternal.BaseObjectStore {\n private readonly remoteBlobPool: RemoteBlobPool;\n\n constructor(options: BlobStoreOptions) {\n super(options);\n this.remoteBlobPool = options.remoteBlobPool;\n }\n\n public override async request(\n filename: PFrameInternal.ParquetFileName,\n params: {\n method: PFrameInternal.HttpMethod;\n range?: PFrameInternal.HttpRange;\n signal: AbortSignal;\n callback: (response: PFrameInternal.ObjectStoreResponse) => Promise<void>;\n },\n ): Promise<void> {\n const blobId = filename.slice(0, -PFrameInternal.ParquetExtension.length);\n const respond = async (response: PFrameInternal.ObjectStoreResponse): Promise<void> => {\n try {\n await params.callback(response);\n } catch (error: unknown) {\n this.logger(\n 'warn',\n `PFrames blob store received unhandled rejection from HTTP handler: ${ensureError(error)}`,\n );\n }\n };\n\n try {\n const computable = this.remoteBlobPool.tryGetByKey(blobId);\n if (!computable) return await respond({ type: 'NotFound' });\n\n let blob: RemoteBlobHandleAndSize;\n try {\n blob = await computable.getValue();\n } catch (error: unknown) {\n this.logger(\n 'error',\n `PFrames blob store failed to get blob from computable: ${ensureError(error)}`,\n );\n return await respond({ type: 'InternalError' });\n }\n params.signal.throwIfAborted();\n\n const translatedRange = this.translate(blob.size, params.range);\n if (!translatedRange) {\n return await respond({\n type: 'RangeNotSatisfiable',\n size: blob.size,\n });\n }\n\n if (params.method === 'HEAD') {\n return await respond({\n type: 'Ok',\n size: blob.size,\n range: translatedRange,\n });\n }\n\n this.logger(\n 'info',\n `PFrames blob store requesting content for ${blobId}, range [${translatedRange.start}..=${translatedRange.end}]`,\n );\n return await this.remoteBlobPool.withContent(blob.handle, {\n range: translatedRange,\n signal: params.signal,\n handler: async (data) => {\n return await respond({\n type: 'Ok',\n size: blob.size,\n range: translatedRange,\n // eslint-disable-next-line n/no-unsupported-features/node-builtins\n data: Readable.fromWeb(data),\n });\n },\n });\n } catch (error: unknown) {\n if (!isAbortError(error)) {\n this.logger(\n 'warn',\n `PFrames blob store unhandled error: ${ensureError(error)}`,\n );\n }\n return await respond({ type: 'InternalError' });\n }\n }\n}\n\ntype InternalPFrameData = PFrameDef<PFrameInternal.DataInfo<PlTreeEntry>>;\n\nconst valueTypes: ValueType[] = ['Int', 'Long', 'Float', 'Double', 'String', 'Bytes'] as const;\n\nfunction migrateFilters(filters: PTableRecordFilter[]): 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 console.warn(\n `type overriten from 'bySingleColumn' to 'bySingleColumnV2' for filters: ${filtersV1Json}`,\n );\n }\n return filtersV2;\n}\n\nfunction migratePTableFilters<T>(\n def: Omit<PTableDef<T>, 'partitionFilters'> | PTableDef<T>,\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(def.filters.filter((f) => f.column.type === 'axis')),\n filters: migrateFilters(def.filters.filter((f) => f.column.type === 'column')),\n };\n }\n return {\n ...def,\n partitionFilters: migrateFilters(def.partitionFilters),\n filters: migrateFilters(def.filters),\n };\n}\n\nconst bigintReplacer = (_: string, v: unknown) => (typeof v === 'bigint' ? v.toString() : v);\n\nclass PTableCache {\n private readonly perFrame = new Map<PFrameHandle, LRUCache<PTableHandle, PollResource<PTableHolder>>>();\n private readonly global: LRUCache<PTableHandle, PollResource<PTableHolder>>;\n private readonly disposeListeners = new Map<PTableHandle, () => void>();\n\n constructor(\n private readonly logger: PFrameInternal.Logger,\n private readonly ops: PFrameDriverOps,\n ) {\n this.global = new LRUCache<PTableHandle, PollResource<PTableHolder>>({\n maxSize: this.ops.pFramesCacheMaxSize,\n dispose: (resource, key, reason) => {\n if (reason === 'evict') {\n this.perFrame.get(resource.resource.pFrame)?.delete(key);\n }\n\n if (this.perFrame.get(resource.resource.pFrame)?.size === 0) {\n this.perFrame.delete(resource.resource.pFrame);\n }\n\n const disposeListener = this.disposeListeners.get(key)!;\n this.disposeListeners.delete(key);\n resource.resource.disposeSignal.removeEventListener('abort', disposeListener);\n\n resource.unref();\n if (getDebugFlags().logPFrameRequests) {\n this.logger('info', `calculateTableData cache - removed PTable ${key}`);\n }\n },\n });\n }\n\n public cache(resource: PollResource<PTableHolder>, size: number): void {\n const key = resource.key as PTableHandle;\n if (getDebugFlags().logPFrameRequests) {\n this.logger('info', `calculateTableData cache - added PTable ${key} with size ${size}`);\n }\n\n this.global.set(key, resource, { size });\n\n let perFrame = this.perFrame.get(resource.resource.pFrame);\n if (!perFrame) {\n perFrame = new LRUCache<PTableHandle, PollResource<PTableHolder>>({\n max: this.ops.pFrameCacheMaxCount,\n dispose: (_resource, key, reason) => {\n if (reason === 'evict') {\n this.global.delete(key);\n }\n },\n });\n this.perFrame.set(resource.resource.pFrame, perFrame);\n }\n perFrame.set(key, resource);\n\n const disposeListener = () => {\n this.perFrame.get(resource.resource.pFrame)?.delete(key);\n this.global.delete(key);\n };\n this.disposeListeners.set(key, disposeListener);\n resource.resource.disposeSignal.addEventListener('abort', disposeListener);\n }\n}\n\nclass PFrameHolder implements PFrameInternal.PFrameDataSourceV2, AsyncDisposable {\n public readonly pFramePromise: Promise<PFrameInternal.PFrameV12>;\n private readonly abortController = new AbortController();\n private readonly localBlobs: LocalBlobPoolEntry[] = [];\n private readonly remoteBlobs: RemoteBlobPoolEntry[] = [];\n\n constructor(\n public readonly parquetServer: PFrameInternal.HttpServerInfo,\n private readonly localBlobPool: LocalBlobPool,\n private readonly remoteBlobPool: RemoteBlobPool,\n logger: PFrameInternal.Logger,\n private readonly spillPath: string,\n columns: InternalPFrameData,\n ) {\n const makeLocalBlobId = (blob: PlTreeEntry): string => {\n const localBlob = this.localBlobPool.acquire(blob);\n this.localBlobs.push(localBlob);\n return localBlob.key;\n };\n\n const makeRemoteBlobId = (blob: PlTreeEntry): string => {\n const remoteBlob = this.remoteBlobPool.acquire(blob);\n this.remoteBlobs.push(remoteBlob);\n return remoteBlob.key + PFrameInternal.ParquetExtension;\n };\n\n const mapColumnData = (data: PFrameInternal.DataInfo<PlTreeEntry>): PFrameInternal.DataInfo<string> => {\n switch (data.type) {\n case 'Json':\n return { ...data };\n case 'JsonPartitioned':\n return {\n ...data,\n parts: mapValues(data.parts, makeLocalBlobId),\n };\n case 'BinaryPartitioned':\n return {\n ...data,\n parts: mapValues(data.parts, (v) => ({\n index: makeLocalBlobId(v.index),\n values: makeLocalBlobId(v.values),\n })),\n };\n case 'ParquetPartitioned':\n return {\n ...data,\n parts: mapValues(data.parts, (v) => ({\n ...v,\n data: makeRemoteBlobId(v.data),\n })),\n };\n default:\n assertNever(data);\n }\n };\n\n const jsonifiedColumns = columns.map((column) => ({\n ...column,\n data: mapColumnData(column.data),\n }));\n\n try {\n const pFrame = PFrameFactory.createPFrame({ spillPath: this.spillPath, logger });\n pFrame.setDataSource(this);\n\n const promises: Promise<void>[] = [];\n for (const column of jsonifiedColumns) {\n pFrame.addColumnSpec(column.id, column.spec);\n promises.push(pFrame.setColumnData(column.id, column.data, { signal: this.disposeSignal }));\n }\n\n this.pFramePromise = Promise.all(promises)\n .then(() => pFrame)\n .catch((err) => {\n this.dispose();\n pFrame.dispose();\n throw new PFrameDriverError(\n `PFrame creation failed asynchronously, columns: ${JSON.stringify(jsonifiedColumns)}, error: ${ensureError(err)}`,\n );\n });\n } catch (err: unknown) {\n throw new PFrameDriverError(\n `PFrame creation failed synchronously, columns: ${JSON.stringify(jsonifiedColumns)}, error: ${ensureError(err)}`,\n );\n }\n }\n\n public readonly preloadBlob = async (blobIds: string[]): Promise<void> => {\n return await this.localBlobPool.preloadBlob(blobIds, this.disposeSignal);\n };\n\n public readonly resolveBlobContent = async (blobId: string): Promise<Uint8Array> => {\n return await this.localBlobPool.resolveBlobContent(blobId, this.disposeSignal);\n };\n\n public get disposeSignal(): AbortSignal {\n return this.abortController.signal;\n }\n\n private dispose(): void {\n this.abortController.abort();\n this.localBlobs.forEach((entry) => entry.unref());\n this.remoteBlobs.forEach((entry) => entry.unref());\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n this.dispose();\n await this.pFramePromise\n .then((pFrame) => pFrame.dispose())\n .catch(() => { /* mute error */ });\n }\n}\n\nclass PTableHolder implements AsyncDisposable {\n private readonly abortController = new AbortController();\n private readonly combinedDisposeSignal: AbortSignal;\n\n constructor(\n public readonly pFrame: PFrameHandle,\n pFrameDisposeSignal: AbortSignal,\n public readonly pTablePromise: Promise<PFrameInternal.PTableV7>,\n public readonly predecessor?: PollResource<PTableHolder>,\n ) {\n this.combinedDisposeSignal = AbortSignal.any([pFrameDisposeSignal, this.abortController.signal]);\n }\n\n public get disposeSignal(): AbortSignal {\n return this.combinedDisposeSignal;\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n this.abortController.abort();\n await this.pTablePromise\n .then((pTable) => pTable.dispose())\n .catch(() => { /* mute error */ });\n this.predecessor?.unref();\n }\n}\n\ntype FullPTableDef = {\n pFrameHandle: PFrameHandle;\n def: PTableDef<PObjectId>;\n};\n\nexport type PFrameDriverOps = {\n /** Port to run parquet HTTP server on. */\n parquetServerPort: number;\n /** Concurrency limits for `getUniqueValues` and `calculateTableData` requests */\n pFrameConcurrency: number;\n /** Concurrency limits for `getShape` and `getData` requests */\n pTableConcurrency: number;\n /** Maximum number of `calculateTableData` results cached for each PFrame */\n pFrameCacheMaxCount: number;\n /**\n * Maximum size of `calculateTableData` results cached for PFrames overall.\n * The limit is soft, as the same table could be materialized with other requests and will not be deleted in such case.\n * Also each table has predeccessors, overlapping predecessors will be counted twice, so the effective limit is smaller.\n */\n pFramesCacheMaxSize: number;\n};\n\n/**\n * Extends public and safe SDK's driver API with methods used internally in the middle\n * layer and in tests.\n */\nexport interface InternalPFrameDriver extends SdkPFrameDriver, AsyncDisposable {\n /** Dispose the driver and all its resources. */\n dispose(): Promise<void>;\n\n /**\n * Dump active PFrames allocations in pprof format.\n * The result of this function should be saved as `profile.pb.gz`.\n * Use {@link https://pprof.me/} or {@link https://www.speedscope.app/}\n * to view the allocation flamechart.\n * @warning This method will always reject on Windows!\n */\n pprofDump(): Promise<Uint8Array>;\n\n /** Create a new PFrame */\n createPFrame(\n def: PFrameDef<PColumnDataUniversal>,\n ctx: ComputableCtx,\n ): PFrameHandle;\n\n /** Create a new PTable */\n createPTable(\n def: PTableDef<PColumn<PColumnDataUniversal>>,\n ctx: ComputableCtx,\n ): PTableHandle;\n\n /** Calculates data for the table and returns complete data representation of it */\n calculateTableData(\n handle: PFrameHandle,\n request: CalculateTableDataRequest<PObjectId>,\n range: TableRange | undefined,\n signal?: AbortSignal\n ): Promise<CalculateTableDataResponse>;\n\n /** Calculate set of unique values for a specific axis for the filtered set of records */\n getUniqueValues(\n handle: PFrameHandle,\n request: UniqueValuesRequest,\n signal?: AbortSignal\n ): Promise<UniqueValuesResponse>;\n\n /** Unified table shape */\n getShape(\n handle: PTableHandle,\n signal?: AbortSignal,\n ): Promise<PTableShape>;\n\n /**\n * Retrieve the data from the table. To retrieve only data required, it can be\n * sliced both horizontally ({@link columnIndices}) and vertically\n * ({@link range}).\n *\n * @param columnIndices unified indices of columns to be retrieved\n * @param range optionally limit the range of records to retrieve\n * */\n getData(\n handle: PTableHandle,\n columnIndices: number[],\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<PTableVector[]>;\n}\n\nexport class PFrameDriver implements InternalPFrameDriver {\n private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>;\n private readonly pTables: RefCountResourcePool<FullPTableDef, PTableHolder>;\n private readonly pTableCache: PTableCache;\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 static async init(\n blobDriver: DownloadDriver,\n miLogger: MiLogger,\n spillPath: string,\n ops: PFrameDriverOps,\n ): Promise<PFrameDriver> {\n const resolvedSpillPath = path.resolve(spillPath);\n await emptyDir(resolvedSpillPath);\n\n const logger: PFrameInternal.Logger = (level, message) => miLogger[level](message);\n const localBlobPool = new LocalBlobPool(blobDriver);\n const remoteBlobPool = new RemoteBlobPool(blobDriver);\n\n const store = new BlobStore({ remoteBlobPool, logger });\n const handler = HttpHelpers.createRequestHandler({ store: store });\n const server = await HttpHelpers.createHttpServer({ handler, port: ops.parquetServerPort });\n\n return new PFrameDriver(logger, server, localBlobPool, remoteBlobPool, resolvedSpillPath, ops);\n }\n\n private constructor(\n private readonly logger: PFrameInternal.Logger,\n private readonly server: PFrameInternal.HttpServer,\n localBlobPool: LocalBlobPool,\n remoteBlobPool: RemoteBlobPool,\n spillPath: string,\n ops: PFrameDriverOps,\n ) {\n const concurrencyLimiter = new ConcurrencyLimitingExecutor(ops.pFrameConcurrency);\n this.frameConcurrencyLimiter = concurrencyLimiter;\n this.tableConcurrencyLimiter = new ConcurrencyLimitingExecutor(ops.pTableConcurrency);\n\n this.pTableCache = new PTableCache(logger, ops);\n\n this.pFrames = new (class extends RefCountResourcePool<InternalPFrameData, PFrameHolder> {\n constructor(\n private readonly parquetServer: PFrameInternal.HttpServerInfo,\n private readonly localBlobPool: LocalBlobPool,\n private readonly remoteBlobPool: RemoteBlobPool,\n private readonly logger: PFrameInternal.Logger,\n private readonly spillPath: string,\n ) {\n super();\n }\n\n public acquire(params: InternalPFrameData): PollResource<PFrameHolder> {\n return super.acquire(params);\n }\n\n public getByKey(key: PFrameHandle): PFrameHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) throw new PFrameDriverError(`PFrame not found, handle = ${key}`);\n return resource;\n }\n\n protected createNewResource(params: InternalPFrameData): PFrameHolder {\n if (getDebugFlags().logPFrameRequests)\n this.logger('info',\n `PFrame creation (pFrameHandle = ${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`,\n );\n return new PFrameHolder(this.parquetServer, this.localBlobPool, this.remoteBlobPool, this.logger, this.spillPath, params);\n }\n\n protected calculateParamsKey(params: InternalPFrameData): string {\n try {\n return stableKeyFromPFrameData(params);\n } catch (err: unknown) {\n if (isPFrameDriverError(err)) throw err;\n throw new PFrameDriverError(`PFrame handle calculation failed, request: ${JSON.stringify(params, bigintReplacer)}, error: ${ensureError(err)}`);\n }\n }\n })(server.info, localBlobPool, remoteBlobPool, logger, spillPath);\n\n this.pTables = new (class extends RefCountResourcePool<\n FullPTableDef,\n PTableHolder\n > {\n constructor(\n private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>,\n private readonly logger: PFrameInternal.Logger,\n ) {\n super();\n }\n\n public getByKey(key: PTableHandle): PTableHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) throw new PFrameDriverError(`PTable not found, handle = ${key}`);\n return resource;\n }\n\n protected createNewResource(params: FullPTableDef): PTableHolder {\n if (getDebugFlags().logPFrameRequests) {\n this.logger('info',\n `PTable creation (pTableHandle = ${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`,\n );\n }\n\n const handle = params.pFrameHandle;\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);\n\n // 3. Sort\n if (params.def.sorting.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...params.def,\n sorting: [],\n },\n });\n const { resource: { pTablePromise } } = predecessor;\n const sortedTable = pTablePromise.then((pTable) => pTable.sort(params.def.sorting));\n return new PTableHolder(handle, disposeSignal, sortedTable, predecessor);\n }\n\n // 2. Filter\n if (params.def.filters.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...params.def,\n filters: [],\n },\n });\n const { resource: { pTablePromise } } = predecessor;\n const filteredTable = pTablePromise.then((pTable) => pTable.filter(params.def.filters));\n return new PTableHolder(handle, disposeSignal, filteredTable, predecessor);\n }\n\n // 1. Join\n const table = pFramePromise.then((pFrame) => pFrame.createTable({\n src: joinEntryToInternal(params.def.src),\n filters: params.def.partitionFilters,\n }));\n return new PTableHolder(handle, disposeSignal, table);\n }\n\n protected calculateParamsKey(params: FullPTableDef): string {\n try {\n return stableKeyFromFullPTableDef(params);\n } catch (err: unknown) {\n throw new PFrameDriverError(`PTable handle calculation failed, request: ${JSON.stringify(params)}, error: ${ensureError(err)}`);\n }\n }\n })(this.pFrames, logger);\n }\n\n async dispose(): Promise<void> {\n return await this.server.stop();\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(\n def: PFrameDef<PColumnDataUniversal>,\n ctx: ComputableCtx,\n ): PFrameHandle {\n const columns: InternalPFrameData = def\n .filter((c) => valueTypes.find((t) => t === c.spec.valueType))\n .map((c) =>\n mapPObjectData(c, (d) =>\n isPlTreeNodeAccessor(d)\n ? parseDataInfoResource(d)\n : isDataInfo(d)\n ? d.type === 'ParquetPartitioned'\n ? mapDataInfo(d, (a) => traverseParquetChunkResource(a))\n : mapDataInfo(d, (a) => a.persist())\n : makeDataInfoFromPColumnValues(c.spec, d),\n ),\n );\n const distinctColumns = uniqueBy(columns, (column) => column.id);\n\n const res = this.pFrames.acquire(distinctColumns);\n ctx.addOnDestroy(res.unref);\n return res.key as PFrameHandle;\n }\n\n public createPTable(\n rawDef: PTableDef<PColumn<PColumnDataUniversal>>,\n ctx: ComputableCtx,\n ): PTableHandle {\n const def = migratePTableFilters(rawDef);\n const pFrameHandle = this.createPFrame(extractAllColumns(def.src), ctx);\n const defIds = mapPTableDef(def, (c) => c.id);\n\n const res = this.pTables.acquire({ def: defIds, pFrameHandle });\n if (getDebugFlags().logPFrameRequests)\n this.logger('info',\n `Create PTable call (pFrameHandle = ${pFrameHandle}; pTableHandle = ${JSON.stringify(res)}): ${JSON.stringify(\n mapPTableDef(def, (c) => c.spec),\n bigintReplacer,\n )}`,\n );\n ctx.addOnDestroy(res.unref); // in addition to pframe unref added in createPFrame above\n return res.key as PTableHandle;\n }\n\n //\n // PFrame istance 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 axesSpec: [\n ...new Map(request.compatibleWith.map(\n (item) => [canonicalize(item)!, item] as const,\n )).values(),\n ],\n qualifications: [],\n }]\n : [],\n };\n\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n\n const responce = await pFrame.findColumns(iRequest);\n return {\n hits: responce.hits\n .filter((h) => // only exactly matching columns\n h.mappingVariants.length === 0\n || h.mappingVariants.some((v) =>\n v.qualifications.forHit.length === 0\n && v.qualifications.forQueries.every((q) => q.length === 0)))\n .map((h) => h.hit),\n };\n }\n\n public async getColumnSpec(handle: PFrameHandle, columnId: PObjectId): Promise<PColumnSpec> {\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 (getDebugFlags().logPFrameRequests) {\n this.logger('info',\n `Call calculateTableData, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,\n );\n }\n\n const table = this.pTables.acquire({\n pFrameHandle: handle,\n def: migratePTableFilters(request),\n });\n const { resource: { pTablePromise, disposeSignal } } = table;\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.frameConcurrencyLimiter.run(async () => {\n try {\n const spec = pTable.getSpec();\n const data = await pTable.getData([...spec.keys()], {\n range,\n signal: combinedSignal,\n });\n\n const resultSize = await pTable.getFootprint({\n withPredecessors: false,\n signal: combinedSignal,\n });\n if (resultSize >= 2 * 1024 * 1024 * 1024) {\n throw new PFrameDriverError(`Join results exceed 2GB, please add filters to shrink the result size`);\n }\n\n const overallSize = await pTable.getFootprint({\n withPredecessors: true,\n signal: combinedSignal,\n });\n this.pTableCache.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 (getDebugFlags().logPFrameRequests) {\n this.logger('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 const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.frameConcurrencyLimiter.run(async () => {\n return await pFrame.getUniqueValues({\n ...request,\n filters: migrateFilters(request.filters),\n }, {\n signal: combinedSignal,\n });\n });\n }\n\n //\n // PTable istance methods\n //\n\n public async getSpec(handle: PTableHandle): Promise<PTableColumnSpec[]> {\n const { pTablePromise } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n return pTable.getSpec();\n }\n\n public async getShape(handle: PTableHandle, signal?: AbortSignal): Promise<PTableShape> {\n const { pTablePromise, disposeSignal } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.tableConcurrencyLimiter.run(async () => {\n return await pTable.getShape({\n signal: combinedSignal,\n });\n });\n }\n\n public async getData(\n handle: PTableHandle,\n columnIndices: number[],\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<PTableVector[]> {\n const { pTablePromise, disposeSignal } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.tableConcurrencyLimiter.run(async () => {\n return await pTable.getData(columnIndices, {\n range,\n signal: combinedSignal,\n });\n });\n }\n}\n\nfunction joinEntryToInternal(entry: JoinEntry<PObjectId>): PFrameInternal.JoinEntryV4 {\n const type = entry.type;\n switch (type) {\n case 'column':\n return {\n type: 'column',\n columnId: entry.column,\n };\n case 'slicedColumn':\n return {\n type: 'slicedColumn',\n columnId: entry.column,\n newId: entry.newId,\n axisFilters: entry.axisFilters,\n };\n case 'artificialColumn':\n return {\n type: 'artificialColumn',\n columnId: entry.column,\n newId: entry.newId,\n axesIndices: entry.axesIndices,\n };\n case 'inlineColumn':\n return {\n type: 'inlineColumn',\n newId: entry.column.id,\n spec: entry.column.spec,\n dataInfo: {\n type: 'Json',\n keyLength: entry.column.spec.axesSpec.length,\n data: entry.column.data.reduce((acc, row) => {\n acc[JSON.stringify(row.key)] = row.val;\n return acc;\n }, {} as Record<string, PColumnValue>),\n },\n };\n case 'inner':\n case 'full':\n return {\n type: entry.type,\n entries: entry.entries.map((col) => joinEntryToInternal(col)),\n };\n case 'outer':\n return {\n type: 'outer',\n primary: joinEntryToInternal(entry.primary),\n secondary: entry.secondary.map((col) => joinEntryToInternal(col)),\n };\n default:\n throw new PFrameDriverError(`unsupported PFrame join entry type: ${type}`);\n }\n}\n\nfunction stableKeyFromFullPTableDef(data: FullPTableDef): string {\n const hash = createHash('sha256');\n hash.update(canonicalize(data)!);\n return hash.digest().toString('hex');\n}\n\nfunction stableKeyFromPFrameData(data: PColumn<PFrameInternal.DataInfo<PlTreeEntry>>[]): string {\n const orderedData = [...data].map((column) =>\n mapPObjectData(column, (r) => {\n let result: {\n type: string;\n keyLength: number;\n payload: {\n key: string;\n value: null | number | string | [string, string];\n }[];\n };\n const type = r.type;\n switch (type) {\n case 'Json':\n result = {\n type: r.type,\n keyLength: r.keyLength,\n payload: Object.entries(r.data).map(([part, value]) => ({\n key: part,\n value,\n })),\n };\n break;\n case 'JsonPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: makeBlobId(info),\n })),\n };\n break;\n case 'BinaryPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: [makeBlobId(info.index), makeBlobId(info.values)] as const,\n })),\n };\n break;\n case 'ParquetPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: info.dataDigest || [\n makeBlobId(info.data),\n JSON.stringify({ axes: info.axes, column: info.column }),\n ] as const,\n })),\n };\n break;\n default:\n throw new PFrameDriverError(`unsupported resource type: ${JSON.stringify(type satisfies never)}`);\n }\n result.payload.sort((lhs, rhs) => lhs.key.localeCompare(rhs.key));\n return result;\n }),\n );\n orderedData.sort((lhs, rhs) => lhs.id.localeCompare(rhs.id));\n\n const hash = createHash('sha256');\n hash.update(canonicalize(orderedData)!);\n return hash.digest().toString('hex');\n}\n"],"names":["RefCountResourcePool","PFrameDriverError","isAbortError","PFrameInternal","ensureError","Readable","LRUCache","getDebugFlags","mapValues","assertNever","PFrameFactory","emptyDir","HttpHelpers","ConcurrencyLimitingExecutor","isPFrameDriverError","mapPObjectData","isPlTreeNodeAccessor","parseDataInfoResource","isDataInfo","mapDataInfo","traverseParquetChunkResource","makeDataInfoFromPColumnValues","uniqueBy","extractAllColumns","mapPTableDef","createHash"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { PFrameInternal } from '@milaboratories/pl-model-middle-layer';
2
2
  import { isPlTreeNodeAccessor } from '@milaboratories/pl-tree';
3
3
  import { ensureError, isAbortError, PFrameDriverError, isPFrameDriverError, mapPObjectData, mapDataInfo, isDataInfo, uniqueBy, extractAllColumns, mapPTableDef } from '@platforma-sdk/model';
4
4
  import { LRUCache } from 'lru-cache';
5
- import { parseDataInfoResource, makeDataInfoFromPColumnValues, traverseParquetPartitionedResource } from './data.js';
5
+ import { parseDataInfoResource, makeDataInfoFromPColumnValues, traverseParquetChunkResource } from './data.js';
6
6
  import { createHash } from 'node:crypto';
7
7
  import { mapValues } from 'es-toolkit';
8
8
  import { emptyDir, ConcurrencyLimitingExecutor, RefCountResourcePool, assertNever } from '@milaboratories/ts-helpers';
@@ -501,7 +501,7 @@ class PFrameDriver {
501
501
  ? parseDataInfoResource(d)
502
502
  : isDataInfo(d)
503
503
  ? d.type === 'ParquetPartitioned'
504
- ? mapDataInfo(d, (a) => traverseParquetPartitionedResource(a))
504
+ ? mapDataInfo(d, (a) => traverseParquetChunkResource(a))
505
505
  : mapDataInfo(d, (a) => a.persist())
506
506
  : makeDataInfoFromPColumnValues(c.spec, d)));
507
507
  const distinctColumns = uniqueBy(columns, (column) => column.id);