@vizabi/reader-ddfcsv 4.3.3 → 4.3.5

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 (132) hide show
  1. package/.nyc_output/04da916d5240a86facf0fcb14d89854a.json +1 -0
  2. package/.nyc_output/{b4e1a7f86ae858c85e0528842263588d.json → b6c2172ea4b73ef30a769f84462d042b.json} +0 -0
  3. package/.travis.yml +0 -0
  4. package/CHANGELOG.md +0 -0
  5. package/LICENSE +0 -0
  6. package/README.md +0 -0
  7. package/coverage/base.css +0 -0
  8. package/coverage/block-navigation.js +0 -0
  9. package/coverage/index.html +29 -29
  10. package/coverage/prettify.css +0 -0
  11. package/coverage/prettify.js +0 -0
  12. package/coverage/sort-arrow-sprite.png +0 -0
  13. package/coverage/sorter.js +0 -0
  14. package/coverage/src/ddf-csv.ts.html +518 -404
  15. package/coverage/src/ddfcsv-error.ts.html +6 -6
  16. package/coverage/src/ddfcsv-reader.ts.html +63 -51
  17. package/coverage/src/file-readers/backend-file-reader.ts.html +6 -6
  18. package/coverage/src/file-readers/github-path-adapter.ts.html +3 -3
  19. package/coverage/src/file-readers/index.html +1 -1
  20. package/coverage/src/index.html +28 -28
  21. package/coverage/src/index.ts.html +6 -6
  22. package/coverage/src/resource-selection-optimizer/in-clause-under-conjunction.ts.html +219 -408
  23. package/coverage/src/resource-selection-optimizer/index.html +20 -20
  24. package/coverage/src/resource-selection-optimizer/index.ts.html +5 -5
  25. package/coverage/src/test-cases/concepts.ts.html +1 -1
  26. package/coverage/src/test-cases/entities.ts.html +1 -1
  27. package/coverage/src/test-cases/index.html +1 -1
  28. package/deploy.js +0 -0
  29. package/dist/reader-ddfcsv-polyfill.js +1 -1
  30. package/dist/reader-ddfcsv-polyfill.js.map +1 -1
  31. package/dist/reader-ddfcsv.js +2 -2
  32. package/dist/reader-ddfcsv.js.map +1 -1
  33. package/icon.png +0 -0
  34. package/lib/src/ddf-csv.d.ts +0 -0
  35. package/lib/src/ddf-csv.js +27 -2
  36. package/lib/src/ddf-csv.js.map +1 -1
  37. package/lib/src/ddfcsv-error.d.ts +0 -0
  38. package/lib/src/ddfcsv-error.js +0 -0
  39. package/lib/src/ddfcsv-error.js.map +0 -0
  40. package/lib/src/ddfcsv-reader.d.ts +0 -0
  41. package/lib/src/ddfcsv-reader.js +1 -1
  42. package/lib/src/ddfcsv-reader.js.map +0 -0
  43. package/lib/src/file-readers/backend-file-reader.d.ts +0 -0
  44. package/lib/src/file-readers/backend-file-reader.js +0 -0
  45. package/lib/src/file-readers/backend-file-reader.js.map +0 -0
  46. package/lib/src/file-readers/github-path-adapter.d.ts +0 -0
  47. package/lib/src/file-readers/github-path-adapter.js +0 -0
  48. package/lib/src/file-readers/github-path-adapter.js.map +0 -0
  49. package/lib/src/index.d.ts +0 -0
  50. package/lib/src/index.js +0 -0
  51. package/lib/src/index.js.map +0 -0
  52. package/lib/src/interfaces.d.ts +0 -0
  53. package/lib/src/interfaces.js +0 -0
  54. package/lib/src/interfaces.js.map +0 -0
  55. package/lib/src/resource-selection-optimizer/in-clause-under-conjunction.d.ts +0 -0
  56. package/lib/src/resource-selection-optimizer/in-clause-under-conjunction.js +0 -0
  57. package/lib/src/resource-selection-optimizer/in-clause-under-conjunction.js.map +0 -0
  58. package/lib/src/resource-selection-optimizer/index.d.ts +0 -0
  59. package/lib/src/resource-selection-optimizer/index.js +0 -0
  60. package/lib/src/resource-selection-optimizer/index.js.map +0 -0
  61. package/lib-web/src/ddf-csv.d.ts +0 -0
  62. package/lib-web/src/ddf-csv.js +27 -2
  63. package/lib-web/src/ddf-csv.js.map +1 -1
  64. package/lib-web/src/ddfcsv-error.d.ts +0 -0
  65. package/lib-web/src/ddfcsv-error.js +0 -0
  66. package/lib-web/src/ddfcsv-error.js.map +0 -0
  67. package/lib-web/src/ddfcsv-reader.d.ts +0 -0
  68. package/lib-web/src/ddfcsv-reader.js +1 -1
  69. package/lib-web/src/ddfcsv-reader.js.map +0 -0
  70. package/lib-web/src/file-readers/frontend-file-reader.d.ts +0 -0
  71. package/lib-web/src/file-readers/frontend-file-reader.js +0 -0
  72. package/lib-web/src/file-readers/frontend-file-reader.js.map +0 -0
  73. package/lib-web/src/file-readers/github-path-adapter.d.ts +0 -0
  74. package/lib-web/src/file-readers/github-path-adapter.js +0 -0
  75. package/lib-web/src/file-readers/github-path-adapter.js.map +0 -0
  76. package/lib-web/src/index-web.d.ts +0 -0
  77. package/lib-web/src/index-web.js +0 -0
  78. package/lib-web/src/index-web.js.map +0 -0
  79. package/lib-web/src/interfaces.d.ts +0 -0
  80. package/lib-web/src/interfaces.js +0 -0
  81. package/lib-web/src/interfaces.js.map +0 -0
  82. package/lib-web/src/resource-selection-optimizer/in-clause-under-conjunction.d.ts +0 -0
  83. package/lib-web/src/resource-selection-optimizer/in-clause-under-conjunction.js +0 -0
  84. package/lib-web/src/resource-selection-optimizer/in-clause-under-conjunction.js.map +0 -0
  85. package/lib-web/src/resource-selection-optimizer/index.d.ts +0 -0
  86. package/lib-web/src/resource-selection-optimizer/index.js +0 -0
  87. package/lib-web/src/resource-selection-optimizer/index.js.map +0 -0
  88. package/package.json +1 -1
  89. package/scripts/set-own-version.js +0 -0
  90. package/src/ddf-csv.ts +30 -2
  91. package/src/ddfcsv-error.ts +0 -0
  92. package/src/ddfcsv-reader.ts +0 -0
  93. package/src/file-readers/backend-file-reader.ts +0 -0
  94. package/src/file-readers/frontend-file-reader.ts +0 -0
  95. package/src/file-readers/github-path-adapter.ts +0 -0
  96. package/src/index-web.ts +0 -0
  97. package/src/index.ts +0 -0
  98. package/src/interfaces.ts +0 -0
  99. package/src/resource-selection-optimizer/in-clause-under-conjunction.ts +0 -0
  100. package/src/resource-selection-optimizer/index.ts +0 -0
  101. package/src/test-cases/concepts.ts +0 -0
  102. package/src/test-cases/entities.ts +0 -0
  103. package/test/assets-fixtures/world-50m.json +0 -0
  104. package/test/assets.spec.ts +0 -0
  105. package/test/common.ts +0 -0
  106. package/test/definition/concepts-definition.spec.ts +0 -0
  107. package/test/definition/datapoints-definition.spec.ts +0 -0
  108. package/test/definition/entities-definition.spec.ts +0 -0
  109. package/test/definition/schema-definition.spec.ts +0 -0
  110. package/test/diagnostics.spec.ts +0 -0
  111. package/test/features-service.spec.ts +0 -0
  112. package/test/high-load.spec.ts +0 -0
  113. package/test/main.spec.ts +0 -0
  114. package/test/mocha.opts +0 -0
  115. package/test/multi-instances.spec.ts +0 -0
  116. package/test/result-fixtures/datapoints-assets.json +0 -0
  117. package/test/result-fixtures/in-clause-under-conjunction-1.json +0 -0
  118. package/test/result-fixtures/in-clause-under-conjunction-2.json +0 -0
  119. package/test/result-fixtures/multi-instances/concepts-sg.json +0 -0
  120. package/test/result-fixtures/multi-instances/concepts-soderstornsmodellen.json +0 -0
  121. package/test/result-fixtures/multi-instances/datapoints-sg.json +0 -0
  122. package/test/result-fixtures/multi-instances/datapoints-soderstornsmodellen.json +0 -0
  123. package/test/result-fixtures/multi-instances/entities-sg.json +0 -0
  124. package/test/result-fixtures/multi-instances/entities-soderstornsmodellen.json +0 -0
  125. package/test/result-fixtures/multi-instances/schema-sg.json +0 -0
  126. package/test/result-fixtures/multi-instances/schema-soderstornsmodellen.json +0 -0
  127. package/test/schema.spec.ts +0 -0
  128. package/test/tslint.json +0 -0
  129. package/tsconfig-web.json +0 -0
  130. package/tsconfig.json +0 -0
  131. package/tslint.json +0 -0
  132. package/.nyc_output/795caf0b3acca8aacbd9d932d086ab81.json +0 -1
