@milaboratories/pl-model-common 1.25.1 → 1.25.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +29 -0
  2. package/dist/author_marker.d.ts +9 -6
  3. package/dist/base32_encode.cjs +40 -46
  4. package/dist/base32_encode.cjs.map +1 -1
  5. package/dist/base32_encode.js +40 -45
  6. package/dist/base32_encode.js.map +1 -1
  7. package/dist/base64.cjs +5 -4
  8. package/dist/base64.cjs.map +1 -1
  9. package/dist/base64.d.ts +10 -6
  10. package/dist/base64.js +5 -3
  11. package/dist/base64.js.map +1 -1
  12. package/dist/block_state.d.ts +21 -23
  13. package/dist/bmodel/block_config.cjs +9 -10
  14. package/dist/bmodel/block_config.cjs.map +1 -1
  15. package/dist/bmodel/block_config.d.ts +53 -72
  16. package/dist/bmodel/block_config.js +9 -9
  17. package/dist/bmodel/block_config.js.map +1 -1
  18. package/dist/bmodel/code.cjs +7 -6
  19. package/dist/bmodel/code.cjs.map +1 -1
  20. package/dist/bmodel/code.d.ts +17 -13
  21. package/dist/bmodel/code.js +6 -4
  22. package/dist/bmodel/code.js.map +1 -1
  23. package/dist/bmodel/container.d.ts +46 -44
  24. package/dist/bmodel/index.cjs +3 -0
  25. package/dist/bmodel/index.d.ts +5 -6
  26. package/dist/bmodel/index.js +3 -0
  27. package/dist/bmodel/normalization.cjs +90 -106
  28. package/dist/bmodel/normalization.cjs.map +1 -1
  29. package/dist/bmodel/normalization.d.ts +7 -3
  30. package/dist/bmodel/normalization.js +90 -105
  31. package/dist/bmodel/normalization.js.map +1 -1
  32. package/dist/bmodel/types.d.ts +4 -1
  33. package/dist/branding.d.ts +5 -5
  34. package/dist/common_types.d.ts +19 -15
  35. package/dist/driver_kit.d.ts +25 -17
  36. package/dist/drivers/ChunkedStreamReader.cjs +168 -203
  37. package/dist/drivers/ChunkedStreamReader.cjs.map +1 -1
  38. package/dist/drivers/ChunkedStreamReader.d.ts +104 -100
  39. package/dist/drivers/ChunkedStreamReader.js +168 -202
  40. package/dist/drivers/ChunkedStreamReader.js.map +1 -1
  41. package/dist/drivers/blob.cjs +15 -17
  42. package/dist/drivers/blob.cjs.map +1 -1
  43. package/dist/drivers/blob.d.ts +35 -35
  44. package/dist/drivers/blob.js +14 -15
  45. package/dist/drivers/blob.js.map +1 -1
  46. package/dist/drivers/index.cjs +18 -0
  47. package/dist/drivers/index.d.ts +29 -9
  48. package/dist/drivers/index.js +18 -0
  49. package/dist/drivers/interfaces.d.ts +17 -14
  50. package/dist/drivers/log.cjs +4 -3
  51. package/dist/drivers/log.cjs.map +1 -1
  52. package/dist/drivers/log.d.ts +52 -49
  53. package/dist/drivers/log.js +4 -2
  54. package/dist/drivers/log.js.map +1 -1
  55. package/dist/drivers/ls.cjs +16 -19
  56. package/dist/drivers/ls.cjs.map +1 -1
  57. package/dist/drivers/ls.d.ts +73 -76
  58. package/dist/drivers/ls.js +16 -17
  59. package/dist/drivers/ls.js.map +1 -1
  60. package/dist/drivers/pframe/column_filter.d.ts +19 -15
  61. package/dist/drivers/pframe/data_info.cjs +201 -252
  62. package/dist/drivers/pframe/data_info.cjs.map +1 -1
  63. package/dist/drivers/pframe/data_info.d.ts +84 -109
  64. package/dist/drivers/pframe/data_info.js +201 -250
  65. package/dist/drivers/pframe/data_info.js.map +1 -1
  66. package/dist/drivers/pframe/data_types.cjs +38 -63
  67. package/dist/drivers/pframe/data_types.cjs.map +1 -1
  68. package/dist/drivers/pframe/data_types.d.ts +91 -93
  69. package/dist/drivers/pframe/data_types.js +38 -61
  70. package/dist/drivers/pframe/data_types.js.map +1 -1
  71. package/dist/drivers/pframe/driver.cjs +7 -0
  72. package/dist/drivers/pframe/driver.cjs.map +1 -0
  73. package/dist/drivers/pframe/driver.d.ts +50 -45
  74. package/dist/drivers/pframe/driver.js +6 -0
  75. package/dist/drivers/pframe/driver.js.map +1 -0
  76. package/dist/drivers/pframe/filter_spec.d.ts +127 -123
  77. package/dist/drivers/pframe/find_columns.d.ts +21 -17
  78. package/dist/drivers/pframe/index.cjs +15 -0
  79. package/dist/drivers/pframe/index.d.ts +23 -16
  80. package/dist/drivers/pframe/index.js +15 -0
  81. package/dist/drivers/pframe/linker_columns.cjs +184 -238
  82. package/dist/drivers/pframe/linker_columns.cjs.map +1 -1
  83. package/dist/drivers/pframe/linker_columns.d.ts +45 -38
  84. package/dist/drivers/pframe/linker_columns.js +184 -236
  85. package/dist/drivers/pframe/linker_columns.js.map +1 -1
  86. package/dist/drivers/pframe/pframe.d.ts +26 -21
  87. package/dist/drivers/pframe/query/index.cjs +1 -0
  88. package/dist/drivers/pframe/query/index.d.ts +3 -4
  89. package/dist/drivers/pframe/query/index.js +1 -0
  90. package/dist/drivers/pframe/query/query_common.d.ts +205 -247
  91. package/dist/drivers/pframe/query/query_data.d.ts +25 -23
  92. package/dist/drivers/pframe/query/query_spec.d.ts +30 -29
  93. package/dist/drivers/pframe/query/utils.cjs +164 -183
  94. package/dist/drivers/pframe/query/utils.cjs.map +1 -1
  95. package/dist/drivers/pframe/query/utils.d.ts +13 -12
  96. package/dist/drivers/pframe/query/utils.js +164 -181
  97. package/dist/drivers/pframe/query/utils.js.map +1 -1
  98. package/dist/drivers/pframe/spec/anchored.cjs +178 -216
  99. package/dist/drivers/pframe/spec/anchored.cjs.map +1 -1
  100. package/dist/drivers/pframe/spec/anchored.d.ts +53 -49
  101. package/dist/drivers/pframe/spec/anchored.js +176 -214
  102. package/dist/drivers/pframe/spec/anchored.js.map +1 -1
  103. package/dist/drivers/pframe/spec/filtered_column.cjs +8 -7
  104. package/dist/drivers/pframe/spec/filtered_column.cjs.map +1 -1
  105. package/dist/drivers/pframe/spec/filtered_column.d.ts +20 -17
  106. package/dist/drivers/pframe/spec/filtered_column.js +8 -6
  107. package/dist/drivers/pframe/spec/filtered_column.js.map +1 -1
  108. package/dist/drivers/pframe/spec/ids.cjs +16 -14
  109. package/dist/drivers/pframe/spec/ids.cjs.map +1 -1
  110. package/dist/drivers/pframe/spec/ids.d.ts +13 -8
  111. package/dist/drivers/pframe/spec/ids.js +14 -12
  112. package/dist/drivers/pframe/spec/ids.js.map +1 -1
  113. package/dist/drivers/pframe/spec/index.cjs +6 -0
  114. package/dist/drivers/pframe/spec/index.d.ts +6 -7
  115. package/dist/drivers/pframe/spec/index.js +6 -0
  116. package/dist/drivers/pframe/spec/native_id.cjs +16 -16
  117. package/dist/drivers/pframe/spec/native_id.cjs.map +1 -1
  118. package/dist/drivers/pframe/spec/native_id.d.ts +9 -4
  119. package/dist/drivers/pframe/spec/native_id.js +13 -13
  120. package/dist/drivers/pframe/spec/native_id.js.map +1 -1
  121. package/dist/drivers/pframe/spec/selectors.cjs +72 -112
  122. package/dist/drivers/pframe/spec/selectors.cjs.map +1 -1
  123. package/dist/drivers/pframe/spec/selectors.d.ts +99 -94
  124. package/dist/drivers/pframe/spec/selectors.js +72 -110
  125. package/dist/drivers/pframe/spec/selectors.js.map +1 -1
  126. package/dist/drivers/pframe/spec/spec.cjs +282 -324
  127. package/dist/drivers/pframe/spec/spec.cjs.map +1 -1
  128. package/dist/drivers/pframe/spec/spec.d.ts +263 -272
  129. package/dist/drivers/pframe/spec/spec.js +281 -322
  130. package/dist/drivers/pframe/spec/spec.js.map +1 -1
  131. package/dist/drivers/pframe/table.d.ts +28 -24
  132. package/dist/drivers/pframe/table_calculate.cjs +117 -147
  133. package/dist/drivers/pframe/table_calculate.cjs.map +1 -1
  134. package/dist/drivers/pframe/table_calculate.d.ts +219 -220
  135. package/dist/drivers/pframe/table_calculate.js +117 -145
  136. package/dist/drivers/pframe/table_calculate.js.map +1 -1
  137. package/dist/drivers/pframe/table_common.cjs +13 -14
  138. package/dist/drivers/pframe/table_common.cjs.map +1 -1
  139. package/dist/drivers/pframe/table_common.d.ts +24 -19
  140. package/dist/drivers/pframe/table_common.js +13 -13
  141. package/dist/drivers/pframe/table_common.js.map +1 -1
  142. package/dist/drivers/pframe/unique_values.d.ts +23 -18
  143. package/dist/drivers/upload.d.ts +21 -18
  144. package/dist/drivers/urls.cjs +5 -6
  145. package/dist/drivers/urls.cjs.map +1 -1
  146. package/dist/drivers/urls.d.ts +12 -9
  147. package/dist/drivers/urls.js +5 -5
  148. package/dist/drivers/urls.js.map +1 -1
  149. package/dist/errors.cjs +65 -86
  150. package/dist/errors.cjs.map +1 -1
  151. package/dist/errors.d.ts +36 -33
  152. package/dist/errors.js +65 -85
  153. package/dist/errors.js.map +1 -1
  154. package/dist/flags/block_flags.cjs +7 -6
  155. package/dist/flags/block_flags.cjs.map +1 -1
  156. package/dist/flags/block_flags.d.ts +12 -8
  157. package/dist/flags/block_flags.js +7 -5
  158. package/dist/flags/block_flags.js.map +1 -1
  159. package/dist/flags/flag_utils.cjs +69 -108
  160. package/dist/flags/flag_utils.cjs.map +1 -1
  161. package/dist/flags/flag_utils.d.ts +40 -42
  162. package/dist/flags/flag_utils.js +70 -107
  163. package/dist/flags/flag_utils.js.map +1 -1
  164. package/dist/flags/type_utils.d.ts +12 -11
  165. package/dist/httpAuth.cjs +16 -20
  166. package/dist/httpAuth.cjs.map +1 -1
  167. package/dist/httpAuth.d.ts +10 -7
  168. package/dist/httpAuth.js +16 -19
  169. package/dist/httpAuth.js.map +1 -1
  170. package/dist/index.cjs +176 -179
  171. package/dist/index.d.ts +58 -20
  172. package/dist/index.js +37 -34
  173. package/dist/json.cjs +10 -8
  174. package/dist/json.cjs.map +1 -1
  175. package/dist/json.d.ts +18 -18
  176. package/dist/json.js +8 -6
  177. package/dist/json.js.map +1 -1
  178. package/dist/navigation.cjs +3 -2
  179. package/dist/navigation.cjs.map +1 -1
  180. package/dist/navigation.d.ts +18 -21
  181. package/dist/navigation.js +3 -1
  182. package/dist/navigation.js.map +1 -1
  183. package/dist/plid.cjs +16 -20
  184. package/dist/plid.cjs.map +1 -1
  185. package/dist/plid.d.ts +11 -7
  186. package/dist/plid.js +15 -18
  187. package/dist/plid.js.map +1 -1
  188. package/dist/pool/entry.d.ts +11 -11
  189. package/dist/pool/index.d.ts +3 -4
  190. package/dist/pool/query.cjs +21 -43
  191. package/dist/pool/query.cjs.map +1 -1
  192. package/dist/pool/query.d.ts +25 -20
  193. package/dist/pool/query.js +20 -40
  194. package/dist/pool/query.js.map +1 -1
  195. package/dist/pool/spec.cjs +40 -47
  196. package/dist/pool/spec.cjs.map +1 -1
  197. package/dist/pool/spec.d.ts +33 -31
  198. package/dist/pool/spec.js +40 -45
  199. package/dist/pool/spec.js.map +1 -1
  200. package/dist/ref.cjs +51 -71
  201. package/dist/ref.cjs.map +1 -1
  202. package/dist/ref.d.ts +36 -33
  203. package/dist/ref.js +50 -69
  204. package/dist/ref.js.map +1 -1
  205. package/dist/utag.d.ts +18 -14
  206. package/dist/util.cjs +8 -7
  207. package/dist/util.cjs.map +1 -1
  208. package/dist/util.d.ts +5 -2
  209. package/dist/util.js +8 -6
  210. package/dist/util.js.map +1 -1
  211. package/dist/value_or_error.cjs +7 -3
  212. package/dist/value_or_error.cjs.map +1 -1
  213. package/dist/value_or_error.d.ts +9 -6
  214. package/dist/value_or_error.js +7 -2
  215. package/dist/value_or_error.js.map +1 -1
  216. package/package.json +6 -6
  217. package/src/flags/block_flags.ts +2 -1
  218. package/src/flags/flag_utils.ts +0 -22
  219. package/dist/author_marker.d.ts.map +0 -1
  220. package/dist/base32_encode.d.ts +0 -8
  221. package/dist/base32_encode.d.ts.map +0 -1
  222. package/dist/base64.d.ts.map +0 -1
  223. package/dist/block_state.d.ts.map +0 -1
  224. package/dist/bmodel/block_config.d.ts.map +0 -1
  225. package/dist/bmodel/code.d.ts.map +0 -1
  226. package/dist/bmodel/container.d.ts.map +0 -1
  227. package/dist/bmodel/index.d.ts.map +0 -1
  228. package/dist/bmodel/normalization.d.ts.map +0 -1
  229. package/dist/bmodel/types.d.ts.map +0 -1
  230. package/dist/branding.d.ts.map +0 -1
  231. package/dist/common_types.d.ts.map +0 -1
  232. package/dist/driver_kit.d.ts.map +0 -1
  233. package/dist/drivers/ChunkedStreamReader.d.ts.map +0 -1
  234. package/dist/drivers/blob.d.ts.map +0 -1
  235. package/dist/drivers/index.d.ts.map +0 -1
  236. package/dist/drivers/interfaces.d.ts.map +0 -1
  237. package/dist/drivers/log.d.ts.map +0 -1
  238. package/dist/drivers/ls.d.ts.map +0 -1
  239. package/dist/drivers/pframe/column_filter.d.ts.map +0 -1
  240. package/dist/drivers/pframe/data_info.d.ts.map +0 -1
  241. package/dist/drivers/pframe/data_types.d.ts.map +0 -1
  242. package/dist/drivers/pframe/driver.d.ts.map +0 -1
  243. package/dist/drivers/pframe/filter_spec.d.ts.map +0 -1
  244. package/dist/drivers/pframe/find_columns.d.ts.map +0 -1
  245. package/dist/drivers/pframe/index.d.ts.map +0 -1
  246. package/dist/drivers/pframe/linker_columns.d.ts.map +0 -1
  247. package/dist/drivers/pframe/pframe.d.ts.map +0 -1
  248. package/dist/drivers/pframe/query/index.d.ts.map +0 -1
  249. package/dist/drivers/pframe/query/query_common.d.ts.map +0 -1
  250. package/dist/drivers/pframe/query/query_data.d.ts.map +0 -1
  251. package/dist/drivers/pframe/query/query_spec.d.ts.map +0 -1
  252. package/dist/drivers/pframe/query/utils.d.ts.map +0 -1
  253. package/dist/drivers/pframe/spec/anchored.d.ts.map +0 -1
  254. package/dist/drivers/pframe/spec/filtered_column.d.ts.map +0 -1
  255. package/dist/drivers/pframe/spec/ids.d.ts.map +0 -1
  256. package/dist/drivers/pframe/spec/index.d.ts.map +0 -1
  257. package/dist/drivers/pframe/spec/native_id.d.ts.map +0 -1
  258. package/dist/drivers/pframe/spec/selectors.d.ts.map +0 -1
  259. package/dist/drivers/pframe/spec/spec.d.ts.map +0 -1
  260. package/dist/drivers/pframe/table.d.ts.map +0 -1
  261. package/dist/drivers/pframe/table_calculate.d.ts.map +0 -1
  262. package/dist/drivers/pframe/table_common.d.ts.map +0 -1
  263. package/dist/drivers/pframe/type_util.d.ts +0 -5
  264. package/dist/drivers/pframe/type_util.d.ts.map +0 -1
  265. package/dist/drivers/pframe/unique_values.d.ts.map +0 -1
  266. package/dist/drivers/upload.d.ts.map +0 -1
  267. package/dist/drivers/urls.d.ts.map +0 -1
  268. package/dist/errors.d.ts.map +0 -1
  269. package/dist/flags/block_flags.d.ts.map +0 -1
  270. package/dist/flags/flag_utils.d.ts.map +0 -1
  271. package/dist/flags/index.d.ts +0 -4
  272. package/dist/flags/index.d.ts.map +0 -1
  273. package/dist/flags/type_utils.d.ts.map +0 -1
  274. package/dist/httpAuth.d.ts.map +0 -1
  275. package/dist/index.cjs.map +0 -1
  276. package/dist/index.d.ts.map +0 -1
  277. package/dist/index.js.map +0 -1
  278. package/dist/json.d.ts.map +0 -1
  279. package/dist/navigation.d.ts.map +0 -1
  280. package/dist/plid.d.ts.map +0 -1
  281. package/dist/pool/entry.d.ts.map +0 -1
  282. package/dist/pool/index.d.ts.map +0 -1
  283. package/dist/pool/query.d.ts.map +0 -1
  284. package/dist/pool/spec.d.ts.map +0 -1
  285. package/dist/ref.d.ts.map +0 -1
  286. package/dist/utag.d.ts.map +0 -1
  287. package/dist/util.d.ts.map +0 -1
  288. package/dist/value_or_error.d.ts.map +0 -1
