@milaboratories/pl-model-common 1.30.0 → 1.31.0

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.
@@ -10,7 +10,7 @@ import { AAxisSelector, ADomain, AnchorAxisIdOrRefBasic, AnchorAxisRef, AnchorAx
10
10
  import { AxisFilter, AxisFilterByIdx, AxisFilterByName, AxisFilterValue, FilteredPColumn, FilteredPColumnId, isFilteredPColumn } from "./pframe/spec/filtered_column.js";
11
11
  import { SUniversalPColumnId, UniversalPColumnId, parseColumnId, stringifyColumnId } from "./pframe/spec/ids.js";
12
12
  import { FilterSpec, FilterSpecLeaf, FilterSpecNode, FilterSpecOfType, FilterSpecType, InferFilterSpecCommonLeaf, InferFilterSpecCommonNode, InferFilterSpecLeaf, InferFilterSpecLeafColumn, RootFilterSpec } from "./pframe/filter_spec.js";
13
- import { PTableAbsent, PTableNA, PTableShape, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, TableRange, ValueTypeSupported, isPTableAbsent, isPTableNA, isPTableValueAxis, pTableValue, pTableValueBranded } from "./pframe/data_types.js";
13
+ import { PTableNA, PTableShape, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, TableRange, ValueTypeSupported, isPTableNA, pTableValue, pTableValueBranded } from "./pframe/data_types.js";
14
14
  import { FindColumnsRequest, FindColumnsResponse } from "./pframe/find_columns.js";
15
15
  import { PTableColumnId, PTableColumnIdAxis, PTableColumnIdColumn, PTableColumnSpec, PTableColumnSpecAxis, PTableColumnSpecColumn, getPTableColumnId } from "./pframe/table_common.js";
16
16
  import { PTable } from "./pframe/table.js";
@@ -4,7 +4,7 @@ import { isLiveLog } from "./log.js";
4
4
  import { getFileNameFromHandle, getFilePathFromHandle, isImportFileHandleIndex, isImportFileHandleUpload } from "./ls.js";
5
5
  import { dataInfoToEntries, entriesToDataInfo, isDataInfo, isDataInfoEntries, isPartitionedDataInfoEntries, mapDataInfo, mapDataInfoEntries, visitDataInfo } from "./pframe/data_info.js";
6
6
  import { Annotation, AnnotationJson, Domain, DomainJson, PAxisName, PColumnName, ValueType, canonicalizeAxisId, canonicalizeAxisWithParents, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getNormalizedAxesList, getPColumnSpecId, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, isAxisId, isLabelColumn, isLinkerColumn, matchAxisId, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, resolveAnnotationParents } from "./pframe/spec/spec.js";
7
- import { PTableAbsent, PTableNA, isPTableAbsent, isPTableNA, isPTableValueAxis, pTableValue, pTableValueBranded } from "./pframe/data_types.js";
7
+ import { PTableNA, isPTableNA, pTableValue, pTableValueBranded } from "./pframe/data_types.js";
8
8
  import { collectSpecQueryColumns, isBooleanExpression, mapSpecQueryColumns, sortSpecQuery, traverseQuerySpec } from "./pframe/query/utils.js";
9
9
  import { mapJoinEntry, mapPTableDef, mapPTableDefV2, sortJoinEntry, sortPTableDef } from "./pframe/table_calculate.js";
10
10
  import { getPTableColumnId } from "./pframe/table_common.js";
@@ -6,9 +6,6 @@ function isBitSet(bitVector, offset) {
6
6
  const mask = 1 << 7 - offset % 8;
7
7
  return (bitVector[chunkIndex] & mask) > 0;
8
8
  }
9
- function isValueAbsent(vector, row) {
10
- return isBitSet(vector.absent, row);
11
- }
12
9
  function isValueNA(vector, row) {
13
10
  if (vector.isNA) return isBitSet(vector.isNA, row);
14
11
  const valueType = vector.type;
@@ -23,24 +20,15 @@ function isValueNA(vector, row) {
23
20
  default: throw Error(`unsupported data type: ${valueType}`);
24
21
  }
25
22
  }
26
- const PTableAbsent = { type: "absent" };
27
- /** Type guard for absent value */
28
- function isPTableAbsent(value) {
29
- return typeof value === "object" && value !== null && "type" in value && value.type === "absent";
30
- }
31
23
  const PTableNA = null;
32
24
  /** Type guard for NA value */
33
25
  function isPTableNA(value) {
34
26
  return value === PTableNA;
35
27
  }
36
- function isPTableValueAxis(value, isNA) {
37
- return !(isNA ? isNA(value) : isPTableNA(value));
38
- }
39
28
  function pTableValueImpl(column, row, options) {
40
29
  const valueType = column.type;
41
30
  if (valueType === require_spec.ValueType.Bytes) throw Error("Bytes not yet supported");
42
31
  if (options && "dataType" in options && options.dataType !== void 0 && options.dataType !== valueType) throw Error(`expected column of type ${options.dataType}, got ${valueType}`);
43
- if (isValueAbsent(column, row)) return options?.absent !== void 0 ? options.absent : PTableAbsent;
44
32
  if (isValueNA(column, row)) return options?.na !== void 0 ? options.na : PTableNA;
45
33
  const value = column.data[row];
46
34
  switch (valueType) {
@@ -59,11 +47,8 @@ function pTableValueBranded(column, row, options) {
59
47
  }
60
48
 
61
49
  //#endregion
62
- exports.PTableAbsent = PTableAbsent;
63
50
  exports.PTableNA = PTableNA;
64
- exports.isPTableAbsent = isPTableAbsent;
65
51
  exports.isPTableNA = isPTableNA;
66
- exports.isPTableValueAxis = isPTableValueAxis;
67
52
  exports.pTableValue = pTableValue;
68
53
  exports.pTableValueBranded = pTableValueBranded;
69
54
  //# sourceMappingURL=data_types.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"data_types.cjs","names":["ValueType"],"sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport { ValueType } from \"./spec/spec\";\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> = DataType extends typeof ValueType.Int\n ? PVectorDataInt\n : DataType extends typeof ValueType.Long\n ? PVectorDataLong\n : DataType extends typeof ValueType.Float\n ? PVectorDataFloat\n : DataType extends typeof ValueType.Double\n ? PVectorDataDouble\n : DataType extends typeof ValueType.String\n ? PVectorDataString\n : DataType extends typeof ValueType.Bytes\n ? PVectorDataBytes\n : never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions, absent positions have NA values */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /**\n * Encoded bit array marking some elements of this vector as absent,\n * call {@link bitSet} to read the data.\n * */\n readonly absent: Uint8Array;\n};\n/** Table column data in comparison to the data stored in a separate PColumn\n * may have some of the values \"absent\", i.e. as a result of missing record in\n * outer join operation. This information is encoded in {@link absent} field. */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nfunction isValueAbsent(vector: PTableVector, row: number): boolean {\n return isBitSet(vector.absent, row);\n}\n\nfunction isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN(value as PVectorDataFloat[number]);\n case ValueType.Double:\n return Number.isNaN(value as PVectorDataDouble[number]);\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableAbsent = { type: \"absent\" } as const;\nexport type PTableAbsent = typeof PTableAbsent;\n\n/** Type guard for absent value */\nexport function isPTableAbsent(value: unknown): value is PTableAbsent {\n return typeof value === \"object\" && value !== null && \"type\" in value && value.type === \"absent\";\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int\n ? PTableValueInt\n : DataType extends typeof ValueType.Long\n ? PTableValueLong\n : DataType extends typeof ValueType.Float\n ? PTableValueFloat\n : DataType extends typeof ValueType.Double\n ? PTableValueDouble\n : DataType extends typeof ValueType.String\n ? PTableValueString\n : never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<\n PTableValueData<DataType>,\n DataType\n>;\nexport type PTableValue<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = Absent | NA | PTableValueData<DataType>;\nexport type PTableValueBranded<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = Absent | NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<\n Absent = PTableAbsent,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = PTableValue<Absent, never, DataType>;\n\nexport function isPTableValueAxis<Absent, NA, DataType extends ValueTypeSupported>(\n value: PTableValue<Absent, NA, DataType>,\n isNA: (value: PTableValue<Absent, NA, DataType>) => value is NA,\n): value is PTableValueAxis<Absent, DataType>;\nexport function isPTableValueAxis<Absent, DataType extends ValueTypeSupported>(\n value: PTableValue<Absent, PTableNA, DataType>,\n): value is PTableValueAxis<Absent, DataType>;\nexport function isPTableValueAxis<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n>(\n value: PTableValue<Absent, NA, DataType>,\n isNA?: (value: PTableValue<Absent, NA, DataType>) => value is NA,\n): value is PTableValueAxis<Absent, DataType> {\n return !(isNA ? isNA(value) : isPTableNA(value));\n}\n\nfunction pTableValueImpl<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error(\"Bytes not yet supported\");\n }\n\n if (\n options &&\n \"dataType\" in options &&\n options.dataType !== undefined &&\n options.dataType !== valueType\n ) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueAbsent(column, row)) {\n return options?.absent !== undefined ? options.absent : PTableAbsent;\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, PTableNA, DataType> : never;\nexport function pTableValue<FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, FillNA, DataType> : never;\nexport function pTableValue<FillNA, FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, FillNA, DataType> : never;\nexport function pTableValue<FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n dataType: DataType;\n },\n): PTableValue<FillAbsent, PTableNA>;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<PTableAbsent, FillNA, DataType>;\nexport function pTableValue<FillNA, FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<FillAbsent, FillNA, DataType>;\nexport function pTableValue<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported\n ? PTableValueBranded<PTableAbsent, PTableNA, DataType>\n : never;\nexport function pTableValueBranded<FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableAbsent, FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, FillNA, DataType> : never;\nexport function pTableValueBranded<FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n dataType: DataType;\n },\n): PTableValueBranded<FillAbsent, PTableNA>;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<PTableAbsent, FillNA, DataType>;\nexport function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<FillAbsent, FillNA, DataType>;\nexport function pTableValueBranded<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n"],"mappings":";;;AAiDA,SAAS,SAAS,WAAuB,QAAyB;CAChE,MAAM,aAAa,KAAK,MAAM,SAAS,EAAE;CACzC,MAAM,OAAO,KAAM,IAAK,SAAS;AACjC,SAAQ,UAAU,cAAc,QAAQ;;AAG1C,SAAS,cAAc,QAAsB,KAAsB;AACjE,QAAO,SAAS,OAAO,QAAQ,IAAI;;AAGrC,SAAS,UAAU,QAAsB,KAAsB;AAC7D,KAAI,OAAO,KAAM,QAAO,SAAS,OAAO,MAAM,IAAI;CAGlD,MAAM,YAAY,OAAO;CACzB,MAAM,QAAQ,OAAO,KAAK;AAC1B,SAAQ,WAAR;EACE,KAAKA,uBAAU,IACb,QAAQ,UAAqC;EAC/C,KAAKA,uBAAU,KACb,QAAQ,UAAsC,CAAC;EACjD,KAAKA,uBAAU,MACb,QAAO,OAAO,MAAM,MAAkC;EACxD,KAAKA,uBAAU,OACb,QAAO,OAAO,MAAM,MAAmC;EACzD,KAAKA,uBAAU,OACb,QAAQ,UAAwC;EAClD,KAAKA,uBAAU,MACb,QAAQ,UAAuC;EACjD,QACE,OAAM,MAAM,0BAA0B,YAA4B;;;AAIxE,MAAa,eAAe,EAAE,MAAM,UAAU;;AAI9C,SAAgB,eAAe,OAAuC;AACpE,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,SAAS,MAAM,SAAS;;AAG1F,MAAa,WAAW;;AAIxB,SAAgB,WAAW,OAAmC;AAC5D,QAAO,UAAU;;AAiDnB,SAAgB,kBAKd,OACA,MAC4C;AAC5C,QAAO,EAAE,OAAO,KAAK,MAAM,GAAG,WAAW,MAAM;;AAGjD,SAAS,gBAKP,QACA,KACA,SAKA;CACA,MAAM,YAAY,OAAO;AACzB,KAAI,cAAcA,uBAAU,MAC1B,OAAM,MAAM,0BAA0B;AAGxC,KACE,WACA,cAAc,WACd,QAAQ,aAAa,UACrB,QAAQ,aAAa,UAErB,OAAM,MAAM,2BAA2B,QAAQ,SAAS,QAAQ,YAAY;AAG9E,KAAI,cAAc,QAAQ,IAAI,CAC5B,QAAO,SAAS,WAAW,SAAY,QAAQ,SAAS;AAG1D,KAAI,UAAU,QAAQ,IAAI,CACxB,QAAO,SAAS,OAAO,SAAY,QAAQ,KAAK;CAGlD,MAAM,QAAQ,OAAO,KAAK;AAC1B,SAAQ,WAAR;EACE,KAAKA,uBAAU,IACb,QAAO;EACT,KAAKA,uBAAU,KACb,QAAO,OAAO,MAAiC;EACjD,KAAKA,uBAAU,MACb,QAAO;EACT,KAAKA,uBAAU,OACb,QAAO;EACT,KAAKA,uBAAU,OACb,QAAQ;;;AAwDd,SAAgB,YAKd,QACA,KACA,SAKA;AACA,QAAO,gBAAgB,QAAQ,KAAK,QAAQ;;AAwD9C,SAAgB,mBAKd,QACA,KACA,SAKA;AACA,QAAO,gBAAgB,QAAQ,KAAK,QAAQ"}
1
+ {"version":3,"file":"data_types.cjs","names":["ValueType"],"sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport { ValueType } from \"./spec/spec\";\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> = DataType extends typeof ValueType.Int\n ? PVectorDataInt\n : DataType extends typeof ValueType.Long\n ? PVectorDataLong\n : DataType extends typeof ValueType.Float\n ? PVectorDataFloat\n : DataType extends typeof ValueType.Double\n ? PVectorDataDouble\n : DataType extends typeof ValueType.String\n ? PVectorDataString\n : DataType extends typeof ValueType.Bytes\n ? PVectorDataBytes\n : never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /** @deprecated Always empty. Kept for backwards compatibility with old blocks. */\n readonly absent?: Uint8Array;\n};\n/** Table column data */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nfunction isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN(value as PVectorDataFloat[number]);\n case ValueType.Double:\n return Number.isNaN(value as PVectorDataDouble[number]);\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int\n ? PTableValueInt\n : DataType extends typeof ValueType.Long\n ? PTableValueLong\n : DataType extends typeof ValueType.Float\n ? PTableValueFloat\n : DataType extends typeof ValueType.Double\n ? PTableValueDouble\n : DataType extends typeof ValueType.String\n ? PTableValueString\n : never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<\n PTableValueData<DataType>,\n DataType\n>;\nexport type PTableValue<NA = PTableNA, DataType extends ValueTypeSupported = ValueTypeSupported> =\n | NA\n | PTableValueData<DataType>;\nexport type PTableValueBranded<\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<DataType extends ValueTypeSupported = ValueTypeSupported> =\n PTableValueData<DataType>;\n\nfunction pTableValueImpl<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error(\"Bytes not yet supported\");\n }\n\n if (\n options &&\n \"dataType\" in options &&\n options.dataType !== undefined &&\n options.dataType !== valueType\n ) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<FillNA, DataType>;\nexport function pTableValue<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<FillNA, DataType>;\nexport function pTableValueBranded<\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n"],"mappings":";;;AA4CA,SAAS,SAAS,WAAuB,QAAyB;CAChE,MAAM,aAAa,KAAK,MAAM,SAAS,EAAE;CACzC,MAAM,OAAO,KAAM,IAAK,SAAS;AACjC,SAAQ,UAAU,cAAc,QAAQ;;AAG1C,SAAS,UAAU,QAAsB,KAAsB;AAC7D,KAAI,OAAO,KAAM,QAAO,SAAS,OAAO,MAAM,IAAI;CAGlD,MAAM,YAAY,OAAO;CACzB,MAAM,QAAQ,OAAO,KAAK;AAC1B,SAAQ,WAAR;EACE,KAAKA,uBAAU,IACb,QAAQ,UAAqC;EAC/C,KAAKA,uBAAU,KACb,QAAQ,UAAsC,CAAC;EACjD,KAAKA,uBAAU,MACb,QAAO,OAAO,MAAM,MAAkC;EACxD,KAAKA,uBAAU,OACb,QAAO,OAAO,MAAM,MAAmC;EACzD,KAAKA,uBAAU,OACb,QAAQ,UAAwC;EAClD,KAAKA,uBAAU,MACb,QAAQ,UAAuC;EACjD,QACE,OAAM,MAAM,0BAA0B,YAA4B;;;AAIxE,MAAa,WAAW;;AAIxB,SAAgB,WAAW,OAAmC;AAC5D,QAAO,UAAU;;AAqCnB,SAAS,gBACP,QACA,KACA,SAIA;CACA,MAAM,YAAY,OAAO;AACzB,KAAI,cAAcA,uBAAU,MAC1B,OAAM,MAAM,0BAA0B;AAGxC,KACE,WACA,cAAc,WACd,QAAQ,aAAa,UACrB,QAAQ,aAAa,UAErB,OAAM,MAAM,2BAA2B,QAAQ,SAAS,QAAQ,YAAY;AAG9E,KAAI,UAAU,QAAQ,IAAI,CACxB,QAAO,SAAS,OAAO,SAAY,QAAQ,KAAK;CAGlD,MAAM,QAAQ,OAAO,KAAK;AAC1B,SAAQ,WAAR;EACE,KAAKA,uBAAU,IACb,QAAO;EACT,KAAKA,uBAAU,KACb,QAAO,OAAO,MAAiC;EACjD,KAAKA,uBAAU,MACb,QAAO;EACT,KAAKA,uBAAU,OACb,QAAO;EACT,KAAKA,uBAAU,OACb,QAAQ;;;AAwBd,SAAgB,YACd,QACA,KACA,SAIA;AACA,QAAO,gBAAgB,QAAQ,KAAK,QAAQ;;AAsB9C,SAAgB,mBAId,QACA,KACA,SAIA;AACA,QAAO,gBAAgB,QAAQ,KAAK,QAAQ"}
@@ -11,30 +11,18 @@ type PVectorDataBytes = (null | Uint8Array)[];
11
11
  type PVectorDataTyped<DataType extends ValueType> = DataType extends typeof ValueType.Int ? PVectorDataInt : DataType extends typeof ValueType.Long ? PVectorDataLong : DataType extends typeof ValueType.Float ? PVectorDataFloat : DataType extends typeof ValueType.Double ? PVectorDataDouble : DataType extends typeof ValueType.String ? PVectorDataString : DataType extends typeof ValueType.Bytes ? PVectorDataBytes : never;
12
12
  type PVectorData = PVectorDataTyped<ValueType>;
13
13
  type PTableVectorTyped<DataType extends ValueType> = {
14
- /** Stored data type */readonly type: DataType; /** Values for present positions, absent positions have NA values */
14
+ /** Stored data type */readonly type: DataType; /** Values for present positions */
15
15
  readonly data: PVectorDataTyped<DataType>;
16
16
  /**
17
17
  * Encoded bit array marking some elements of this vector as NA,
18
18
  * call {@link bitSet} to read the data.
19
19
  * In old desktop versions NA values are encoded as magic values in data array.
20
20
  * */
21
- readonly isNA?: Uint8Array;
22
- /**
23
- * Encoded bit array marking some elements of this vector as absent,
24
- * call {@link bitSet} to read the data.
25
- * */
26
- readonly absent: Uint8Array;
21
+ readonly isNA?: Uint8Array; /** @deprecated Always empty. Kept for backwards compatibility with old blocks. */
22
+ readonly absent?: Uint8Array;
27
23
  };
28
- /** Table column data in comparison to the data stored in a separate PColumn
29
- * may have some of the values "absent", i.e. as a result of missing record in
30
- * outer join operation. This information is encoded in {@link absent} field. */
24
+ /** Table column data */
31
25
  type PTableVector = PTableVectorTyped<ValueType>;
32
- declare const PTableAbsent: {
33
- readonly type: "absent";
34
- };
35
- type PTableAbsent = typeof PTableAbsent;
36
- /** Type guard for absent value */
37
- declare function isPTableAbsent(value: unknown): value is PTableAbsent;
38
26
  declare const PTableNA: null;
39
27
  type PTableNA = typeof PTableNA;
40
28
  /** Type guard for NA value */
@@ -47,60 +35,26 @@ type PTableValueDouble = number;
47
35
  type PTableValueString = string;
48
36
  type PTableValueData<DataType extends ValueTypeSupported> = DataType extends typeof ValueType.Int ? PTableValueInt : DataType extends typeof ValueType.Long ? PTableValueLong : DataType extends typeof ValueType.Float ? PTableValueFloat : DataType extends typeof ValueType.Double ? PTableValueDouble : DataType extends typeof ValueType.String ? PTableValueString : never;
49
37
  type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<PTableValueData<DataType>, DataType>;
50
- type PTableValue<Absent = PTableAbsent, NA = PTableNA, DataType extends ValueTypeSupported = ValueTypeSupported> = Absent | NA | PTableValueData<DataType>;
51
- type PTableValueBranded<Absent = PTableAbsent, NA = PTableNA, DataType extends ValueTypeSupported = ValueTypeSupported> = Absent | NA | PTableValueDataBranded<DataType>;
52
- type PTableValueAxis<Absent = PTableAbsent, DataType extends ValueTypeSupported = ValueTypeSupported> = PTableValue<Absent, never, DataType>;
53
- declare function isPTableValueAxis<Absent, NA, DataType extends ValueTypeSupported>(value: PTableValue<Absent, NA, DataType>, isNA: (value: PTableValue<Absent, NA, DataType>) => value is NA): value is PTableValueAxis<Absent, DataType>;
54
- declare function isPTableValueAxis<Absent, DataType extends ValueTypeSupported>(value: PTableValue<Absent, PTableNA, DataType>): value is PTableValueAxis<Absent, DataType>;
38
+ type PTableValue<NA = PTableNA, DataType extends ValueTypeSupported = ValueTypeSupported> = NA | PTableValueData<DataType>;
39
+ type PTableValueBranded<NA = PTableNA, DataType extends ValueTypeSupported = ValueTypeSupported> = NA | PTableValueDataBranded<DataType>;
40
+ type PTableValueAxis<DataType extends ValueTypeSupported = ValueTypeSupported> = PTableValueData<DataType>;
55
41
  /** Read PTableValue from PTable column at specified row */
56
- declare function pTableValue<DataType extends ValueType>(column: PTableVectorTyped<DataType>, row: number): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, PTableNA, DataType> : never;
57
- declare function pTableValue<FillAbsent, DataType extends ValueType>(column: PTableVectorTyped<DataType>, row: number, options: {
58
- absent: FillAbsent;
59
- }): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, PTableNA, DataType> : never;
42
+ declare function pTableValue<DataType extends ValueType>(column: PTableVectorTyped<DataType>, row: number): DataType extends ValueTypeSupported ? PTableValue<PTableNA, DataType> : never;
60
43
  declare function pTableValue<FillNA, DataType extends ValueType>(column: PTableVectorTyped<DataType>, row: number, options: {
61
44
  na: FillNA;
62
- }): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, FillNA, DataType> : never;
63
- declare function pTableValue<FillNA, FillAbsent, DataType extends ValueType>(column: PTableVectorTyped<DataType>, row: number, options: {
64
- absent: FillAbsent;
65
- na: FillNA;
66
- }): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, FillNA, DataType> : never;
67
- declare function pTableValue<FillAbsent, DataType extends ValueTypeSupported>(column: PTableVectorTyped<ValueType>, row: number, options: {
68
- absent: FillAbsent;
69
- dataType: DataType;
70
- }): PTableValue<FillAbsent, PTableNA>;
45
+ }): DataType extends ValueTypeSupported ? PTableValue<FillNA, DataType> : never;
71
46
  declare function pTableValue<FillNA, DataType extends ValueTypeSupported>(column: PTableVectorTyped<ValueType>, row: number, options: {
72
47
  na: FillNA;
73
48
  dataType: DataType;
74
- }): PTableValue<PTableAbsent, FillNA, DataType>;
75
- declare function pTableValue<FillNA, FillAbsent, DataType extends ValueTypeSupported>(column: PTableVectorTyped<ValueType>, row: number, options: {
76
- absent: FillAbsent;
77
- na: FillNA;
78
- dataType: DataType;
79
- }): PTableValue<FillAbsent, FillNA, DataType>;
80
- declare function pTableValueBranded<DataType extends ValueType>(column: PTableVectorTyped<DataType>, row: number): DataType extends ValueTypeSupported ? PTableValueBranded<PTableAbsent, PTableNA, DataType> : never;
81
- declare function pTableValueBranded<FillAbsent, DataType extends ValueType>(column: PTableVectorTyped<DataType>, row: number, options: {
82
- absent: FillAbsent;
83
- }): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, PTableNA, DataType> : never;
49
+ }): PTableValue<FillNA, DataType>;
50
+ declare function pTableValueBranded<DataType extends ValueType>(column: PTableVectorTyped<DataType>, row: number): DataType extends ValueTypeSupported ? PTableValueBranded<PTableNA, DataType> : never;
84
51
  declare function pTableValueBranded<FillNA, DataType extends ValueType>(column: PTableVectorTyped<DataType>, row: number, options: {
85
52
  na: FillNA;
86
- }): DataType extends ValueTypeSupported ? PTableValueBranded<PTableAbsent, FillNA, DataType> : never;
87
- declare function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueType>(column: PTableVectorTyped<DataType>, row: number, options: {
88
- absent: FillAbsent;
89
- na: FillNA;
90
- }): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, FillNA, DataType> : never;
91
- declare function pTableValueBranded<FillAbsent, DataType extends ValueTypeSupported>(column: PTableVectorTyped<ValueType>, row: number, options: {
92
- absent: FillAbsent;
93
- dataType: DataType;
94
- }): PTableValueBranded<FillAbsent, PTableNA>;
53
+ }): DataType extends ValueTypeSupported ? PTableValueBranded<FillNA, DataType> : never;
95
54
  declare function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(column: PTableVectorTyped<ValueType>, row: number, options: {
96
55
  na: FillNA;
97
56
  dataType: DataType;
98
- }): PTableValueBranded<PTableAbsent, FillNA, DataType>;
99
- declare function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueTypeSupported>(column: PTableVectorTyped<ValueType>, row: number, options: {
100
- absent: FillAbsent;
101
- na: FillNA;
102
- dataType: DataType;
103
- }): PTableValueBranded<FillAbsent, FillNA, DataType>;
57
+ }): PTableValueBranded<FillNA, DataType>;
104
58
  /** Used in requests to partially retrieve table's data */
