@budibase/server 0.9.140-alpha.1 → 0.9.140-alpha.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 (203) hide show
  1. package/builder/assets/{index.e8745f5e.js → index.80d850d1.js} +35 -35
  2. package/builder/assets/{vendor.d39b3c1e.js → vendor.820de34b.js} +10 -2
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +798 -530
  5. package/coverage/coverage-final.json +19 -16
  6. package/coverage/lcov-report/api/controllers/analytics.js.html +4 -4
  7. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +3 -3
  14. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/hosting.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/index.html +5 -5
  17. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/row/index.html +34 -19
  26. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/internal.js.html +242 -47
  28. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1244 -0
  29. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/index.js.html +2 -2
  34. package/coverage/lcov-report/api/controllers/table/utils.js.html +31 -19
  35. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/index.html +32 -17
  39. package/coverage/lcov-report/api/controllers/view/index.js.html +84 -186
  40. package/coverage/lcov-report/api/controllers/view/utils.js.html +407 -0
  41. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  43. package/coverage/lcov-report/api/index.html +1 -1
  44. package/coverage/lcov-report/api/index.js.html +1 -1
  45. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  46. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/index.html +1 -1
  57. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  74. package/coverage/lcov-report/automations/actions.js.html +1 -1
  75. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  76. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  77. package/coverage/lcov-report/automations/index.html +1 -1
  78. package/coverage/lcov-report/automations/index.js.html +1 -1
  79. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/createRow.js.html +10 -19
  81. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/deleteRow.js.html +14 -20
  83. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/index.html +31 -31
  88. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/queryRows.js.html +18 -27
  91. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/updateRow.js.html +12 -21
  95. package/coverage/lcov-report/automations/steps/utils.js.html +23 -23
  96. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  97. package/coverage/lcov-report/automations/thread.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  107. package/coverage/lcov-report/automations/utils.js.html +1 -1
  108. package/coverage/lcov-report/constants/index.html +1 -1
  109. package/coverage/lcov-report/constants/index.js.html +1 -1
  110. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  111. package/coverage/lcov-report/constants/screens.js.html +1 -1
  112. package/coverage/lcov-report/db/client.js.html +1 -1
  113. package/coverage/lcov-report/db/inMemoryView.js.html +224 -0
  114. package/coverage/lcov-report/db/index.html +34 -19
  115. package/coverage/lcov-report/db/index.js.html +1 -1
  116. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +4 -4
  117. package/coverage/lcov-report/db/linkedRows/index.html +14 -14
  118. package/coverage/lcov-report/db/linkedRows/index.js.html +18 -9
  119. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  120. package/coverage/lcov-report/db/newid.js.html +1 -1
  121. package/coverage/lcov-report/db/utils.js.html +37 -10
  122. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  123. package/coverage/lcov-report/events/index.html +1 -1
  124. package/coverage/lcov-report/events/index.js.html +1 -1
  125. package/coverage/lcov-report/events/utils.js.html +1 -1
  126. package/coverage/lcov-report/index.html +68 -68
  127. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  128. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  129. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  130. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  131. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  132. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  133. package/coverage/lcov-report/middleware/index.html +1 -1
  134. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  135. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  136. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  137. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  138. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  139. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  140. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  141. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  142. package/coverage/lcov-report/utilities/global.js.html +1 -1
  143. package/coverage/lcov-report/utilities/index.html +1 -1
  144. package/coverage/lcov-report/utilities/index.js.html +1 -1
  145. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  146. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  147. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  148. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/index.html +15 -15
  150. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +58 -13
  151. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  152. package/coverage/lcov-report/utilities/security.js.html +2 -2
  153. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  154. package/coverage/lcov-report/utilities/users.js.html +1 -1
  155. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  156. package/coverage/lcov.info +1405 -886
  157. package/dist/api/controllers/analytics.js +1 -1
  158. package/dist/api/controllers/datasource.js +2 -2
  159. package/dist/api/controllers/row/ExternalRequest.js +4 -0
  160. package/dist/api/controllers/row/internal.js +97 -23
  161. package/dist/api/controllers/table/index.js +1 -1
  162. package/dist/api/controllers/table/utils.js +13 -11
  163. package/dist/api/controllers/view/index.js +74 -96
  164. package/dist/api/controllers/view/utils.js +102 -0
  165. package/dist/automations/steps/createRow.js +5 -8
  166. package/dist/automations/steps/deleteRow.js +7 -10
  167. package/dist/automations/steps/queryRows.js +11 -14
  168. package/dist/automations/steps/updateRow.js +4 -7
  169. package/dist/db/inMemoryView.js +51 -0
  170. package/dist/db/linkedRows/index.js +5 -2
  171. package/dist/db/utils.js +7 -0
  172. package/dist/environment.js +7 -1
  173. package/dist/integrations/mysql.js +2 -13
  174. package/dist/integrations/postgres.js +8 -14
  175. package/dist/integrations/utils.js +19 -1
  176. package/dist/package.json +10 -12
  177. package/dist/tsconfig.tsbuildinfo +1 -1
  178. package/dist/utilities/rowProcessor/index.js +10 -5
  179. package/package.json +11 -13
  180. package/scripts/integrations/service-vehicles/docker-compose.yml +28 -0
  181. package/scripts/integrations/service-vehicles/init.sql +52 -0
  182. package/scripts/integrations/service-vehicles/reset.sh +3 -0
  183. package/src/api/controllers/analytics.js +1 -1
  184. package/src/api/controllers/datasource.js +2 -2
  185. package/src/api/controllers/row/ExternalRequest.ts +5 -1
  186. package/src/api/controllers/row/internal.js +88 -23
  187. package/src/api/controllers/table/index.js +1 -1
  188. package/src/api/controllers/table/utils.js +16 -12
  189. package/src/api/controllers/view/index.js +82 -116
  190. package/src/api/controllers/view/utils.js +109 -0
  191. package/src/api/routes/tests/view.spec.js +1 -1
  192. package/src/automations/steps/createRow.js +5 -8
  193. package/src/automations/steps/deleteRow.js +8 -10
  194. package/src/automations/steps/queryRows.js +11 -14
  195. package/src/automations/steps/updateRow.js +7 -10
  196. package/src/db/inMemoryView.js +48 -0
  197. package/src/db/linkedRows/index.js +5 -2
  198. package/src/db/utils.js +9 -0
  199. package/src/environment.js +8 -1
  200. package/src/integrations/mysql.ts +2 -13
  201. package/src/integrations/postgres.ts +9 -16
  202. package/src/integrations/utils.ts +18 -0
  203. package/src/utilities/rowProcessor/index.js +20 -5
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">87.93% </span>
26
+ <span class="strong">80.68% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>153/174</span>
28
+ <span class='fraction'>167/207</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">69.57% </span>
33
+ <span class="strong">60.34% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>32/46</span>
35
+ <span class='fraction'>35/58</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">91.3% </span>
40
+ <span class="strong">92.31% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>21/23</span>
42
+ <span class='fraction'>24/26</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">88.1% </span>
47
+ <span class="strong">80.6% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>148/168</span>
49
+ <span class='fraction'>162/201</span>
50
50
  </div>