@@ -1,160 +1,132 @@
1
- import { assertNever } from '../../util.js';
2
- import { getAxisId } from './spec/spec.js';
3
- import { canonicalizeJson } from '../../json.js';
4
- import { mapSpecQueryColumns } from './query/utils.js';
1
+ import { assertNever } from "../../util.js";
2
+ import { canonicalizeJson } from "../../json.js";
3
+ import { getAxisId } from "./spec/spec.js";
4
+ import { mapSpecQueryColumns } from "./query/utils.js";
5
+ import "./query/index.js";
5
6
 
7
+ //#region src/drivers/pframe/table_calculate.ts
6
8
  function mapPTableDef(def, cb) {
7
- return { ...def, src: mapJoinEntry(def.src, cb) };
9
+ return {
10
+ ...def,
11
+ src: mapJoinEntry(def.src, cb)
12
+ };
8
13
  }
9
14
  function sortPTableDef(def) {
10
- function sortFilters(filters) {
11
- return filters.toSorted((lhs, rhs) => {
12
- if (lhs.column.type === "axis" && rhs.column.type === "axis") {
13
- const lhsId = canonicalizeJson(getAxisId(lhs.column.id));
14
- const rhsId = canonicalizeJson(getAxisId(rhs.column.id));
15
- return lhsId < rhsId ? -1 : 1;
16
- }
17
- else if (lhs.column.type === "column" && rhs.column.type === "column") {
18
- return lhs.column.id < rhs.column.id ? -1 : 1;
19
- }
20
- else {
21
- return lhs.column.type === "axis" ? -1 : 1;
22
- }
23
- });
24
- }
25
- return {
26
- src: sortJoinEntry(def.src),
27
- partitionFilters: sortFilters(def.partitionFilters),
28
- filters: sortFilters(def.filters),
29
- sorting: def.sorting,
30
- };
15
+ function sortFilters(filters) {
16
+ return filters.toSorted((lhs, rhs) => {
17
+ if (lhs.column.type === "axis" && rhs.column.type === "axis") return canonicalizeJson(getAxisId(lhs.column.id)) < canonicalizeJson(getAxisId(rhs.column.id)) ? -1 : 1;
18
+ else if (lhs.column.type === "column" && rhs.column.type === "column") return lhs.column.id < rhs.column.id ? -1 : 1;
19
+ else return lhs.column.type === "axis" ? -1 : 1;
20
+ });
21
+ }
22
+ return {
23
+ src: sortJoinEntry(def.src),
24
+ partitionFilters: sortFilters(def.partitionFilters),
25
+ filters: sortFilters(def.filters),
26
+ sorting: def.sorting
27
+ };
31
28
  }