@@ -20,31 +20,31 @@
20
20
  </h1>
21
21
  <div class='clearfix'>
22
22
  <div class='fl pad1y space-right2'>
23
- <span class="strong">22.45% </span>
23
+ <span class="strong">94.07% </span>
24
24
  <span class="quiet">Statements</span>
25
- <span class='fraction'>33/147</span>
25
+ <span class='fraction'>111/118</span>
26
26
  </div>
27
27
  <div class='fl pad1y space-right2'>
28
- <span class="strong">5.41% </span>
28
+ <span class="strong">79.41% </span>
29
29
  <span class="quiet">Branches</span>
30
- <span class='fraction'>2/37</span>
30
+ <span class='fraction'>27/34</span>
31
31
  </div>
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">11.11% </span>
33
+ <span class="strong">100% </span>
34
34
  <span class="quiet">Functions</span>
35
- <span class='fraction'>3/27</span>
35
+ <span class='fraction'>20/20</span>
36
36
  </div>
37
37
  <div class='fl pad1y space-right2'>
38
- <span class="strong">22.86% </span>
38
+ <span class="strong">95.58% </span>
39
39
  <span class="quiet">Lines</span>
40
- <span class='fraction'>32/140</span>
40
+ <span class='fraction'>108/113</span>
41
41
  </div>
42
42
  </div>
43
43
  <p class="quiet">
44
44
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
45
45
  </p>
46
46
  </div>
47
- <div class='status-line low'></div>
47
+ <div class='status-line high'></div>
48
48
  <pre><table class="coverage">
49
49
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
50
50
  <a name='L2'></a><a href='#L2'>2</a>
@@ -266,73 +266,8 @@
266
266
  <a name='L218'></a><a href='#L218'>218</a>
267
267
  <a name='L219'></a><a href='#L219'>219</a>
268
268
  <a name='L220'></a><a href='#L220'>220</a>
269
- <a name='L221'></a><a href='#L221'>221</a>
270
- <a name='L222'></a><a href='#L222'>222</a>
271
- <a name='L223'></a><a href='#L223'>223</a>
272
- <a name='L224'></a><a href='#L224'>224</a>
273
- <a name='L225'></a><a href='#L225'>225</a>
274
- <a name='L226'></a><a href='#L226'>226</a>
275
- <a name='L227'></a><a href='#L227'>227</a>
276
- <a name='L228'></a><a href='#L228'>228</a>
277
- <a name='L229'></a><a href='#L229'>229</a>
278
- <a name='L230'></a><a href='#L230'>230</a>
279
- <a name='L231'></a><a href='#L231'>231</a>
280
- <a name='L232'></a><a href='#L232'>232</a>
281
- <a name='L233'></a><a href='#L233'>233</a>
282
- <a name='L234'></a><a href='#L234'>234</a>
283
- <a name='L235'></a><a href='#L235'>235</a>
284
- <a name='L236'></a><a href='#L236'>236</a>
285
- <a name='L237'></a><a href='#L237'>237</a>
286
- <a name='L238'></a><a href='#L238'>238</a>
287
- <a name='L239'></a><a href='#L239'>239</a>
288
- <a name='L240'></a><a href='#L240'>240</a>
289
- <a name='L241'></a><a href='#L241'>241</a>
290
- <a name='L242'></a><a href='#L242'>242</a>
291
- <a name='L243'></a><a href='#L243'>243</a>
292
- <a name='L244'></a><a href='#L244'>244</a>
293
- <a name='L245'></a><a href='#L245'>245</a>
294
- <a name='L246'></a><a href='#L246'>246</a>
295
- <a name='L247'></a><a href='#L247'>247</a>
296
- <a name='L248'></a><a href='#L248'>248</a>
297
- <a name='L249'></a><a href='#L249'>249</a>
298
- <a name='L250'></a><a href='#L250'>250</a>
299
- <a name='L251'></a><a href='#L251'>251</a>
300
- <a name='L252'></a><a href='#L252'>252</a>
301
- <a name='L253'></a><a href='#L253'>253</a>
302
- <a name='L254'></a><a href='#L254'>254</a>
303
- <a name='L255'></a><a href='#L255'>255</a>
304
- <a name='L256'></a><a href='#L256'>256</a>
305
- <a name='L257'></a><a href='#L257'>257</a>
306
- <a name='L258'></a><a href='#L258'>258</a>
307
- <a name='L259'></a><a href='#L259'>259</a>
308
- <a name='L260'></a><a href='#L260'>260</a>
309
- <a name='L261'></a><a href='#L261'>261</a>
310
- <a name='L262'></a><a href='#L262'>262</a>
311
- <a name='L263'></a><a href='#L263'>263</a>
312
- <a name='L264'></a><a href='#L264'>264</a>
313
- <a name='L265'></a><a href='#L265'>265</a>
314
- <a name='L266'></a><a href='#L266'>266</a>
315
- <a name='L267'></a><a href='#L267'>267</a>
316
- <a name='L268'></a><a href='#L268'>268</a>
317
- <a name='L269'></a><a href='#L269'>269</a>
318
- <a name='L270'></a><a href='#L270'>270</a>
319
- <a name='L271'></a><a href='#L271'>271</a>
320
- <a name='L272'></a><a href='#L272'>272</a>
321
- <a name='L273'></a><a href='#L273'>273</a>
322
- <a name='L274'></a><a href='#L274'>274</a>
323
- <a name='L275'></a><a href='#L275'>275</a>
324
- <a name='L276'></a><a href='#L276'>276</a>
325
- <a name='L277'></a><a href='#L277'>277</a>
326
- <a name='L278'></a><a href='#L278'>278</a>
327
- <a name='L279'></a><a href='#L279'>279</a>
328
- <a name='L280'></a><a href='#L280'>280</a>
329
- <a name='L281'></a><a href='#L281'>281</a>
330
- <a name='L282'></a><a href='#L282'>282</a>
331
- <a name='L283'></a><a href='#L283'>283</a>
332
- <a name='L284'></a><a href='#L284'>284</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
333
- <span class="cline-any cline-yes">1x</span>
334
- <span class="cline-any cline-yes">1x</span>
335
- <span class="cline-any cline-yes">1x</span>
269
+ <a name='L221'></a><a href='#L221'>221</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
270
+ <span class="cline-any cline-neutral">&nbsp;</span>
336
271
  <span class="cline-any cline-yes">1x</span>
337
272
  <span class="cline-any cline-yes">1x</span>
338
273
  <span class="cline-any cline-yes">1x</span>
@@ -341,283 +276,220 @@
341
276
  <span class="cline-any cline-yes">1x</span>
342
277
  <span class="cline-any cline-yes">1x</span>
343
278
  <span class="cline-any cline-neutral">&nbsp;</span>
344
- <span class="cline-any cline-yes">1x</span>
345
279
  <span class="cline-any cline-neutral">&nbsp;</span>
346
- <span class="cline-any cline-yes">1x</span>
347
280
  <span class="cline-any cline-neutral">&nbsp;</span>
348
281
  <span class="cline-any cline-yes">1x</span>
349
282
  <span class="cline-any cline-yes">1x</span>
350
283
  <span class="cline-any cline-yes">1x</span>
351
284
  <span class="cline-any cline-yes">1x</span>
352
285
  <span class="cline-any cline-yes">1x</span>
353
- <span class="cline-any cline-neutral">&nbsp;</span>
354
- <span class="cline-any cline-yes">1x</span>
355
- <span class="cline-any cline-yes">1x</span>
356
286
  <span class="cline-any cline-yes">1x</span>