51
51
 
52
52
 
@@ -423,18 +423,88 @@
423
423
  <a name='L364'></a><a href='#L364'>364</a>
424
424
  <a name='L365'></a><a href='#L365'>365</a>
425
425
  <a name='L366'></a><a href='#L366'>366</a>
426
- <a name='L367'></a><a href='#L367'>367</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
426
+ <a name='L367'></a><a href='#L367'>367</a>
427
+ <a name='L368'></a><a href='#L368'>368</a>
428
+ <a name='L369'></a><a href='#L369'>369</a>
429
+ <a name='L370'></a><a href='#L370'>370</a>
430
+ <a name='L371'></a><a href='#L371'>371</a>
431
+ <a name='L372'></a><a href='#L372'>372</a>
432
+ <a name='L373'></a><a href='#L373'>373</a>
433
+ <a name='L374'></a><a href='#L374'>374</a>
434
+ <a name='L375'></a><a href='#L375'>375</a>
435
+ <a name='L376'></a><a href='#L376'>376</a>
436
+ <a name='L377'></a><a href='#L377'>377</a>
437
+ <a name='L378'></a><a href='#L378'>378</a>
438
+ <a name='L379'></a><a href='#L379'>379</a>
439
+ <a name='L380'></a><a href='#L380'>380</a>
440
+ <a name='L381'></a><a href='#L381'>381</a>
441
+ <a name='L382'></a><a href='#L382'>382</a>
442
+ <a name='L383'></a><a href='#L383'>383</a>
443
+ <a name='L384'></a><a href='#L384'>384</a>
444
+ <a name='L385'></a><a href='#L385'>385</a>
445
+ <a name='L386'></a><a href='#L386'>386</a>
446
+ <a name='L387'></a><a href='#L387'>387</a>
447
+ <a name='L388'></a><a href='#L388'>388</a>
448
+ <a name='L389'></a><a href='#L389'>389</a>
449
+ <a name='L390'></a><a href='#L390'>390</a>
450
+ <a name='L391'></a><a href='#L391'>391</a>
451
+ <a name='L392'></a><a href='#L392'>392</a>
452
+ <a name='L393'></a><a href='#L393'>393</a>
453
+ <a name='L394'></a><a href='#L394'>394</a>
454
+ <a name='L395'></a><a href='#L395'>395</a>
455
+ <a name='L396'></a><a href='#L396'>396</a>
456
+ <a name='L397'></a><a href='#L397'>397</a>
457
+ <a name='L398'></a><a href='#L398'>398</a>
458
+ <a name='L399'></a><a href='#L399'>399</a>
459
+ <a name='L400'></a><a href='#L400'>400</a>
460
+ <a name='L401'></a><a href='#L401'>401</a>
461
+ <a name='L402'></a><a href='#L402'>402</a>
462
+ <a name='L403'></a><a href='#L403'>403</a>
463
+ <a name='L404'></a><a href='#L404'>404</a>
464
+ <a name='L405'></a><a href='#L405'>405</a>
465
+ <a name='L406'></a><a href='#L406'>406</a>
466
+ <a name='L407'></a><a href='#L407'>407</a>
467
+ <a name='L408'></a><a href='#L408'>408</a>
468
+ <a name='L409'></a><a href='#L409'>409</a>
469
+ <a name='L410'></a><a href='#L410'>410</a>
470
+ <a name='L411'></a><a href='#L411'>411</a>
471
+ <a name='L412'></a><a href='#L412'>412</a>
472
+ <a name='L413'></a><a href='#L413'>413</a>
473
+ <a name='L414'></a><a href='#L414'>414</a>
474
+ <a name='L415'></a><a href='#L415'>415</a>
475
+ <a name='L416'></a><a href='#L416'>416</a>
476
+ <a name='L417'></a><a href='#L417'>417</a>
477
+ <a name='L418'></a><a href='#L418'>418</a>
478
+ <a name='L419'></a><a href='#L419'>419</a>
479
+ <a name='L420'></a><a href='#L420'>420</a>
480
+ <a name='L421'></a><a href='#L421'>421</a>
481
+ <a name='L422'></a><a href='#L422'>422</a>
482
+ <a name='L423'></a><a href='#L423'>423</a>
483
+ <a name='L424'></a><a href='#L424'>424</a>
484
+ <a name='L425'></a><a href='#L425'>425</a>
485
+ <a name='L426'></a><a href='#L426'>426</a>
486
+ <a name='L427'></a><a href='#L427'>427</a>
487
+ <a name='L428'></a><a href='#L428'>428</a>
488
+ <a name='L429'></a><a href='#L429'>429</a>
489
+ <a name='L430'></a><a href='#L430'>430</a>
490
+ <a name='L431'></a><a href='#L431'>431</a>
491
+ <a name='L432'></a><a href='#L432'>432</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
427
492
  <span class="cline-any cline-yes">34x</span>