32
29
  function mapPTableDefV2(def, cb) {
33
- return { query: mapSpecQueryColumns(def.query, cb) };
30
+ return { query: mapSpecQueryColumns(def.query, cb) };
34
31
  }
35
32
  function mapJoinEntry(entry, cb) {
36
- switch (entry.type) {
37
- case "column":
38
- return {
39
- type: "column",
40
- column: cb(entry.column),
41
- };
42
- case "slicedColumn":
43
- return {
44
- type: "slicedColumn",
45
- column: cb(entry.column),
46
- newId: entry.newId,
47
- axisFilters: entry.axisFilters,
48
- };
49
- case "artificialColumn":
50
- return {
51
- type: "artificialColumn",
52
- column: cb(entry.column),
53
- newId: entry.newId,
54
- axesIndices: entry.axesIndices,
55
- };
56
- case "inlineColumn":
57
- return entry;
58
- case "inner":
59
- case "full":
60
- return {
61
- type: entry.type,
62
- entries: entry.entries.map((col) => mapJoinEntry(col, cb)),
63
- };
64
- case "outer":
65
- return {
66
- type: "outer",
67
- primary: mapJoinEntry(entry.primary, cb),
68
- secondary: entry.secondary.map((col) => mapJoinEntry(col, cb)),
69
- };
70
- default:
71
- assertNever(entry);
72
- }
33
+ switch (entry.type) {
34
+ case "column": return {
35
+ type: "column",
36
+ column: cb(entry.column)
37
+ };
38
+ case "slicedColumn": return {
39
+ type: "slicedColumn",
40
+ column: cb(entry.column),
41
+ newId: entry.newId,
42
+ axisFilters: entry.axisFilters
43
+ };
44
+ case "artificialColumn": return {
45
+ type: "artificialColumn",
46
+ column: cb(entry.column),
47
+ newId: entry.newId,
48
+ axesIndices: entry.axesIndices
49
+ };
50
+ case "inlineColumn": return entry;
51
+ case "inner":
52
+ case "full": return {
53
+ type: entry.type,
54
+ entries: entry.entries.map((col) => mapJoinEntry(col, cb))
55
+ };
56
+ case "outer": return {
57
+ type: "outer",
58
+ primary: mapJoinEntry(entry.primary, cb),
59
+ secondary: entry.secondary.map((col) => mapJoinEntry(col, cb))
60
+ };
61
+ default: assertNever(entry);
62
+ }
73
63
  }