357
287
  <span class="cline-any cline-neutral">&nbsp;</span>
358
288
  <span class="cline-any cline-yes">1x</span>
359
- <span class="cline-any cline-yes">51x</span>
360
- <span class="cline-any cline-neutral">&nbsp;</span>
361
- <span class="cline-any cline-neutral">&nbsp;</span>
362
- <span class="cline-any cline-neutral">&nbsp;</span>
289
+ <span class="cline-any cline-yes">7x</span>
363
290
  <span class="cline-any cline-neutral">&nbsp;</span>
364
291
  <span class="cline-any cline-neutral">&nbsp;</span>
365
292
  <span class="cline-any cline-neutral">&nbsp;</span>
366
- <span class="cline-any cline-yes">51x</span>
367
- <span class="cline-any cline-yes">51x</span>
368
- <span class="cline-any cline-yes">51x</span>
369
- <span class="cline-any cline-yes">51x</span>
370
- <span class="cline-any cline-yes">51x</span>
371
- <span class="cline-any cline-yes">51x</span>
372
293
  <span class="cline-any cline-neutral">&nbsp;</span>
373
294
  <span class="cline-any cline-neutral">&nbsp;</span>
374
295
  <span class="cline-any cline-neutral">&nbsp;</span>
375
- <span class="cline-any cline-yes">51x</span>
296
+ <span class="cline-any cline-yes">7x</span>
297
+ <span class="cline-any cline-yes">7x</span>
298
+ <span class="cline-any cline-yes">7x</span>
299
+ <span class="cline-any cline-yes">7x</span>
300
+ <span class="cline-any cline-yes">7x</span>
301
+ <span class="cline-any cline-yes">7x</span>
376
302
  <span class="cline-any cline-neutral">&nbsp;</span>
377
- <span class="cline-any cline-yes">102x</span>
378
303
  <span class="cline-any cline-neutral">&nbsp;</span>
379
- <span class="cline-any cline-yes">51x</span>
380
304
  <span class="cline-any cline-neutral">&nbsp;</span>
305
+ <span class="cline-any cline-yes">10x</span>
381
306
  <span class="cline-any cline-neutral">&nbsp;</span>
307
+ <span class="cline-any cline-yes">10x</span>
382
308
  <span class="cline-any cline-neutral">&nbsp;</span>
383
309
  <span class="cline-any cline-neutral">&nbsp;</span>
384
- <span class="cline-any cline-no">&nbsp;</span>
385
- <span class="cline-any cline-neutral">&nbsp;</span>
386
- <span class="cline-any cline-no">&nbsp;</span>
387
- <span class="cline-any cline-no">&nbsp;</span>
388
- <span class="cline-any cline-neutral">&nbsp;</span>
389
- <span class="cline-any cline-neutral">&nbsp;</span>
390
- <span class="cline-any cline-no">&nbsp;</span>
391
- <span class="cline-any cline-no">&nbsp;</span>
392
- <span class="cline-any cline-no">&nbsp;</span>
393
- <span class="cline-any cline-no">&nbsp;</span>
394
- <span class="cline-any cline-no">&nbsp;</span>
395
- <span class="cline-any cline-no">&nbsp;</span>
396
- <span class="cline-any cline-no">&nbsp;</span>
397
- <span class="cline-any cline-no">&nbsp;</span>
398
310
  <span class="cline-any cline-neutral">&nbsp;</span>
399
- <span class="cline-any cline-no">&nbsp;</span>
400
- <span class="cline-any cline-no">&nbsp;</span>
311
+ <span class="cline-any cline-yes">3x</span>
401
312
  <span class="cline-any cline-neutral">&nbsp;</span>
313
+ <span class="cline-any cline-yes">3x</span>
314
+ <span class="cline-any cline-yes">3x</span>
402
315
  <span class="cline-any cline-neutral">&nbsp;</span>
403
- <span class="cline-any cline-no">&nbsp;</span>
404
316
  <span class="cline-any cline-neutral">&nbsp;</span>
405
- <span class="cline-any cline-no">&nbsp;</span>
317
+ <span class="cline-any cline-yes">3x</span>
318
+ <span class="cline-any cline-yes">3x</span>
319
+ <span class="cline-any cline-yes">3x</span>
320
+ <span class="cline-any cline-yes">3x</span>
321
+ <span class="cline-any cline-yes">3x</span>
322
+ <span class="cline-any cline-yes">3x</span>
323
+ <span class="cline-any cline-yes">3x</span>
324
+ <span class="cline-any cline-yes">3x</span>
406
325
  <span class="cline-any cline-neutral">&nbsp;</span>
407
326
  <span class="cline-any cline-no">&nbsp;</span>
408
327
  <span class="cline-any cline-no">&nbsp;</span>
409
- <span class="cline-any cline-no">&nbsp;</span>
410
328
  <span class="cline-any cline-neutral">&nbsp;</span>
411
329
  <span class="cline-any cline-neutral">&nbsp;</span>
330
+ <span class="cline-any cline-yes">3x</span>
412
331
  <span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-yes">3x</span>
413
333
  <span class="cline-any cline-neutral">&nbsp;</span>
414
334
  <span class="cline-any cline-no">&nbsp;</span>
415
335
  <span class="cline-any cline-no">&nbsp;</span>
416
- <span class="cline-any cline-neutral">&nbsp;</span>
417
336
  <span class="cline-any cline-no">&nbsp;</span>
418
337
  <span class="cline-any cline-neutral">&nbsp;</span>
419
338
  <span class="cline-any cline-neutral">&nbsp;</span>
420
- <span class="cline-any cline-no">&nbsp;</span>
421
339
  <span class="cline-any cline-neutral">&nbsp;</span>
422
340
  <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-yes">3x</span>
342
+ <span class="cline-any cline-yes">7x</span>
343
+ <span class="cline-any cline-yes">3x</span>
423
344
  <span class="cline-any cline-neutral">&nbsp;</span>
424
- <span class="cline-any cline-no">&nbsp;</span>
345
+ <span class="cline-any cline-yes">3x</span>
346
+ <span class="cline-any cline-yes">6x</span>
347
+ <span class="cline-any cline-yes">6x</span>
425
348
  <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-no">&nbsp;</span>
349
+ <span class="cline-any cline-yes">6x</span>
427
350
  <span class="cline-any cline-neutral">&nbsp;</span>
428
- <span class="cline-any cline-no">&nbsp;</span>
429
- <span class="cline-any cline-no">&nbsp;</span>
430
- <span class="cline-any cline-neutral">&nbsp;</span>
431
- <span class="cline-any cline-no">&nbsp;</span>
432
- <span class="cline-any cline-no">&nbsp;</span>
433
- <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-no">&nbsp;</span>
435
- <span class="cline-any cline-neutral">&nbsp;</span>
436
- <span class="cline-any cline-neutral">&nbsp;</span>
437
- <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-no">&nbsp;</span>
439
351
  <span class="cline-any cline-neutral">&nbsp;</span>
440
352
  <span class="cline-any cline-neutral">&nbsp;</span>
441
353
  <span class="cline-any cline-neutral">&nbsp;</span>