428
493
  <span class="cline-any cline-neutral">&nbsp;</span>
429
494
  <span class="cline-any cline-neutral">&nbsp;</span>
430
495
  <span class="cline-any cline-neutral">&nbsp;</span>
431
496
  <span class="cline-any cline-neutral">&nbsp;</span>
432
497
  <span class="cline-any cline-neutral">&nbsp;</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
433
499
  <span class="cline-any cline-yes">34x</span>
434
500
  <span class="cline-any cline-yes">34x</span>
435
501
  <span class="cline-any cline-neutral">&nbsp;</span>
436
502
  <span class="cline-any cline-neutral">&nbsp;</span>
437
503
  <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-yes">34x</span>
506
+ <span class="cline-any cline-yes">34x</span>
507
+ <span class="cline-any cline-yes">34x</span>
438
508
  <span class="cline-any cline-yes">34x</span>
439
509
  <span class="cline-any cline-yes">34x</span>
440
510
  <span class="cline-any cline-yes">34x</span>
@@ -450,17 +520,84 @@
450
520
  <span class="cline-any cline-neutral">&nbsp;</span>
451
521
  <span class="cline-any cline-neutral">&nbsp;</span>
452
522
  <span class="cline-any cline-yes">70x</span>
453
- <span class="cline-any cline-yes">70x</span>
523
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
+ <span class="cline-any cline-neutral">&nbsp;</span>
454
525
  <span class="cline-any cline-neutral">&nbsp;</span>