74
64
  function cmpJoinEntries(lhs, rhs) {
75
- if (lhs.type !== rhs.type) {
76
- return lhs.type < rhs.type ? -1 : 1;
77
- }
78
- const type = lhs.type;
79
- switch (type) {
80
- case "column":
81
- return lhs.column < rhs.column ? -1 : 1;
82
- case "slicedColumn":
83
- case "artificialColumn":
84
- return lhs.newId < rhs.newId ? -1 : 1;
85
- case "inlineColumn": {
86
- return lhs.column.id < rhs.column.id ? -1 : 1;
87
- }
88
- case "inner":
89
- case "full": {
90
- const rhsInner = rhs;
91
- if (lhs.entries.length !== rhsInner.entries.length) {
92
- return lhs.entries.length - rhsInner.entries.length;
93
- }
94
- for (let i = 0; i < lhs.entries.length; i++) {
95
- const cmp = cmpJoinEntries(lhs.entries[i], rhsInner.entries[i]);
96
- if (cmp !== 0) {
97
- return cmp;
98
- }
99
- }
100
- return 0;
101
- }
102
- case "outer": {
103
- const rhsOuter = rhs;
104
- const cmp = cmpJoinEntries(lhs.primary, rhsOuter.primary);
105
- if (cmp !== 0) {
106
- return cmp;
107
- }
108
- if (lhs.secondary.length !== rhsOuter.secondary.length) {
109
- return lhs.secondary.length - rhsOuter.secondary.length;
110
- }
111
- for (let i = 0; i < lhs.secondary.length; i++) {
112
- const cmp = cmpJoinEntries(lhs.secondary[i], rhsOuter.secondary[i]);
113
- if (cmp !== 0) {
114
- return cmp;
115
- }
116
- }
117
- return 0;
118
- }
119
- default:
120
- assertNever(type);
121
- }
65
+ if (lhs.type !== rhs.type) return lhs.type < rhs.type ? -1 : 1;
66
+ const type = lhs.type;
67
+ switch (type) {
68
+ case "column": return lhs.column < rhs.column ? -1 : 1;
69
+ case "slicedColumn":
70
+ case "artificialColumn": return lhs.newId < rhs.newId ? -1 : 1;
71
+ case "inlineColumn": return lhs.column.id < rhs.column.id ? -1 : 1;
72
+ case "inner":
73
+ case "full": {
74
+ const rhsInner = rhs;
75
+ if (lhs.entries.length !== rhsInner.entries.length) return lhs.entries.length - rhsInner.entries.length;
76
+ for (let i = 0; i < lhs.entries.length; i++) {
77
+ const cmp = cmpJoinEntries(lhs.entries[i], rhsInner.entries[i]);
78
+ if (cmp !== 0) return cmp;
79
+ }
80
+ return 0;
81
+ }
82
+ case "outer": {
83
+ const rhsOuter = rhs;
84
+ const cmp = cmpJoinEntries(lhs.primary, rhsOuter.primary);
85
+ if (cmp !== 0) return cmp;
86
+ if (lhs.secondary.length !== rhsOuter.secondary.length) return lhs.secondary.length - rhsOuter.secondary.length;
87
+ for (let i = 0; i < lhs.secondary.length; i++) {
88
+ const cmp = cmpJoinEntries(lhs.secondary[i], rhsOuter.secondary[i]);
89
+ if (cmp !== 0) return cmp;
90
+ }
91
+ return 0;
92
+ }
93
+ default: assertNever(type);
94
+ }
122
95
  }