442
- <span class="cline-any cline-no">&nbsp;</span>
443
- <span class="cline-any cline-no">&nbsp;</span>
444
- <span class="cline-any cline-neutral">&nbsp;</span>
445
- <span class="cline-any cline-no">&nbsp;</span>
446
- <span class="cline-any cline-no">&nbsp;</span>
447
- <span class="cline-any cline-no">&nbsp;</span>
448
- <span class="cline-any cline-neutral">&nbsp;</span>
449
- <span class="cline-any cline-no">&nbsp;</span>
450
- <span class="cline-any cline-no">&nbsp;</span>
451
- <span class="cline-any cline-no">&nbsp;</span>
452
- <span class="cline-any cline-neutral">&nbsp;</span>
453
- <span class="cline-any cline-no">&nbsp;</span>
454
- <span class="cline-any cline-no">&nbsp;</span>
455
- <span class="cline-any cline-neutral">&nbsp;</span>
456
- <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-neutral">&nbsp;</span>
458
- <span class="cline-any cline-neutral">&nbsp;</span>
459
- <span class="cline-any cline-neutral">&nbsp;</span>
460
- <span class="cline-any cline-no">&nbsp;</span>
461
- <span class="cline-any cline-neutral">&nbsp;</span>
462
- <span class="cline-any cline-neutral">&nbsp;</span>
463
- <span class="cline-any cline-neutral">&nbsp;</span>
464
- <span class="cline-any cline-no">&nbsp;</span>
465
- <span class="cline-any cline-no">&nbsp;</span>
466
- <span class="cline-any cline-no">&nbsp;</span>
467
- <span class="cline-any cline-no">&nbsp;</span>
468
- <span class="cline-any cline-no">&nbsp;</span>
469
- <span class="cline-any cline-neutral">&nbsp;</span>
470
- <span class="cline-any cline-neutral">&nbsp;</span>
471
- <span class="cline-any cline-no">&nbsp;</span>
472
- <span class="cline-any cline-neutral">&nbsp;</span>
473
- <span class="cline-any cline-neutral">&nbsp;</span>
474
- <span class="cline-any cline-no">&nbsp;</span>
475
- <span class="cline-any cline-no">&nbsp;</span>
476
- <span class="cline-any cline-neutral">&nbsp;</span>
477
- <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-neutral">&nbsp;</span>
480
- <span class="cline-any cline-no">&nbsp;</span>
481
- <span class="cline-any cline-neutral">&nbsp;</span>
482
- <span class="cline-any cline-neutral">&nbsp;</span>
483
- <span class="cline-any cline-neutral">&nbsp;</span>
484
- <span class="cline-any cline-no">&nbsp;</span>
485
- <span class="cline-any cline-no">&nbsp;</span>
486
- <span class="cline-any cline-no">&nbsp;</span>
487
- <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-no">&nbsp;</span>
489
- <span class="cline-any cline-no">&nbsp;</span>
490
- <span class="cline-any cline-neutral">&nbsp;</span>
491
- <span class="cline-any cline-no">&nbsp;</span>
492
- <span class="cline-any cline-no">&nbsp;</span>
493
- <span class="cline-any cline-no">&nbsp;</span>
494
- <span class="cline-any cline-no">&nbsp;</span>
495
- <span class="cline-any cline-no">&nbsp;</span>
354
+ <span class="cline-any cline-yes">6x</span>
496
355
  <span class="cline-any cline-neutral">&nbsp;</span>
497
- <span class="cline-any cline-no">&nbsp;</span>
498
- <span class="cline-any cline-no">&nbsp;</span>
356
+ <span class="cline-any cline-yes">204x</span>
499
357
  <span class="cline-any cline-neutral">&nbsp;</span>
500
358
  <span class="cline-any cline-neutral">&nbsp;</span>
501
- <span class="cline-any cline-no">&nbsp;</span>
502
- <span class="cline-any cline-no">&nbsp;</span>
503
359
  <span class="cline-any cline-neutral">&nbsp;</span>
504
360
  <span class="cline-any cline-neutral">&nbsp;</span>
505
361
  <span class="cline-any cline-neutral">&nbsp;</span>
506
- <span class="cline-any cline-no">&nbsp;</span>
507
362
  <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-yes">3x</span>
364
+ <span class="cline-any cline-yes">3x</span>
365
+ <span class="cline-any cline-yes">3x</span>
508
366
  <span class="cline-any cline-neutral">&nbsp;</span>
367
+ <span class="cline-any cline-yes">3x</span>
368
+ <span class="cline-any cline-yes">243x</span>
369
+ <span class="cline-any cline-yes">603x</span>
509
370
  <span class="cline-any cline-neutral">&nbsp;</span>
510
- <span class="cline-any cline-no">&nbsp;</span>
511
- <span class="cline-any cline-no">&nbsp;</span>
371
+ <span class="cline-any cline-yes">603x</span>
372
+ <span class="cline-any cline-yes">94x</span>
373
+ <span class="cline-any cline-yes">150x</span>
512
374
  <span class="cline-any cline-neutral">&nbsp;</span>
513
- <span class="cline-any cline-no">&nbsp;</span>
514
- <span class="cline-any cline-no">&nbsp;</span>
515
- <span class="cline-any cline-no">&nbsp;</span>
375
+ <span class="cline-any cline-yes">150x</span>
376
+ <span class="cline-any cline-yes">150x</span>
377
+ <span class="cline-any cline-yes">150x</span>
516
378
  <span class="cline-any cline-neutral">&nbsp;</span>
517
379
  <span class="cline-any cline-neutral">&nbsp;</span>
518
380
  <span class="cline-any cline-neutral">&nbsp;</span>
519
- <span class="cline-any cline-no">&nbsp;</span>
520
381
  <span class="cline-any cline-neutral">&nbsp;</span>
521
- <span class="cline-any cline-no">&nbsp;</span>
522
382
  <span class="cline-any cline-neutral">&nbsp;</span>
523
- <span class="cline-any cline-no">&nbsp;</span>
524
- <span class="cline-any cline-no">&nbsp;</span>
383
+ <span class="cline-any cline-yes">3x</span>
525
384
  <span class="cline-any cline-neutral">&nbsp;</span>
526
385
  <span class="cline-any cline-neutral">&nbsp;</span>
527
386
  <span class="cline-any cline-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-yes">3x</span>
388
+ <span class="cline-any cline-yes">3x</span>
389
+ <span class="cline-any cline-yes">20x</span>
390
+ <span class="cline-any cline-yes">20x</span>
528
391
  <span class="cline-any cline-neutral">&nbsp;</span>
529
- <span class="cline-any cline-no">&nbsp;</span>
530
- <span class="cline-any cline-no">&nbsp;</span>
531
392
  <span class="cline-any cline-neutral">&nbsp;</span>
532
- <span class="cline-any cline-no">&nbsp;</span>
533
- <span class="cline-any cline-no">&nbsp;</span>
393
+ <span class="cline-any cline-yes">3x</span>
534
394
  <span class="cline-any cline-neutral">&nbsp;</span>
535
- <span class="cline-any cline-no">&nbsp;</span>
536
395
  <span class="cline-any cline-neutral">&nbsp;</span>
537
- <span class="cline-any cline-no">&nbsp;</span>
538
- <span class="cline-any cline-no">&nbsp;</span>
539
- <span class="cline-any cline-no">&nbsp;</span>
540
- <span class="cline-any cline-no">&nbsp;</span>
541
- <span class="cline-any cline-no">&nbsp;</span>
542
396
  <span class="cline-any cline-neutral">&nbsp;</span>
397
+ <span class="cline-any cline-yes">805x</span>
398
+ <span class="cline-any cline-yes">18796x</span>
399
+ <span class="cline-any cline-yes">592x</span>
543
400
  <span class="cline-any cline-neutral">&nbsp;</span>
401
+ <span class="cline-any cline-yes">3x</span>
402
+ <span class="cline-any cline-yes">3x</span>
544
403
  <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-yes">3x</span>
405
+ <span class="cline-any cline-yes">20x</span>
406
+ <span class="cline-any cline-yes">805x</span>
407
+ <span class="cline-any cline-yes">805x</span>
545
408
  <span class="cline-any cline-neutral">&nbsp;</span>
409
+ <span class="cline-any cline-yes">805x</span>
410
+ <span class="cline-any cline-yes">213x</span>
546
411
  <span class="cline-any cline-neutral">&nbsp;</span>
547
412
  <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-no">&nbsp;</span>
549
- <span class="cline-any cline-no">&nbsp;</span>
550
- <span class="cline-any cline-no">&nbsp;</span>
413
+ <span class="cline-any cline-yes">805x</span>
551
414
  <span class="cline-any cline-neutral">&nbsp;</span>
415
+ <span class="cline-any cline-yes">805x</span>
416
+ <span class="cline-any cline-yes">805x</span>
552
417
  <span class="cline-any cline-neutral">&nbsp;</span>
553
418
  <span class="cline-any cline-neutral">&nbsp;</span>
554
- <span class="cline-any cline-no">&nbsp;</span>
555
419
  <span class="cline-any cline-neutral">&nbsp;</span>
420
+ <span class="cline-any cline-yes">3x</span>
556
421
  <span class="cline-any cline-neutral">&nbsp;</span>
557
- <span class="cline-any cline-no">&nbsp;</span>
558
422
  <span class="cline-any cline-neutral">&nbsp;</span>
559
- <span class="cline-any cline-no">&nbsp;</span>
560
423
  <span class="cline-any cline-neutral">&nbsp;</span>
424
+ <span class="cline-any cline-yes">3x</span>
561
425
  <span class="cline-any cline-neutral">&nbsp;</span>