455
526
  <span class="cline-any cline-yes">70x</span>
456
527
  <span class="cline-any cline-no">&nbsp;</span>
528
+ <span class="cline-any cline-no">&nbsp;</span>
529
+ <span class="cline-any cline-neutral">&nbsp;</span>
530
+ <span class="cline-any cline-no">&nbsp;</span>
531
+ <span class="cline-any cline-no">&nbsp;</span>
532
+ <span class="cline-any cline-no">&nbsp;</span>
533
+ <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-neutral">&nbsp;</span>
535
+ <span class="cline-any cline-no">&nbsp;</span>
536
+ <span class="cline-any cline-no">&nbsp;</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-no">&nbsp;</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
457
541
  <span class="cline-any cline-neutral">&nbsp;</span>
458
542
  <span class="cline-any cline-yes">70x</span>
543
+ <span class="cline-any cline-yes">70x</span>
459
544
  <span class="cline-any cline-neutral">&nbsp;</span>
460
545
  <span class="cline-any cline-yes">70x</span>
461
546
  <span class="cline-any cline-yes">70x</span>
462
547
  <span class="cline-any cline-neutral">&nbsp;</span>
463
548
  <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
+ <span class="cline-any cline-neutral">&nbsp;</span>
551
+ <span class="cline-any cline-neutral">&nbsp;</span>
552
+ <span class="cline-any cline-yes">5x</span>
553
+ <span class="cline-any cline-no">&nbsp;</span>
554
+ <span class="cline-any cline-no">&nbsp;</span>
555
+ <span class="cline-any cline-neutral">&nbsp;</span>
556
+ <span class="cline-any cline-yes">5x</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</span>
558
+ <span class="cline-any cline-neutral">&nbsp;</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-yes">10x</span>
562
+ <span class="cline-any cline-neutral">&nbsp;</span>
563
+ <span class="cline-any cline-yes">5x</span>
564
+ <span class="cline-any cline-neutral">&nbsp;</span>
565
+ <span class="cline-any cline-neutral">&nbsp;</span>
566
+ <span class="cline-any cline-neutral">&nbsp;</span>
567
+ <span class="cline-any cline-neutral">&nbsp;</span>
568
+ <span class="cline-any cline-neutral">&nbsp;</span>
569
+ <span class="cline-any cline-yes">6x</span>
570
+ <span class="cline-any cline-yes">6x</span>
571
+ <span class="cline-any cline-yes">6x</span>
572
+ <span class="cline-any cline-neutral">&nbsp;</span>
573
+ <span class="cline-any cline-yes">6x</span>
574
+ <span class="cline-any cline-yes">6x</span>
575
+ <span class="cline-any cline-yes">6x</span>
576
+ <span class="cline-any cline-neutral">&nbsp;</span>
577
+ <span class="cline-any cline-no">&nbsp;</span>
578
+ <span class="cline-any cline-no">&nbsp;</span>
579
+ <span class="cline-any cline-no">&nbsp;</span>
580
+ <span class="cline-any cline-no">&nbsp;</span>
581
+ <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-neutral">&nbsp;</span>
583
+ <span class="cline-any cline-neutral">&nbsp;</span>
584
+ <span class="cline-any cline-no">&nbsp;</span>
585
+ <span class="cline-any cline-no">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-no">&nbsp;</span>
588
+ <span class="cline-any cline-no">&nbsp;</span>
589
+ <span class="cline-any cline-neutral">&nbsp;</span>
590
+ <span class="cline-any cline-neutral">&nbsp;</span>
591
+ <span class="cline-any cline-neutral">&nbsp;</span>
592
+ <span class="cline-any cline-yes">6x</span>
593
+ <span class="cline-any cline-no">&nbsp;</span>
594
+ <span class="cline-any cline-neutral">&nbsp;</span>
595
+ <span class="cline-any cline-yes">6x</span>
596
+ <span class="cline-any cline-yes">1x</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-yes">5x</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
464
601
  <span class="cline-any cline-yes">34x</span>