105
59
  type TableRange = {
106
60
  /** Index of the first record to retrieve */readonly offset: number; /** Block length */
@@ -112,5 +66,5 @@ type PTableShape = {
112
66
  rows: number;
113
67
  };
114
68
  //#endregion
115
- export { PTableAbsent, PTableNA, PTableShape, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, TableRange, ValueTypeSupported, isPTableAbsent, isPTableNA, isPTableValueAxis, pTableValue, pTableValueBranded };
69
+ export { PTableNA, PTableShape, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, TableRange, ValueTypeSupported, isPTableNA, pTableValue, pTableValueBranded };
116
70
  //# sourceMappingURL=data_types.d.ts.map
@@ -6,9 +6,6 @@ function isBitSet(bitVector, offset) {
6
6
  const mask = 1 << 7 - offset % 8;
7
7
  return (bitVector[chunkIndex] & mask) > 0;
8
8
  }
9
- function isValueAbsent(vector, row) {
10
- return isBitSet(vector.absent, row);
11
- }
12
9
  function isValueNA(vector, row) {
13
10
  if (vector.isNA) return isBitSet(vector.isNA, row);
14
11
  const valueType = vector.type;
@@ -23,24 +20,15 @@ function isValueNA(vector, row) {
23
20
  default: throw Error(`unsupported data type: ${valueType}`);
24
21
  }
25
22
  }
26
- const PTableAbsent = { type: "absent" };
27
- /** Type guard for absent value */
28
- function isPTableAbsent(value) {
29
- return typeof value === "object" && value !== null && "type" in value && value.type === "absent";
30
- }
31
23
  const PTableNA = null;
32
24
  /** Type guard for NA value */
33
25
  function isPTableNA(value) {
34
26
  return value === PTableNA;
35
27
  }
36
- function isPTableValueAxis(value, isNA) {
37
- return !(isNA ? isNA(value) : isPTableNA(value));
38
- }
39
28
  function pTableValueImpl(column, row, options) {
40
29
  const valueType = column.type;
41
30
  if (valueType === ValueType.Bytes) throw Error("Bytes not yet supported");
42
31
  if (options && "dataType" in options && options.dataType !== void 0 && options.dataType !== valueType) throw Error(`expected column of type ${options.dataType}, got ${valueType}`);
43
- if (isValueAbsent(column, row)) return options?.absent !== void 0 ? options.absent : PTableAbsent;
44
32
  if (isValueNA(column, row)) return options?.na !== void 0 ? options.na : PTableNA;
45
33
  const value = column.data[row];
46
34
  switch (valueType) {
@@ -59,5 +47,5 @@ function pTableValueBranded(column, row, options) {
59
47
  }
60
48
 
61
49
  //#endregion
62
- export { PTableAbsent, PTableNA, isPTableAbsent, isPTableNA, isPTableValueAxis, pTableValue, pTableValueBranded };
50
+ export { PTableNA, isPTableNA, pTableValue, pTableValueBranded };
63
51
  //# sourceMappingURL=data_types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data_types.js","names":[],"sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport { ValueType } from \"./spec/spec\";\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> = DataType extends typeof ValueType.Int\n ? PVectorDataInt\n : DataType extends typeof ValueType.Long\n ? PVectorDataLong\n : DataType extends typeof ValueType.Float\n ? PVectorDataFloat\n : DataType extends typeof ValueType.Double\n ? PVectorDataDouble\n : DataType extends typeof ValueType.String\n ? PVectorDataString\n : DataType extends typeof ValueType.Bytes\n ? PVectorDataBytes\n : never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions, absent positions have NA values */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /**\n * Encoded bit array marking some elements of this vector as absent,\n * call {@link bitSet} to read the data.\n * */\n readonly absent: Uint8Array;\n};\n/** Table column data in comparison to the data stored in a separate PColumn\n * may have some of the values \"absent\", i.e. as a result of missing record in\n * outer join operation. This information is encoded in {@link absent} field. */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nfunction isValueAbsent(vector: PTableVector, row: number): boolean {\n return isBitSet(vector.absent, row);\n}\n\nfunction isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN(value as PVectorDataFloat[number]);\n case ValueType.Double:\n return Number.isNaN(value as PVectorDataDouble[number]);\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableAbsent = { type: \"absent\" } as const;\nexport type PTableAbsent = typeof PTableAbsent;\n\n/** Type guard for absent value */\nexport function isPTableAbsent(value: unknown): value is PTableAbsent {\n return typeof value === \"object\" && value !== null && \"type\" in value && value.type === \"absent\";\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int\n ? PTableValueInt\n : DataType extends typeof ValueType.Long\n ? PTableValueLong\n : DataType extends typeof ValueType.Float\n ? PTableValueFloat\n : DataType extends typeof ValueType.Double\n ? PTableValueDouble\n : DataType extends typeof ValueType.String\n ? PTableValueString\n : never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<\n PTableValueData<DataType>,\n DataType\n>;\nexport type PTableValue<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = Absent | NA | PTableValueData<DataType>;\nexport type PTableValueBranded<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = Absent | NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<\n Absent = PTableAbsent,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = PTableValue<Absent, never, DataType>;\n\nexport function isPTableValueAxis<Absent, NA, DataType extends ValueTypeSupported>(\n value: PTableValue<Absent, NA, DataType>,\n isNA: (value: PTableValue<Absent, NA, DataType>) => value is NA,\n): value is PTableValueAxis<Absent, DataType>;\nexport function isPTableValueAxis<Absent, DataType extends ValueTypeSupported>(\n value: PTableValue<Absent, PTableNA, DataType>,\n): value is PTableValueAxis<Absent, DataType>;\nexport function isPTableValueAxis<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n>(\n value: PTableValue<Absent, NA, DataType>,\n isNA?: (value: PTableValue<Absent, NA, DataType>) => value is NA,\n): value is PTableValueAxis<Absent, DataType> {\n return !(isNA ? isNA(value) : isPTableNA(value));\n}\n\nfunction pTableValueImpl<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error(\"Bytes not yet supported\");\n }\n\n if (\n options &&\n \"dataType\" in options &&\n options.dataType !== undefined &&\n options.dataType !== valueType\n ) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueAbsent(column, row)) {\n return options?.absent !== undefined ? options.absent : PTableAbsent;\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, PTableNA, DataType> : never;\nexport function pTableValue<FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, FillNA, DataType> : never;\nexport function pTableValue<FillNA, FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, FillNA, DataType> : never;\nexport function pTableValue<FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n dataType: DataType;\n },\n): PTableValue<FillAbsent, PTableNA>;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<PTableAbsent, FillNA, DataType>;\nexport function pTableValue<FillNA, FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<FillAbsent, FillNA, DataType>;\nexport function pTableValue<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported\n ? PTableValueBranded<PTableAbsent, PTableNA, DataType>\n : never;\nexport function pTableValueBranded<FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableAbsent, FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, FillNA, DataType> : never;\nexport function pTableValueBranded<FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n dataType: DataType;\n },\n): PTableValueBranded<FillAbsent, PTableNA>;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<PTableAbsent, FillNA, DataType>;\nexport function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<FillAbsent, FillNA, DataType>;\nexport function pTableValueBranded<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n"],"mappings":";;;AAiDA,SAAS,SAAS,WAAuB,QAAyB;CAChE,MAAM,aAAa,KAAK,MAAM,SAAS,EAAE;CACzC,MAAM,OAAO,KAAM,IAAK,SAAS;AACjC,SAAQ,UAAU,cAAc,QAAQ;;AAG1C,SAAS,cAAc,QAAsB,KAAsB;AACjE,QAAO,SAAS,OAAO,QAAQ,IAAI;;AAGrC,SAAS,UAAU,QAAsB,KAAsB;AAC7D,KAAI,OAAO,KAAM,QAAO,SAAS,OAAO,MAAM,IAAI;CAGlD,MAAM,YAAY,OAAO;CACzB,MAAM,QAAQ,OAAO,KAAK;AAC1B,SAAQ,WAAR;EACE,KAAK,UAAU,IACb,QAAQ,UAAqC;EAC/C,KAAK,UAAU,KACb,QAAQ,UAAsC,CAAC;EACjD,KAAK,UAAU,MACb,QAAO,OAAO,MAAM,MAAkC;EACxD,KAAK,UAAU,OACb,QAAO,OAAO,MAAM,MAAmC;EACzD,KAAK,UAAU,OACb,QAAQ,UAAwC;EAClD,KAAK,UAAU,MACb,QAAQ,UAAuC;EACjD,QACE,OAAM,MAAM,0BAA0B,YAA4B;;;AAIxE,MAAa,eAAe,EAAE,MAAM,UAAU;;AAI9C,SAAgB,eAAe,OAAuC;AACpE,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,SAAS,MAAM,SAAS;;AAG1F,MAAa,WAAW;;AAIxB,SAAgB,WAAW,OAAmC;AAC5D,QAAO,UAAU;;AAiDnB,SAAgB,kBAKd,OACA,MAC4C;AAC5C,QAAO,EAAE,OAAO,KAAK,MAAM,GAAG,WAAW,MAAM;;AAGjD,SAAS,gBAKP,QACA,KACA,SAKA;CACA,MAAM,YAAY,OAAO;AACzB,KAAI,cAAc,UAAU,MAC1B,OAAM,MAAM,0BAA0B;AAGxC,KACE,WACA,cAAc,WACd,QAAQ,aAAa,UACrB,QAAQ,aAAa,UAErB,OAAM,MAAM,2BAA2B,QAAQ,SAAS,QAAQ,YAAY;AAG9E,KAAI,cAAc,QAAQ,IAAI,CAC5B,QAAO,SAAS,WAAW,SAAY,QAAQ,SAAS;AAG1D,KAAI,UAAU,QAAQ,IAAI,CACxB,QAAO,SAAS,OAAO,SAAY,QAAQ,KAAK;CAGlD,MAAM,QAAQ,OAAO,KAAK;AAC1B,SAAQ,WAAR;EACE,KAAK,UAAU,IACb,QAAO;EACT,KAAK,UAAU,KACb,QAAO,OAAO,MAAiC;EACjD,KAAK,UAAU,MACb,QAAO;EACT,KAAK,UAAU,OACb,QAAO;EACT,KAAK,UAAU,OACb,QAAQ;;;AAwDd,SAAgB,YAKd,QACA,KACA,SAKA;AACA,QAAO,gBAAgB,QAAQ,KAAK,QAAQ;;AAwD9C,SAAgB,mBAKd,QACA,KACA,SAKA;AACA,QAAO,gBAAgB,QAAQ,KAAK,QAAQ"}
1
+ {"version":3,"file":"data_types.js","names":[],"sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport { ValueType } from \"./spec/spec\";\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> = DataType extends typeof ValueType.Int\n ? PVectorDataInt\n : DataType extends typeof ValueType.Long\n ? PVectorDataLong\n : DataType extends typeof ValueType.Float\n ? PVectorDataFloat\n : DataType extends typeof ValueType.Double\n ? PVectorDataDouble\n : DataType extends typeof ValueType.String\n ? PVectorDataString\n : DataType extends typeof ValueType.Bytes\n ? PVectorDataBytes\n : never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /** @deprecated Always empty. Kept for backwards compatibility with old blocks. */\n readonly absent?: Uint8Array;\n};\n/** Table column data */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nfunction isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN(value as PVectorDataFloat[number]);\n case ValueType.Double:\n return Number.isNaN(value as PVectorDataDouble[number]);\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int\n ? PTableValueInt\n : DataType extends typeof ValueType.Long\n ? PTableValueLong\n : DataType extends typeof ValueType.Float\n ? PTableValueFloat\n : DataType extends typeof ValueType.Double\n ? PTableValueDouble\n : DataType extends typeof ValueType.String\n ? PTableValueString\n : never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<\n PTableValueData<DataType>,\n DataType\n>;\nexport type PTableValue<NA = PTableNA, DataType extends ValueTypeSupported = ValueTypeSupported> =\n | NA\n | PTableValueData<DataType>;\nexport type PTableValueBranded<\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<DataType extends ValueTypeSupported = ValueTypeSupported> =\n PTableValueData<DataType>;\n\nfunction pTableValueImpl<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error(\"Bytes not yet supported\");\n }\n\n if (\n options &&\n \"dataType\" in options &&\n options.dataType !== undefined &&\n options.dataType !== valueType\n ) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<FillNA, DataType>;\nexport function pTableValue<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<FillNA, DataType>;\nexport function pTableValueBranded<\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n"],"mappings":";;;AA4CA,SAAS,SAAS,WAAuB,QAAyB;CAChE,MAAM,aAAa,KAAK,MAAM,SAAS,EAAE;CACzC,MAAM,OAAO,KAAM,IAAK,SAAS;AACjC,SAAQ,UAAU,cAAc,QAAQ;;AAG1C,SAAS,UAAU,QAAsB,KAAsB;AAC7D,KAAI,OAAO,KAAM,QAAO,SAAS,OAAO,MAAM,IAAI;CAGlD,MAAM,YAAY,OAAO;CACzB,MAAM,QAAQ,OAAO,KAAK;AAC1B,SAAQ,WAAR;EACE,KAAK,UAAU,IACb,QAAQ,UAAqC;EAC/C,KAAK,UAAU,KACb,QAAQ,UAAsC,CAAC;EACjD,KAAK,UAAU,MACb,QAAO,OAAO,MAAM,MAAkC;EACxD,KAAK,UAAU,OACb,QAAO,OAAO,MAAM,MAAmC;EACzD,KAAK,UAAU,OACb,QAAQ,UAAwC;EAClD,KAAK,UAAU,MACb,QAAQ,UAAuC;EACjD,QACE,OAAM,MAAM,0BAA0B,YAA4B;;;AAIxE,MAAa,WAAW;;AAIxB,SAAgB,WAAW,OAAmC;AAC5D,QAAO,UAAU;;AAqCnB,SAAS,gBACP,QACA,KACA,SAIA;CACA,MAAM,YAAY,OAAO;AACzB,KAAI,cAAc,UAAU,MAC1B,OAAM,MAAM,0BAA0B;AAGxC,KACE,WACA,cAAc,WACd,QAAQ,aAAa,UACrB,QAAQ,aAAa,UAErB,OAAM,MAAM,2BAA2B,QAAQ,SAAS,QAAQ,YAAY;AAG9E,KAAI,UAAU,QAAQ,IAAI,CACxB,QAAO,SAAS,OAAO,SAAY,QAAQ,KAAK;CAGlD,MAAM,QAAQ,OAAO,KAAK;AAC1B,SAAQ,WAAR;EACE,KAAK,UAAU,IACb,QAAO;EACT,KAAK,UAAU,KACb,QAAO,OAAO,MAAiC;EACjD,KAAK,UAAU,MACb,QAAO;EACT,KAAK,UAAU,OACb,QAAO;EACT,KAAK,UAAU,OACb,QAAQ;;;AAwBd,SAAgB,YACd,QACA,KACA,SAIA;AACA,QAAO,gBAAgB,QAAQ,KAAK,QAAQ;;AAsB9C,SAAgB,mBAId,QACA,KACA,SAIA;AACA,QAAO,gBAAgB,QAAQ,KAAK,QAAQ"}
@@ -5,7 +5,7 @@ import { AAxisSelector, ADomain, AnchorAxisIdOrRefBasic, AnchorAxisRef, AnchorAx
5
5
  import { AxisFilter, AxisFilterByIdx, AxisFilterByName, AxisFilterValue, FilteredPColumn, FilteredPColumnId, isFilteredPColumn } from "./spec/filtered_column.js";
6
6
  import { SUniversalPColumnId, UniversalPColumnId, parseColumnId, stringifyColumnId } from "./spec/ids.js";
7
7
  import { FilterSpec, FilterSpecLeaf, FilterSpecNode, FilterSpecOfType, FilterSpecType, InferFilterSpecCommonLeaf, InferFilterSpecCommonNode, InferFilterSpecLeaf, InferFilterSpecLeafColumn, RootFilterSpec } from "./filter_spec.js";
8
- import { PTableAbsent, PTableNA, PTableShape, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, TableRange, ValueTypeSupported, isPTableAbsent, isPTableNA, isPTableValueAxis, pTableValue, pTableValueBranded } from "./data_types.js";
8
+ import { PTableNA, PTableShape, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, TableRange, ValueTypeSupported, isPTableNA, pTableValue, pTableValueBranded } from "./data_types.js";
9
9
  import { FindColumnsRequest, FindColumnsResponse } from "./find_columns.js";
10
10
  import { PTableColumnId, PTableColumnIdAxis, PTableColumnIdColumn, PTableColumnSpec, PTableColumnSpecAxis, PTableColumnSpecColumn, getPTableColumnId } from "./table_common.js";
11
11
  import { PTable } from "./table.js";
@@ -1,6 +1,6 @@
1
1
  import { dataInfoToEntries, entriesToDataInfo, isDataInfo, isDataInfoEntries, isPartitionedDataInfoEntries, mapDataInfo, mapDataInfoEntries, visitDataInfo } from "./data_info.js";
2
2
  import { Annotation, AnnotationJson, Domain, DomainJson, PAxisName, PColumnName, ValueType, canonicalizeAxisId, canonicalizeAxisWithParents, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getNormalizedAxesList, getPColumnSpecId, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, isAxisId, isLabelColumn, isLinkerColumn, matchAxisId, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, resolveAnnotationParents } from "./spec/spec.js";
3
- import { PTableAbsent, PTableNA, isPTableAbsent, isPTableNA, isPTableValueAxis, pTableValue, pTableValueBranded } from "./data_types.js";
3
+ import { PTableNA, isPTableNA, pTableValue, pTableValueBranded } from "./data_types.js";
4
4
  import { collectSpecQueryColumns, isBooleanExpression, mapSpecQueryColumns, sortSpecQuery, traverseQuerySpec } from "./query/utils.js";
5
5
  import "./query/index.js";
6
6
  import { mapJoinEntry, mapPTableDef, mapPTableDefV2, sortJoinEntry, sortPTableDef } from "./table_calculate.js";
@@ -1 +1 @@
1
- {"version":3,"file":"table_calculate.cjs","names":["canonicalizeJson","getAxisId","mapSpecQueryColumns"],"sources":["../../../src/drivers/pframe/table_calculate.ts"],"sourcesContent":["import type { PTableColumnId, PTableColumnSpec } from \"./table_common\";\nimport type { PTableVector } from \"./data_types\";\nimport type { PObjectId } from \"../../pool\";\nimport { assertNever } from \"../../util\";\nimport { getAxisId, type PColumn } from \"./spec/spec\";\nimport type { PColumnValues } from \"./data_info\";\nimport type { SpecQuery } from \"./query/query_spec\";\nimport { canonicalizeJson } from \"../../json\";\nimport { mapSpecQueryColumns } from \"./query\";\n\n/** Defines a terminal column node in the join request tree */\nexport interface ColumnJoinEntry<Col> {\n /** Node type discriminator */\n readonly type: \"column\";\n\n /** Local column */\n readonly column: Col;\n}\n\n/**\n * Axis filter slicing target axis from column axes.\n * If the axis has parents or is a parent, slicing cannot be applied (an error will be thrown).\n * */\nexport interface ConstantAxisFilter {\n /** Filter type discriminator */\n readonly type: \"constant\";\n\n /** Index of axis to slice (zero-based) */\n readonly axisIndex: number;\n\n /** Equality filter reference value, see {@link SingleValueEqualPredicate} */\n readonly constant: string | number;\n}\n\n/** Defines a terminal column node in the join request tree */\nexport interface SlicedColumnJoinEntry<Col> {\n /** Node type discriminator */\n readonly type: \"slicedColumn\";\n\n /** Local column */\n readonly column: Col;\n\n /** New column id */\n readonly newId: PObjectId;\n\n /** Non-empty list of axis filters */\n readonly axisFilters: ConstantAxisFilter[];\n}\n\nexport interface ArtificialColumnJoinEntry<Col> {\n /** Node type discriminator */\n readonly type: \"artificialColumn\";\n\n /** Column definition */\n readonly column: Col;\n\n /** New column id */\n readonly newId: PObjectId;\n\n /** Indices of axes to pick from the column (zero-based) */\n readonly axesIndices: number[];\n}\n\n/** Defines a terminal column node in the join request tree */\nexport interface InlineColumnJoinEntry {\n /** Node type discriminator */\n readonly type: \"inlineColumn\";\n\n /** Column definition */\n readonly column: PColumn<PColumnValues>;\n}\n\n/**\n * Defines a join request tree node that will output only records present in\n * all child nodes ({@link entries}).\n * */\nexport interface InnerJoin<Col> {\n /** Node type discriminator */\n readonly type: \"inner\";\n\n /** Child nodes to be inner joined */\n readonly entries: JoinEntry<Col>[];\n}\n\n/**\n * Defines a join request tree node that will output all records present at\n * least in one of the child nodes ({@link entries}), values for those PColumns\n * that lacks corresponding combinations of axis values will be marked as absent,\n * see {@link PTableVector.absent}.\n * */\nexport interface FullJoin<Col> {\n /** Node type discriminator */\n readonly type: \"full\";\n\n /** Child nodes to be fully outer joined */\n readonly entries: JoinEntry<Col>[];\n}\n\n/**\n * Defines a join request tree node that will output all records present in\n * {@link primary} child node, and records from the {@link secondary} nodes will\n * be added to the output only if present, values for those PColumns from the\n * {@link secondary} list, that lacks corresponding combinations of axis values\n * will be marked as absent, see {@link PTableVector.absent}.\n *\n * This node can be thought as a chain of SQL LEFT JOIN operations starting from\n * the {@link primary} node and adding {@link secondary} nodes one by one.\n * */\nexport interface OuterJoin<Col> {\n /** Node type discriminator */\n readonly type: \"outer\";\n\n /** Primes the join operation. Left part of LEFT JOIN. */\n readonly primary: JoinEntry<Col>;\n\n /** Driven nodes, giving their values only if primary node have corresponding\n * nodes. Right parts of LEFT JOIN chain. */\n readonly secondary: JoinEntry<Col>[];\n}\n\n/**\n * Base type of all join request tree nodes. Join request tree allows to combine\n * information from multiple PColumns into a PTable. Correlation between records\n * is performed by looking for records with the same values in common axis between\n * the PColumns. Common axis are those axis which have equal {@link AxisId} derived\n * from the columns axes spec.\n * */\nexport type JoinEntry<Col> =\n | ColumnJoinEntry<Col>\n | SlicedColumnJoinEntry<Col>\n | ArtificialColumnJoinEntry<Col>\n | InlineColumnJoinEntry\n | InnerJoin<Col>\n | FullJoin<Col>\n | OuterJoin<Col>;\n\n/** Container representing whole data stored in specific PTable column. */\nexport interface FullPTableColumnData {\n /** Unified spec */\n readonly spec: PTableColumnSpec;\n\n /** Data */\n readonly data: PTableVector;\n}\n\nexport interface SingleValueIsNAPredicate {\n /** Comparison operator */\n readonly operator: \"IsNA\";\n}\n\nexport interface SingleValueEqualPredicate {\n /** Comparison operator */\n readonly operator: \"Equal\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueInSetPredicate {\n /** Comparison operator */\n readonly operator: \"InSet\";\n\n /** Reference values, NA values will not match */\n readonly references: (string | number)[];\n}\n\nexport interface SingleValueIEqualPredicate {\n /** Comparison operator (case insensitive) */\n readonly operator: \"IEqual\";\n\n /** Reference value, NA values will not match */\n readonly reference: string;\n}\n\nexport interface SingleValueLessPredicate {\n /** Comparison operator */\n readonly operator: \"Less\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueLessOrEqualPredicate {\n /** Comparison operator */\n readonly operator: \"LessOrEqual\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueGreaterPredicate {\n /** Comparison operator */\n readonly operator: \"Greater\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueGreaterOrEqualPredicate {\n /** Comparison operator */\n readonly operator: \"GreaterOrEqual\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueStringContainsPredicate {\n /** Comparison operator */\n readonly operator: \"StringContains\";\n\n /** Reference substring, NA values are skipped */\n readonly substring: string;\n}\n\nexport interface SingleValueStringIContainsPredicate {\n /** Comparison operator (case insensitive) */\n readonly operator: \"StringIContains\";\n\n /** Reference substring, NA values are skipped */\n readonly substring: string;\n}\n\nexport interface SingleValueMatchesPredicate {\n /** Comparison operator */\n readonly operator: \"Matches\";\n\n /** Regular expression, NA values are skipped */\n readonly regex: string;\n}\n\nexport interface SingleValueStringContainsFuzzyPredicate {\n /** Comparison operator */\n readonly operator: \"StringContainsFuzzy\";\n\n /** Reference value, NA values are skipped */\n readonly reference: string;\n\n /**\n * Integer specifying the upper bound of edit distance between\n * reference and actual value.\n * When {@link substitutionsOnly} is not defined or set to false\n * Levenshtein distance is used (substitutions and indels)\n * @see https://en.wikipedia.org/wiki/Levenshtein_distance\n * When {@link substitutionsOnly} is set to true\n * Hamming distance is used (substitutions only)\n * @see https://en.wikipedia.org/wiki/Hamming_distance\n */\n readonly maxEdits: number;\n\n /** Changes the type of edit distance in {@link maxEdits} */\n readonly substitutionsOnly?: boolean;\n\n /**\n * Some character in {@link reference} that will match any\n * single character in searched text.\n */\n readonly wildcard?: string;\n}\n\nexport interface SingleValueStringIContainsFuzzyPredicate {\n /** Comparison operator (case insensitive) */\n readonly operator: \"StringIContainsFuzzy\";\n\n /** Reference value, NA values are skipped */\n readonly reference: string;\n\n /**\n * Integer specifying the upper bound of edit distance between\n * reference and actual value.\n * When {@link substitutionsOnly} is not defined or set to false\n * Levenshtein distance is used (substitutions and indels)\n * @see https://en.wikipedia.org/wiki/Levenshtein_distance\n * When {@link substitutionsOnly} is set to true\n * Hamming distance is used (substitutions only)\n * @see https://en.wikipedia.org/wiki/Hamming_distance\n */\n readonly maxEdits: number;\n\n /** Changes the type of edit distance in {@link maxEdits} */\n readonly substitutionsOnly?: boolean;\n\n /**\n * Some character in {@link reference} that will match any\n * single character in searched text.\n */\n readonly wildcard?: string;\n}\n\nexport interface SingleValueNotPredicateV2 {\n /** Comparison operator */\n readonly operator: \"Not\";\n\n /** Operand to negate */\n readonly operand: SingleValuePredicateV2;\n}\n\nexport interface SingleValueAndPredicateV2 {\n /** Comparison operator */\n readonly operator: \"And\";\n\n /** Operands to combine */\n readonly operands: SingleValuePredicateV2[];\n}\n\nexport interface SingleValueOrPredicateV2 {\n /** Comparison operator */\n readonly operator: \"Or\";\n\n /** Operands to combine */\n readonly operands: SingleValuePredicateV2[];\n}\n\n/** Filtering predicate for a single axis or column value */\nexport type SingleValuePredicateV2 =\n | SingleValueIsNAPredicate\n | SingleValueEqualPredicate\n | SingleValueInSetPredicate\n | SingleValueLessPredicate\n | SingleValueLessOrEqualPredicate\n | SingleValueGreaterPredicate\n | SingleValueGreaterOrEqualPredicate\n | SingleValueStringContainsPredicate\n | SingleValueMatchesPredicate\n | SingleValueStringContainsFuzzyPredicate\n | SingleValueNotPredicateV2\n | SingleValueAndPredicateV2\n | SingleValueOrPredicateV2\n | SingleValueIEqualPredicate\n | SingleValueStringIContainsPredicate\n | SingleValueStringIContainsFuzzyPredicate;\n\n/**\n * Filter PTable records based on specific axis or column value. If this is an\n * axis value filter and the axis is part of a partitioning key in some of the\n * source PColumns, the filter will be pushed down to those columns, so only\n * specific partitions will be retrieved from the remote storage.\n * */\nexport interface PTableRecordSingleValueFilterV2 {\n /** Filter type discriminator */\n readonly type: \"bySingleColumnV2\";\n\n /** Target axis selector to examine values from */\n readonly column: PTableColumnId;\n\n /** Value predicate */\n readonly predicate: SingleValuePredicateV2;\n}\n\n/** Generic PTable records filter */\nexport type PTableRecordFilter = PTableRecordSingleValueFilterV2;\n\n/** Sorting parameters for a PTable. */\nexport type PTableSorting = {\n /** Unified column identifier */\n readonly column: PTableColumnId;\n\n /** Sorting order */\n readonly ascending: boolean;\n\n /** Sorting in respect to NA and absent values */\n readonly naAndAbsentAreLeastValues: boolean;\n};\n\n/** Information required to instantiate a PTable. */\nexport interface PTableDef<Col> {\n /** Join tree to populate the PTable */\n readonly src: JoinEntry<Col>;\n\n /** Partition filters */\n readonly partitionFilters: PTableRecordFilter[];\n\n /** Record filters */\n readonly filters: PTableRecordFilter[];\n\n /** Table sorting */\n readonly sorting: PTableSorting[];\n}\n\n/** Information required to instantiate a PTable (V2, query-based). */\nexport interface PTableDefV2<Col> {\n /** Pre-built query spec describing joins, filters and sorting */\n readonly query: SpecQuery<Col>;\n}\n\n/** Request to create and retrieve entirety of data of PTable. */\nexport type CalculateTableDataRequest<Col> = {\n /** Join tree to populate the PTable */\n readonly src: JoinEntry<Col>;\n\n /** Record filters */\n readonly filters: PTableRecordFilter[];\n\n /** Table sorting */\n readonly sorting: PTableSorting[];\n};\n\n/** Response for {@link CalculateTableDataRequest} */\nexport type CalculateTableDataResponse = FullPTableColumnData[];\n\nexport function mapPTableDef<C1, C2>(def: PTableDef<C1>, cb: (c: C1) => C2): PTableDef<C2> {\n return { ...def, src: mapJoinEntry(def.src, cb) };\n}\n\nexport function sortPTableDef(def: PTableDef<PObjectId>): PTableDef<PObjectId> {\n function sortFilters(filters: PTableRecordFilter[]): PTableRecordFilter[] {\n return filters.toSorted((lhs, rhs) => {\n if (lhs.column.type === \"axis\" && rhs.column.type === \"axis\") {\n const lhsId = canonicalizeJson(getAxisId(lhs.column.id));\n const rhsId = canonicalizeJson(getAxisId(rhs.column.id));\n return lhsId < rhsId ? -1 : 1;\n } else if (lhs.column.type === \"column\" && rhs.column.type === \"column\") {\n return lhs.column.id < rhs.column.id ? -1 : 1;\n } else {\n return lhs.column.type === \"axis\" ? -1 : 1;\n }\n });\n }\n return {\n src: sortJoinEntry(def.src),\n partitionFilters: sortFilters(def.partitionFilters),\n filters: sortFilters(def.filters),\n sorting: def.sorting,\n };\n}\n\nexport function mapPTableDefV2<C1, C2>(def: PTableDefV2<C1>, cb: (c: C1) => C2): PTableDefV2<C2> {\n return { query: mapSpecQueryColumns(def.query, cb) };\n}\n\nexport function mapJoinEntry<C1, C2>(entry: JoinEntry<C1>, cb: (c: C1) => C2): JoinEntry<C2> {\n switch (entry.type) {\n case \"column\":\n return {\n type: \"column\",\n column: cb(entry.column),\n };\n case \"slicedColumn\":\n return {\n type: \"slicedColumn\",\n column: cb(entry.column),\n newId: entry.newId,\n axisFilters: entry.axisFilters,\n };\n case \"artificialColumn\":\n return {\n type: \"artificialColumn\",\n column: cb(entry.column),\n newId: entry.newId,\n axesIndices: entry.axesIndices,\n };\n case \"inlineColumn\":\n return entry;\n case \"inner\":\n case \"full\":\n return {\n type: entry.type,\n entries: entry.entries.map((col) => mapJoinEntry(col, cb)),\n };\n case \"outer\":\n return {\n type: \"outer\",\n primary: mapJoinEntry(entry.primary, cb),\n secondary: entry.secondary.map((col) => mapJoinEntry(col, cb)),\n };\n default:\n assertNever(entry);\n }\n}\n\nfunction cmpJoinEntries(lhs: JoinEntry<PObjectId>, rhs: JoinEntry<PObjectId>): number {\n if (lhs.type !== rhs.type) {\n return lhs.type < rhs.type ? -1 : 1;\n }\n const type = lhs.type;\n switch (type) {\n case \"column\":\n return lhs.column < (rhs as typeof lhs).column ? -1 : 1;\n case \"slicedColumn\":\n case \"artificialColumn\":\n return lhs.newId < (rhs as typeof lhs).newId ? -1 : 1;\n case \"inlineColumn\": {\n return lhs.column.id < (rhs as typeof lhs).column.id ? -1 : 1;\n }\n case \"inner\":\n case \"full\": {\n const rhsInner = rhs as typeof lhs;\n if (lhs.entries.length !== rhsInner.entries.length) {\n return lhs.entries.length - rhsInner.entries.length;\n }\n for (let i = 0; i < lhs.entries.length; i++) {\n const cmp = cmpJoinEntries(lhs.entries[i], rhsInner.entries[i]);\n if (cmp !== 0) {\n return cmp;\n }\n }\n return 0;\n }\n case \"outer\": {\n const rhsOuter = rhs as typeof lhs;\n const cmp = cmpJoinEntries(lhs.primary, rhsOuter.primary);\n if (cmp !== 0) {\n return cmp;\n }\n if (lhs.secondary.length !== rhsOuter.secondary.length) {\n return lhs.secondary.length - rhsOuter.secondary.length;\n }\n for (let i = 0; i < lhs.secondary.length; i++) {\n const cmp = cmpJoinEntries(lhs.secondary[i], rhsOuter.secondary[i]);\n if (cmp !== 0) {\n return cmp;\n }\n }\n return 0;\n }\n default:\n assertNever(type);\n }\n}\n\nexport function sortJoinEntry(entry: JoinEntry<PObjectId>): JoinEntry<PObjectId> {\n switch (entry.type) {\n case \"column\":\n case \"slicedColumn\":\n case \"inlineColumn\":\n return entry;\n case \"artificialColumn\": {\n const sortedAxesIndices = entry.axesIndices.toSorted((lhs, rhs) => lhs - rhs);\n return {\n ...entry,\n axesIndices: sortedAxesIndices,\n };\n }\n case \"inner\":\n case \"full\": {\n const sortedEntries = entry.entries.map(sortJoinEntry);\n sortedEntries.sort(cmpJoinEntries);\n return {\n ...entry,\n entries: sortedEntries,\n };\n }\n case \"outer\": {\n const sortedSecondary = entry.secondary.map(sortJoinEntry);\n sortedSecondary.sort(cmpJoinEntries);\n return {\n ...entry,\n primary: sortJoinEntry(entry.primary),\n secondary: sortedSecondary,\n };\n }\n default:\n assertNever(entry);\n }\n}\n"],"mappings":";;;;;;;AA+YA,SAAgB,aAAqB,KAAoB,IAAkC;AACzF,QAAO;EAAE,GAAG;EAAK,KAAK,aAAa,IAAI,KAAK,GAAG;EAAE;;AAGnD,SAAgB,cAAc,KAAiD;CAC7E,SAAS,YAAY,SAAqD;AACxE,SAAO,QAAQ,UAAU,KAAK,QAAQ;AACpC,OAAI,IAAI,OAAO,SAAS,UAAU,IAAI,OAAO,SAAS,OAGpD,QAFcA,8BAAiBC,uBAAU,IAAI,OAAO,GAAG,CAAC,GAC1CD,8BAAiBC,uBAAU,IAAI,OAAO,GAAG,CAAC,GACjC,KAAK;YACnB,IAAI,OAAO,SAAS,YAAY,IAAI,OAAO,SAAS,SAC7D,QAAO,IAAI,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK;OAE5C,QAAO,IAAI,OAAO,SAAS,SAAS,KAAK;IAE3C;;AAEJ,QAAO;EACL,KAAK,cAAc,IAAI,IAAI;EAC3B,kBAAkB,YAAY,IAAI,iBAAiB;EACnD,SAAS,YAAY,IAAI,QAAQ;EACjC,SAAS,IAAI;EACd;;AAGH,SAAgB,eAAuB,KAAsB,IAAoC;AAC/F,QAAO,EAAE,OAAOC,kCAAoB,IAAI,OAAO,GAAG,EAAE;;AAGtD,SAAgB,aAAqB,OAAsB,IAAkC;AAC3F,SAAQ,MAAM,MAAd;EACE,KAAK,SACH,QAAO;GACL,MAAM;GACN,QAAQ,GAAG,MAAM,OAAO;GACzB;EACH,KAAK,eACH,QAAO;GACL,MAAM;GACN,QAAQ,GAAG,MAAM,OAAO;GACxB,OAAO,MAAM;GACb,aAAa,MAAM;GACpB;EACH,KAAK,mBACH,QAAO;GACL,MAAM;GACN,QAAQ,GAAG,MAAM,OAAO;GACxB,OAAO,MAAM;GACb,aAAa,MAAM;GACpB;EACH,KAAK,eACH,QAAO;EACT,KAAK;EACL,KAAK,OACH,QAAO;GACL,MAAM,MAAM;GACZ,SAAS,MAAM,QAAQ,KAAK,QAAQ,aAAa,KAAK,GAAG,CAAC;GAC3D;EACH,KAAK,QACH,QAAO;GACL,MAAM;GACN,SAAS,aAAa,MAAM,SAAS,GAAG;GACxC,WAAW,MAAM,UAAU,KAAK,QAAQ,aAAa,KAAK,GAAG,CAAC;GAC/D;EACH,QACE,0BAAY,MAAM;;;AAIxB,SAAS,eAAe,KAA2B,KAAmC;AACpF,KAAI,IAAI,SAAS,IAAI,KACnB,QAAO,IAAI,OAAO,IAAI,OAAO,KAAK;CAEpC,MAAM,OAAO,IAAI;AACjB,SAAQ,MAAR;EACE,KAAK,SACH,QAAO,IAAI,SAAU,IAAmB,SAAS,KAAK;EACxD,KAAK;EACL,KAAK,mBACH,QAAO,IAAI,QAAS,IAAmB,QAAQ,KAAK;EACtD,KAAK,eACH,QAAO,IAAI,OAAO,KAAM,IAAmB,OAAO,KAAK,KAAK;EAE9D,KAAK;EACL,KAAK,QAAQ;GACX,MAAM,WAAW;AACjB,OAAI,IAAI,QAAQ,WAAW,SAAS,QAAQ,OAC1C,QAAO,IAAI,QAAQ,SAAS,SAAS,QAAQ;AAE/C,QAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,QAAQ,KAAK;IAC3C,MAAM,MAAM,eAAe,IAAI,QAAQ,IAAI,SAAS,QAAQ,GAAG;AAC/D,QAAI,QAAQ,EACV,QAAO;;AAGX,UAAO;;EAET,KAAK,SAAS;GACZ,MAAM,WAAW;GACjB,MAAM,MAAM,eAAe,IAAI,SAAS,SAAS,QAAQ;AACzD,OAAI,QAAQ,EACV,QAAO;AAET,OAAI,IAAI,UAAU,WAAW,SAAS,UAAU,OAC9C,QAAO,IAAI,UAAU,SAAS,SAAS,UAAU;AAEnD,QAAK,IAAI,IAAI,GAAG,IAAI,IAAI,UAAU,QAAQ,KAAK;IAC7C,MAAM,MAAM,eAAe,IAAI,UAAU,IAAI,SAAS,UAAU,GAAG;AACnE,QAAI,QAAQ,EACV,QAAO;;AAGX,UAAO;;EAET,QACE,0BAAY,KAAK;;;AAIvB,SAAgB,cAAc,OAAmD;AAC/E,SAAQ,MAAM,MAAd;EACE,KAAK;EACL,KAAK;EACL,KAAK,eACH,QAAO;EACT,KAAK,oBAAoB;GACvB,MAAM,oBAAoB,MAAM,YAAY,UAAU,KAAK,QAAQ,MAAM,IAAI;AAC7E,UAAO;IACL,GAAG;IACH,aAAa;IACd;;EAEH,KAAK;EACL,KAAK,QAAQ;GACX,MAAM,gBAAgB,MAAM,QAAQ,IAAI,cAAc;AACtD,iBAAc,KAAK,eAAe;AAClC,UAAO;IACL,GAAG;IACH,SAAS;IACV;;EAEH,KAAK,SAAS;GACZ,MAAM,kBAAkB,MAAM,UAAU,IAAI,cAAc;AAC1D,mBAAgB,KAAK,eAAe;AACpC,UAAO;IACL,GAAG;IACH,SAAS,cAAc,MAAM,QAAQ;IACrC,WAAW;IACZ;;EAEH,QACE,0BAAY,MAAM"}
1
+ {"version":3,"file":"table_calculate.cjs","names":["canonicalizeJson","getAxisId","mapSpecQueryColumns"],"sources":["../../../src/drivers/pframe/table_calculate.ts"],"sourcesContent":["import type { PTableColumnId, PTableColumnSpec } from \"./table_common\";\nimport type { PTableVector } from \"./data_types\";\nimport type { PObjectId } from \"../../pool\";\nimport { assertNever } from \"../../util\";\nimport { getAxisId, type PColumn } from \"./spec/spec\";\nimport type { PColumnValues } from \"./data_info\";\nimport type { SpecQuery } from \"./query/query_spec\";\nimport { canonicalizeJson } from \"../../json\";\nimport { mapSpecQueryColumns } from \"./query\";\n\n/** Defines a terminal column node in the join request tree */\nexport interface ColumnJoinEntry<Col> {\n /** Node type discriminator */\n readonly type: \"column\";\n\n /** Local column */\n readonly column: Col;\n}\n\n/**\n * Axis filter slicing target axis from column axes.\n * If the axis has parents or is a parent, slicing cannot be applied (an error will be thrown).\n * */\nexport interface ConstantAxisFilter {\n /** Filter type discriminator */\n readonly type: \"constant\";\n\n /** Index of axis to slice (zero-based) */\n readonly axisIndex: number;\n\n /** Equality filter reference value, see {@link SingleValueEqualPredicate} */\n readonly constant: string | number;\n}\n\n/** Defines a terminal column node in the join request tree */\nexport interface SlicedColumnJoinEntry<Col> {\n /** Node type discriminator */\n readonly type: \"slicedColumn\";\n\n /** Local column */\n readonly column: Col;\n\n /** New column id */\n readonly newId: PObjectId;\n\n /** Non-empty list of axis filters */\n readonly axisFilters: ConstantAxisFilter[];\n}\n\nexport interface ArtificialColumnJoinEntry<Col> {\n /** Node type discriminator */\n readonly type: \"artificialColumn\";\n\n /** Column definition */\n readonly column: Col;\n\n /** New column id */\n readonly newId: PObjectId;\n\n /** Indices of axes to pick from the column (zero-based) */\n readonly axesIndices: number[];\n}\n\n/** Defines a terminal column node in the join request tree */\nexport interface InlineColumnJoinEntry {\n /** Node type discriminator */\n readonly type: \"inlineColumn\";\n\n /** Column definition */\n readonly column: PColumn<PColumnValues>;\n}\n\n/**\n * Defines a join request tree node that will output only records present in\n * all child nodes ({@link entries}).\n * */\nexport interface InnerJoin<Col> {\n /** Node type discriminator */\n readonly type: \"inner\";\n\n /** Child nodes to be inner joined */\n readonly entries: JoinEntry<Col>[];\n}\n\n/**\n * Defines a join request tree node that will output all records present at\n * least in one of the child nodes ({@link entries}), values for those PColumns\n * that lack corresponding combinations of axis values will be null.\n * */\nexport interface FullJoin<Col> {\n /** Node type discriminator */\n readonly type: \"full\";\n\n /** Child nodes to be fully outer joined */\n readonly entries: JoinEntry<Col>[];\n}\n\n/**\n * Defines a join request tree node that will output all records present in\n * {@link primary} child node, and records from the {@link secondary} nodes will\n * be added to the output only if present, values for those PColumns from the\n * {@link secondary} list, that lack corresponding combinations of axis values\n * will be null.\n *\n * This node can be thought as a chain of SQL LEFT JOIN operations starting from\n * the {@link primary} node and adding {@link secondary} nodes one by one.\n * */\nexport interface OuterJoin<Col> {\n /** Node type discriminator */\n readonly type: \"outer\";\n\n /** Primes the join operation. Left part of LEFT JOIN. */\n readonly primary: JoinEntry<Col>;\n\n /** Driven nodes, giving their values only if primary node have corresponding\n * nodes. Right parts of LEFT JOIN chain. */\n readonly secondary: JoinEntry<Col>[];\n}\n\n/**\n * Base type of all join request tree nodes. Join request tree allows to combine\n * information from multiple PColumns into a PTable. Correlation between records\n * is performed by looking for records with the same values in common axis between\n * the PColumns. Common axis are those axis which have equal {@link AxisId} derived\n * from the columns axes spec.\n * */\nexport type JoinEntry<Col> =\n | ColumnJoinEntry<Col>\n | SlicedColumnJoinEntry<Col>\n | ArtificialColumnJoinEntry<Col>\n | InlineColumnJoinEntry\n | InnerJoin<Col>\n | FullJoin<Col>\n | OuterJoin<Col>;\n\n/** Container representing whole data stored in specific PTable column. */\nexport interface FullPTableColumnData {\n /** Unified spec */\n readonly spec: PTableColumnSpec;\n\n /** Data */\n readonly data: PTableVector;\n}\n\nexport interface SingleValueIsNAPredicate {\n /** Comparison operator */\n readonly operator: \"IsNA\";\n}\n\nexport interface SingleValueEqualPredicate {\n /** Comparison operator */\n readonly operator: \"Equal\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueInSetPredicate {\n /** Comparison operator */\n readonly operator: \"InSet\";\n\n /** Reference values, NA values will not match */\n readonly references: (string | number)[];\n}\n\nexport interface SingleValueIEqualPredicate {\n /** Comparison operator (case insensitive) */\n readonly operator: \"IEqual\";\n\n /** Reference value, NA values will not match */\n readonly reference: string;\n}\n\nexport interface SingleValueLessPredicate {\n /** Comparison operator */\n readonly operator: \"Less\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueLessOrEqualPredicate {\n /** Comparison operator */\n readonly operator: \"LessOrEqual\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueGreaterPredicate {\n /** Comparison operator */\n readonly operator: \"Greater\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueGreaterOrEqualPredicate {\n /** Comparison operator */\n readonly operator: \"GreaterOrEqual\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueStringContainsPredicate {\n /** Comparison operator */\n readonly operator: \"StringContains\";\n\n /** Reference substring, NA values are skipped */\n readonly substring: string;\n}\n\nexport interface SingleValueStringIContainsPredicate {\n /** Comparison operator (case insensitive) */\n readonly operator: \"StringIContains\";\n\n /** Reference substring, NA values are skipped */\n readonly substring: string;\n}\n\nexport interface SingleValueMatchesPredicate {\n /** Comparison operator */\n readonly operator: \"Matches\";\n\n /** Regular expression, NA values are skipped */\n readonly regex: string;\n}\n\nexport interface SingleValueStringContainsFuzzyPredicate {\n /** Comparison operator */\n readonly operator: \"StringContainsFuzzy\";\n\n /** Reference value, NA values are skipped */\n readonly reference: string;\n\n /**\n * Integer specifying the upper bound of edit distance between\n * reference and actual value.\n * When {@link substitutionsOnly} is not defined or set to false\n * Levenshtein distance is used (substitutions and indels)\n * @see https://en.wikipedia.org/wiki/Levenshtein_distance\n * When {@link substitutionsOnly} is set to true\n * Hamming distance is used (substitutions only)\n * @see https://en.wikipedia.org/wiki/Hamming_distance\n */\n readonly maxEdits: number;\n\n /** Changes the type of edit distance in {@link maxEdits} */\n readonly substitutionsOnly?: boolean;\n\n /**\n * Some character in {@link reference} that will match any\n * single character in searched text.\n */\n readonly wildcard?: string;\n}\n\nexport interface SingleValueStringIContainsFuzzyPredicate {\n /** Comparison operator (case insensitive) */\n readonly operator: \"StringIContainsFuzzy\";\n\n /** Reference value, NA values are skipped */\n readonly reference: string;\n\n /**\n * Integer specifying the upper bound of edit distance between\n * reference and actual value.\n * When {@link substitutionsOnly} is not defined or set to false\n * Levenshtein distance is used (substitutions and indels)\n * @see https://en.wikipedia.org/wiki/Levenshtein_distance\n * When {@link substitutionsOnly} is set to true\n * Hamming distance is used (substitutions only)\n * @see https://en.wikipedia.org/wiki/Hamming_distance\n */\n readonly maxEdits: number;\n\n /** Changes the type of edit distance in {@link maxEdits} */\n readonly substitutionsOnly?: boolean;\n\n /**\n * Some character in {@link reference} that will match any\n * single character in searched text.\n */\n readonly wildcard?: string;\n}\n\nexport interface SingleValueNotPredicateV2 {\n /** Comparison operator */\n readonly operator: \"Not\";\n\n /** Operand to negate */\n readonly operand: SingleValuePredicateV2;\n}\n\nexport interface SingleValueAndPredicateV2 {\n /** Comparison operator */\n readonly operator: \"And\";\n\n /** Operands to combine */\n readonly operands: SingleValuePredicateV2[];\n}\n\nexport interface SingleValueOrPredicateV2 {\n /** Comparison operator */\n readonly operator: \"Or\";\n\n /** Operands to combine */\n readonly operands: SingleValuePredicateV2[];\n}\n\n/** Filtering predicate for a single axis or column value */\nexport type SingleValuePredicateV2 =\n | SingleValueIsNAPredicate\n | SingleValueEqualPredicate\n | SingleValueInSetPredicate\n | SingleValueLessPredicate\n | SingleValueLessOrEqualPredicate\n | SingleValueGreaterPredicate\n | SingleValueGreaterOrEqualPredicate\n | SingleValueStringContainsPredicate\n | SingleValueMatchesPredicate\n | SingleValueStringContainsFuzzyPredicate\n | SingleValueNotPredicateV2\n | SingleValueAndPredicateV2\n | SingleValueOrPredicateV2\n | SingleValueIEqualPredicate\n | SingleValueStringIContainsPredicate\n | SingleValueStringIContainsFuzzyPredicate;\n\n/**\n * Filter PTable records based on specific axis or column value. If this is an\n * axis value filter and the axis is part of a partitioning key in some of the\n * source PColumns, the filter will be pushed down to those columns, so only\n * specific partitions will be retrieved from the remote storage.\n * */\nexport interface PTableRecordSingleValueFilterV2 {\n /** Filter type discriminator */\n readonly type: \"bySingleColumnV2\";\n\n /** Target axis selector to examine values from */\n readonly column: PTableColumnId;\n\n /** Value predicate */\n readonly predicate: SingleValuePredicateV2;\n}\n\n/** Generic PTable records filter */\nexport type PTableRecordFilter = PTableRecordSingleValueFilterV2;\n\n/** Sorting parameters for a PTable. */\nexport type PTableSorting = {\n /** Unified column identifier */\n readonly column: PTableColumnId;\n\n /** Sorting order */\n readonly ascending: boolean;\n\n /** Sorting in respect to NA and absent values */\n readonly naAndAbsentAreLeastValues: boolean;\n};\n\n/** Information required to instantiate a PTable. */\nexport interface PTableDef<Col> {\n /** Join tree to populate the PTable */\n readonly src: JoinEntry<Col>;\n\n /** Partition filters */\n readonly partitionFilters: PTableRecordFilter[];\n\n /** Record filters */\n readonly filters: PTableRecordFilter[];\n\n /** Table sorting */\n readonly sorting: PTableSorting[];\n}\n\n/** Information required to instantiate a PTable (V2, query-based). */\nexport interface PTableDefV2<Col> {\n /** Pre-built query spec describing joins, filters and sorting */\n readonly query: SpecQuery<Col>;\n}\n\n/** Request to create and retrieve entirety of data of PTable. */\nexport type CalculateTableDataRequest<Col> = {\n /** Join tree to populate the PTable */\n readonly src: JoinEntry<Col>;\n\n /** Record filters */\n readonly filters: PTableRecordFilter[];\n\n /** Table sorting */\n readonly sorting: PTableSorting[];\n};\n\n/** Response for {@link CalculateTableDataRequest} */\nexport type CalculateTableDataResponse = FullPTableColumnData[];\n\nexport function mapPTableDef<C1, C2>(def: PTableDef<C1>, cb: (c: C1) => C2): PTableDef<C2> {\n return { ...def, src: mapJoinEntry(def.src, cb) };\n}\n\nexport function sortPTableDef(def: PTableDef<PObjectId>): PTableDef<PObjectId> {\n function sortFilters(filters: PTableRecordFilter[]): PTableRecordFilter[] {\n return filters.toSorted((lhs, rhs) => {\n if (lhs.column.type === \"axis\" && rhs.column.type === \"axis\") {\n const lhsId = canonicalizeJson(getAxisId(lhs.column.id));\n const rhsId = canonicalizeJson(getAxisId(rhs.column.id));\n return lhsId < rhsId ? -1 : 1;\n } else if (lhs.column.type === \"column\" && rhs.column.type === \"column\") {\n return lhs.column.id < rhs.column.id ? -1 : 1;\n } else {\n return lhs.column.type === \"axis\" ? -1 : 1;\n }\n });\n }\n return {\n src: sortJoinEntry(def.src),\n partitionFilters: sortFilters(def.partitionFilters),\n filters: sortFilters(def.filters),\n sorting: def.sorting,\n };\n}\n\nexport function mapPTableDefV2<C1, C2>(def: PTableDefV2<C1>, cb: (c: C1) => C2): PTableDefV2<C2> {\n return { query: mapSpecQueryColumns(def.query, cb) };\n}\n\nexport function mapJoinEntry<C1, C2>(entry: JoinEntry<C1>, cb: (c: C1) => C2): JoinEntry<C2> {\n switch (entry.type) {\n case \"column\":\n return {\n type: \"column\",\n column: cb(entry.column),\n };\n case \"slicedColumn\":\n return {\n type: \"slicedColumn\",\n column: cb(entry.column),\n newId: entry.newId,\n axisFilters: entry.axisFilters,\n };\n case \"artificialColumn\":\n return {\n type: \"artificialColumn\",\n column: cb(entry.column),\n newId: entry.newId,\n axesIndices: entry.axesIndices,\n };\n case \"inlineColumn\":\n return entry;\n case \"inner\":\n case \"full\":\n return {\n type: entry.type,\n entries: entry.entries.map((col) => mapJoinEntry(col, cb)),\n };\n case \"outer\":\n return {\n type: \"outer\",\n primary: mapJoinEntry(entry.primary, cb),\n secondary: entry.secondary.map((col) => mapJoinEntry(col, cb)),\n };\n default:\n assertNever(entry);\n }\n}\n\nfunction cmpJoinEntries(lhs: JoinEntry<PObjectId>, rhs: JoinEntry<PObjectId>): number {\n if (lhs.type !== rhs.type) {\n return lhs.type < rhs.type ? -1 : 1;\n }\n const type = lhs.type;\n switch (type) {\n case \"column\":\n return lhs.column < (rhs as typeof lhs).column ? -1 : 1;\n case \"slicedColumn\":\n case \"artificialColumn\":\n return lhs.newId < (rhs as typeof lhs).newId ? -1 : 1;\n case \"inlineColumn\": {\n return lhs.column.id < (rhs as typeof lhs).column.id ? -1 : 1;\n }\n case \"inner\":\n case \"full\": {\n const rhsInner = rhs as typeof lhs;\n if (lhs.entries.length !== rhsInner.entries.length) {\n return lhs.entries.length - rhsInner.entries.length;\n }\n for (let i = 0; i < lhs.entries.length; i++) {\n const cmp = cmpJoinEntries(lhs.entries[i], rhsInner.entries[i]);\n if (cmp !== 0) {\n return cmp;\n }\n }\n return 0;\n }\n case \"outer\": {\n const rhsOuter = rhs as typeof lhs;\n const cmp = cmpJoinEntries(lhs.primary, rhsOuter.primary);\n if (cmp !== 0) {\n return cmp;\n }\n if (lhs.secondary.length !== rhsOuter.secondary.length) {\n return lhs.secondary.length - rhsOuter.secondary.length;\n }\n for (let i = 0; i < lhs.secondary.length; i++) {\n const cmp = cmpJoinEntries(lhs.secondary[i], rhsOuter.secondary[i]);\n if (cmp !== 0) {\n return cmp;\n }\n }\n return 0;\n }\n default:\n assertNever(type);\n }\n}\n\nexport function sortJoinEntry(entry: JoinEntry<PObjectId>): JoinEntry<PObjectId> {\n switch (entry.type) {\n case \"column\":\n case \"slicedColumn\":\n case \"inlineColumn\":\n return entry;\n case \"artificialColumn\": {\n const sortedAxesIndices = entry.axesIndices.toSorted((lhs, rhs) => lhs - rhs);\n return {\n ...entry,\n axesIndices: sortedAxesIndices,\n };\n }\n case \"inner\":\n case \"full\": {\n const sortedEntries = entry.entries.map(sortJoinEntry);\n sortedEntries.sort(cmpJoinEntries);\n return {\n ...entry,\n entries: sortedEntries,\n };\n }\n case \"outer\": {\n const sortedSecondary = entry.secondary.map(sortJoinEntry);\n sortedSecondary.sort(cmpJoinEntries);\n return {\n ...entry,\n primary: sortJoinEntry(entry.primary),\n secondary: sortedSecondary,\n };\n }\n default:\n assertNever(entry);\n }\n}\n"],"mappings":"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"}
@@ -67,8 +67,7 @@ interface InnerJoin<Col> {
67
67
  /**
68
68
  * Defines a join request tree node that will output all records present at
69
69
  * least in one of the child nodes ({@link entries}), values for those PColumns
70
- * that lacks corresponding combinations of axis values will be marked as absent,
71
- * see {@link PTableVector.absent}.
70
+ * that lack corresponding combinations of axis values will be null.
72
71
  * */
73
72
  interface FullJoin<Col> {
74
73
  /** Node type discriminator */
@@ -80,8 +79,8 @@ interface FullJoin<Col> {
80
79
  * Defines a join request tree node that will output all records present in
81
80
  * {@link primary} child node, and records from the {@link secondary} nodes will
82
81
  * be added to the output only if present, values for those PColumns from the
83
- * {@link secondary} list, that lacks corresponding combinations of axis values
84
- * will be marked as absent, see {@link PTableVector.absent}.
82
+ * {@link secondary} list, that lack corresponding combinations of axis values
83
+ * will be null.
85
84
  *
86
85
  * This node can be thought as a chain of SQL LEFT JOIN operations starting from
87
86
  * the {@link primary} node and adding {@link secondary} nodes one by one.
@@ -1 +1 @@
1
- {"version":3,"file":"table_calculate.js","names":[],"sources":["../../../src/drivers/pframe/table_calculate.ts"],"sourcesContent":["import type { PTableColumnId, PTableColumnSpec } from \"./table_common\";\nimport type { PTableVector } from \"./data_types\";\nimport type { PObjectId } from \"../../pool\";\nimport { assertNever } from \"../../util\";\nimport { getAxisId, type PColumn } from \"./spec/spec\";\nimport type { PColumnValues } from \"./data_info\";\nimport type { SpecQuery } from \"./query/query_spec\";\nimport { canonicalizeJson } from \"../../json\";\nimport { mapSpecQueryColumns } from \"./query\";\n\n/** Defines a terminal column node in the join request tree */\nexport interface ColumnJoinEntry<Col> {\n /** Node type discriminator */\n readonly type: \"column\";\n\n /** Local column */\n readonly column: Col;\n}\n\n/**\n * Axis filter slicing target axis from column axes.\n * If the axis has parents or is a parent, slicing cannot be applied (an error will be thrown).\n * */\nexport interface ConstantAxisFilter {\n /** Filter type discriminator */\n readonly type: \"constant\";\n\n /** Index of axis to slice (zero-based) */\n readonly axisIndex: number;\n\n /** Equality filter reference value, see {@link SingleValueEqualPredicate} */\n readonly constant: string | number;\n}\n\n/** Defines a terminal column node in the join request tree */\nexport interface SlicedColumnJoinEntry<Col> {\n /** Node type discriminator */\n readonly type: \"slicedColumn\";\n\n /** Local column */\n readonly column: Col;\n\n /** New column id */\n readonly newId: PObjectId;\n\n /** Non-empty list of axis filters */\n readonly axisFilters: ConstantAxisFilter[];\n}\n\nexport interface ArtificialColumnJoinEntry<Col> {\n /** Node type discriminator */\n readonly type: \"artificialColumn\";\n\n /** Column definition */\n readonly column: Col;\n\n /** New column id */\n readonly newId: PObjectId;\n\n /** Indices of axes to pick from the column (zero-based) */\n readonly axesIndices: number[];\n}\n\n/** Defines a terminal column node in the join request tree */\nexport interface InlineColumnJoinEntry {\n /** Node type discriminator */\n readonly type: \"inlineColumn\";\n\n /** Column definition */\n readonly column: PColumn<PColumnValues>;\n}\n\n/**\n * Defines a join request tree node that will output only records present in\n * all child nodes ({@link entries}).\n * */\nexport interface InnerJoin<Col> {\n /** Node type discriminator */\n readonly type: \"inner\";\n\n /** Child nodes to be inner joined */\n readonly entries: JoinEntry<Col>[];\n}\n\n/**\n * Defines a join request tree node that will output all records present at\n * least in one of the child nodes ({@link entries}), values for those PColumns\n * that lacks corresponding combinations of axis values will be marked as absent,\n * see {@link PTableVector.absent}.\n * */\nexport interface FullJoin<Col> {\n /** Node type discriminator */\n readonly type: \"full\";\n\n /** Child nodes to be fully outer joined */\n readonly entries: JoinEntry<Col>[];\n}\n\n/**\n * Defines a join request tree node that will output all records present in\n * {@link primary} child node, and records from the {@link secondary} nodes will\n * be added to the output only if present, values for those PColumns from the\n * {@link secondary} list, that lacks corresponding combinations of axis values\n * will be marked as absent, see {@link PTableVector.absent}.\n *\n * This node can be thought as a chain of SQL LEFT JOIN operations starting from\n * the {@link primary} node and adding {@link secondary} nodes one by one.\n * */\nexport interface OuterJoin<Col> {\n /** Node type discriminator */\n readonly type: \"outer\";\n\n /** Primes the join operation. Left part of LEFT JOIN. */\n readonly primary: JoinEntry<Col>;\n\n /** Driven nodes, giving their values only if primary node have corresponding\n * nodes. Right parts of LEFT JOIN chain. */\n readonly secondary: JoinEntry<Col>[];\n}\n\n/**\n * Base type of all join request tree nodes. Join request tree allows to combine\n * information from multiple PColumns into a PTable. Correlation between records\n * is performed by looking for records with the same values in common axis between\n * the PColumns. Common axis are those axis which have equal {@link AxisId} derived\n * from the columns axes spec.\n * */\nexport type JoinEntry<Col> =\n | ColumnJoinEntry<Col>\n | SlicedColumnJoinEntry<Col>\n | ArtificialColumnJoinEntry<Col>\n | InlineColumnJoinEntry\n | InnerJoin<Col>\n | FullJoin<Col>\n | OuterJoin<Col>;\n\n/** Container representing whole data stored in specific PTable column. */\nexport interface FullPTableColumnData {\n /** Unified spec */\n readonly spec: PTableColumnSpec;\n\n /** Data */\n readonly data: PTableVector;\n}\n\nexport interface SingleValueIsNAPredicate {\n /** Comparison operator */\n readonly operator: \"IsNA\";\n}\n\nexport interface SingleValueEqualPredicate {\n /** Comparison operator */\n readonly operator: \"Equal\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueInSetPredicate {\n /** Comparison operator */\n readonly operator: \"InSet\";\n\n /** Reference values, NA values will not match */\n readonly references: (string | number)[];\n}\n\nexport interface SingleValueIEqualPredicate {\n /** Comparison operator (case insensitive) */\n readonly operator: \"IEqual\";\n\n /** Reference value, NA values will not match */\n readonly reference: string;\n}\n\nexport interface SingleValueLessPredicate {\n /** Comparison operator */\n readonly operator: \"Less\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueLessOrEqualPredicate {\n /** Comparison operator */\n readonly operator: \"LessOrEqual\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueGreaterPredicate {\n /** Comparison operator */\n readonly operator: \"Greater\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueGreaterOrEqualPredicate {\n /** Comparison operator */\n readonly operator: \"GreaterOrEqual\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueStringContainsPredicate {\n /** Comparison operator */\n readonly operator: \"StringContains\";\n\n /** Reference substring, NA values are skipped */\n readonly substring: string;\n}\n\nexport interface SingleValueStringIContainsPredicate {\n /** Comparison operator (case insensitive) */\n readonly operator: \"StringIContains\";\n\n /** Reference substring, NA values are skipped */\n readonly substring: string;\n}\n\nexport interface SingleValueMatchesPredicate {\n /** Comparison operator */\n readonly operator: \"Matches\";\n\n /** Regular expression, NA values are skipped */\n readonly regex: string;\n}\n\nexport interface SingleValueStringContainsFuzzyPredicate {\n /** Comparison operator */\n readonly operator: \"StringContainsFuzzy\";\n\n /** Reference value, NA values are skipped */\n readonly reference: string;\n\n /**\n * Integer specifying the upper bound of edit distance between\n * reference and actual value.\n * When {@link substitutionsOnly} is not defined or set to false\n * Levenshtein distance is used (substitutions and indels)\n * @see https://en.wikipedia.org/wiki/Levenshtein_distance\n * When {@link substitutionsOnly} is set to true\n * Hamming distance is used (substitutions only)\n * @see https://en.wikipedia.org/wiki/Hamming_distance\n */\n readonly maxEdits: number;\n\n /** Changes the type of edit distance in {@link maxEdits} */\n readonly substitutionsOnly?: boolean;\n\n /**\n * Some character in {@link reference} that will match any\n * single character in searched text.\n */\n readonly wildcard?: string;\n}\n\nexport interface SingleValueStringIContainsFuzzyPredicate {\n /** Comparison operator (case insensitive) */\n readonly operator: \"StringIContainsFuzzy\";\n\n /** Reference value, NA values are skipped */\n readonly reference: string;\n\n /**\n * Integer specifying the upper bound of edit distance between\n * reference and actual value.\n * When {@link substitutionsOnly} is not defined or set to false\n * Levenshtein distance is used (substitutions and indels)\n * @see https://en.wikipedia.org/wiki/Levenshtein_distance\n * When {@link substitutionsOnly} is set to true\n * Hamming distance is used (substitutions only)\n * @see https://en.wikipedia.org/wiki/Hamming_distance\n */\n readonly maxEdits: number;\n\n /** Changes the type of edit distance in {@link maxEdits} */\n readonly substitutionsOnly?: boolean;\n\n /**\n * Some character in {@link reference} that will match any\n * single character in searched text.\n */\n readonly wildcard?: string;\n}\n\nexport interface SingleValueNotPredicateV2 {\n /** Comparison operator */\n readonly operator: \"Not\";\n\n /** Operand to negate */\n readonly operand: SingleValuePredicateV2;\n}\n\nexport interface SingleValueAndPredicateV2 {\n /** Comparison operator */\n readonly operator: \"And\";\n\n /** Operands to combine */\n readonly operands: SingleValuePredicateV2[];\n}\n\nexport interface SingleValueOrPredicateV2 {\n /** Comparison operator */\n readonly operator: \"Or\";\n\n /** Operands to combine */\n readonly operands: SingleValuePredicateV2[];\n}\n\n/** Filtering predicate for a single axis or column value */\nexport type SingleValuePredicateV2 =\n | SingleValueIsNAPredicate\n | SingleValueEqualPredicate\n | SingleValueInSetPredicate\n | SingleValueLessPredicate\n | SingleValueLessOrEqualPredicate\n | SingleValueGreaterPredicate\n | SingleValueGreaterOrEqualPredicate\n | SingleValueStringContainsPredicate\n | SingleValueMatchesPredicate\n | SingleValueStringContainsFuzzyPredicate\n | SingleValueNotPredicateV2\n | SingleValueAndPredicateV2\n | SingleValueOrPredicateV2\n | SingleValueIEqualPredicate\n | SingleValueStringIContainsPredicate\n | SingleValueStringIContainsFuzzyPredicate;\n\n/**\n * Filter PTable records based on specific axis or column value. If this is an\n * axis value filter and the axis is part of a partitioning key in some of the\n * source PColumns, the filter will be pushed down to those columns, so only\n * specific partitions will be retrieved from the remote storage.\n * */\nexport interface PTableRecordSingleValueFilterV2 {\n /** Filter type discriminator */\n readonly type: \"bySingleColumnV2\";\n\n /** Target axis selector to examine values from */\n readonly column: PTableColumnId;\n\n /** Value predicate */\n readonly predicate: SingleValuePredicateV2;\n}\n\n/** Generic PTable records filter */\nexport type PTableRecordFilter = PTableRecordSingleValueFilterV2;\n\n/** Sorting parameters for a PTable. */\nexport type PTableSorting = {\n /** Unified column identifier */\n readonly column: PTableColumnId;\n\n /** Sorting order */\n readonly ascending: boolean;\n\n /** Sorting in respect to NA and absent values */\n readonly naAndAbsentAreLeastValues: boolean;\n};\n\n/** Information required to instantiate a PTable. */\nexport interface PTableDef<Col> {\n /** Join tree to populate the PTable */\n readonly src: JoinEntry<Col>;\n\n /** Partition filters */\n readonly partitionFilters: PTableRecordFilter[];\n\n /** Record filters */\n readonly filters: PTableRecordFilter[];\n\n /** Table sorting */\n readonly sorting: PTableSorting[];\n}\n\n/** Information required to instantiate a PTable (V2, query-based). */\nexport interface PTableDefV2<Col> {\n /** Pre-built query spec describing joins, filters and sorting */\n readonly query: SpecQuery<Col>;\n}\n\n/** Request to create and retrieve entirety of data of PTable. */\nexport type CalculateTableDataRequest<Col> = {\n /** Join tree to populate the PTable */\n readonly src: JoinEntry<Col>;\n\n /** Record filters */\n readonly filters: PTableRecordFilter[];\n\n /** Table sorting */\n readonly sorting: PTableSorting[];\n};\n\n/** Response for {@link CalculateTableDataRequest} */\nexport type CalculateTableDataResponse = FullPTableColumnData[];\n\nexport function mapPTableDef<C1, C2>(def: PTableDef<C1>, cb: (c: C1) => C2): PTableDef<C2> {\n return { ...def, src: mapJoinEntry(def.src, cb) };\n}\n\nexport function sortPTableDef(def: PTableDef<PObjectId>): PTableDef<PObjectId> {\n function sortFilters(filters: PTableRecordFilter[]): PTableRecordFilter[] {\n return filters.toSorted((lhs, rhs) => {\n if (lhs.column.type === \"axis\" && rhs.column.type === \"axis\") {\n const lhsId = canonicalizeJson(getAxisId(lhs.column.id));\n const rhsId = canonicalizeJson(getAxisId(rhs.column.id));\n return lhsId < rhsId ? -1 : 1;\n } else if (lhs.column.type === \"column\" && rhs.column.type === \"column\") {\n return lhs.column.id < rhs.column.id ? -1 : 1;\n } else {\n return lhs.column.type === \"axis\" ? -1 : 1;\n }\n });\n }\n return {\n src: sortJoinEntry(def.src),\n partitionFilters: sortFilters(def.partitionFilters),\n filters: sortFilters(def.filters),\n sorting: def.sorting,\n };\n}\n\nexport function mapPTableDefV2<C1, C2>(def: PTableDefV2<C1>, cb: (c: C1) => C2): PTableDefV2<C2> {\n return { query: mapSpecQueryColumns(def.query, cb) };\n}\n\nexport function mapJoinEntry<C1, C2>(entry: JoinEntry<C1>, cb: (c: C1) => C2): JoinEntry<C2> {\n switch (entry.type) {\n case \"column\":\n return {\n type: \"column\",\n column: cb(entry.column),\n };\n case \"slicedColumn\":\n return {\n type: \"slicedColumn\",\n column: cb(entry.column),\n newId: entry.newId,\n axisFilters: entry.axisFilters,\n };\n case \"artificialColumn\":\n return {\n type: \"artificialColumn\",\n column: cb(entry.column),\n newId: entry.newId,\n axesIndices: entry.axesIndices,\n };\n case \"inlineColumn\":\n return entry;\n case \"inner\":\n case \"full\":\n return {\n type: entry.type,\n entries: entry.entries.map((col) => mapJoinEntry(col, cb)),\n };\n case \"outer\":\n return {\n type: \"outer\",\n primary: mapJoinEntry(entry.primary, cb),\n secondary: entry.secondary.map((col) => mapJoinEntry(col, cb)),\n };\n default:\n assertNever(entry);\n }\n}\n\nfunction cmpJoinEntries(lhs: JoinEntry<PObjectId>, rhs: JoinEntry<PObjectId>): number {\n if (lhs.type !== rhs.type) {\n return lhs.type < rhs.type ? -1 : 1;\n }\n const type = lhs.type;\n switch (type) {\n case \"column\":\n return lhs.column < (rhs as typeof lhs).column ? -1 : 1;\n case \"slicedColumn\":\n case \"artificialColumn\":\n return lhs.newId < (rhs as typeof lhs).newId ? -1 : 1;\n case \"inlineColumn\": {\n return lhs.column.id < (rhs as typeof lhs).column.id ? -1 : 1;\n }\n case \"inner\":\n case \"full\": {\n const rhsInner = rhs as typeof lhs;\n if (lhs.entries.length !== rhsInner.entries.length) {\n return lhs.entries.length - rhsInner.entries.length;\n }\n for (let i = 0; i < lhs.entries.length; i++) {\n const cmp = cmpJoinEntries(lhs.entries[i], rhsInner.entries[i]);\n if (cmp !== 0) {\n return cmp;\n }\n }\n return 0;\n }\n case \"outer\": {\n const rhsOuter = rhs as typeof lhs;\n const cmp = cmpJoinEntries(lhs.primary, rhsOuter.primary);\n if (cmp !== 0) {\n return cmp;\n }\n if (lhs.secondary.length !== rhsOuter.secondary.length) {\n return lhs.secondary.length - rhsOuter.secondary.length;\n }\n for (let i = 0; i < lhs.secondary.length; i++) {\n const cmp = cmpJoinEntries(lhs.secondary[i], rhsOuter.secondary[i]);\n if (cmp !== 0) {\n return cmp;\n }\n }\n return 0;\n }\n default:\n assertNever(type);\n }\n}\n\nexport function sortJoinEntry(entry: JoinEntry<PObjectId>): JoinEntry<PObjectId> {\n switch (entry.type) {\n case \"column\":\n case \"slicedColumn\":\n case \"inlineColumn\":\n return entry;\n case \"artificialColumn\": {\n const sortedAxesIndices = entry.axesIndices.toSorted((lhs, rhs) => lhs - rhs);\n return {\n ...entry,\n axesIndices: sortedAxesIndices,\n };\n }\n case \"inner\":\n case \"full\": {\n const sortedEntries = entry.entries.map(sortJoinEntry);\n sortedEntries.sort(cmpJoinEntries);\n return {\n ...entry,\n entries: sortedEntries,\n };\n }\n case \"outer\": {\n const sortedSecondary = entry.secondary.map(sortJoinEntry);\n sortedSecondary.sort(cmpJoinEntries);\n return {\n ...entry,\n primary: sortJoinEntry(entry.primary),\n secondary: sortedSecondary,\n };\n }\n default:\n assertNever(entry);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"table_calculate.js","names":[],"sources":["../../../src/drivers/pframe/table_calculate.ts"],"sourcesContent":["import type { PTableColumnId, PTableColumnSpec } from \"./table_common\";\nimport type { PTableVector } from \"./data_types\";\nimport type { PObjectId } from \"../../pool\";\nimport { assertNever } from \"../../util\";\nimport { getAxisId, type PColumn } from \"./spec/spec\";\nimport type { PColumnValues } from \"./data_info\";\nimport type { SpecQuery } from \"./query/query_spec\";\nimport { canonicalizeJson } from \"../../json\";\nimport { mapSpecQueryColumns } from \"./query\";\n\n/** Defines a terminal column node in the join request tree */\nexport interface ColumnJoinEntry<Col> {\n /** Node type discriminator */\n readonly type: \"column\";\n\n /** Local column */\n readonly column: Col;\n}\n\n/**\n * Axis filter slicing target axis from column axes.\n * If the axis has parents or is a parent, slicing cannot be applied (an error will be thrown).\n * */\nexport interface ConstantAxisFilter {\n /** Filter type discriminator */\n readonly type: \"constant\";\n\n /** Index of axis to slice (zero-based) */\n readonly axisIndex: number;\n\n /** Equality filter reference value, see {@link SingleValueEqualPredicate} */\n readonly constant: string | number;\n}\n\n/** Defines a terminal column node in the join request tree */\nexport interface SlicedColumnJoinEntry<Col> {\n /** Node type discriminator */\n readonly type: \"slicedColumn\";\n\n /** Local column */\n readonly column: Col;\n\n /** New column id */\n readonly newId: PObjectId;\n\n /** Non-empty list of axis filters */\n readonly axisFilters: ConstantAxisFilter[];\n}\n\nexport interface ArtificialColumnJoinEntry<Col> {\n /** Node type discriminator */\n readonly type: \"artificialColumn\";\n\n /** Column definition */\n readonly column: Col;\n\n /** New column id */\n readonly newId: PObjectId;\n\n /** Indices of axes to pick from the column (zero-based) */\n readonly axesIndices: number[];\n}\n\n/** Defines a terminal column node in the join request tree */\nexport interface InlineColumnJoinEntry {\n /** Node type discriminator */\n readonly type: \"inlineColumn\";\n\n /** Column definition */\n readonly column: PColumn<PColumnValues>;\n}\n\n/**\n * Defines a join request tree node that will output only records present in\n * all child nodes ({@link entries}).\n * */\nexport interface InnerJoin<Col> {\n /** Node type discriminator */\n readonly type: \"inner\";\n\n /** Child nodes to be inner joined */\n readonly entries: JoinEntry<Col>[];\n}\n\n/**\n * Defines a join request tree node that will output all records present at\n * least in one of the child nodes ({@link entries}), values for those PColumns\n * that lack corresponding combinations of axis values will be null.\n * */\nexport interface FullJoin<Col> {\n /** Node type discriminator */\n readonly type: \"full\";\n\n /** Child nodes to be fully outer joined */\n readonly entries: JoinEntry<Col>[];\n}\n\n/**\n * Defines a join request tree node that will output all records present in\n * {@link primary} child node, and records from the {@link secondary} nodes will\n * be added to the output only if present, values for those PColumns from the\n * {@link secondary} list, that lack corresponding combinations of axis values\n * will be null.\n *\n * This node can be thought as a chain of SQL LEFT JOIN operations starting from\n * the {@link primary} node and adding {@link secondary} nodes one by one.\n * */\nexport interface OuterJoin<Col> {\n /** Node type discriminator */\n readonly type: \"outer\";\n\n /** Primes the join operation. Left part of LEFT JOIN. */\n readonly primary: JoinEntry<Col>;\n\n /** Driven nodes, giving their values only if primary node have corresponding\n * nodes. Right parts of LEFT JOIN chain. */\n readonly secondary: JoinEntry<Col>[];\n}\n\n/**\n * Base type of all join request tree nodes. Join request tree allows to combine\n * information from multiple PColumns into a PTable. Correlation between records\n * is performed by looking for records with the same values in common axis between\n * the PColumns. Common axis are those axis which have equal {@link AxisId} derived\n * from the columns axes spec.\n * */\nexport type JoinEntry<Col> =\n | ColumnJoinEntry<Col>\n | SlicedColumnJoinEntry<Col>\n | ArtificialColumnJoinEntry<Col>\n | InlineColumnJoinEntry\n | InnerJoin<Col>\n | FullJoin<Col>\n | OuterJoin<Col>;\n\n/** Container representing whole data stored in specific PTable column. */\nexport interface FullPTableColumnData {\n /** Unified spec */\n readonly spec: PTableColumnSpec;\n\n /** Data */\n readonly data: PTableVector;\n}\n\nexport interface SingleValueIsNAPredicate {\n /** Comparison operator */\n readonly operator: \"IsNA\";\n}\n\nexport interface SingleValueEqualPredicate {\n /** Comparison operator */\n readonly operator: \"Equal\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueInSetPredicate {\n /** Comparison operator */\n readonly operator: \"InSet\";\n\n /** Reference values, NA values will not match */\n readonly references: (string | number)[];\n}\n\nexport interface SingleValueIEqualPredicate {\n /** Comparison operator (case insensitive) */\n readonly operator: \"IEqual\";\n\n /** Reference value, NA values will not match */\n readonly reference: string;\n}\n\nexport interface SingleValueLessPredicate {\n /** Comparison operator */\n readonly operator: \"Less\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueLessOrEqualPredicate {\n /** Comparison operator */\n readonly operator: \"LessOrEqual\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueGreaterPredicate {\n /** Comparison operator */\n readonly operator: \"Greater\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueGreaterOrEqualPredicate {\n /** Comparison operator */\n readonly operator: \"GreaterOrEqual\";\n\n /** Reference value, NA values will not match */\n readonly reference: string | number;\n}\n\nexport interface SingleValueStringContainsPredicate {\n /** Comparison operator */\n readonly operator: \"StringContains\";\n\n /** Reference substring, NA values are skipped */\n readonly substring: string;\n}\n\nexport interface SingleValueStringIContainsPredicate {\n /** Comparison operator (case insensitive) */\n readonly operator: \"StringIContains\";\n\n /** Reference substring, NA values are skipped */\n readonly substring: string;\n}\n\nexport interface SingleValueMatchesPredicate {\n /** Comparison operator */\n readonly operator: \"Matches\";\n\n /** Regular expression, NA values are skipped */\n readonly regex: string;\n}\n\nexport interface SingleValueStringContainsFuzzyPredicate {\n /** Comparison operator */\n readonly operator: \"StringContainsFuzzy\";\n\n /** Reference value, NA values are skipped */\n readonly reference: string;\n\n /**\n * Integer specifying the upper bound of edit distance between\n * reference and actual value.\n * When {@link substitutionsOnly} is not defined or set to false\n * Levenshtein distance is used (substitutions and indels)\n * @see https://en.wikipedia.org/wiki/Levenshtein_distance\n * When {@link substitutionsOnly} is set to true\n * Hamming distance is used (substitutions only)\n * @see https://en.wikipedia.org/wiki/Hamming_distance\n */\n readonly maxEdits: number;\n\n /** Changes the type of edit distance in {@link maxEdits} */\n readonly substitutionsOnly?: boolean;\n\n /**\n * Some character in {@link reference} that will match any\n * single character in searched text.\n */\n readonly wildcard?: string;\n}\n\nexport interface SingleValueStringIContainsFuzzyPredicate {\n /** Comparison operator (case insensitive) */\n readonly operator: \"StringIContainsFuzzy\";\n\n /** Reference value, NA values are skipped */\n readonly reference: string;\n\n /**\n * Integer specifying the upper bound of edit distance between\n * reference and actual value.\n * When {@link substitutionsOnly} is not defined or set to false\n * Levenshtein distance is used (substitutions and indels)\n * @see https://en.wikipedia.org/wiki/Levenshtein_distance\n * When {@link substitutionsOnly} is set to true\n * Hamming distance is used (substitutions only)\n * @see https://en.wikipedia.org/wiki/Hamming_distance\n */\n readonly maxEdits: number;\n\n /** Changes the type of edit distance in {@link maxEdits} */\n readonly substitutionsOnly?: boolean;\n\n /**\n * Some character in {@link reference} that will match any\n * single character in searched text.\n */\n readonly wildcard?: string;\n}\n\nexport interface SingleValueNotPredicateV2 {\n /** Comparison operator */\n readonly operator: \"Not\";\n\n /** Operand to negate */\n readonly operand: SingleValuePredicateV2;\n}\n\nexport interface SingleValueAndPredicateV2 {\n /** Comparison operator */\n readonly operator: \"And\";\n\n /** Operands to combine */\n readonly operands: SingleValuePredicateV2[];\n}\n\nexport interface SingleValueOrPredicateV2 {\n /** Comparison operator */\n readonly operator: \"Or\";\n\n /** Operands to combine */\n readonly operands: SingleValuePredicateV2[];\n}\n\n/** Filtering predicate for a single axis or column value */\nexport type SingleValuePredicateV2 =\n | SingleValueIsNAPredicate\n | SingleValueEqualPredicate\n | SingleValueInSetPredicate\n | SingleValueLessPredicate\n | SingleValueLessOrEqualPredicate\n | SingleValueGreaterPredicate\n | SingleValueGreaterOrEqualPredicate\n | SingleValueStringContainsPredicate\n | SingleValueMatchesPredicate\n | SingleValueStringContainsFuzzyPredicate\n | SingleValueNotPredicateV2\n | SingleValueAndPredicateV2\n | SingleValueOrPredicateV2\n | SingleValueIEqualPredicate\n | SingleValueStringIContainsPredicate\n | SingleValueStringIContainsFuzzyPredicate;\n\n/**\n * Filter PTable records based on specific axis or column value. If this is an\n * axis value filter and the axis is part of a partitioning key in some of the\n * source PColumns, the filter will be pushed down to those columns, so only\n * specific partitions will be retrieved from the remote storage.\n * */\nexport interface PTableRecordSingleValueFilterV2 {\n /** Filter type discriminator */\n readonly type: \"bySingleColumnV2\";\n\n /** Target axis selector to examine values from */\n readonly column: PTableColumnId;\n\n /** Value predicate */\n readonly predicate: SingleValuePredicateV2;\n}\n\n/** Generic PTable records filter */\nexport type PTableRecordFilter = PTableRecordSingleValueFilterV2;\n\n/** Sorting parameters for a PTable. */\nexport type PTableSorting = {\n /** Unified column identifier */\n readonly column: PTableColumnId;\n\n /** Sorting order */\n readonly ascending: boolean;\n\n /** Sorting in respect to NA and absent values */\n readonly naAndAbsentAreLeastValues: boolean;\n};\n\n/** Information required to instantiate a PTable. */\nexport interface PTableDef<Col> {\n /** Join tree to populate the PTable */\n readonly src: JoinEntry<Col>;\n\n /** Partition filters */\n readonly partitionFilters: PTableRecordFilter[];\n\n /** Record filters */\n readonly filters: PTableRecordFilter[];\n\n /** Table sorting */\n readonly sorting: PTableSorting[];\n}\n\n/** Information required to instantiate a PTable (V2, query-based). */\nexport interface PTableDefV2<Col> {\n /** Pre-built query spec describing joins, filters and sorting */\n readonly query: SpecQuery<Col>;\n}\n\n/** Request to create and retrieve entirety of data of PTable. */\nexport type CalculateTableDataRequest<Col> = {\n /** Join tree to populate the PTable */\n readonly src: JoinEntry<Col>;\n\n /** Record filters */\n readonly filters: PTableRecordFilter[];\n\n /** Table sorting */\n readonly sorting: PTableSorting[];\n};\n\n/** Response for {@link CalculateTableDataRequest} */\nexport type CalculateTableDataResponse = FullPTableColumnData[];\n\nexport function mapPTableDef<C1, C2>(def: PTableDef<C1>, cb: (c: C1) => C2): PTableDef<C2> {\n return { ...def, src: mapJoinEntry(def.src, cb) };\n}\n\nexport function sortPTableDef(def: PTableDef<PObjectId>): PTableDef<PObjectId> {\n function sortFilters(filters: PTableRecordFilter[]): PTableRecordFilter[] {\n return filters.toSorted((lhs, rhs) => {\n if (lhs.column.type === \"axis\" && rhs.column.type === \"axis\") {\n const lhsId = canonicalizeJson(getAxisId(lhs.column.id));\n const rhsId = canonicalizeJson(getAxisId(rhs.column.id));\n return lhsId < rhsId ? -1 : 1;\n } else if (lhs.column.type === \"column\" && rhs.column.type === \"column\") {\n return lhs.column.id < rhs.column.id ? -1 : 1;\n } else {\n return lhs.column.type === \"axis\" ? -1 : 1;\n }\n });\n }\n return {\n src: sortJoinEntry(def.src),\n partitionFilters: sortFilters(def.partitionFilters),\n filters: sortFilters(def.filters),\n sorting: def.sorting,\n };\n}\n\nexport function mapPTableDefV2<C1, C2>(def: PTableDefV2<C1>, cb: (c: C1) => C2): PTableDefV2<C2> {\n return { query: mapSpecQueryColumns(def.query, cb) };\n}\n\nexport function mapJoinEntry<C1, C2>(entry: JoinEntry<C1>, cb: (c: C1) => C2): JoinEntry<C2> {\n switch (entry.type) {\n case \"column\":\n return {\n type: \"column\",\n column: cb(entry.column),\n };\n case \"slicedColumn\":\n return {\n type: \"slicedColumn\",\n column: cb(entry.column),\n newId: entry.newId,\n axisFilters: entry.axisFilters,\n };\n case \"artificialColumn\":\n return {\n type: \"artificialColumn\",\n column: cb(entry.column),\n newId: entry.newId,\n axesIndices: entry.axesIndices,\n };\n case \"inlineColumn\":\n return entry;\n case \"inner\":\n case \"full\":\n return {\n type: entry.type,\n entries: entry.entries.map((col) => mapJoinEntry(col, cb)),\n };\n case \"outer\":\n return {\n type: \"outer\",\n primary: mapJoinEntry(entry.primary, cb),\n secondary: entry.secondary.map((col) => mapJoinEntry(col, cb)),\n };\n default:\n assertNever(entry);\n }\n}\n\nfunction cmpJoinEntries(lhs: JoinEntry<PObjectId>, rhs: JoinEntry<PObjectId>): number {\n if (lhs.type !== rhs.type) {\n return lhs.type < rhs.type ? -1 : 1;\n }\n const type = lhs.type;\n switch (type) {\n case \"column\":\n return lhs.column < (rhs as typeof lhs).column ? -1 : 1;\n case \"slicedColumn\":\n case \"artificialColumn\":\n return lhs.newId < (rhs as typeof lhs).newId ? -1 : 1;\n case \"inlineColumn\": {\n return lhs.column.id < (rhs as typeof lhs).column.id ? -1 : 1;\n }\n case \"inner\":\n case \"full\": {\n const rhsInner = rhs as typeof lhs;\n if (lhs.entries.length !== rhsInner.entries.length) {\n return lhs.entries.length - rhsInner.entries.length;\n }\n for (let i = 0; i < lhs.entries.length; i++) {\n const cmp = cmpJoinEntries(lhs.entries[i], rhsInner.entries[i]);\n if (cmp !== 0) {\n return cmp;\n }\n }\n return 0;\n }\n case \"outer\": {\n const rhsOuter = rhs as typeof lhs;\n const cmp = cmpJoinEntries(lhs.primary, rhsOuter.primary);\n if (cmp !== 0) {\n return cmp;\n }\n if (lhs.secondary.length !== rhsOuter.secondary.length) {\n return lhs.secondary.length - rhsOuter.secondary.length;\n }\n for (let i = 0; i < lhs.secondary.length; i++) {\n const cmp = cmpJoinEntries(lhs.secondary[i], rhsOuter.secondary[i]);\n if (cmp !== 0) {\n return cmp;\n }\n }\n return 0;\n }\n default:\n assertNever(type);\n }\n}\n\nexport function sortJoinEntry(entry: JoinEntry<PObjectId>): JoinEntry<PObjectId> {\n switch (entry.type) {\n case \"column\":\n case \"slicedColumn\":\n case \"inlineColumn\":\n return entry;\n case \"artificialColumn\": {\n const sortedAxesIndices = entry.axesIndices.toSorted((lhs, rhs) => lhs - rhs);\n return {\n ...entry,\n axesIndices: sortedAxesIndices,\n };\n }\n case \"inner\":\n case \"full\": {\n const sortedEntries = entry.entries.map(sortJoinEntry);\n sortedEntries.sort(cmpJoinEntries);\n return {\n ...entry,\n entries: sortedEntries,\n };\n }\n case \"outer\": {\n const sortedSecondary = entry.secondary.map(sortJoinEntry);\n sortedSecondary.sort(cmpJoinEntries);\n return {\n ...entry,\n primary: sortJoinEntry(entry.primary),\n secondary: sortedSecondary,\n };\n }\n default:\n assertNever(entry);\n }\n}\n"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -63,7 +63,6 @@ exports.PColumnName = require_spec.PColumnName;
63
63
  exports.PFrameDriverError = require_errors.PFrameDriverError;
64
64
  exports.PFrameError = require_errors.PFrameError;
65
65
  exports.PFrameSpecDriverError = require_errors.PFrameSpecDriverError;
66
- exports.PTableAbsent = require_data_types.PTableAbsent;
67
66
  exports.PTableNA = require_data_types.PTableNA;
68
67
  exports.PlId = require_plid.PlId;
69
68
  exports.PlIdBytes = require_plid.PlIdBytes;
@@ -152,9 +151,7 @@ exports.isPColumnSpecResult = require_spec$1.isPColumnSpecResult;
152
151
  exports.isPFrameDriverError = require_errors.isPFrameDriverError;
153
152
  exports.isPFrameError = require_errors.isPFrameError;
154
153
  exports.isPFrameSpecDriverError = require_errors.isPFrameSpecDriverError;
155
- exports.isPTableAbsent = require_data_types.isPTableAbsent;
156
154
  exports.isPTableNA = require_data_types.isPTableNA;
157
- exports.isPTableValueAxis = require_data_types.isPTableValueAxis;
158
155
  exports.isPartitionedDataInfoEntries = require_data_info.isPartitionedDataInfoEntries;
159
156
  exports.isPlRef = require_ref.isPlRef;
160
157
  exports.isServiceAlreadyRegisteredError = require_errors.isServiceAlreadyRegisteredError;
package/dist/index.d.ts CHANGED
@@ -18,7 +18,7 @@ import { AAxisSelector, ADomain, AnchorAxisIdOrRefBasic, AnchorAxisRef, AnchorAx
18
18
  import { AxisFilter, AxisFilterByIdx, AxisFilterByName, AxisFilterValue, FilteredPColumn, FilteredPColumnId, isFilteredPColumn } from "./drivers/pframe/spec/filtered_column.js";
19
19
  import { SUniversalPColumnId, UniversalPColumnId, parseColumnId, stringifyColumnId } from "./drivers/pframe/spec/ids.js";
20
20
  import { FilterSpec, FilterSpecLeaf, FilterSpecNode, FilterSpecOfType, FilterSpecType, InferFilterSpecCommonLeaf, InferFilterSpecCommonNode, InferFilterSpecLeaf, InferFilterSpecLeafColumn, RootFilterSpec } from "./drivers/pframe/filter_spec.js";
21
- import { PTableAbsent, PTableNA, PTableShape, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, TableRange, ValueTypeSupported, isPTableAbsent, isPTableNA, isPTableValueAxis, pTableValue, pTableValueBranded } from "./drivers/pframe/data_types.js";
21
+ import { PTableNA, PTableShape, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, TableRange, ValueTypeSupported, isPTableNA, pTableValue, pTableValueBranded } from "./drivers/pframe/data_types.js";
22
22
  import { FindColumnsRequest, FindColumnsResponse } from "./drivers/pframe/find_columns.js";
23
23
  import { PTableColumnId, PTableColumnIdAxis, PTableColumnIdColumn, PTableColumnSpec, PTableColumnSpecAxis, PTableColumnSpecColumn, getPTableColumnId } from "./drivers/pframe/table_common.js";
24
24
  import { PTable } from "./drivers/pframe/table.js";
@@ -66,4 +66,4 @@ import { Base64Compatible, Base64Encoded, base64Decode, base64Encode } from "./b
66
66
  import { assertNever, uniqueBy } from "./util.js";
67
67
  import { BasicHttpAuth, HttpAuth, parseHttpAuth, serializeHttpAuth } from "./httpAuth.js";
68
68
  import { ResourceTypeName, ResourceTypePrefix } from "./resource_types.js";
69
- export { AAxisSelector, ADomain, AbortError, AllRequiresFeatureFlags, AllSupportsFeatureFlags, AnchorAxisIdOrRefBasic, AnchorAxisRef, AnchorAxisRefByIdx, AnchorAxisRefByMatcher, AnchorAxisRefByName, AnchorDomainRef, AnchoredColumnMatchStrategy, AnchoredIdDeriver, AnchoredPColumnId, AnchoredPColumnSelector, Annotation, AnnotationJson, AnyFunction, AnyLogHandle, ArchiveFormat, ArrayTypeUnion, ArtificialColumnJoinEntry, Assert, AssertKeysEqual, AuthorMarker, AxesId, AxesSpec, AxisFilter, AxisFilterByIdx, AxisFilterByName, AxisFilterValue, AxisId, AxisQualification, AxisSpec, AxisSpecNormalized, AxisTree, AxisValueType, Base64Compatible, Base64Encoded, BasicHttpAuth, BinaryChunk, BinaryPartitionedDataInfo, BinaryPartitionedDataInfoEntries, BlobDriver, BlobHandleAndSize, BlobLike, BlobToURLDriver, BlockCodeFeatureFlags, BlockCodeKnownFeatureFlags, BlockCodeWithInfo, BlockConfigContainer, BlockConfigGeneric, BlockConfigV3Generic, BlockConfigV4Generic, BlockOutputsBase, BlockRenderingMode, BlockSection, BlockSectionDelimiter, BlockSectionLink, BlockSectionLinkAppearance, BlockState, BlockStateV3, BlockUIURL, Branded, CalculateTableDataRequest, CalculateTableDataResponse, CanonicalizedJson, ChunkedStreamReader, ChunkedStreamReaderOptions, Code, ColumnAxesWithQualifications, ColumnFilter, ColumnJoinEntry, ColumnValueType, CompositeLinkerMap, ConstantAxisFilter, ContentHandler, DataExprAxisRef, DataExprColumnRef, DataInfo, DataInfoEntries, DataQuery, DataQueryBooleanExpression, DataQueryColumn, DataQueryExpression, DataQueryFilter, DataQueryInlineColumn, DataQueryJoinEntry, DataQueryOuterJoin, DataQuerySliceAxes, DataQuerySort, DataQuerySparseToDenseColumn, DataQuerySymmetricJoin, DefaultNavigationState, DeleteColumnRequest, DeleteColumnResponse, DiscoverColumnsConstraints, DiscoverColumnsLinkerStep, DiscoverColumnsMappingVariant, DiscoverColumnsRequest, DiscoverColumnsResponse, DiscoverColumnsResponseHit, DiscoverColumnsResponseQualifications, DiscoverColumnsStepInfo, Domain, DomainJson, DriverKit, ErrorHandlerStatus, EvaluateQueryResponse, FileLike, FileRange, FilterKeysByPrefix, FilterSpec, FilterSpecLeaf, FilterSpecNode, FilterSpecOfType, FilterSpecType, FilteredPColumn, FilteredPColumnId, FindColumnsRequest, FindColumnsResponse, FolderURL, FrontendDriver, FullJoin, FullPTableColumnData, GetContentOptions, HttpAuth, ImportFileHandle, ImportFileHandleIndex, ImportFileHandleUpload, ImportProgress, ImportStatus, IncompatibleFlagsError, InferFilterSpecCommonLeaf, InferFilterSpecCommonNode, InferFilterSpecLeaf, InferFilterSpecLeafColumn, InferServiceKind, InferServiceModel, InferServiceUi, InlineColumnJoinEntry, InnerJoin, Is, IsSubtypeOf, JoinEntry, JsonCompatible, JsonDataInfo, JsonDataInfoEntries, JsonPartitionedDataInfo, JsonPartitionedDataInfoEntries, JsonSerializable, KnownServiceName, LegacyAxisSelector, LinkerMap, ListFilesResult, ListOptionBase, LiveLogHandle, LocalBlobHandle, LocalBlobHandleAndSize, LocalImportFileHandle, LogsDriver, LsDriver, LsEntry, MatcherMap, Metadata, MetadataJson, ModelServiceFactoryMap, ModelServiceRegistry, ModelServices, MultiAxisSelector, MultiColumnSelector, NativePObjectId, NavigationState, OpenDialogFilter, OpenDialogOps, OpenMultipleFilesResponse, OpenSingleFileResponse, Option, OuterJoin, OutputWithStatus, PAxisName, PColumn, PColumnDataEntry, PColumnIdAndSpec, PColumnInfo, PColumnKey, PColumnLazy, PColumnName, PColumnSelector, PColumnSpec, PColumnSpecId, PColumnValue, PColumnValues, PColumnValuesEntry, PDataColumnSpec, PFrame, PFrameDef, PFrameDriver, PFrameDriverError, PFrameError, PFrameHandle, PFrameModelDriver, PFrameSpecDriver, PFrameSpecDriverError, PObject, PObjectId, PObjectSpec, PSpecPredicate, PTable, PTableAbsent, PTableColumnId, PTableColumnIdAxis, PTableColumnIdColumn, PTableColumnSpec, PTableColumnSpecAxis, PTableColumnSpecColumn, PTableDef, PTableDefV2, PTableHandle, PTableNA, PTableRecordFilter, PTableRecordSingleValueFilterV2, PTableShape, PTableSorting, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PUniversalColumnSpec, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, ParquetChunk, ParquetChunkMapping, ParquetChunkMappingAxis, ParquetChunkMappingColumn, ParquetChunkMetadata, ParquetChunkStats, ParquetPartitionedDataInfo, ParquetPartitionedDataInfoEntries, PartitionedDataInfoEntries, PlId, PlIdBytes, PlIdLength, PlRef, PoolEntry, PoolEntryGuard, ProgressLogWithInfo, RangeBytes, ReadyLogHandle, Ref, RemoteBlobHandle, RemoteBlobHandleAndSize, RequireServices, ResolveAnchorsOptions, ResourceTypeName, ResourceTypePrefix, ResultCollection, ResultOrError, ResultPoolEntry, RootFilterSpec, RuntimeCapabilities, SERVICE_CAPABILITY_FLAGS, SERVICE_FEATURE_FLAGS, SERVICE_METHOD_MAP, SUniversalPColumnId, SerializedError, ServiceAlreadyRegisteredError, ServiceBrand, ServiceDispatch, ServiceError, ServiceInjectionError, ServiceInvalidIdError, ServiceMethodNotFoundError, ServiceName, ServiceNameLiterals, ServiceNotRegisteredError, ServiceRequireFlags, ServiceType, ServiceTypesLike, Services, SingleAxisSelector, SingleValueAndPredicateV2, SingleValueEqualPredicate, SingleValueGreaterOrEqualPredicate, SingleValueGreaterPredicate, SingleValueIEqualPredicate, SingleValueInSetPredicate, SingleValueIsNAPredicate, SingleValueLessOrEqualPredicate, SingleValueLessPredicate, SingleValueMatchesPredicate, SingleValueNotPredicateV2, SingleValueOrPredicateV2, SingleValuePredicateV2, SingleValueStringContainsFuzzyPredicate, SingleValueStringContainsPredicate, SingleValueStringIContainsFuzzyPredicate, SingleValueStringIContainsPredicate, SlicedColumnJoinEntry, SpecExprAxisRef, SpecExprColumnRef, SpecFrameHandle, SpecQuery, SpecQueryBooleanExpression, SpecQueryColumn, SpecQueryExpression, SpecQueryFilter, SpecQueryInlineColumn, SpecQueryJoinEntry, SpecQueryOuterJoin, SpecQuerySliceAxes, SpecQuerySort, SpecQuerySparseToDenseColumn, SpecQuerySymmetricJoin, StorageEntry, StorageHandle, StorageHandleLocal, StorageHandleRemote, StreamingApiResponse, StreamingApiResponseHandleOutdated, StreamingApiResponseOk, StringMatcher, StringifiedJson, SupportedRequirement, TableRange, UiError, UiServiceFactoryMap, UiServiceInjectorMap, UiServiceRegistry, UiServices, UniqueValuesRequest, UniqueValuesResponse, UniversalPColumnId, ValueOrError, ValueType, ValueTypeSupported, ValueWithUTag, ValueWithUTagAndAuthor, assertNever, base64Decode, base64Encode, bigintReplacer, buildServiceInfo, canonicalizeAxisId, canonicalizeAxisWithParents, canonicalizeJson, checkBlockFlag, collectSpecQueryColumns, createPlRef, createUiServiceInjectors, dataInfoToEntries, deriveNativeId, deserializeError, deserializeResult, digestPlId, ensureError, ensurePColumn, entriesToDataInfo, executePSpecPredicate, extractAllColumns, extractAllRequirements, extractAllSupports, extractCodeWithInfo, extractConfigGeneric, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getFileNameFromHandle, getFilePathFromHandle, getMethodNames, getNormalizedAxesList, getPColumnSpecId, getPTableColumnId, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, hasAbortError, isAbortError, isAggregateError, isAnchoredPColumnId, isAxisId, isBlockUIURL, isBooleanExpression, isDataInfo, isDataInfoEntries, isFilteredPColumn, isFolderURL, isImportFileHandleIndex, isImportFileHandleUpload, isKnownServiceName, isLabelColumn, isLinkerColumn, isLiveLog, isNodeService, isPColumn, isPColumnResult, isPColumnSpec, isPColumnSpecResult, isPFrameDriverError, isPFrameError, isPFrameSpecDriverError, isPTableAbsent, isPTableNA, isPTableValueAxis, isPartitionedDataInfoEntries, isPlRef, isServiceAlreadyRegisteredError, isServiceError, isServiceInjectionError, isServiceInvalidIdError, isServiceMethodNotFoundError, isServiceNotRegisteredError, legacyColumnSelectorsToPredicate, mapDataInfo, mapDataInfoEntries, mapJoinEntry, mapPObjectData, mapPTableDef, mapPTableDefV2, mapSpecQueryColumns, mapValueInVOE, matchAxis, matchAxisId, matchPColumn, newRangeBytesOpt, pTableValue, pTableValueBranded, parseColumnId, parseHttpAuth, parseJson, plId, plRefsEqual, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, registerServiceCapabilities, resolveAnchors, resolveAnnotationParents, resolveRequiredServices, resolveUiInjector, serializeError, serializeHttpAuth, serializeResult, service, serviceFnKey, sortJoinEntry, sortPTableDef, sortSpecQuery, stringifyColumnId, stringifyJson, traverseQuerySpec, uniqueBy, uniquePlId, unwrapResult, validateRangeBytes, visitDataInfo, withEnrichments, wrapAndSerialize, wrapAndSerializeAsync, wrapAsyncCallback, wrapCallback };
69
+ export { AAxisSelector, ADomain, AbortError, AllRequiresFeatureFlags, AllSupportsFeatureFlags, AnchorAxisIdOrRefBasic, AnchorAxisRef, AnchorAxisRefByIdx, AnchorAxisRefByMatcher, AnchorAxisRefByName, AnchorDomainRef, AnchoredColumnMatchStrategy, AnchoredIdDeriver, AnchoredPColumnId, AnchoredPColumnSelector, Annotation, AnnotationJson, AnyFunction, AnyLogHandle, ArchiveFormat, ArrayTypeUnion, ArtificialColumnJoinEntry, Assert, AssertKeysEqual, AuthorMarker, AxesId, AxesSpec, AxisFilter, AxisFilterByIdx, AxisFilterByName, AxisFilterValue, AxisId, AxisQualification, AxisSpec, AxisSpecNormalized, AxisTree, AxisValueType, Base64Compatible, Base64Encoded, BasicHttpAuth, BinaryChunk, BinaryPartitionedDataInfo, BinaryPartitionedDataInfoEntries, BlobDriver, BlobHandleAndSize, BlobLike, BlobToURLDriver, BlockCodeFeatureFlags, BlockCodeKnownFeatureFlags, BlockCodeWithInfo, BlockConfigContainer, BlockConfigGeneric, BlockConfigV3Generic, BlockConfigV4Generic, BlockOutputsBase, BlockRenderingMode, BlockSection, BlockSectionDelimiter, BlockSectionLink, BlockSectionLinkAppearance, BlockState, BlockStateV3, BlockUIURL, Branded, CalculateTableDataRequest, CalculateTableDataResponse, CanonicalizedJson, ChunkedStreamReader, ChunkedStreamReaderOptions, Code, ColumnAxesWithQualifications, ColumnFilter, ColumnJoinEntry, ColumnValueType, CompositeLinkerMap, ConstantAxisFilter, ContentHandler, DataExprAxisRef, DataExprColumnRef, DataInfo, DataInfoEntries, DataQuery, DataQueryBooleanExpression, DataQueryColumn, DataQueryExpression, DataQueryFilter, DataQueryInlineColumn, DataQueryJoinEntry, DataQueryOuterJoin, DataQuerySliceAxes, DataQuerySort, DataQuerySparseToDenseColumn, DataQuerySymmetricJoin, DefaultNavigationState, DeleteColumnRequest, DeleteColumnResponse, DiscoverColumnsConstraints, DiscoverColumnsLinkerStep, DiscoverColumnsMappingVariant, DiscoverColumnsRequest, DiscoverColumnsResponse, DiscoverColumnsResponseHit, DiscoverColumnsResponseQualifications, DiscoverColumnsStepInfo, Domain, DomainJson, DriverKit, ErrorHandlerStatus, EvaluateQueryResponse, FileLike, FileRange, FilterKeysByPrefix, FilterSpec, FilterSpecLeaf, FilterSpecNode, FilterSpecOfType, FilterSpecType, FilteredPColumn, FilteredPColumnId, FindColumnsRequest, FindColumnsResponse, FolderURL, FrontendDriver, FullJoin, FullPTableColumnData, GetContentOptions, HttpAuth, ImportFileHandle, ImportFileHandleIndex, ImportFileHandleUpload, ImportProgress, ImportStatus, IncompatibleFlagsError, InferFilterSpecCommonLeaf, InferFilterSpecCommonNode, InferFilterSpecLeaf, InferFilterSpecLeafColumn, InferServiceKind, InferServiceModel, InferServiceUi, InlineColumnJoinEntry, InnerJoin, Is, IsSubtypeOf, JoinEntry, JsonCompatible, JsonDataInfo, JsonDataInfoEntries, JsonPartitionedDataInfo, JsonPartitionedDataInfoEntries, JsonSerializable, KnownServiceName, LegacyAxisSelector, LinkerMap, ListFilesResult, ListOptionBase, LiveLogHandle, LocalBlobHandle, LocalBlobHandleAndSize, LocalImportFileHandle, LogsDriver, LsDriver, LsEntry, MatcherMap, Metadata, MetadataJson, ModelServiceFactoryMap, ModelServiceRegistry, ModelServices, MultiAxisSelector, MultiColumnSelector, NativePObjectId, NavigationState, OpenDialogFilter, OpenDialogOps, OpenMultipleFilesResponse, OpenSingleFileResponse, Option, OuterJoin, OutputWithStatus, PAxisName, PColumn, PColumnDataEntry, PColumnIdAndSpec, PColumnInfo, PColumnKey, PColumnLazy, PColumnName, PColumnSelector, PColumnSpec, PColumnSpecId, PColumnValue, PColumnValues, PColumnValuesEntry, PDataColumnSpec, PFrame, PFrameDef, PFrameDriver, PFrameDriverError, PFrameError, PFrameHandle, PFrameModelDriver, PFrameSpecDriver, PFrameSpecDriverError, PObject, PObjectId, PObjectSpec, PSpecPredicate, PTable, PTableColumnId, PTableColumnIdAxis, PTableColumnIdColumn, PTableColumnSpec, PTableColumnSpecAxis, PTableColumnSpecColumn, PTableDef, PTableDefV2, PTableHandle, PTableNA, PTableRecordFilter, PTableRecordSingleValueFilterV2, PTableShape, PTableSorting, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PUniversalColumnSpec, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, ParquetChunk, ParquetChunkMapping, ParquetChunkMappingAxis, ParquetChunkMappingColumn, ParquetChunkMetadata, ParquetChunkStats, ParquetPartitionedDataInfo, ParquetPartitionedDataInfoEntries, PartitionedDataInfoEntries, PlId, PlIdBytes, PlIdLength, PlRef, PoolEntry, PoolEntryGuard, ProgressLogWithInfo, RangeBytes, ReadyLogHandle, Ref, RemoteBlobHandle, RemoteBlobHandleAndSize, RequireServices, ResolveAnchorsOptions, ResourceTypeName, ResourceTypePrefix, ResultCollection, ResultOrError, ResultPoolEntry, RootFilterSpec, RuntimeCapabilities, SERVICE_CAPABILITY_FLAGS, SERVICE_FEATURE_FLAGS, SERVICE_METHOD_MAP, SUniversalPColumnId, SerializedError, ServiceAlreadyRegisteredError, ServiceBrand, ServiceDispatch, ServiceError, ServiceInjectionError, ServiceInvalidIdError, ServiceMethodNotFoundError, ServiceName, ServiceNameLiterals, ServiceNotRegisteredError, ServiceRequireFlags, ServiceType, ServiceTypesLike, Services, SingleAxisSelector, SingleValueAndPredicateV2, SingleValueEqualPredicate, SingleValueGreaterOrEqualPredicate, SingleValueGreaterPredicate, SingleValueIEqualPredicate, SingleValueInSetPredicate, SingleValueIsNAPredicate, SingleValueLessOrEqualPredicate, SingleValueLessPredicate, SingleValueMatchesPredicate, SingleValueNotPredicateV2, SingleValueOrPredicateV2, SingleValuePredicateV2, SingleValueStringContainsFuzzyPredicate, SingleValueStringContainsPredicate, SingleValueStringIContainsFuzzyPredicate, SingleValueStringIContainsPredicate, SlicedColumnJoinEntry, SpecExprAxisRef, SpecExprColumnRef, SpecFrameHandle, SpecQuery, SpecQueryBooleanExpression, SpecQueryColumn, SpecQueryExpression, SpecQueryFilter, SpecQueryInlineColumn, SpecQueryJoinEntry, SpecQueryOuterJoin, SpecQuerySliceAxes, SpecQuerySort, SpecQuerySparseToDenseColumn, SpecQuerySymmetricJoin, StorageEntry, StorageHandle, StorageHandleLocal, StorageHandleRemote, StreamingApiResponse, StreamingApiResponseHandleOutdated, StreamingApiResponseOk, StringMatcher, StringifiedJson, SupportedRequirement, TableRange, UiError, UiServiceFactoryMap, UiServiceInjectorMap, UiServiceRegistry, UiServices, UniqueValuesRequest, UniqueValuesResponse, UniversalPColumnId, ValueOrError, ValueType, ValueTypeSupported, ValueWithUTag, ValueWithUTagAndAuthor, assertNever, base64Decode, base64Encode, bigintReplacer, buildServiceInfo, canonicalizeAxisId, canonicalizeAxisWithParents, canonicalizeJson, checkBlockFlag, collectSpecQueryColumns, createPlRef, createUiServiceInjectors, dataInfoToEntries, deriveNativeId, deserializeError, deserializeResult, digestPlId, ensureError, ensurePColumn, entriesToDataInfo, executePSpecPredicate, extractAllColumns, extractAllRequirements, extractAllSupports, extractCodeWithInfo, extractConfigGeneric, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getFileNameFromHandle, getFilePathFromHandle, getMethodNames, getNormalizedAxesList, getPColumnSpecId, getPTableColumnId, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, hasAbortError, isAbortError, isAggregateError, isAnchoredPColumnId, isAxisId, isBlockUIURL, isBooleanExpression, isDataInfo, isDataInfoEntries, isFilteredPColumn, isFolderURL, isImportFileHandleIndex, isImportFileHandleUpload, isKnownServiceName, isLabelColumn, isLinkerColumn, isLiveLog, isNodeService, isPColumn, isPColumnResult, isPColumnSpec, isPColumnSpecResult, isPFrameDriverError, isPFrameError, isPFrameSpecDriverError, isPTableNA, isPartitionedDataInfoEntries, isPlRef, isServiceAlreadyRegisteredError, isServiceError, isServiceInjectionError, isServiceInvalidIdError, isServiceMethodNotFoundError, isServiceNotRegisteredError, legacyColumnSelectorsToPredicate, mapDataInfo, mapDataInfoEntries, mapJoinEntry, mapPObjectData, mapPTableDef, mapPTableDefV2, mapSpecQueryColumns, mapValueInVOE, matchAxis, matchAxisId, matchPColumn, newRangeBytesOpt, pTableValue, pTableValueBranded, parseColumnId, parseHttpAuth, parseJson, plId, plRefsEqual, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, registerServiceCapabilities, resolveAnchors, resolveAnnotationParents, resolveRequiredServices, resolveUiInjector, serializeError, serializeHttpAuth, serializeResult, service, serviceFnKey, sortJoinEntry, sortPTableDef, sortSpecQuery, stringifyColumnId, stringifyJson, traverseQuerySpec, uniqueBy, uniquePlId, unwrapResult, validateRangeBytes, visitDataInfo, withEnrichments, wrapAndSerialize, wrapAndSerializeAsync, wrapAsyncCallback, wrapCallback };
package/dist/index.js CHANGED
@@ -11,7 +11,7 @@ import { dataInfoToEntries, entriesToDataInfo, isDataInfo, isDataInfoEntries, is
11
11
  import { AbortError, PFrameDriverError, PFrameError, PFrameSpecDriverError, ServiceAlreadyRegisteredError, ServiceError, ServiceInjectionError, ServiceInvalidIdError, ServiceMethodNotFoundError, ServiceNotRegisteredError, UiError, deserializeError, deserializeResult, ensureError, hasAbortError, isAbortError, isAggregateError, isPFrameDriverError, isPFrameError, isPFrameSpecDriverError, isServiceAlreadyRegisteredError, isServiceError, isServiceInjectionError, isServiceInvalidIdError, isServiceMethodNotFoundError, isServiceNotRegisteredError, serializeError, serializeResult, unwrapResult, wrapAndSerialize, wrapAndSerializeAsync, wrapAsyncCallback, wrapCallback } from "./errors.js";
12
12
  import { bigintReplacer, canonicalizeJson, parseJson, stringifyJson } from "./json.js";
13
13
  import { Annotation, AnnotationJson, Domain, DomainJson, PAxisName, PColumnName, ValueType, canonicalizeAxisId, canonicalizeAxisWithParents, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getNormalizedAxesList, getPColumnSpecId, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, isAxisId, isLabelColumn, isLinkerColumn, matchAxisId, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, resolveAnnotationParents } from "./drivers/pframe/spec/spec.js";
14
- import { PTableAbsent, PTableNA, isPTableAbsent, isPTableNA, isPTableValueAxis, pTableValue, pTableValueBranded } from "./drivers/pframe/data_types.js";
14
+ import { PTableNA, isPTableNA, pTableValue, pTableValueBranded } from "./drivers/pframe/data_types.js";
15
15
  import { collectSpecQueryColumns, isBooleanExpression, mapSpecQueryColumns, sortSpecQuery, traverseQuerySpec } from "./drivers/pframe/query/utils.js";
16
16
  import { mapJoinEntry, mapPTableDef, mapPTableDefV2, sortJoinEntry, sortPTableDef } from "./drivers/pframe/table_calculate.js";
17
17
  import { getPTableColumnId } from "./drivers/pframe/table_common.js";
@@ -43,4 +43,4 @@ import { SERVICE_METHOD_MAP, buildServiceInfo, resolveUiInjector } from "./servi
43
43
  import "./services/index.js";
44
44
  import { PoolEntryGuard } from "./pool_entry.js";
45
45
 
46
- export { AbortError, AllRequiresFeatureFlags, AllSupportsFeatureFlags, AnchoredIdDeriver, Annotation, AnnotationJson, ChunkedStreamReader, Code, DefaultNavigationState, Domain, DomainJson, IncompatibleFlagsError, LinkerMap, ModelServiceRegistry, PAxisName, PColumnName, PFrameDriverError, PFrameError, PFrameSpecDriverError, PTableAbsent, PTableNA, PlId, PlIdBytes, PlIdLength, PlRef, PoolEntryGuard, RangeBytes, ResourceTypeName, ResourceTypePrefix, RuntimeCapabilities, SERVICE_CAPABILITY_FLAGS, SERVICE_FEATURE_FLAGS, SERVICE_METHOD_MAP, ServiceAlreadyRegisteredError, ServiceError, ServiceInjectionError, ServiceInvalidIdError, ServiceMethodNotFoundError, ServiceNotRegisteredError, Services, UiError, UiServiceRegistry, ValueType, assertNever, base64Decode, base64Encode, bigintReplacer, buildServiceInfo, canonicalizeAxisId, canonicalizeAxisWithParents, canonicalizeJson, checkBlockFlag, collectSpecQueryColumns, createPlRef, createUiServiceInjectors, dataInfoToEntries, deriveNativeId, deserializeError, deserializeResult, digestPlId, ensureError, ensurePColumn, entriesToDataInfo, executePSpecPredicate, extractAllColumns, extractAllRequirements, extractAllSupports, extractCodeWithInfo, extractConfigGeneric, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getFileNameFromHandle, getFilePathFromHandle, getMethodNames, getNormalizedAxesList, getPColumnSpecId, getPTableColumnId, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, hasAbortError, isAbortError, isAggregateError, isAnchoredPColumnId, isAxisId, isBlockUIURL, isBooleanExpression, isDataInfo, isDataInfoEntries, isFilteredPColumn, isFolderURL, isImportFileHandleIndex, isImportFileHandleUpload, isKnownServiceName, isLabelColumn, isLinkerColumn, isLiveLog, isNodeService, isPColumn, isPColumnResult, isPColumnSpec, isPColumnSpecResult, isPFrameDriverError, isPFrameError, isPFrameSpecDriverError, isPTableAbsent, isPTableNA, isPTableValueAxis, isPartitionedDataInfoEntries, isPlRef, isServiceAlreadyRegisteredError, isServiceError, isServiceInjectionError, isServiceInvalidIdError, isServiceMethodNotFoundError, isServiceNotRegisteredError, legacyColumnSelectorsToPredicate, mapDataInfo, mapDataInfoEntries, mapJoinEntry, mapPObjectData, mapPTableDef, mapPTableDefV2, mapSpecQueryColumns, mapValueInVOE, matchAxis, matchAxisId, matchPColumn, newRangeBytesOpt, pTableValue, pTableValueBranded, parseColumnId, parseHttpAuth, parseJson, plId, plRefsEqual, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, registerServiceCapabilities, resolveAnchors, resolveAnnotationParents, resolveRequiredServices, resolveUiInjector, serializeError, serializeHttpAuth, serializeResult, service, serviceFnKey, sortJoinEntry, sortPTableDef, sortSpecQuery, stringifyColumnId, stringifyJson, traverseQuerySpec, uniqueBy, uniquePlId, unwrapResult, validateRangeBytes, visitDataInfo, withEnrichments, wrapAndSerialize, wrapAndSerializeAsync, wrapAsyncCallback, wrapCallback };
46
+ export { AbortError, AllRequiresFeatureFlags, AllSupportsFeatureFlags, AnchoredIdDeriver, Annotation, AnnotationJson, ChunkedStreamReader, Code, DefaultNavigationState, Domain, DomainJson, IncompatibleFlagsError, LinkerMap, ModelServiceRegistry, PAxisName, PColumnName, PFrameDriverError, PFrameError, PFrameSpecDriverError, PTableNA, PlId, PlIdBytes, PlIdLength, PlRef, PoolEntryGuard, RangeBytes, ResourceTypeName, ResourceTypePrefix, RuntimeCapabilities, SERVICE_CAPABILITY_FLAGS, SERVICE_FEATURE_FLAGS, SERVICE_METHOD_MAP, ServiceAlreadyRegisteredError, ServiceError, ServiceInjectionError, ServiceInvalidIdError, ServiceMethodNotFoundError, ServiceNotRegisteredError, Services, UiError, UiServiceRegistry, ValueType, assertNever, base64Decode, base64Encode, bigintReplacer, buildServiceInfo, canonicalizeAxisId, canonicalizeAxisWithParents, canonicalizeJson, checkBlockFlag, collectSpecQueryColumns, createPlRef, createUiServiceInjectors, dataInfoToEntries, deriveNativeId, deserializeError, deserializeResult, digestPlId, ensureError, ensurePColumn, entriesToDataInfo, executePSpecPredicate, extractAllColumns, extractAllRequirements, extractAllSupports, extractCodeWithInfo, extractConfigGeneric, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getFileNameFromHandle, getFilePathFromHandle, getMethodNames, getNormalizedAxesList, getPColumnSpecId, getPTableColumnId, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, hasAbortError, isAbortError, isAggregateError, isAnchoredPColumnId, isAxisId, isBlockUIURL, isBooleanExpression, isDataInfo, isDataInfoEntries, isFilteredPColumn, isFolderURL, isImportFileHandleIndex, isImportFileHandleUpload, isKnownServiceName, isLabelColumn, isLinkerColumn, isLiveLog, isNodeService, isPColumn, isPColumnResult, isPColumnSpec, isPColumnSpecResult, isPFrameDriverError, isPFrameError, isPFrameSpecDriverError, isPTableNA, isPartitionedDataInfoEntries, isPlRef, isServiceAlreadyRegisteredError, isServiceError, isServiceInjectionError, isServiceInvalidIdError, isServiceMethodNotFoundError, isServiceNotRegisteredError, legacyColumnSelectorsToPredicate, mapDataInfo, mapDataInfoEntries, mapJoinEntry, mapPObjectData, mapPTableDef, mapPTableDefV2, mapSpecQueryColumns, mapValueInVOE, matchAxis, matchAxisId, matchPColumn, newRangeBytesOpt, pTableValue, pTableValueBranded, parseColumnId, parseHttpAuth, parseJson, plId, plRefsEqual, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, registerServiceCapabilities, resolveAnchors, resolveAnnotationParents, resolveRequiredServices, resolveUiInjector, serializeError, serializeHttpAuth, serializeResult, service, serviceFnKey, sortJoinEntry, sortPTableDef, sortSpecQuery, stringifyColumnId, stringifyJson, traverseQuerySpec, uniqueBy, uniquePlId, unwrapResult, validateRangeBytes, visitDataInfo, withEnrichments, wrapAndSerialize, wrapAndSerializeAsync, wrapAsyncCallback, wrapCallback };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/pl-model-common",
3
- "version": "1.30.0",
3
+ "version": "1.31.0",
4
4
  "description": "Platforma SDK Model",
5
5
  "files": [
6
6
  "./dist/**/*",
@@ -19,16 +19,16 @@
19
19
  "dependencies": {
20
20
  "canonicalize": "~2.1.0",
21
21
  "zod": "~3.23.8",
22
- "@milaboratories/helpers": "1.14.0",
23
- "@milaboratories/pl-error-like": "1.12.9"
22
+ "@milaboratories/pl-error-like": "1.12.9",
23
+ "@milaboratories/helpers": "1.14.0"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@vitest/coverage-istanbul": "^4.0.18",
27
27
  "typescript": "~5.9.3",
28
28
  "vitest": "^4.0.18",
29
- "@milaboratories/ts-configs": "1.2.2",
30
29
  "@milaboratories/ts-builder": "1.3.0",
31
- "@milaboratories/build-configs": "1.5.2"
30
+ "@milaboratories/build-configs": "1.5.2",
31
+ "@milaboratories/ts-configs": "1.2.2"
32
32
  },
33
33
  "scripts": {
34
34
  "build": "ts-builder build --target node",
@@ -26,7 +26,7 @@ export type PTableVectorTyped<DataType extends ValueType> = {
26
26
  /** Stored data type */
27
27
  readonly type: DataType;
28
28
 
29
- /** Values for present positions, absent positions have NA values */
29
+ /** Values for present positions */
30
30
  readonly data: PVectorDataTyped<DataType>;
31
31
 
32
32
  /**
@@ -36,15 +36,10 @@ export type PTableVectorTyped<DataType extends ValueType> = {
36
36
  * */
37
37
  readonly isNA?: Uint8Array;
38
38
 
39
- /**
40
- * Encoded bit array marking some elements of this vector as absent,
41
- * call {@link bitSet} to read the data.
42
- * */
43
- readonly absent: Uint8Array;
39
+ /** @deprecated Always empty. Kept for backwards compatibility with old blocks. */
40
+ readonly absent?: Uint8Array;
44
41
  };
45
- /** Table column data in comparison to the data stored in a separate PColumn
46
- * may have some of the values "absent", i.e. as a result of missing record in
47
- * outer join operation. This information is encoded in {@link absent} field. */
42
+ /** Table column data */
48
43
  export type PTableVector = PTableVectorTyped<ValueType>;
49
44
 
50
45
  function isBitSet(bitVector: Uint8Array, offset: number): boolean {
@@ -53,10 +48,6 @@ function isBitSet(bitVector: Uint8Array, offset: number): boolean {
53
48
  return (bitVector[chunkIndex] & mask) > 0;
54
49
  }
55
50
 
56
- function isValueAbsent(vector: PTableVector, row: number): boolean {
57
- return isBitSet(vector.absent, row);
58
- }
59
-
60
51
  function isValueNA(vector: PTableVector, row: number): boolean {
61
52
  if (vector.isNA) return isBitSet(vector.isNA, row);
62
53
 
@@ -81,14 +72,6 @@ function isValueNA(vector: PTableVector, row: number): boolean {
81
72
  }
82
73
  }
83
74
 
84
- export const PTableAbsent = { type: "absent" } as const;
85
- export type PTableAbsent = typeof PTableAbsent;
86
-
87
- /** Type guard for absent value */
88
- export function isPTableAbsent(value: unknown): value is PTableAbsent {
89
- return typeof value === "object" && value !== null && "type" in value && value.type === "absent";
90
- }
91
-
92
75
  export const PTableNA = null;
93
76
  export type PTableNA = typeof PTableNA;
94
77
 
@@ -120,49 +103,21 @@ export type PTableValueDataBranded<DataType extends ValueTypeSupported> = Brande
120
103
  PTableValueData<DataType>,
121
104
  DataType
122
105
  >;
123
- export type PTableValue<
124
- Absent = PTableAbsent,
125
- NA = PTableNA,
126
- DataType extends ValueTypeSupported = ValueTypeSupported,
127
- > = Absent | NA | PTableValueData<DataType>;
106
+ export type PTableValue<NA = PTableNA, DataType extends ValueTypeSupported = ValueTypeSupported> =
107
+ | NA
108
+ | PTableValueData<DataType>;
128
109
  export type PTableValueBranded<
129
- Absent = PTableAbsent,
130
110
  NA = PTableNA,
131
111
  DataType extends ValueTypeSupported = ValueTypeSupported,
132
- > = Absent | NA | PTableValueDataBranded<DataType>;
133
-
134
- export type PTableValueAxis<
135
- Absent = PTableAbsent,
136
- DataType extends ValueTypeSupported = ValueTypeSupported,
137
- > = PTableValue<Absent, never, DataType>;
112
+ > = NA | PTableValueDataBranded<DataType>;
138
113
 
139
- export function isPTableValueAxis<Absent, NA, DataType extends ValueTypeSupported>(
140
- value: PTableValue<Absent, NA, DataType>,
141
- isNA: (value: PTableValue<Absent, NA, DataType>) => value is NA,
142
- ): value is PTableValueAxis<Absent, DataType>;
143
- export function isPTableValueAxis<Absent, DataType extends ValueTypeSupported>(
144
- value: PTableValue<Absent, PTableNA, DataType>,
145
- ): value is PTableValueAxis<Absent, DataType>;
146
- export function isPTableValueAxis<
147
- Absent = PTableAbsent,
148
- NA = PTableNA,
149
- DataType extends ValueTypeSupported = ValueTypeSupported,
150
- >(
151
- value: PTableValue<Absent, NA, DataType>,
152
- isNA?: (value: PTableValue<Absent, NA, DataType>) => value is NA,
153
- ): value is PTableValueAxis<Absent, DataType> {
154
- return !(isNA ? isNA(value) : isPTableNA(value));
155
- }
114
+ export type PTableValueAxis<DataType extends ValueTypeSupported = ValueTypeSupported> =
115
+ PTableValueData<DataType>;
156
116
 
157
- function pTableValueImpl<
158
- FillAbsent = PTableAbsent,
159
- FillNA = PTableNA,
160
- DataType extends ValueType = ValueTypeSupported,
161
- >(
117
+ function pTableValueImpl<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(
162
118
  column: PTableVectorTyped<ValueType>,
163
119
  row: number,
164
120
  options?: {
165
- absent?: FillAbsent;
166
121
  na?: FillNA;
167
122
  dataType?: DataType;
168
123
  },
@@ -181,10 +136,6 @@ function pTableValueImpl<
181
136
  throw Error(`expected column of type ${options.dataType}, got ${valueType}`);
182
137
  }
183
138
 
184
- if (isValueAbsent(column, row)) {
185
- return options?.absent !== undefined ? options.absent : PTableAbsent;
186
- }
187
-
188
139
  if (isValueNA(column, row)) {
189
140
  return options?.na !== undefined ? options.na : PTableNA;
190
141
  }
@@ -208,37 +159,14 @@ function pTableValueImpl<
208
159
  export function pTableValue<DataType extends ValueType>(
209
160
  column: PTableVectorTyped<DataType>,
210
161
  row: number,
211
- ): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, PTableNA, DataType> : never;
212
- export function pTableValue<FillAbsent, DataType extends ValueType>(
213
- column: PTableVectorTyped<DataType>,
214
- row: number,
215
- options: {
216
- absent: FillAbsent;
217
- },
218
- ): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, PTableNA, DataType> : never;
162
+ ): DataType extends ValueTypeSupported ? PTableValue<PTableNA, DataType> : never;
219
163
  export function pTableValue<FillNA, DataType extends ValueType>(
220
164
  column: PTableVectorTyped<DataType>,
221
165
  row: number,
222
166
  options: {
223
167
  na: FillNA;
224
168
  },
225
- ): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, FillNA, DataType> : never;
226
- export function pTableValue<FillNA, FillAbsent, DataType extends ValueType>(
227
- column: PTableVectorTyped<DataType>,
228
- row: number,
229
- options: {
230
- absent: FillAbsent;
231
- na: FillNA;
232
- },
233
- ): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, FillNA, DataType> : never;
234
- export function pTableValue<FillAbsent, DataType extends ValueTypeSupported>(
235
- column: PTableVectorTyped<ValueType>,
236
- row: number,
237
- options: {
238
- absent: FillAbsent;
239
- dataType: DataType;
240
- },
241
- ): PTableValue<FillAbsent, PTableNA>;
169
+ ): DataType extends ValueTypeSupported ? PTableValue<FillNA, DataType> : never;
242
170
  export function pTableValue<FillNA, DataType extends ValueTypeSupported>(
243
171
  column: PTableVectorTyped<ValueType>,
244
172
  row: number,
@@ -246,25 +174,11 @@ export function pTableValue<FillNA, DataType extends ValueTypeSupported>(
246
174
  na: FillNA;
247
175
  dataType: DataType;
248
176
  },
249
- ): PTableValue<PTableAbsent, FillNA, DataType>;
250
- export function pTableValue<FillNA, FillAbsent, DataType extends ValueTypeSupported>(
251
- column: PTableVectorTyped<ValueType>,
252
- row: number,
253
- options: {
254
- absent: FillAbsent;
255
- na: FillNA;
256
- dataType: DataType;
257
- },
258
- ): PTableValue<FillAbsent, FillNA, DataType>;
259
- export function pTableValue<
260
- FillAbsent = PTableAbsent,
261
- FillNA = PTableNA,
262
- DataType extends ValueType = ValueTypeSupported,
263
- >(
177
+ ): PTableValue<FillNA, DataType>;
178
+ export function pTableValue<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(
264
179
  column: PTableVectorTyped<ValueType>,
265
180
  row: number,
266
181
  options?: {
267
- absent?: FillAbsent;
268
182
  na?: FillNA;
269
183
  dataType?: DataType;
270
184
  },
@@ -275,39 +189,14 @@ export function pTableValue<
275
189
  export function pTableValueBranded<DataType extends ValueType>(
276
190
  column: PTableVectorTyped<DataType>,
277
191
  row: number,
278
- ): DataType extends ValueTypeSupported
279
- ? PTableValueBranded<PTableAbsent, PTableNA, DataType>
280
- : never;
281
- export function pTableValueBranded<FillAbsent, DataType extends ValueType>(
282
- column: PTableVectorTyped<DataType>,
283
- row: number,
284
- options: {
285
- absent: FillAbsent;
286
- },
287
- ): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, PTableNA, DataType> : never;
192
+ ): DataType extends ValueTypeSupported ? PTableValueBranded<PTableNA, DataType> : never;
288
193
  export function pTableValueBranded<FillNA, DataType extends ValueType>(
289
194
  column: PTableVectorTyped<DataType>,
290
195
  row: number,
291
196
  options: {
292
197
  na: FillNA;
293
198
  },
294
- ): DataType extends ValueTypeSupported ? PTableValueBranded<PTableAbsent, FillNA, DataType> : never;
295
- export function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueType>(
296
- column: PTableVectorTyped<DataType>,
297
- row: number,
298
- options: {
299
- absent: FillAbsent;
300
- na: FillNA;
301
- },
302
- ): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, FillNA, DataType> : never;
303
- export function pTableValueBranded<FillAbsent, DataType extends ValueTypeSupported>(
304
- column: PTableVectorTyped<ValueType>,
305
- row: number,
306
- options: {
307
- absent: FillAbsent;
308
- dataType: DataType;
309
- },
310
- ): PTableValueBranded<FillAbsent, PTableNA>;
199
+ ): DataType extends ValueTypeSupported ? PTableValueBranded<FillNA, DataType> : never;
311
200
  export function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(
312
201
  column: PTableVectorTyped<ValueType>,
313
202
  row: number,
@@ -315,25 +204,14 @@ export function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(
315
204
  na: FillNA;
316
205
  dataType: DataType;
317
206
  },
318
- ): PTableValueBranded<PTableAbsent, FillNA, DataType>;
319
- export function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueTypeSupported>(
320
- column: PTableVectorTyped<ValueType>,
321
- row: number,
322
- options: {
323
- absent: FillAbsent;
324
- na: FillNA;
325
- dataType: DataType;
326
- },
327
- ): PTableValueBranded<FillAbsent, FillNA, DataType>;
207
+ ): PTableValueBranded<FillNA, DataType>;
328
208
  export function pTableValueBranded<
329
- FillAbsent = PTableAbsent,
330
209
  FillNA = PTableNA,
331
210
  DataType extends ValueType = ValueTypeSupported,
332
211
  >(
333
212
  column: PTableVectorTyped<ValueType>,
334
213
  row: number,
335
214
  options?: {
336
- absent?: FillAbsent;
337
215
  na?: FillNA;
338
216
  dataType?: DataType;
339
217
  },
@@ -85,8 +85,7 @@ export interface InnerJoin<Col> {
85
85
  /**
86
86
  * Defines a join request tree node that will output all records present at
87
87
  * least in one of the child nodes ({@link entries}), values for those PColumns
88
- * that lacks corresponding combinations of axis values will be marked as absent,
89
- * see {@link PTableVector.absent}.
88
+ * that lack corresponding combinations of axis values will be null.
90
89
  * */
91
90
  export interface FullJoin<Col> {
92
91
  /** Node type discriminator */
@@ -100,8 +99,8 @@ export interface FullJoin<Col> {
100
99
  * Defines a join request tree node that will output all records present in
101
100
  * {@link primary} child node, and records from the {@link secondary} nodes will
102
101
  * be added to the output only if present, values for those PColumns from the
103
- * {@link secondary} list, that lacks corresponding combinations of axis values
104
- * will be marked as absent, see {@link PTableVector.absent}.
102
+ * {@link secondary} list, that lack corresponding combinations of axis values
103
+ * will be null.
105
104
  *
106
105
  * This node can be thought as a chain of SQL LEFT JOIN operations starting from
107
106
  * the {@link primary} node and adding {@link secondary} nodes one by one.