123
96
  function sortJoinEntry(entry) {
124
- switch (entry.type) {
125
- case "column":
126
- case "slicedColumn":
127
- case "inlineColumn":
128
- return entry;
129
- case "artificialColumn": {
130
- const sortedAxesIndices = entry.axesIndices.toSorted((lhs, rhs) => lhs - rhs);
131
- return {
132
- ...entry,
133
- axesIndices: sortedAxesIndices,
134
- };
135
- }
136
- case "inner":
137
- case "full": {
138
- const sortedEntries = entry.entries.map(sortJoinEntry);
139
- sortedEntries.sort(cmpJoinEntries);
140
- return {
141
- ...entry,
142
- entries: sortedEntries,
143
- };
144
- }
145
- case "outer": {
146
- const sortedSecondary = entry.secondary.map(sortJoinEntry);
147
- sortedSecondary.sort(cmpJoinEntries);
148
- return {
149
- ...entry,
150
- primary: sortJoinEntry(entry.primary),
151
- secondary: sortedSecondary,
152
- };
153
- }
154
- default:
155
- assertNever(entry);
156
- }
97
+ switch (entry.type) {
98
+ case "column":
99
+ case "slicedColumn":
100
+ case "inlineColumn": return entry;
101
+ case "artificialColumn": {
102
+ const sortedAxesIndices = entry.axesIndices.toSorted((lhs, rhs) => lhs - rhs);
103
+ return {
104
+ ...entry,
105
+ axesIndices: sortedAxesIndices
106
+ };
107
+ }
108
+ case "inner":
109
+ case "full": {
110
+ const sortedEntries = entry.entries.map(sortJoinEntry);
111
+ sortedEntries.sort(cmpJoinEntries);
112
+ return {
113
+ ...entry,
114
+ entries: sortedEntries
115
+ };
116
+ }
117
+ case "outer": {
118
+ const sortedSecondary = entry.secondary.map(sortJoinEntry);
119
+ sortedSecondary.sort(cmpJoinEntries);
120
+ return {
121
+ ...entry,
122
+ primary: sortJoinEntry(entry.primary),
123
+ secondary: sortedSecondary
124
+ };
125
+ }
126
+ default: assertNever(entry);
127
+ }
157
128
  }