465
602
  <span class="cline-any cline-yes">5x</span>
466
603
  <span class="cline-any cline-yes">5x</span>
@@ -565,13 +702,16 @@
565
702
  <span class="cline-any cline-yes">6x</span>
566
703
  <span class="cline-any cline-yes">6x</span>
567
704
  <span class="cline-any cline-yes">6x</span>
568
- <span class="cline-any cline-yes">6x</span>
569
- <span class="cline-any cline-yes">6x</span>
570
- <span class="cline-any cline-yes">1x</span>
571
705
  <span class="cline-any cline-neutral">&nbsp;</span>
572
706
  <span class="cline-any cline-yes">5x</span>
707
+ <span class="cline-any cline-yes">5x</span>
708
+ <span class="cline-any cline-neutral">&nbsp;</span>
709
+ <span class="cline-any cline-neutral">&nbsp;</span>
573
710
  <span class="cline-any cline-neutral">&nbsp;</span>
574
711
  <span class="cline-any cline-neutral">&nbsp;</span>
712
+ <span class="cline-any cline-no">&nbsp;</span>
713
+ <span class="cline-any cline-no">&nbsp;</span>
714
+ <span class="cline-any cline-no">&nbsp;</span>
575
715
  <span class="cline-any cline-neutral">&nbsp;</span>
576
716
  <span class="cline-any cline-neutral">&nbsp;</span>
577
717
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -616,19 +756,9 @@
616
756
  <span class="cline-any cline-yes">5x</span>
617
757
  <span class="cline-any cline-yes">5x</span>
618
758
  <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-neutral">&nbsp;</span>
620
759
  <span class="cline-any cline-yes">5x</span>
621
760
  <span class="cline-any cline-yes">5x</span>
622
- <span class="cline-any cline-no">&nbsp;</span>
623
- <span class="cline-any cline-no">&nbsp;</span>
624
- <span class="cline-any cline-neutral">&nbsp;</span>
625
761
  <span class="cline-any cline-yes">5x</span>
626
- <span class="cline-any cline-neutral">&nbsp;</span>
627
- <span class="cline-any cline-neutral">&nbsp;</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-neutral">&nbsp;</span>
630
- <span class="cline-any cline-yes">10x</span>
631
- <span class="cline-any cline-neutral">&nbsp;</span>
632
762
  <span class="cline-any cline-yes">5x</span>
633
763
  <span class="cline-any cline-neutral">&nbsp;</span>
634
764
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -796,17 +926,22 @@ const {
796
926
  generateRowID,
797
927
  DocumentTypes,
798
928
  InternalTables,
929
+ generateMemoryViewID,
799
930
  } = require("../../../db/utils")
800
931
  const userController = require("../user")