426
+ <span class="cline-any cline-yes">3x</span>
427
+ <span class="cline-any cline-yes">6x</span>
562
428
  <span class="cline-any cline-neutral">&nbsp;</span>
563
- <span class="cline-any cline-no">&nbsp;</span>
564
429
  <span class="cline-any cline-neutral">&nbsp;</span>
565
430
  <span class="cline-any cline-neutral">&nbsp;</span>
431
+ <span class="cline-any cline-yes">6x</span>
566
432
  <span class="cline-any cline-neutral">&nbsp;</span>
433
+ <span class="cline-any cline-yes">204x</span>
567
434
  <span class="cline-any cline-neutral">&nbsp;</span>
568
- <span class="cline-any cline-no">&nbsp;</span>
569
- <span class="cline-any cline-no">&nbsp;</span>
435
+ <span class="cline-any cline-yes">204x</span>
436
+ <span class="cline-any cline-yes">204x</span>
437
+ <span class="cline-any cline-yes">5483x</span>
438
+ <span class="cline-any cline-yes">171346x</span>
439
+ <span class="cline-any cline-yes">166034x</span>
440
+ <span class="cline-any cline-yes">166034x</span>
441
+ <span class="cline-any cline-yes">166034x</span>
442
+ <span class="cline-any cline-yes">14x</span>
443
+ <span class="cline-any cline-yes">2x</span>
570
444
  <span class="cline-any cline-neutral">&nbsp;</span>
571
445
  <span class="cline-any cline-neutral">&nbsp;</span>
446
+ <span class="cline-any cline-yes">166020x</span>
572
447
  <span class="cline-any cline-neutral">&nbsp;</span>
573
- <span class="cline-any cline-no">&nbsp;</span>
574
- <span class="cline-any cline-no">&nbsp;</span>
575
- <span class="cline-any cline-no">&nbsp;</span>
576
448
  <span class="cline-any cline-neutral">&nbsp;</span>
577
449
  <span class="cline-any cline-neutral">&nbsp;</span>
578
450
  <span class="cline-any cline-neutral">&nbsp;</span>
579
- <span class="cline-any cline-no">&nbsp;</span>
580
- <span class="cline-any cline-no">&nbsp;</span>
581
451
  <span class="cline-any cline-neutral">&nbsp;</span>
582
452
  <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-no">&nbsp;</span>
584
453
  <span class="cline-any cline-neutral">&nbsp;</span>
454
+ <span class="cline-any cline-yes">6x</span>
585
455
  <span class="cline-any cline-neutral">&nbsp;</span>
586
456
  <span class="cline-any cline-neutral">&nbsp;</span>
457
+ <span class="cline-any cline-yes">3x</span>
587
458
  <span class="cline-any cline-neutral">&nbsp;</span>
459
+ <span class="cline-any cline-yes">3x</span>
588
460
  <span class="cline-any cline-neutral">&nbsp;</span>
589
461
  <span class="cline-any cline-neutral">&nbsp;</span>
590
462
  <span class="cline-any cline-neutral">&nbsp;</span>
591
- <span class="cline-any cline-no">&nbsp;</span>
592
- <span class="cline-any cline-no">&nbsp;</span>
593
463
  <span class="cline-any cline-neutral">&nbsp;</span>
594
- <span class="cline-any cline-no">&nbsp;</span>
595
- <span class="cline-any cline-no">&nbsp;</span>
464
+ <span class="cline-any cline-yes">3x</span>
596
465
  <span class="cline-any cline-neutral">&nbsp;</span>
466
+ <span class="cline-any cline-yes">3x</span>
467
+ <span class="cline-any cline-yes">3x</span>
468
+ <span class="cline-any cline-yes">22x</span>
469
+ <span class="cline-any cline-yes">22x</span>
597
470
  <span class="cline-any cline-neutral">&nbsp;</span>
598
471
  <span class="cline-any cline-neutral">&nbsp;</span>
599
472
  <span class="cline-any cline-neutral">&nbsp;</span>
600
- <span class="cline-any cline-no">&nbsp;</span>
473
+ <span class="cline-any cline-yes">3x</span>
474
+ <span class="cline-any cline-yes">3x</span>
601
475
  <span class="cline-any cline-neutral">&nbsp;</span>
602
- <span class="cline-any cline-no">&nbsp;</span>
603
- <span class="cline-any cline-no">&nbsp;</span>
476
+ <span class="cline-any cline-yes">3x</span>
477
+ <span class="cline-any cline-yes">3x</span>
604
478
  <span class="cline-any cline-neutral">&nbsp;</span>
605
479
  <span class="cline-any cline-neutral">&nbsp;</span>
480
+ <span class="cline-any cline-yes">3x</span>
606
481
  <span class="cline-any cline-neutral">&nbsp;</span>
607
482
  <span class="cline-any cline-neutral">&nbsp;</span>
608
- <span class="cline-any cline-no">&nbsp;</span>
609
483
  <span class="cline-any cline-neutral">&nbsp;</span>
610
484
  <span class="cline-any cline-neutral">&nbsp;</span>
485
+ <span class="cline-any cline-yes">7x</span>
611
486
  <span class="cline-any cline-neutral">&nbsp;</span>
612
- <span class="cline-any cline-no">&nbsp;</span>
613
487
  <span class="cline-any cline-neutral">&nbsp;</span>
614
488
  <span class="cline-any cline-neutral">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import * as path from 'path';
616
- import * as head from 'lodash.head';
489
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import * as head from 'lodash.head';
617
490
  import * as values from 'lodash.values';
618
491
  import * as keys from 'lodash.keys';
619
492
  import * as get from 'lodash.get';
620
- import * as flattenDeep from 'lodash.flattendeep';
621
493
  import * as isEmpty from 'lodash.isempty';
622
494
  import * as startsWith from 'lodash.startswith';
623
495
  import * as includes from 'lodash.includes';
@@ -626,17 +498,12 @@ import { DdfCsvError } from '../ddfcsv-error';
626
498
  import { IDatapackage, IResourceSelectionOptimizer, IResourceRead, IBaseReaderOptions } from '../interfaces';
627
499
  import { QueryFeature, featureDetectors, IQuery } from 'ddf-query-validator';
628
500
  &nbsp;
629
- const Papa = require('papaparse');
630
- &nbsp;
631
501
  const WHERE_KEYWORD = 'where';
632
502
  const JOIN_KEYWORD = 'join';
633
503
  const KEY_IN = '$in';
634
504
  const KEY_NIN = '$nin';
635
505
  const KEY_AND = '$and';
636
- &nbsp;
637
- const getFirstConditionClause = <span class="fstat-no" title="function not covered" >clause</span> =&gt; <span class="cstat-no" title="statement not covered" >head(values(clause));</span>
638
- const getFirstKey = <span class="fstat-no" title="function not covered" >obj</span> =&gt; <span class="cstat-no" title="statement not covered" >head(keys(obj));</span>
639
- const isOneKeyBased = <span class="fstat-no" title="function not covered" >obj</span> =&gt; <span class="cstat-no" title="statement not covered" >keys(obj).length === 1;</span>
506
+ const KEY_OR = '$or';
640
507
  &nbsp;