158
129
 
130
+ //#endregion
159
131
  export { mapJoinEntry, mapPTableDef, mapPTableDefV2, sortJoinEntry, sortPTableDef };
160
- //# sourceMappingURL=table_calculate.js.map
132
+ //# sourceMappingURL=table_calculate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table_calculate.js","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"],"names":[],"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 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,19 +1,18 @@
1
- 'use strict';
2
1
 
2
+ //#region src/drivers/pframe/table_common.ts
3
3
  function getPTableColumnId(spec) {
4
- switch (spec.type) {
5
- case "axis":
6
- return {
7
- type: "axis",
8
- id: spec.id,
9
- };
10
- case "column":
11
- return {
12
- type: "column",
13
- id: spec.id,
14
- };
15
- }
4
+ switch (spec.type) {
5
+ case "axis": return {
6
+ type: "axis",
7
+ id: spec.id
8
+ };
9
+ case "column": return {
10
+ type: "column",
11
+ id: spec.id
12
+ };
13
+ }
16
14
  }
17
15
 
16
+ //#endregion
18
17
  exports.getPTableColumnId = getPTableColumnId;
19
- //# sourceMappingURL=table_common.cjs.map
18
+ //# sourceMappingURL=table_common.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"table_common.cjs","sources":["../../../src/drivers/pframe/table_common.ts"],"sourcesContent":["import type { PObjectId } from \"../../pool\";\nimport type { AxisId, AxisSpec, PColumnSpec } from \"./spec/spec\";\n\nexport type PTableColumnSpecAxis = {\n type: \"axis\";\n id: AxisId;\n spec: AxisSpec;\n};\n\nexport type PTableColumnSpecColumn = {\n type: \"column\";\n id: PObjectId;\n spec: PColumnSpec;\n};\n\n/** Unified spec object for axes and columns */\nexport type PTableColumnSpec = PTableColumnSpecAxis | PTableColumnSpecColumn;\n\nexport type PTableColumnIdAxis = {\n type: \"axis\";\n id: AxisId;\n};\n\nexport type PTableColumnIdColumn = {\n type: \"column\";\n id: PObjectId;\n};\n\n/** Unified PTable column identifier */\nexport type PTableColumnId = PTableColumnIdAxis | PTableColumnIdColumn;\n\nexport function getPTableColumnId(spec: PTableColumnSpec): PTableColumnId {\n switch (spec.type) {\n case \"axis\":\n return {\n type: \"axis\",\n id: spec.id,\n };\n case \"column\":\n return {\n type: \"column\",\n id: spec.id,\n };\n }\n}\n"],"names":[],"mappings":";;AA+BM,SAAU,iBAAiB,CAAC,IAAsB,EAAA;AACtD,IAAA,QAAQ,IAAI,CAAC,IAAI;AACf,QAAA,KAAK,MAAM;YACT,OAAO;AACL,gBAAA,IAAI,EAAE,MAAM;gBACZ,EAAE,EAAE,IAAI,CAAC,EAAE;aACZ;AACH,QAAA,KAAK,QAAQ;YACX,OAAO;AACL,gBAAA,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,IAAI,CAAC,EAAE;aACZ;;AAEP;;;;"}
1
+ {"version":3,"file":"table_common.cjs","names":[],"sources":["../../../src/drivers/pframe/table_common.ts"],"sourcesContent":["import type { PObjectId } from \"../../pool\";\nimport type { AxisId, AxisSpec, PColumnSpec } from \"./spec/spec\";\n\nexport type PTableColumnSpecAxis = {\n type: \"axis\";\n id: AxisId;\n spec: AxisSpec;\n};\n\nexport type PTableColumnSpecColumn = {\n type: \"column\";\n id: PObjectId;\n spec: PColumnSpec;\n};\n\n/** Unified spec object for axes and columns */\nexport type PTableColumnSpec = PTableColumnSpecAxis | PTableColumnSpecColumn;\n\nexport type PTableColumnIdAxis = {\n type: \"axis\";\n id: AxisId;\n};\n\nexport type PTableColumnIdColumn = {\n type: \"column\";\n id: PObjectId;\n};\n\n/** Unified PTable column identifier */\nexport type PTableColumnId = PTableColumnIdAxis | PTableColumnIdColumn;\n\nexport function getPTableColumnId(spec: PTableColumnSpec): PTableColumnId {\n switch (spec.type) {\n case \"axis\":\n return {\n type: \"axis\",\n id: spec.id,\n };\n case \"column\":\n return {\n type: \"column\",\n id: spec.id,\n };\n }\n}\n"],"mappings":";;AA+BA,SAAgB,kBAAkB,MAAwC;AACxE,SAAQ,KAAK,MAAb;EACE,KAAK,OACH,QAAO;GACL,MAAM;GACN,IAAI,KAAK;GACV;EACH,KAAK,SACH,QAAO;GACL,MAAM;GACN,IAAI,KAAK;GACV"}
@@ -1,26 +1,31 @@
1
- import type { PObjectId } from "../../pool";
2
- import type { AxisId, AxisSpec, PColumnSpec } from "./spec/spec";
3
- export type PTableColumnSpecAxis = {
4
- type: "axis";
5
- id: AxisId;
6
- spec: AxisSpec;
1
+ import { PObjectId } from "../../pool/spec.js";
2
+ import "../../pool/index.js";
3
+ import { AxisId, AxisSpec, PColumnSpec } from "./spec/spec.js";
4
+
5
+ //#region src/drivers/pframe/table_common.d.ts
6
+ type PTableColumnSpecAxis = {
7
+ type: "axis";
8
+ id: AxisId;
9
+ spec: AxisSpec;
7
10
  };
8
- export type PTableColumnSpecColumn = {
9
- type: "column";
10
- id: PObjectId;
11
- spec: PColumnSpec;
11
+ type PTableColumnSpecColumn = {
12
+ type: "column";
13
+ id: PObjectId;
14
+ spec: PColumnSpec;
12
15
  };
13
16
  /** Unified spec object for axes and columns */
14
- export type PTableColumnSpec = PTableColumnSpecAxis | PTableColumnSpecColumn;
15
- export type PTableColumnIdAxis = {
16
- type: "axis";
17
- id: AxisId;
17
+ type PTableColumnSpec = PTableColumnSpecAxis | PTableColumnSpecColumn;
18
+ type PTableColumnIdAxis = {
19
+ type: "axis";
20
+ id: AxisId;
18
21
  };
19
- export type PTableColumnIdColumn = {
20
- type: "column";
21
- id: PObjectId;
22
+ type PTableColumnIdColumn = {
23
+ type: "column";
24
+ id: PObjectId;
22
25
  };
23
26
  /** Unified PTable column identifier */
24
- export type PTableColumnId = PTableColumnIdAxis | PTableColumnIdColumn;
25
- export declare function getPTableColumnId(spec: PTableColumnSpec): PTableColumnId;
27
+ type PTableColumnId = PTableColumnIdAxis | PTableColumnIdColumn;
28
+ declare function getPTableColumnId(spec: PTableColumnSpec): PTableColumnId;
29
+ //#endregion
30
+ export { PTableColumnId, PTableColumnIdAxis, PTableColumnIdColumn, PTableColumnSpec, PTableColumnSpecAxis, PTableColumnSpecColumn, getPTableColumnId };
26
31
  //# sourceMappingURL=table_common.d.ts.map
@@ -1,17 +1,17 @@
1
+ //#region src/drivers/pframe/table_common.ts
1
2
  function getPTableColumnId(spec) {
2
- switch (spec.type) {
3
- case "axis":
4
- return {
5
- type: "axis",
6
- id: spec.id,
7
- };
8
- case "column":
9
- return {
10
- type: "column",
11
- id: spec.id,
12
- };
13
- }
3
+ switch (spec.type) {
4
+ case "axis": return {
5
+ type: "axis",
6
+ id: spec.id
7
+ };
8
+ case "column": return {
9
+ type: "column",
10
+ id: spec.id
11
+ };
12
+ }
14
13
  }
15
14
 
15
+ //#endregion
16
16
  export { getPTableColumnId };
17
- //# sourceMappingURL=table_common.js.map
17
+ //# sourceMappingURL=table_common.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table_common.js","sources":["../../../src/drivers/pframe/table_common.ts"],"sourcesContent":["import type { PObjectId } from \"../../pool\";\nimport type { AxisId, AxisSpec, PColumnSpec } from \"./spec/spec\";\n\nexport type PTableColumnSpecAxis = {\n type: \"axis\";\n id: AxisId;\n spec: AxisSpec;\n};\n\nexport type PTableColumnSpecColumn = {\n type: \"column\";\n id: PObjectId;\n spec: PColumnSpec;\n};\n\n/** Unified spec object for axes and columns */\nexport type PTableColumnSpec = PTableColumnSpecAxis | PTableColumnSpecColumn;\n\nexport type PTableColumnIdAxis = {\n type: \"axis\";\n id: AxisId;\n};\n\nexport type PTableColumnIdColumn = {\n type: \"column\";\n id: PObjectId;\n};\n\n/** Unified PTable column identifier */\nexport type PTableColumnId = PTableColumnIdAxis | PTableColumnIdColumn;\n\nexport function getPTableColumnId(spec: PTableColumnSpec): PTableColumnId {\n switch (spec.type) {\n case \"axis\":\n return {\n type: \"axis\",\n id: spec.id,\n };\n case \"column\":\n return {\n type: \"column\",\n id: spec.id,\n };\n }\n}\n"],"names":[],"mappings":"AA+BM,SAAU,iBAAiB,CAAC,IAAsB,EAAA;AACtD,IAAA,QAAQ,IAAI,CAAC,IAAI;AACf,QAAA,KAAK,MAAM;YACT,OAAO;AACL,gBAAA,IAAI,EAAE,MAAM;gBACZ,EAAE,EAAE,IAAI,CAAC,EAAE;aACZ;AACH,QAAA,KAAK,QAAQ;YACX,OAAO;AACL,gBAAA,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,IAAI,CAAC,EAAE;aACZ;;AAEP;;;;"}
1
+ {"version":3,"file":"table_common.js","names":[],"sources":["../../../src/drivers/pframe/table_common.ts"],"sourcesContent":["import type { PObjectId } from \"../../pool\";\nimport type { AxisId, AxisSpec, PColumnSpec } from \"./spec/spec\";\n\nexport type PTableColumnSpecAxis = {\n type: \"axis\";\n id: AxisId;\n spec: AxisSpec;\n};\n\nexport type PTableColumnSpecColumn = {\n type: \"column\";\n id: PObjectId;\n spec: PColumnSpec;\n};\n\n/** Unified spec object for axes and columns */\nexport type PTableColumnSpec = PTableColumnSpecAxis | PTableColumnSpecColumn;\n\nexport type PTableColumnIdAxis = {\n type: \"axis\";\n id: AxisId;\n};\n\nexport type PTableColumnIdColumn = {\n type: \"column\";\n id: PObjectId;\n};\n\n/** Unified PTable column identifier */\nexport type PTableColumnId = PTableColumnIdAxis | PTableColumnIdColumn;\n\nexport function getPTableColumnId(spec: PTableColumnSpec): PTableColumnId {\n switch (spec.type) {\n case \"axis\":\n return {\n type: \"axis\",\n id: spec.id,\n };\n case \"column\":\n return {\n type: \"column\",\n id: spec.id,\n };\n }\n}\n"],"mappings":";AA+BA,SAAgB,kBAAkB,MAAwC;AACxE,SAAQ,KAAK,MAAb;EACE,KAAK,OACH,QAAO;GACL,MAAM;GACN,IAAI,KAAK;GACV;EACH,KAAK,SACH,QAAO;GACL,MAAM;GACN,IAAI,KAAK;GACV"}
@@ -1,22 +1,27 @@
1
- import type { AxisId } from "./spec/spec";
2
- import type { PTableRecordFilter } from "./table_calculate";
3
- import type { PTableVector } from "./data_types";
4
- import type { PObjectId } from "../../pool";
1
+ import { PObjectId } from "../../pool/spec.js";
2
+ import "../../pool/index.js";
3
+ import { AxisId } from "./spec/spec.js";
4
+ import { PTableVector } from "./data_types.js";
5
+ import { PTableRecordFilter } from "./table_calculate.js";
6
+
7
+ //#region src/drivers/pframe/unique_values.d.ts
5
8
  /** Calculate set of unique values for a specific axis for the filtered set of records */
6
- export interface UniqueValuesRequest {
7
- /** Target axis id */
8
- readonly columnId: PObjectId;
9
- /** Target axis id, if not specified calculates unique column values */
10
- readonly axis?: AxisId;
11
- /** Filters to apply before calculating unique values */
12
- readonly filters: PTableRecordFilter[];
13
- /** Max number of values to return, if reached response will contain overflow flag */
14
- readonly limit: number;
9
+ interface UniqueValuesRequest {
10
+ /** Target axis id */
11
+ readonly columnId: PObjectId;
12
+ /** Target axis id, if not specified calculates unique column values */
13
+ readonly axis?: AxisId;
14
+ /** Filters to apply before calculating unique values */
15
+ readonly filters: PTableRecordFilter[];
16
+ /** Max number of values to return, if reached response will contain overflow flag */
17
+ readonly limit: number;
15
18
  }
16
- export interface UniqueValuesResponse {
17
- /** Unique values */
18
- readonly values: PTableVector;
19
- /** True if limit was reached and response contain non-exhaustive list of values. */
20
- readonly overflow: boolean;
19
+ interface UniqueValuesResponse {
20
+ /** Unique values */
21
+ readonly values: PTableVector;
22
+ /** True if limit was reached and response contain non-exhaustive list of values. */
23
+ readonly overflow: boolean;
21
24
  }
25
+ //#endregion
26
+ export { UniqueValuesRequest, UniqueValuesResponse };
22
27
  //# sourceMappingURL=unique_values.d.ts.map
@@ -1,22 +1,25 @@
1
- export interface ImportProgress {
2
- done: boolean;
3
- /** Status of indexing/uploading got from platforma gRPC. */
4
- status?: ImportStatus;
5
- /** True if BlobUpload, false if BlobIndex. */
6
- readonly isUpload: boolean;
7
- /** True if signature matched. */
8
- isUploadSignMatch?: boolean;
9
- /** Exists when an upload failed and was restarted,
10
- * but the error was recoverable.
11
- * If the error was non-recoverable,
12
- * the driver's computable will throw an error instead. */
13
- lastError?: string;
1
+ //#region src/drivers/upload.d.ts
2
+ interface ImportProgress {
3
+ done: boolean;
4
+ /** Status of indexing/uploading got from platforma gRPC. */
5
+ status?: ImportStatus;
6
+ /** True if BlobUpload, false if BlobIndex. */
7
+ readonly isUpload: boolean;
8
+ /** True if signature matched. */
9
+ isUploadSignMatch?: boolean;
10
+ /** Exists when an upload failed and was restarted,
11
+ * but the error was recoverable.
12
+ * If the error was non-recoverable,
13
+ * the driver's computable will throw an error instead. */
14
+ lastError?: string;
14
15
  }
15
16
  /** Almost direct mapping from proto struct got from gRPC. */
16
- export interface ImportStatus {
17
- /** A float from 0 to 1 and is equal to bytesProcessed / bytesTotal. */
18
- readonly progress: number;
19
- readonly bytesProcessed?: number;
20
- readonly bytesTotal?: number;
17
+ interface ImportStatus {
18
+ /** A float from 0 to 1 and is equal to bytesProcessed / bytesTotal. */
19
+ readonly progress: number;
20
+ readonly bytesProcessed?: number;
21
+ readonly bytesTotal?: number;
21
22
  }
23
+ //#endregion
24
+ export { ImportProgress, ImportStatus };
22
25
  //# sourceMappingURL=upload.d.ts.map