801
932
  const {
802
933
  inputProcessing,
803
934
  outputProcessing,
935
+ processAutoColumn,
804
936
  } = require("../../../utilities/rowProcessor")
805
937
  const { FieldTypes } = require("../../../constants")
806
938
  const { isEqual } = require("lodash")
807
939
  const { validate, findRow } = require("./utils")
808
940
  const { fullSearch, paginatedSearch } = require("./internalSearch")
809
941
  const { getGlobalUsersFromMetadata } = require("../../../utilities/global")
942
+ const inMemoryViews = require("../../../db/inMemoryView")
943
+ const env = require("../../../environment")
944
+ const { migrateToInMemoryView } = require("../view/utils")
810
945
  &nbsp;
811
946
  const CALCULATION_TYPES = {
812
947
  SUM: "sum",
@@ -816,17 +951,84 @@ const CALCULATION_TYPES = {
816
951
  &nbsp;
817
952
  async function storeResponse(ctx, db, row, oldTable, table) {
818
953
  row.type = "row"
819
- const response = await db.put(row)
820
954
  // don't worry about rev, tables handle rev/lastID updates
955
+ // if another row has been written since processing this will
956
+ // handle the auto ID clash
821
957
  <span class="missing-if-branch" title="if path not taken" >I</span>if (!isEqual(oldTable, table)) {
822
- <span class="cstat-no" title="statement not covered" > await db.put(table)</span>
958
+ <span class="cstat-no" title="statement not covered" > try {</span>
959
+ <span class="cstat-no" title="statement not covered" > await db.put(table)</span>
960
+ } catch (err) {
961
+ <span class="cstat-no" title="statement not covered" > if (err.status === 409) {</span>
962
+ const updatedTable = <span class="cstat-no" title="statement not covered" >await db.get(table._id)</span>
963
+ let response = <span class="cstat-no" title="statement not covered" >processAutoColumn(null, updatedTable, row, {</span>
964
+ reprocessing: true,
965
+ })
966
+ <span class="cstat-no" title="statement not covered" > await db.put(response.table)</span>
967
+ <span class="cstat-no" title="statement not covered" > row = response.row</span>
968
+ } else {
969
+ <span class="cstat-no" title="statement not covered" > throw err</span>
970
+ }
971
+ }
823
972
  }
973
+ const response = await db.put(row)
824
974
  row._rev = response.rev
825
975
  // process the row before return, to include relationships
826
976
  row = await outputProcessing(ctx, table, row, { squash: false })
827
977
  return { row, table }
828
978
  }
829
979
  &nbsp;
980
+ // doesn't do the outputProcessing
981
+ async function getRawTableData(ctx, db, tableId) {
982
+ let rows
983
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (tableId === InternalTables.USER_METADATA) {
984
+ <span class="cstat-no" title="statement not covered" > await userController.fetchMetadata(ctx)</span>
985
+ <span class="cstat-no" title="statement not covered" > rows = ctx.body</span>
986
+ } else {
987
+ const response = await db.allDocs(
988
+ getRowParams(tableId, null, {
989
+ include_docs: true,
990
+ })
991
+ )
992
+ rows = response.rows.map(row =&gt; row.doc)
993
+ }
994
+ return rows
995
+ }
996
+ &nbsp;
997
+ async function getView(db, viewName) {
998
+ let viewInfo
999
+ async function getFromDesignDoc() {
1000
+ const designDoc = await db.get("_design/database")
1001
+ viewInfo = designDoc.views[viewName]
1002
+ return viewInfo
1003
+ }
1004
+ let migrate = false
1005
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (env.SELF_HOSTED) {
1006
+ viewInfo = await getFromDesignDoc()
1007
+ } else {
1008
+ <span class="cstat-no" title="statement not covered" > try {</span>
1009
+ <span class="cstat-no" title="statement not covered" > viewInfo = await db.get(generateMemoryViewID(viewName))</span>
1010
+ <span class="cstat-no" title="statement not covered" > if (viewInfo) {</span>
1011
+ <span class="cstat-no" title="statement not covered" > viewInfo = viewInfo.view</span>
1012
+ }
1013
+ } catch (err) {
1014
+ // check if it can be retrieved from design doc (needs migrated)
1015
+ <span class="cstat-no" title="statement not covered" > if (err.status !== 404) {</span>
1016
+ <span class="cstat-no" title="statement not covered" > viewInfo = null</span>
1017
+ } else {
1018
+ <span class="cstat-no" title="statement not covered" > viewInfo = await getFromDesignDoc()</span>
1019
+ <span class="cstat-no" title="statement not covered" > migrate = !!viewInfo</span>
1020
+ }
1021
+ }
1022
+ }
1023
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (migrate) {
1024
+ <span class="cstat-no" title="statement not covered" > await migrateToInMemoryView(db, viewName)</span>
1025
+ }
1026
+ if (!viewInfo) {
1027
+ throw "View does not exist."
1028
+ }
1029
+ return viewInfo
1030
+ }
1031
+ &nbsp;
830
1032
  exports.patch = async ctx =&gt; {
831
1033
  const appId = ctx.appId
832
1034
  const db = new CouchDB(appId)
@@ -930,15 +1132,18 @@ exports.fetchView = async ctx =&gt; {
930
1132
  &nbsp;
931
1133
  const db = new CouchDB(appId)
932
1134
  const { calculation, group, field } = ctx.query
933
- const designDoc = await db.get("_design/database")
934
- const viewInfo = designDoc.views[viewName]
935
- if (!viewInfo) {
936
- throw "View does not exist."
1135
+ const viewInfo = await getView(db, viewName)
1136
+ let response
1137
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (env.SELF_HOSTED) {
1138
+ response = await db.query(`database/${viewName}`, {
1139
+ include_docs: !calculation,
1140
+ group: !!group,
1141
+ })
1142
+ } else {
1143
+ const tableId = <span class="cstat-no" title="statement not covered" >viewInfo.meta.tableId</span>
1144
+ const data = <span class="cstat-no" title="statement not covered" >await getRawTableData(ctx, db, tableId)</span>
1145
+ <span class="cstat-no" title="statement not covered" > response = await inMemoryViews.runView(viewInfo, calculation, group, data)</span>
937
1146
  }
938
- const response = await db.query(`database/${viewName}`, {
939
- include_docs: !calculation,
940
- group: !!group,
941
- })
942
1147
  &nbsp;
943
1148
  let rows
944
1149
  if (!calculation) {
@@ -982,19 +1187,9 @@ exports.fetch = async ctx =&gt; {
982
1187
  const appId = ctx.appId
983
1188
  const db = new CouchDB(appId)
984
1189
  &nbsp;
985
- let rows,
986
- table = await db.get(ctx.params.tableId)
987
- <span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.params.tableId === InternalTables.USER_METADATA) {
988
- <span class="cstat-no" title="statement not covered" > await userController.fetchMetadata(ctx)</span>
989
- <span class="cstat-no" title="statement not covered" > rows = ctx.body</span>
990
- } else {
991
- const response = await db.allDocs(
992
- getRowParams(ctx.params.tableId, null, {
993
- include_docs: true,
994
- })
995
- )
996
- rows = response.rows.map(row =&gt; row.doc)
997
- }
1190
+ const tableId = ctx.params.tableId
1191
+ let table = await db.get(tableId)
1192
+ let rows = await getRawTableData(ctx, db, tableId)
998
1193
  return outputProcessing(ctx, table, rows)
999
1194
  }
1000
1195
  &nbsp;
@@ -1162,7 +1357,7 @@ exports.fetchEnrichedRow = async ctx =&gt; {
1162
1357
  <div class='footer quiet pad2 space-top1 center small'>
1163
1358
  Code coverage generated by
1164
1359
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1165
- at Wed Sep 22 2021 08:54:50 GMT+0000 (Coordinated Universal Time)
1360
+ at Wed Sep 22 2021 17:29:03 GMT+0000 (Coordinated Universal Time)
1166
1361
  </div>
1167
1362
  </div>
1168
1363
  <script src="../../../prettify.js"></script>