641
508
  export class InClauseUnderConjunction implements IResourceSelectionOptimizer {
642
509
  private flow: any = {};
@@ -646,7 +513,7 @@ export class InClauseUnderConjunction implements IResourceSelectionOptimizer {
646
513
  private datapackage: IDatapackage;
647
514
  private conceptsLookup;
648
515
  &nbsp;
649
- constructor(queryParam, private options: IBaseReaderOptions) {
516
+ constructor(private parent, queryParam, private options: IBaseReaderOptions) {
650
517
  this.fileReader = options.fileReader;
651
518
  this.datasetPath = options.basePath;
652
519
  this.query = queryParam;
@@ -657,35 +524,32 @@ export class InClauseUnderConjunction implements IResourceSelectionOptimizer {
657
524
  isMatched(): boolean {
658
525
  this.flow.joinObject = get(this.query, JOIN_KEYWORD);
659
526
  &nbsp;
660
- const relatedFeatures = compact(featureDetectors.map(detector =&gt; detector(this.query, this.conceptsLookup)));
661
- &nbsp;
662
- return includes(relatedFeatures, QueryFeature.WhereClauseBasedOnConjunction) &amp;&amp;
663
- includes(relatedFeatures, QueryFeature.ConjunctionPartFromWhereClauseCorrespondsToJoin);
527
+ return this.query.from === "datapoints" &amp;&amp; this.flow.joinObject;
664
528
  }
665
529
  &nbsp;
666
- <span class="fstat-no" title="function not covered" > async</span> getRecommendedFilesSet(): Promise&lt;string[]&gt; {
667
- const { debug, error, warning } = <span class="cstat-no" title="statement not covered" >this.options.diagnostic.prepareDiagnosticFor('getRecommendedFilesSet');</span>
530
+ async getRecommendedFilesSet(): Promise&lt;string[]&gt; {
531
+ const { debug, error, warning } = this.options.diagnostic.prepareDiagnosticFor('getRecommendedFilesSet');
668
532
  &nbsp;
669
- <span class="cstat-no" title="statement not covered" > if (this.isMatched()) {</span>
670
- <span class="cstat-no" title="statement not covered" > debug('plugin matched');</span>
533
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (this.isMatched()) {
534
+ debug('plugin matched');
671
535
  &nbsp;
672
536
  let result;
673
- <span class="cstat-no" title="statement not covered" > try {</span>
674
- <span class="cstat-no" title="statement not covered" > this.fillResourceToFileHash();</span>
675
- <span class="cstat-no" title="statement not covered" > this.collectProcessableClauses();</span>
676
- <span class="cstat-no" title="statement not covered" > this.collectEntityFilesNames();</span>
677
- const data = <span class="cstat-no" title="statement not covered" >await this.collectEntities();</span>
678
- <span class="cstat-no" title="statement not covered" > this.fillEntityValuesHash(data);</span>
679
- <span class="cstat-no" title="statement not covered" > this.getFilesGroupsQueryClause();</span>
680
- <span class="cstat-no" title="statement not covered" > result = this.getOptimalFilesGroup();</span>
537
+ try {
538
+ this.flow.processableClauses = await this.collectProcessableClauses();
539
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.flow.processableClauses) <span class="cstat-no" title="statement not covered" >return [];</span>
540
+ this.collectEntityFilesNames();
541
+ const data = await this.collectEntities();
542
+ this.fillEntityValuesHash(data);
543
+ this.getFilesGroupsQueryClause();
544
+ result = this.getOptimalFilesGroup();
681
545
  } catch (err) {
682
546
  <span class="cstat-no" title="statement not covered" > error('wrong data processing', err);</span>
683
547
  <span class="cstat-no" title="statement not covered" > return [];</span>
684
548
  }
685
549
  &nbsp;
686
- <span class="cstat-no" title="statement not covered" > debug('recommended files found', result);</span>
550
+ debug('recommended files found', result);
687
551
  &nbsp;
688
- <span class="cstat-no" title="statement not covered" > return result;</span>
552
+ return result;
689
553
  } else {
690
554
  const message = <span class="cstat-no" title="statement not covered" >`Plugin "InClauseUnderConjunction" is not matched!`;</span>
691
555
  <span class="cstat-no" title="statement not covered" > warning(message);</span>
@@ -693,207 +557,154 @@ export class InClauseUnderConjunction implements IResourceSelectionOptimizer {
693
557
  }
694
558
  }
695
559
  &nbsp;
696
- private <span class="fstat-no" title="function not covered" >fillResourceToFileHash</span>(): InClauseUnderConjunction {
697
- <span class="cstat-no" title="statement not covered" > this.flow.resourceToFile = get(this.datapackage, 'resources', []).reduce(<span class="fstat-no" title="function not covered" >(h</span>ash, resource) =&gt; {</span>
698
- <span class="cstat-no" title="statement not covered" > hash.set(resource.name, resource.path);</span>
699
- &nbsp;
700
- <span class="cstat-no" title="statement not covered" > return hash;</span>
701
- }, new Map());
702
- &nbsp;
703
- <span class="cstat-no" title="statement not covered" > return this;</span>
704
- }
705
- &nbsp;
706
- private <span class="fstat-no" title="function not covered" >collectProcessableClauses</span>(): InClauseUnderConjunction {
707
- const joinKeys = <span class="cstat-no" title="statement not covered" >keys(this.flow.joinObject);</span>
708
- &nbsp;
709
- <span class="cstat-no" title="statement not covered" > this.flow.processableClauses = [];</span>
710
- &nbsp;
711
- <span class="cstat-no" title="statement not covered" > for (const joinKey of joinKeys) {</span>
712
- const where = <span class="cstat-no" title="statement not covered" >get(this.flow.joinObject, `${joinKey}.${WHERE_KEYWORD}`, {});</span>
713
- &nbsp;
714
- <span class="cstat-no" title="statement not covered" > if (this.singleAndField(where)) {</span>
715
- <span class="cstat-no" title="statement not covered" > this.flow.processableClauses.push(...flattenDeep(where[KEY_AND].map(<span class="fstat-no" title="function not covered" >el</span> =&gt; <span class="cstat-no" title="statement not covered" >this.getProcessableClauses(el))</span>));</span>
716
- } else {
717
- <span class="cstat-no" title="statement not covered" > this.flow.processableClauses.push(...this.getProcessableClauses(where));</span>
718
- }
719
- }
560
+ private collectProcessableClauses(): Promise&lt;any&gt; {
561
+ const joinKeys = keys(this.flow.joinObject).filter(
562
+ key =&gt; ["entity_domain", "entity_set"].includes(this.options.conceptsLookup.get(key.slice(1))<span class="branch-0 cbranch-no" title="branch not covered" >?.</span>concept_type));
563
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!joinKeys.length) <span class="cstat-no" title="statement not covered" >return Promise.resolve(false);</span>
564
+ &nbsp;
565
+ return Promise.all(joinKeys.map(joinKey =&gt; {
566
+ const key = this.flow.joinObject[joinKey].key;
567
+ const where = get(this.flow.joinObject, `${joinKey}.${WHERE_KEYWORD}`, {});
568
+ &nbsp;
569
+ return this.parent.queryData({
570
+ select: { key: [key] },
571
+ where,
572
+ from: this.options.conceptsLookup.has(key) ? 'entities' : <span class="branch-1 cbranch-no" title="branch not covered" >'concepts'</span>
573
+ }, Object.assign({ joinID: joinKey }, this.options))
574
+ .then(result =&gt; ({
575
+ key,
576
+ entities: new Set(result.map(row =&gt; row[ key ]))
577
+ }));
578
+ }));
720
579
  &nbsp;
721
- <span class="cstat-no" title="statement not covered" > return this;</span>
722
580
  }
723
581
  &nbsp;
724
- private <span class="fstat-no" title="function not covered" >collectEntityFilesNames</span>(): InClauseUnderConjunction {
725
- <span class="cstat-no" title="statement not covered" > this.flow.entityFilesNames = [];</span>
726
- <span class="cstat-no" title="statement not covered" > this.flow.fileNameToPrimaryKeyHash = new Map();</span>
582
+ private collectEntityFilesNames(): InClauseUnderConjunction {
583
+ this.flow.entityFilesNames = new Set();
584
+ this.flow.entityResources = new Set();
585
+ this.flow.fileNameToPrimaryKeyHash = new Map();
727
586
  &nbsp;
728
- <span class="cstat-no" title="statement not covered" > for (const schemaResourceRecord of this.datapackage.ddfSchema.entities) {</span>
729
- <span class="cstat-no" title="statement not covered" > for (const clause of this.flow.processableClauses) {</span>
730
- const primaryKey = <span class="cstat-no" title="statement not covered" >getFirstKey(clause);</span>
587
+ for (const schemaResourceRecord of this.datapackage.ddfSchema.entities) {
588
+ for (const clause of this.flow.processableClauses) {
589
+ const key = clause.key;
731
590
  &nbsp;
732
- <span class="cstat-no" title="statement not covered" > if (head(schemaResourceRecord.primaryKey) === primaryKey) {</span>
733
- <span class="cstat-no" title="statement not covered" > for (const resourceName of schemaResourceRecord.resources) {</span>
734
- const file = <span class="cstat-no" title="statement not covered" >this.flow.resourceToFile.get(resourceName);</span>
591
+ if (head(schemaResourceRecord.primaryKey) === key) {
592
+ for (const resourceName of schemaResourceRecord.resources) {
593
+ const resource = this.options.resourcesLookup.get(resourceName);
735
594
  &nbsp;
736
- <span class="cstat-no" title="statement not covered" > this.flow.entityFilesNames.push(file);</span>
737
- <span class="cstat-no" title="statement not covered" > this.flow.fileNameToPrimaryKeyHash.set(file, primaryKey);</span>
595
+ this.flow.entityResources.add(resource);
596
+ this.flow.entityFilesNames.add(resource.path);
597
+ this.flow.fileNameToPrimaryKeyHash.set(resource.path, key);
738
598
  }
739
599
  }
740
600
  }
741
601
  }
742
602
  &nbsp;
743
- <span class="cstat-no" title="statement not covered" > return this;</span>
603
+ return this;
744
604
  }
745
605
  &nbsp;
746
- private <span class="fstat-no" title="function not covered" >collectEntities</span>(): Promise&lt;any&gt; {
747
- const self = <span class="cstat-no" title="statement not covered" >this;</span>
748
- const actions = <span class="cstat-no" title="statement not covered" >self.flow.entityFilesNames.map(<span class="fstat-no" title="function not covered" >file</span> =&gt; <span class="cstat-no" title="statement not covered" >new Promise(<span class="fstat-no" title="function not covered" >(a</span>ctResolve, actReject) =&gt; {</span></span>
749
- <span class="cstat-no" title="statement not covered" > self.fileReader.readText(path.join(self.datasetPath, file), <span class="fstat-no" title="function not covered" >(e</span>rr, text) =&gt; {</span>
750
- <span class="cstat-no" title="statement not covered" > if (err) {</span>
751
- <span class="cstat-no" title="statement not covered" > return actReject(err);</span>
752
- }
753
- &nbsp;
754
- <span class="cstat-no" title="statement not covered" > Papa.parse(text, {</span>
755
- header: true,
756
- skipEmptyLines: true,
757
- complete: <span class="fstat-no" title="function not covered" >result</span> =&gt; <span class="cstat-no" title="statement not covered" >actResolve({file, result}),</span>
758
- error: <span class="fstat-no" title="function not covered" >error</span> =&gt; <span class="cstat-no" title="statement not covered" >actReject(error)</span>
759
- });
760
- });
761
- }));
606
+ private collectEntities(): Promise&lt;any&gt; {
607
+ const self = this;
608
+ const actions = [...self.flow.entityResources].map(resource =&gt; {
609
+ return (resource.data || (<span class="branch-1 cbranch-no" title="branch not covered" >resource.data = self.parent.loadFile(resource.path, self.options))</span>)
610
+ .then(data =&gt; ({result: data, file: resource.path}));
611
+ });
762
612
  &nbsp;
763
- <span class="cstat-no" title="statement not covered" > return Promise.all(actions);</span>
613
+ return Promise.all(actions);
764
614
  }
765
615
  &nbsp;
766
- private <span class="fstat-no" title="function not covered" >fillEntityValuesHash</span>(entitiesData): InClauseUnderConjunction {
767
- const getSubdomainsFromRecord = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >record</span> =&gt; <span class="cstat-no" title="statement not covered" >compact(keys(record)</span></span>
768
- .filter(<span class="fstat-no" title="function not covered" >key</span> =&gt; <span class="cstat-no" title="statement not covered" >startsWith(key, 'is--') &amp;&amp; (record[key] === 'TRUE' || record[key] === 'true'))</span>
769
- .map(<span class="fstat-no" title="function not covered" >key</span> =&gt; <span class="cstat-no" title="statement not covered" >key.replace(/^is--/, ''))</span>);
616
+ private fillEntityValuesHash(entitiesData): InClauseUnderConjunction {
617
+ const getSubdomainsFromRecord = record =&gt; compact(keys(record)
618
+ .filter(key =&gt; startsWith(key, 'is--') &amp;&amp; (record[key] === true))
619
+ .map(key =&gt; key.replace(/^is--/, '')));
770
620
  &nbsp;
771
- <span class="cstat-no" title="statement not covered" > this.flow.entityValueToFileHash = new Map();</span>
772
- <span class="cstat-no" title="statement not covered" > this.flow.entityValueToDomainHash = new Map();</span>
621
+ this.flow.entityValueToFileHash = new Map();
622
+ this.flow.entityValueToDomainHash = new Map();
773
623
  &nbsp;
774
- <span class="cstat-no" title="statement not covered" > for (const entityFileDescriptor of entitiesData) {</span>
775
- <span class="cstat-no" title="statement not covered" > for (const entityRecord of entityFileDescriptor.result.data) {</span>
776
- const primaryKeyForThisFile = <span class="cstat-no" title="statement not covered" >this.flow.fileNameToPrimaryKeyHash.get(entityFileDescriptor.file);</span>
777
- const primaryKeyCellValue = <span class="cstat-no" title="statement not covered" >entityRecord[primaryKeyForThisFile];</span>
778
- const domainsForCurrentRecord = <span class="cstat-no" title="statement not covered" >[...getSubdomainsFromRecord(entityRecord)];</span>
624
+ for (const entityFileDescriptor of entitiesData) {
625
+ for (const entityRecord of entityFileDescriptor.result.data) {
626
+ const primaryKeyForThisFile = this.flow.fileNameToPrimaryKeyHash.get(entityFileDescriptor.file);
627
+ const domainsForCurrentRecord = [...getSubdomainsFromRecord(entityRecord)];
779
628
  &nbsp;
780
- <span class="cstat-no" title="statement not covered" > if (isEmpty(domainsForCurrentRecord)) {</span>
781
- <span class="cstat-no" title="statement not covered" > domainsForCurrentRecord.push(primaryKeyForThisFile);</span>
629
+ if (isEmpty(domainsForCurrentRecord)) {
630
+ domainsForCurrentRecord.push(primaryKeyForThisFile);
782
631
  }
783
632
  &nbsp;
784
- <span class="cstat-no" title="statement not covered" > this.flow.entityValueToDomainHash.set(primaryKeyCellValue, domainsForCurrentRecord);</span>
785
- <span class="cstat-no" title="statement not covered" > this.flow.entityValueToFileHash.set(primaryKeyCellValue, entityFileDescriptor.file);</span>
633
+ const primaryKeyCellValue = entityRecord[primaryKeyForThisFile] || entityRecord[domainsForCurrentRecord[0]];
634
+ &nbsp;
635
+ this.flow.entityValueToDomainHash.set(primaryKeyCellValue, domainsForCurrentRecord);
636
+ this.flow.entityValueToFileHash.set(primaryKeyCellValue, entityFileDescriptor.file);
786
637
  }
787
638
  }
788
639
  &nbsp;
789
- <span class="cstat-no" title="statement not covered" > return this;</span>
640
+ return this;
790
641
  }
791
642
  &nbsp;
792
- private <span class="fstat-no" title="function not covered" >getFilesGroupsQueryClause</span>(): InClauseUnderConjunction {
793
- const getEntitiesExcept = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(e</span>ntityValuesToExclude: string[]): string[] =&gt; {</span>
794
- const result = <span class="cstat-no" title="statement not covered" >[];</span>
643
+ private getFilesGroupsQueryClause(): InClauseUnderConjunction {
644
+ const filesGroupsByClause = new Map();
795
645
  &nbsp;
796
- <span class="cstat-no" title="statement not covered" > for (const entityKey of this.flow.entityValueToDomainHash.keys()) {</span>
797
- <span class="cstat-no" title="statement not covered" > if (!includes(entityValuesToExclude, entityKey)) {</span>
798
- <span class="cstat-no" title="statement not covered" > result.push(entityKey);</span>
799
- }
800
- }
801
- &nbsp;
802
- <span class="cstat-no" title="statement not covered" > return result;</span>
803
- };
804
- const filesGroupsByClause = <span class="cstat-no" title="statement not covered" >new Map();</span>
805
- &nbsp;
806
- <span class="cstat-no" title="statement not covered" > for (const clause of this.flow.processableClauses) {</span>
807
- const filesGroupByClause = <span class="cstat-no" title="statement not covered" >{</span>
808
- entities: new Set(),
809
- datapoints: new Set(),
810
- concepts: new Set()
646
+ for (const clause of this.flow.processableClauses) {
647
+ const filesGroupByClause = {
648
+ datapoints: new Set()
811
649
  };
812
- const firstConditionClause = <span class="cstat-no" title="statement not covered" >getFirstConditionClause(clause);</span>
813
- const entityValuesFromClause = <span class="cstat-no" title="statement not covered" >firstConditionClause[KEY_IN] || getEntitiesExcept(firstConditionClause[KEY_NIN]);</span>
814
- &nbsp;
815
- <span class="cstat-no" title="statement not covered" > for (const entityValueFromClause of entityValuesFromClause) {</span>
816
- <span class="cstat-no" title="statement not covered" > filesGroupByClause.entities.add(this.flow.entityValueToFileHash.get(entityValueFromClause));</span>
817
- &nbsp;
818
- const entitiesByQuery = <span class="cstat-no" title="statement not covered" >this.flow.entityValueToDomainHash.get(entityValueFromClause);</span>
819
650
  &nbsp;
820
- <span class="cstat-no" title="statement not covered" > for (const entityByQuery of entitiesByQuery) {</span>
821
- <span class="cstat-no" title="statement not covered" > for (const schemaResourceRecord of this.datapackage.ddfSchema.datapoints) {</span>
822
- <span class="cstat-no" title="statement not covered" > for (const resourceName of schemaResourceRecord.resources) {</span>
823
- <span class="cstat-no" title="statement not covered" > if (includes(schemaResourceRecord.primaryKey, entityByQuery)) {</span>
824
- <span class="cstat-no" title="statement not covered" > filesGroupByClause.datapoints.add(this.flow.resourceToFile.get(resourceName));</span>
651
+ for (const entityValueFromClause of clause.entities) {
652
+ &nbsp;
653
+ const entitiesByQuery = this.flow.entityValueToDomainHash.get(entityValueFromClause);
654
+ &nbsp;
655
+ for (const entityByQuery of entitiesByQuery) {
656
+ for (const schemaResourceRecord of this.datapackage.ddfSchema.datapoints) {
657
+ for (const resourceName of schemaResourceRecord.resources) {
658
+ if (includes(schemaResourceRecord.primaryKey, entityByQuery)) {
659
+ const resource = this.options.resourcesLookup.get(resourceName);
660
+ const constraint = resource.constraints<span class="branch-0 cbranch-no" title="branch not covered" >?.[</span>entityByQuery];
661
+ if ( constraint ) {
662
+ if (constraint.includes(entityValueFromClause)) {
663
+ filesGroupByClause.datapoints.add(resource.path);
664
+ }
665
+ } else {
666
+ filesGroupByClause.datapoints.add(resource.path);
667
+ }
825
668
  }
826
669
  }
827
670
  }
828
671
  }
829
672
  }
830
673
  &nbsp;
831
- <span class="cstat-no" title="statement not covered" > for (const schemaResourceRecord of this.datapackage.ddfSchema.concepts) {</span>
832
- <span class="cstat-no" title="statement not covered" > for (const resourceName of schemaResourceRecord.resources) {</span>
833
- <span class="cstat-no" title="statement not covered" > filesGroupByClause.concepts.add(this.flow.resourceToFile.get(resourceName));</span>
834
- }
835
- }
836
- &nbsp;
837
- <span class="cstat-no" title="statement not covered" > filesGroupsByClause.set(clause, filesGroupByClause);</span>
674
+ filesGroupsByClause.set(clause.key, filesGroupByClause);
838
675
  }
839
676
  &nbsp;
840
- <span class="cstat-no" title="statement not covered" > this.flow.filesGroupsByClause = filesGroupsByClause;</span>
677
+ this.flow.filesGroupsByClause = filesGroupsByClause;
841
678
  &nbsp;
842
- <span class="cstat-no" title="statement not covered" > return this;</span>
679
+ return this;
843
680
  }
844
681
  &nbsp;
845
- private <span class="fstat-no" title="function not covered" >getOptimalFilesGroup</span>(): string[] {
846
- const clauseKeys = <span class="cstat-no" title="statement not covered" >this.flow.filesGroupsByClause.keys();</span>
682
+ private getOptimalFilesGroup(): string[] {
847
683
  &nbsp;
848
- let appropriateClauseKey;
849
- let appropriateClauseSize;
684
+ const entities = this.flow.entityFilesNames;
850
685
  &nbsp;
851
- <span class="cstat-no" title="statement not covered" > for (const key of clauseKeys) {</span>
852
- const size = <span class="cstat-no" title="statement not covered" >this.flow.filesGroupsByClause.get(key).datapoints.size +</span>
853
- this.flow.filesGroupsByClause.get(key).entities.size +
854
- this.flow.filesGroupsByClause.get(key).concepts.size;
855
- &nbsp;
856
- <span class="cstat-no" title="statement not covered" > if (!appropriateClauseKey || size &lt; appropriateClauseSize) {</span>
857
- <span class="cstat-no" title="statement not covered" > appropriateClauseKey = key;</span>
858
- <span class="cstat-no" title="statement not covered" > appropriateClauseSize = size;</span>
686
+ const concepts = new Set();
687
+ for (const schemaResourceRecord of this.datapackage.ddfSchema.concepts) {
688
+ for (const resourceName of schemaResourceRecord.resources) {
689
+ concepts.add(this.options.resourcesLookup.get(resourceName).path);
859
690
  }
860
691
  }
861
692
  &nbsp;
862
- <span class="cstat-no" title="statement not covered" > if (!this.flow.filesGroupsByClause.get(appropriateClauseKey)) {</span>
863
- <span class="cstat-no" title="statement not covered" > return [];</span>
693
+ const clauseKeys = this.flow.filesGroupsByClause.keys();
694
+ let datapoints = Array.from(this.flow.filesGroupsByClause.get(clauseKeys.next().value).datapoints);
695
+ &nbsp;
696
+ for (const key of clauseKeys) {
697
+ datapoints = this.intersectArray(datapoints, Array.from(this.flow.filesGroupsByClause.get(key).datapoints));
864
698
  }
865
699
  &nbsp;
866
- <span class="cstat-no" title="statement not covered" > return [</span>
867
- ...Array.from(this.flow.filesGroupsByClause.get(appropriateClauseKey).concepts),
868
- ...Array.from(this.flow.filesGroupsByClause.get(appropriateClauseKey).entities),
869
- ...Array.from(this.flow.filesGroupsByClause.get(appropriateClauseKey).datapoints)
870
- ] as string[];
700
+ return [...Array.from(concepts), ...Array.from(entities)].concat(datapoints) as string[];
871
701
  }
872
702
  &nbsp;
873
- private <span class="fstat-no" title="function not covered" >getProcessableClauses</span>(clause) {
874
- const result = <span class="cstat-no" title="statement not covered" >[];</span>
875
- const clauseKeys = <span class="cstat-no" title="statement not covered" >keys(clause);</span>
876
- &nbsp;
877
- <span class="cstat-no" title="statement not covered" > for (const key of clauseKeys) {</span>
878
- <span class="cstat-no" title="statement not covered" > if (!startsWith(key, '$') &amp;&amp; isOneKeyBased(clause[key])) {</span>
879
- // attention! this functionality process only first clause
880
- // for example, { geo: { '$in': ['world'] } }
881
- // in this example { geo: { '$in': ['world'] }, foo: { '$in': ['bar', 'baz'] } }]
882
- // foo: { '$in': ['bar', 'baz'] } will NOT be processed
883
- const conditionKey = <span class="cstat-no" title="statement not covered" >head(keys(clause[key]));</span>
884
703
  &nbsp;
885
- <span class="cstat-no" title="statement not covered" > if (conditionKey === KEY_IN || conditionKey === KEY_NIN) {</span>
886
- <span class="cstat-no" title="statement not covered" > result.push(clause);</span>
887
- }
888
- }
889
- }
890
- &nbsp;
891
- <span class="cstat-no" title="statement not covered" > return result;</span>
704
+ private intersectArray(array1, array2) {
705
+ return array1.filter(value =&gt; array2.includes(value));
892
706
  }
893
707
  &nbsp;
894
- private <span class="fstat-no" title="function not covered" >singleAndField</span>(clause): boolean {
895
- <span class="cstat-no" title="statement not covered" > return isOneKeyBased(clause) &amp;&amp; !!get(clause, KEY_AND);</span>
896
- }
897
708
  }
898
709
  &nbsp;</pre></td></tr>
899
710
  </table></pre>
@@ -901,7 +712,7 @@ export class InClauseUnderConjunction implements IResourceSelectionOptimizer {
901
712
  </div><!-- /wrapper -->
902
713
  <div class='footer quiet pad2 space-top1 center small'>
903
714
  Code coverage
904
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Thu May 11 2023 23:59:02 GMT+0200 (Central European Summer Time)
715
+ generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Jun 24 2024 00:21:40 GMT+0300 (Moscow Standard Time)
905
716
  </div>
906
717
  </div>
907
718
  <script src="../../prettify.js"></script>