@budibase/server 1.0.47 → 1.0.49-alpha.2

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 (291) hide show
  1. package/builder/assets/{index.937b2767.js → index.82e12602.js} +234 -231
  2. package/builder/assets/index.83c0944f.css +1 -0
  3. package/builder/assets/{vendor.f9faf6ab.js → vendor.d526bfe8.js} +12 -12
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +2334 -2013
  6. package/coverage/coverage-final.json +100 -95
  7. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/application.js.html +210 -126
  10. package/coverage/lcov-report/api/controllers/auth.js.html +18 -6
  11. package/coverage/lcov-report/api/controllers/automation.js.html +21 -21
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +72 -36
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +53 -53
  18. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/layout.js.html +6 -6
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/migrations.js.html +119 -0
  22. package/coverage/lcov-report/api/controllers/permission.js.html +15 -15
  23. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  24. package/coverage/lcov-report/api/controllers/query/index.js.html +19 -19
  25. package/coverage/lcov-report/api/controllers/query/validation.js.html +6 -6
  26. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  27. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/external.js.html +16 -16
  29. package/coverage/lcov-report/api/controllers/row/index.html +48 -33
  30. package/coverage/lcov-report/api/controllers/row/index.js.html +26 -26
  31. package/coverage/lcov-report/api/controllers/row/internal.js.html +95 -158
  32. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +41 -17
  33. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +551 -0
  34. package/coverage/lcov-report/api/controllers/row/utils.js.html +39 -57
  35. package/coverage/lcov-report/api/controllers/screen.js.html +7 -7
  36. package/coverage/lcov-report/api/controllers/script.js.html +4 -4
  37. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +629 -0
  38. package/coverage/lcov-report/api/controllers/table/external.js.html +12 -12
  39. package/coverage/lcov-report/api/controllers/table/index.html +49 -34
  40. package/coverage/lcov-report/api/controllers/table/index.js.html +53 -77
  41. package/coverage/lcov-report/api/controllers/table/internal.js.html +59 -35
  42. package/coverage/lcov-report/api/controllers/table/utils.js.html +283 -76
  43. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/user.js.html +30 -24
  45. package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
  46. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  47. package/coverage/lcov-report/api/controllers/view/index.js.html +14 -14
  48. package/coverage/lcov-report/api/controllers/view/utils.js.html +11 -11
  49. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
  50. package/coverage/lcov-report/api/controllers/webhook.js.html +15 -15
  51. package/coverage/lcov-report/api/index.html +1 -1
  52. package/coverage/lcov-report/api/index.js.html +8 -8
  53. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/index.html +18 -18
  65. package/coverage/lcov-report/api/routes/index.js.html +3 -3
  66. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/{hosting.js.html → migrations.js.html} +17 -14
  70. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/static.js.html +17 -2
  78. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  82. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  83. package/coverage/lcov-report/automations/actions.js.html +24 -24
  84. package/coverage/lcov-report/automations/automationUtils.js.html +5 -5
  85. package/coverage/lcov-report/automations/bullboard.js.html +16 -16
  86. package/coverage/lcov-report/automations/index.html +1 -1
  87. package/coverage/lcov-report/automations/index.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
  89. package/coverage/lcov-report/automations/steps/createRow.js.html +13 -19
  90. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  91. package/coverage/lcov-report/automations/steps/deleteRow.js.html +11 -20
  92. package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
  93. package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
  94. package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
  95. package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
  96. package/coverage/lcov-report/automations/steps/index.html +13 -13
  97. package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
  98. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
  99. package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
  100. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
  101. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
  102. package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
  103. package/coverage/lcov-report/automations/steps/updateRow.js.html +6 -6
  104. package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
  105. package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
  106. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  107. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  108. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  110. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  111. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  112. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  113. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  114. package/coverage/lcov-report/automations/triggers.js.html +18 -18
  115. package/coverage/lcov-report/automations/utils.js.html +32 -32
  116. package/coverage/lcov-report/constants/index.html +11 -11
  117. package/coverage/lcov-report/constants/index.js.html +68 -32
  118. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  119. package/coverage/lcov-report/constants/screens.js.html +4 -4
  120. package/coverage/lcov-report/db/client.js.html +18 -18
  121. package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
  122. package/coverage/lcov-report/db/index.html +15 -15
  123. package/coverage/lcov-report/db/index.js.html +3 -3
  124. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +18 -18
  125. package/coverage/lcov-report/db/linkedRows/index.html +10 -10
  126. package/coverage/lcov-report/db/linkedRows/index.js.html +38 -41
  127. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +15 -15
  128. package/coverage/lcov-report/db/newid.js.html +4 -4
  129. package/coverage/lcov-report/db/utils.js.html +86 -86
  130. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  131. package/coverage/lcov-report/events/index.html +1 -1
  132. package/coverage/lcov-report/events/index.js.html +5 -5
  133. package/coverage/lcov-report/events/utils.js.html +3 -3
  134. package/coverage/lcov-report/index.html +117 -102
  135. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  136. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  137. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  138. package/coverage/lcov-report/middleware/authorized.js.html +166 -64
  139. package/coverage/lcov-report/middleware/builder.js.html +8 -8
  140. package/coverage/lcov-report/middleware/currentapp.js.html +29 -29
  141. package/coverage/lcov-report/middleware/index.html +30 -30
  142. package/coverage/lcov-report/middleware/joi-validator.js.html +3 -3
  143. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  144. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  145. package/coverage/lcov-report/middleware/usageQuota.js.html +270 -42
  146. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  147. package/coverage/lcov-report/threads/automation.js.html +1 -1
  148. package/coverage/lcov-report/threads/index.html +15 -15
  149. package/coverage/lcov-report/threads/index.js.html +10 -10
  150. package/coverage/lcov-report/threads/query.js.html +23 -8
  151. package/coverage/lcov-report/threads/utils.js.html +14 -14
  152. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  153. package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
  154. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  155. package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
  156. package/coverage/lcov-report/utilities/global.js.html +26 -26
  157. package/coverage/lcov-report/utilities/index.html +19 -19
  158. package/coverage/lcov-report/utilities/index.js.html +25 -25
  159. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +8 -8
  160. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  161. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  162. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  163. package/coverage/lcov-report/utilities/rowProcessor/index.html +27 -27
  164. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +115 -79
  165. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +75 -27
  166. package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
  167. package/coverage/lcov-report/utilities/security.js.html +8 -8
  168. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  169. package/coverage/lcov-report/utilities/usageQuota/index.html +141 -0
  170. package/coverage/lcov-report/utilities/usageQuota/index.js.html +356 -0
  171. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +302 -0
  172. package/coverage/lcov-report/{api/controllers/hosting.js.html → utilities/usageQuota/usageQuoteReset.js.html} +36 -48
  173. package/coverage/lcov-report/utilities/users.js.html +5 -5
  174. package/coverage/lcov-report/utilities/workerRequests.js.html +39 -108
  175. package/coverage/lcov.info +3665 -3040
  176. package/dist/api/controllers/application.js +61 -34
  177. package/dist/api/controllers/auth.js +4 -0
  178. package/dist/api/controllers/datasource.js +11 -0
  179. package/dist/api/controllers/migrations.js +21 -0
  180. package/dist/api/controllers/row/ExternalRequest.js +2 -1
  181. package/dist/api/controllers/row/internal.js +30 -53
  182. package/dist/api/controllers/row/internalSearch.js +12 -4
  183. package/dist/api/controllers/row/staticFormula.js +147 -0
  184. package/dist/api/controllers/row/utils.js +6 -8
  185. package/dist/api/controllers/static/index.js +59 -10
  186. package/dist/api/controllers/table/bulkFormula.js +160 -0
  187. package/dist/api/controllers/table/index.js +12 -9
  188. package/dist/api/controllers/table/internal.js +9 -0
  189. package/dist/api/controllers/table/utils.js +56 -14
  190. package/dist/api/controllers/user.js +2 -0
  191. package/dist/api/routes/index.js +2 -2
  192. package/dist/api/routes/migrations.js +9 -0
  193. package/dist/api/routes/static.js +2 -1
  194. package/dist/app.js +35 -5
  195. package/dist/automations/steps/createRow.js +2 -4
  196. package/dist/automations/steps/deleteRow.js +1 -4
  197. package/dist/constants/index.js +12 -5
  198. package/dist/db/linkedRows/index.js +4 -5
  199. package/dist/definitions/datasource.js +1 -0
  200. package/dist/environment.js +2 -0
  201. package/dist/integrations/base/sql.js +13 -6
  202. package/dist/integrations/googlesheets.js +340 -0
  203. package/dist/integrations/index.js +3 -0
  204. package/dist/integrations/utils.js +57 -8
  205. package/dist/middleware/authorized.js +55 -30
  206. package/dist/middleware/usageQuota.js +80 -13
  207. package/dist/migrations/functions/appUrls.js +37 -0
  208. package/dist/migrations/functions/quotas1.js +50 -0
  209. package/dist/migrations/functions/usageQuotas/index.js +20 -0
  210. package/dist/migrations/functions/usageQuotas/syncApps.js +32 -0
  211. package/dist/migrations/functions/usageQuotas/syncRows.js +35 -0
  212. package/dist/migrations/functions/userEmailViewCasing.js +24 -0
  213. package/dist/migrations/index.js +62 -0
  214. package/dist/package.json +8 -5
  215. package/dist/tests/utilities/TestConfiguration.js +13 -6
  216. package/dist/threads/query.js +4 -0
  217. package/dist/tsconfig.tsbuildinfo +1 -1
  218. package/dist/utilities/rowProcessor/index.js +18 -11
  219. package/dist/utilities/rowProcessor/utils.js +14 -4
  220. package/dist/utilities/{usageQuota.js → usageQuota/index.js} +44 -31
  221. package/dist/utilities/usageQuota/rows.js +77 -0
  222. package/dist/utilities/usageQuota/usageQuoteReset.js +16 -0
  223. package/dist/utilities/workerRequests.js +0 -20
  224. package/nodemon.json +1 -1
  225. package/package.json +9 -6
  226. package/src/api/controllers/application.js +52 -24
  227. package/src/api/controllers/auth.js +4 -0
  228. package/src/api/controllers/datasource.js +12 -0
  229. package/src/api/controllers/migrations.js +13 -0
  230. package/src/api/controllers/row/ExternalRequest.ts +1 -1
  231. package/src/api/controllers/row/internal.js +29 -50
  232. package/src/api/controllers/row/internalSearch.js +12 -4
  233. package/src/api/controllers/row/staticFormula.js +157 -0
  234. package/src/api/controllers/row/utils.js +6 -12
  235. package/src/api/controllers/static/index.js +63 -10
  236. package/src/api/controllers/table/bulkFormula.js +183 -0
  237. package/src/api/controllers/table/index.js +16 -24
  238. package/src/api/controllers/table/internal.js +9 -1
  239. package/src/api/controllers/table/utils.js +80 -11
  240. package/src/api/controllers/user.js +2 -0
  241. package/src/api/routes/index.js +2 -2
  242. package/src/api/routes/migrations.js +14 -0
  243. package/src/api/routes/static.js +5 -0
  244. package/src/api/routes/tests/application.spec.js +2 -2
  245. package/src/api/routes/tests/auth.spec.js +1 -2
  246. package/src/api/routes/tests/static.spec.js +98 -0
  247. package/src/app.ts +18 -5
  248. package/src/automations/steps/createRow.js +2 -4
  249. package/src/automations/steps/deleteRow.js +1 -4
  250. package/src/constants/index.js +17 -5
  251. package/src/db/linkedRows/index.js +4 -5
  252. package/src/definitions/common.ts +3 -0
  253. package/src/definitions/datasource.ts +3 -0
  254. package/src/environment.js +2 -0
  255. package/src/integrations/base/sql.ts +14 -7
  256. package/src/integrations/googlesheets.ts +353 -0
  257. package/src/integrations/index.ts +3 -0
  258. package/src/integrations/tests/sql.spec.js +16 -0
  259. package/src/integrations/utils.ts +71 -10
  260. package/src/middleware/authorized.js +64 -30
  261. package/src/middleware/tests/authorized.spec.js +6 -4
  262. package/src/middleware/tests/usageQuota.spec.js +18 -24
  263. package/src/middleware/usageQuota.js +91 -15
  264. package/src/migrations/functions/appUrls.ts +25 -0
  265. package/src/migrations/functions/quotas1.ts +20 -0
  266. package/src/migrations/functions/tests/appUrls.spec.js +29 -0
  267. package/src/migrations/functions/tests/quotas1.spec.js +27 -0
  268. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
  269. package/src/migrations/functions/usageQuotas/index.ts +8 -0
  270. package/src/migrations/functions/usageQuotas/syncApps.ts +18 -0
  271. package/src/migrations/functions/usageQuotas/syncRows.ts +21 -0
  272. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +37 -0
  273. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +43 -0
  274. package/src/migrations/functions/userEmailViewCasing.ts +13 -0
  275. package/src/migrations/index.ts +56 -0
  276. package/src/tests/utilities/TestConfiguration.js +14 -6
  277. package/src/threads/query.js +5 -0
  278. package/src/utilities/rowProcessor/index.js +24 -12
  279. package/src/utilities/rowProcessor/utils.js +23 -7
  280. package/src/utilities/tests/usageQuota/usageQuota.spec.js +72 -0
  281. package/src/utilities/usageQuota/index.js +92 -0
  282. package/src/utilities/usageQuota/rows.js +74 -0
  283. package/src/utilities/usageQuota/usageQuoteReset.js +18 -0
  284. package/src/utilities/workerRequests.js +0 -23
  285. package/builder/assets/index.39e01193.css +0 -1
  286. package/dist/api/controllers/hosting.js +0 -30
  287. package/dist/api/routes/hosting.js +0 -11
  288. package/src/api/controllers/hosting.js +0 -22
  289. package/src/api/routes/hosting.js +0 -13
  290. package/src/api/routes/tests/hosting.spec.js +0 -36
  291. package/src/utilities/usageQuota.js +0 -73
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">66.85% </span>
26
+ <span class="strong">64.07% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>117/175</span>
28
+ <span class='fraction'>132/206</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">45.55% </span>
33
+ <span class="strong">41.41% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>41/90</span>
35
+ <span class='fraction'>41/99</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">62.96% </span>
40
+ <span class="strong">58.82% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>17/27</span>
42
+ <span class='fraction'>20/34</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">67.44% </span>
47
+ <span class="strong">64.5% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>116/172</span>
49
+ <span class='fraction'>129/200</span>
50
50
  </div>
51
51
 
52
52
 
@@ -417,35 +417,131 @@
417
417
  <a name='L358'></a><a href='#L358'>358</a>
418
418
  <a name='L359'></a><a href='#L359'>359</a>
419
419
  <a name='L360'></a><a href='#L360'>360</a>
420
- <a name='L361'></a><a href='#L361'>361</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
421
- <span class="cline-any cline-yes">34x</span>
420
+ <a name='L361'></a><a href='#L361'>361</a>
421
+ <a name='L362'></a><a href='#L362'>362</a>
422
+ <a name='L363'></a><a href='#L363'>363</a>
423
+ <a name='L364'></a><a href='#L364'>364</a>
424
+ <a name='L365'></a><a href='#L365'>365</a>
425
+ <a name='L366'></a><a href='#L366'>366</a>
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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">39x</span>
490
+ <span class="cline-any cline-yes">39x</span>
491
+ <span class="cline-any cline-neutral">&nbsp;</span>
492
+ <span class="cline-any cline-neutral">&nbsp;</span>
493
+ <span class="cline-any cline-neutral">&nbsp;</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-neutral">&nbsp;</span>
496
+ <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-yes">39x</span>
498
+ <span class="cline-any cline-yes">39x</span>
499
+ <span class="cline-any cline-yes">39x</span>
500
+ <span class="cline-any cline-neutral">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-neutral">&nbsp;</span>
503
+ <span class="cline-any cline-yes">39x</span>
504
+ <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-neutral">&nbsp;</span>
506
+ <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-neutral">&nbsp;</span>
508
+ <span class="cline-any cline-yes">39x</span>
509
+ <span class="cline-any cline-neutral">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-neutral">&nbsp;</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-yes">39x</span>
514
+ <span class="cline-any cline-yes">39x</span>
515
+ <span class="cline-any cline-yes">39x</span>
516
+ <span class="cline-any cline-yes">39x</span>
517
+ <span class="cline-any cline-yes">39x</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span>
519
+ <span class="cline-any cline-yes">39x</span>
520
+ <span class="cline-any cline-no">&nbsp;</span>
521
+ <span class="cline-any cline-no">&nbsp;</span>
422
522
  <span class="cline-any cline-neutral">&nbsp;</span>
423
523
  <span class="cline-any cline-neutral">&nbsp;</span>
424
524
  <span class="cline-any cline-neutral">&nbsp;</span>
425
525
  <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-yes">34x</span>
427
- <span class="cline-any cline-yes">34x</span>
428
- <span class="cline-any cline-yes">34x</span>
429
- <span class="cline-any cline-yes">34x</span>
430
- <span class="cline-any cline-yes">34x</span>
526
+ <span class="cline-any cline-no">&nbsp;</span>
527
+ <span class="cline-any cline-neutral">&nbsp;</span>
528
+ <span class="cline-any cline-no">&nbsp;</span>
529
+ <span class="cline-any cline-no">&nbsp;</span>
431
530
  <span class="cline-any cline-neutral">&nbsp;</span>
432
531
  <span class="cline-any cline-neutral">&nbsp;</span>
433
532
  <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-yes">34x</span>
435
- <span class="cline-any cline-yes">34x</span>
436
- <span class="cline-any cline-yes">34x</span>
437
533
  <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-yes">34x</span>
439
- <span class="cline-any cline-yes">99x</span>
440
- <span class="cline-any cline-yes">99x</span>
441
- <span class="cline-any cline-yes">99x</span>
442
- <span class="cline-any cline-yes">99x</span>
534
+ <span class="cline-any cline-yes">39x</span>
535
+ <span class="cline-any cline-yes">101x</span>
536
+ <span class="cline-any cline-yes">101x</span>
537
+ <span class="cline-any cline-yes">101x</span>
538
+ <span class="cline-any cline-yes">101x</span>
443
539
  <span class="cline-any cline-yes">4x</span>
444
540
  <span class="cline-any cline-yes">11x</span>
445
541
  <span class="cline-any cline-neutral">&nbsp;</span>
446
542
  <span class="cline-any cline-neutral">&nbsp;</span>
447
543
  <span class="cline-any cline-neutral">&nbsp;</span>
448
- <span class="cline-any cline-yes">99x</span>
544
+ <span class="cline-any cline-yes">101x</span>
449
545
  <span class="cline-any cline-neutral">&nbsp;</span>
450
546
  <span class="cline-any cline-yes">1x</span>
451
547
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -456,6 +552,8 @@
456
552
  <span class="cline-any cline-yes">1x</span>
457
553
  <span class="cline-any cline-yes">1x</span>
458
554
  <span class="cline-any cline-yes">1x</span>
555
+ <span class="cline-any cline-yes">1x</span>
556
+ <span class="cline-any cline-yes">1x</span>
459
557
  <span class="cline-any cline-no">&nbsp;</span>
460
558
  <span class="cline-any cline-no">&nbsp;</span>
461
559
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -464,13 +562,15 @@
464
562
  <span class="cline-any cline-neutral">&nbsp;</span>
465
563
  <span class="cline-any cline-neutral">&nbsp;</span>
466
564
  <span class="cline-any cline-yes">1x</span>
565
+ <span class="cline-any cline-neutral">&nbsp;</span>
566
+ <span class="cline-any cline-yes">1x</span>
467
567
  <span class="cline-any cline-yes">1x</span>
468
568
  <span class="cline-any cline-neutral">&nbsp;</span>
469
- <span class="cline-any cline-yes">99x</span>
569
+ <span class="cline-any cline-yes">101x</span>
470
570
  <span class="cline-any cline-neutral">&nbsp;</span>
471
571
  <span class="cline-any cline-neutral">&nbsp;</span>
472
572
  <span class="cline-any cline-neutral">&nbsp;</span>
473
- <span class="cline-any cline-yes">34x</span>
573
+ <span class="cline-any cline-yes">39x</span>
474
574
  <span class="cline-any cline-yes">4x</span>
475
575
  <span class="cline-any cline-no">&nbsp;</span>
476
576
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -490,9 +590,9 @@
490
590
  <span class="cline-any cline-yes">4x</span>
491
591
  <span class="cline-any cline-neutral">&nbsp;</span>
492
592
  <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-yes">34x</span>
494
- <span class="cline-any cline-yes">100x</span>
495
- <span class="cline-any cline-yes">99x</span>
593
+ <span class="cline-any cline-yes">39x</span>
594
+ <span class="cline-any cline-yes">102x</span>
595
+ <span class="cline-any cline-yes">101x</span>
496
596
  <span class="cline-any cline-neutral">&nbsp;</span>
497
597
  <span class="cline-any cline-neutral">&nbsp;</span>
498
598
  <span class="cline-any cline-yes">1x</span>
@@ -531,15 +631,19 @@
531
631
  <span class="cline-any cline-neutral">&nbsp;</span>
532
632
  <span class="cline-any cline-neutral">&nbsp;</span>
533
633
  <span class="cline-any cline-yes">1x</span>
634
+ <span class="cline-any cline-neutral">&nbsp;</span>
635
+ <span class="cline-any cline-neutral">&nbsp;</span>
636
+ <span class="cline-any cline-yes">1x</span>
637
+ <span class="cline-any cline-yes">1x</span>
534
638
  <span class="cline-any cline-yes">1x</span>
535
639
  <span class="cline-any cline-yes">1x</span>
536
640
  <span class="cline-any cline-yes">1x</span>
537
641
  <span class="cline-any cline-neutral">&nbsp;</span>
538
642
  <span class="cline-any cline-neutral">&nbsp;</span>
539
- <span class="cline-any cline-yes">34x</span>
540
- <span class="cline-any cline-yes">99x</span>
643
+ <span class="cline-any cline-yes">39x</span>
644
+ <span class="cline-any cline-yes">101x</span>
541
645
  <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-yes">99x</span>
646
+ <span class="cline-any cline-yes">101x</span>
543
647
  <span class="cline-any cline-yes">2x</span>
544
648
  <span class="cline-any cline-yes">2x</span>
545
649
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -577,12 +681,12 @@
577
681
  <span class="cline-any cline-neutral">&nbsp;</span>
578
682
  <span class="cline-any cline-neutral">&nbsp;</span>
579
683
  <span class="cline-any cline-neutral">&nbsp;</span>
580
- <span class="cline-any cline-yes">99x</span>
684
+ <span class="cline-any cline-yes">101x</span>
581
685
  <span class="cline-any cline-neutral">&nbsp;</span>
582
686
  <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-yes">34x</span>
687
+ <span class="cline-any cline-yes">39x</span>
584
688
  <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-yes">99x</span>
689
+ <span class="cline-any cline-yes">101x</span>
586
690
  <span class="cline-any cline-yes">1x</span>
587
691
  <span class="cline-any cline-neutral">&nbsp;</span>
588
692
  <span class="cline-any cline-yes">5x</span>
@@ -590,60 +694,75 @@
590
694
  <span class="cline-any cline-neutral">&nbsp;</span>
591
695
  <span class="cline-any cline-neutral">&nbsp;</span>
592
696
  <span class="cline-any cline-neutral">&nbsp;</span>
593
- <span class="cline-any cline-yes">99x</span>
697
+ <span class="cline-any cline-yes">101x</span>
594
698
  <span class="cline-any cline-neutral">&nbsp;</span>
595
699
  <span class="cline-any cline-neutral">&nbsp;</span>
596
700
  <span class="cline-any cline-neutral">&nbsp;</span>
597
701
  <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-yes">99x</span>
599
- <span class="cline-any cline-yes">99x</span>
600
- <span class="cline-any cline-yes">99x</span>
601
- <span class="cline-any cline-yes">99x</span>
702
+ <span class="cline-any cline-yes">101x</span>
703
+ <span class="cline-any cline-yes">101x</span>
704
+ <span class="cline-any cline-yes">101x</span>
705
+ <span class="cline-any cline-yes">101x</span>
602
706
  <span class="cline-any cline-neutral">&nbsp;</span>
603
- <span class="cline-any cline-yes">99x</span>
604
- <span class="cline-any cline-yes">99x</span>
707
+ <span class="cline-any cline-yes">101x</span>
708
+ <span class="cline-any cline-yes">101x</span>
605
709
  <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-yes">99x</span>
710
+ <span class="cline-any cline-yes">101x</span>
607
711
  <span class="cline-any cline-neutral">&nbsp;</span>
608
712
  <span class="cline-any cline-neutral">&nbsp;</span>
609
713
  <span class="cline-any cline-neutral">&nbsp;</span>
610
714
  <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-yes">99x</span>
715
+ <span class="cline-any cline-yes">101x</span>
612
716
  <span class="cline-any cline-yes">4x</span>
613
717
  <span class="cline-any cline-neutral">&nbsp;</span>
614
- <span class="cline-any cline-yes">99x</span>
615
- <span class="cline-any cline-yes">99x</span>
718
+ <span class="cline-any cline-yes">101x</span>
719
+ <span class="cline-any cline-yes">101x</span>
720
+ <span class="cline-any cline-neutral">&nbsp;</span>
721
+ <span class="cline-any cline-neutral">&nbsp;</span>
616
722
  <span class="cline-any cline-neutral">&nbsp;</span>
617
723
  <span class="cline-any cline-neutral">&nbsp;</span>
724
+ <span class="cline-any cline-yes">101x</span>
618
725
  <span class="cline-any cline-neutral">&nbsp;</span>
619
726
  <span class="cline-any cline-neutral">&nbsp;</span>
620
- <span class="cline-any cline-yes">99x</span>
621
727
  <span class="cline-any cline-neutral">&nbsp;</span>
622
728
  <span class="cline-any cline-neutral">&nbsp;</span>
623
729
  <span class="cline-any cline-neutral">&nbsp;</span>
730
+ <span class="cline-any cline-yes">101x</span>
731
+ <span class="cline-any cline-yes">101x</span>
624
732
  <span class="cline-any cline-neutral">&nbsp;</span>
625
- <span class="cline-any cline-yes">99x</span>
626
- <span class="cline-any cline-yes">99x</span>
627
733
  <span class="cline-any cline-neutral">&nbsp;</span>
628
734
  <span class="cline-any cline-neutral">&nbsp;</span>
629
735
  <span class="cline-any cline-neutral">&nbsp;</span>
736
+ <span class="cline-any cline-yes">101x</span>
737
+ <span class="cline-any cline-yes">101x</span>
630
738
  <span class="cline-any cline-neutral">&nbsp;</span>
631
- <span class="cline-any cline-yes">99x</span>
632
- <span class="cline-any cline-yes">99x</span>
633
739
  <span class="cline-any cline-neutral">&nbsp;</span>
634
740
  <span class="cline-any cline-neutral">&nbsp;</span>
635
741
  <span class="cline-any cline-neutral">&nbsp;</span>
636
742
  <span class="cline-any cline-neutral">&nbsp;</span>
743
+ <span class="cline-any cline-yes">101x</span>
637
744
  <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-yes">99x</span>
639
745
  <span class="cline-any cline-neutral">&nbsp;</span>
640
746
  <span class="cline-any cline-neutral">&nbsp;</span>
747
+ <span class="cline-any cline-yes">101x</span>
641
748
  <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-yes">99x</span>
643
749
  <span class="cline-any cline-neutral">&nbsp;</span>
644
750
  <span class="cline-any cline-neutral">&nbsp;</span>
751
+ <span class="cline-any cline-yes">39x</span>
752
+ <span class="cline-any cline-yes">207x</span>
753
+ <span class="cline-any cline-yes">207x</span>
645
754
  <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-yes">34x</span>
755
+ <span class="cline-any cline-neutral">&nbsp;</span>
756
+ <span class="cline-any cline-neutral">&nbsp;</span>
757
+ <span class="cline-any cline-neutral">&nbsp;</span>
758
+ <span class="cline-any cline-yes">474x</span>
759
+ <span class="cline-any cline-neutral">&nbsp;</span>
760
+ <span class="cline-any cline-neutral">&nbsp;</span>
761
+ <span class="cline-any cline-neutral">&nbsp;</span>
762
+ <span class="cline-any cline-neutral">&nbsp;</span>
763
+ <span class="cline-any cline-neutral">&nbsp;</span>
764
+ <span class="cline-any cline-neutral">&nbsp;</span>
765
+ <span class="cline-any cline-yes">39x</span>
647
766
  <span class="cline-any cline-no">&nbsp;</span>
648
767
  <span class="cline-any cline-no">&nbsp;</span>
649
768
  <span class="cline-any cline-no">&nbsp;</span>
@@ -652,22 +771,24 @@
652
771
  <span class="cline-any cline-no">&nbsp;</span>
653
772
  <span class="cline-any cline-neutral">&nbsp;</span>
654
773
  <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-yes">34x</span>
774
+ <span class="cline-any cline-yes">39x</span>
656
775
  <span class="cline-any cline-no">&nbsp;</span>
657
776
  <span class="cline-any cline-no">&nbsp;</span>
658
777
  <span class="cline-any cline-neutral">&nbsp;</span>
659
778
  <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-yes">34x</span>
779
+ <span class="cline-any cline-yes">39x</span>
661
780
  <span class="cline-any cline-yes">30x</span>
662
781
  <span class="cline-any cline-yes">30x</span>
663
782
  <span class="cline-any cline-no">&nbsp;</span>
664
783
  <span class="cline-any cline-no">&nbsp;</span>
784
+ <span class="cline-any cline-no">&nbsp;</span>
785
+ <span class="cline-any cline-no">&nbsp;</span>
665
786
  <span class="cline-any cline-neutral">&nbsp;</span>
666
787
  <span class="cline-any cline-yes">30x</span>
667
788
  <span class="cline-any cline-neutral">&nbsp;</span>
668
789
  <span class="cline-any cline-neutral">&nbsp;</span>
669
790
  <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-yes">34x</span>
791
+ <span class="cline-any cline-yes">39x</span>
671
792
  <span class="cline-any cline-yes">1x</span>
672
793
  <span class="cline-any cline-yes">1x</span>
673
794
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -739,29 +860,46 @@
739
860
  <span class="cline-any cline-neutral">&nbsp;</span>
740
861
  <span class="cline-any cline-neutral">&nbsp;</span>
741
862
  <span class="cline-any cline-neutral">&nbsp;</span>
742
- <span class="cline-any cline-yes">34x</span>
863
+ <span class="cline-any cline-yes">39x</span>
864
+ <span class="cline-any cline-no">&nbsp;</span>
865
+ <span class="cline-any cline-neutral">&nbsp;</span>
866
+ <span class="cline-any cline-neutral">&nbsp;</span>
867
+ <span class="cline-any cline-yes">39x</span>
868
+ <span class="cline-any cline-no">&nbsp;</span>
869
+ <span class="cline-any cline-neutral">&nbsp;</span>
870
+ <span class="cline-any cline-neutral">&nbsp;</span>
871
+ <span class="cline-any cline-yes">39x</span>
743
872
  <span class="cline-any cline-no">&nbsp;</span>
744
873
  <span class="cline-any cline-neutral">&nbsp;</span>
745
874
  <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-yes">34x</span>
875
+ <span class="cline-any cline-neutral">&nbsp;</span>
876
+ <span class="cline-any cline-neutral">&nbsp;</span>
877
+ <span class="cline-any cline-no">&nbsp;</span>
878
+ <span class="cline-any cline-no">&nbsp;</span>
879
+ <span class="cline-any cline-neutral">&nbsp;</span>
747
880
  <span class="cline-any cline-no">&nbsp;</span>
748
881
  <span class="cline-any cline-neutral">&nbsp;</span>
749
882
  <span class="cline-any cline-neutral">&nbsp;</span>
750
- <span class="cline-any cline-yes">34x</span>
883
+ <span class="cline-any cline-yes">39x</span>
751
884
  <span class="cline-any cline-no">&nbsp;</span>
752
885
  <span class="cline-any cline-neutral">&nbsp;</span>
753
886
  <span class="cline-any cline-neutral">&nbsp;</span>
754
887
  <span class="cline-any cline-neutral">&nbsp;</span>
888
+ <span class="cline-any cline-no">&nbsp;</span>
755
889
  <span class="cline-any cline-neutral">&nbsp;</span>
756
890
  <span class="cline-any cline-no">&nbsp;</span>
757
891
  <span class="cline-any cline-no">&nbsp;</span>
892
+ <span class="cline-any cline-no">&nbsp;</span>
893
+ <span class="cline-any cline-no">&nbsp;</span>
894
+ <span class="cline-any cline-no">&nbsp;</span>
895
+ <span class="cline-any cline-neutral">&nbsp;</span>
758
896
  <span class="cline-any cline-neutral">&nbsp;</span>
759
897
  <span class="cline-any cline-no">&nbsp;</span>
760
898
  <span class="cline-any cline-neutral">&nbsp;</span>
761
899
  <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-yes">34x</span>
763
- <span class="cline-any cline-yes">99x</span>
764
- <span class="cline-any cline-yes">95x</span>
900
+ <span class="cline-any cline-yes">39x</span>
901
+ <span class="cline-any cline-yes">101x</span>
902
+ <span class="cline-any cline-yes">97x</span>
765
903
  <span class="cline-any cline-neutral">&nbsp;</span>
766
904
  <span class="cline-any cline-yes">4x</span>
767
905
  <span class="cline-any cline-yes">11x</span>
@@ -776,26 +914,53 @@
776
914
  <span class="cline-any cline-yes">4x</span>
777
915
  <span class="cline-any cline-neutral">&nbsp;</span>
778
916
  <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-yes">34x</span>
917
+ <span class="cline-any cline-yes">39x</span>
780
918
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../../db")
781
919
  const csvParser = require("../../../utilities/csvParser")
782
920
  const {
783
921
  getRowParams,
784
922
  generateRowID,
785
923
  InternalTables,
924
+ getTableParams,
925
+ BudibaseInternalDB,
786
926
  } = require("../../../db/utils")
787
- const { isEqual } = require("lodash/fp")
927
+ const { isEqual } = require("lodash")
788
928
  const { AutoFieldSubTypes, FieldTypes } = require("../../../constants")
789
- const { inputProcessing } = require("../../../utilities/rowProcessor")
790
- const { USERS_TABLE_SCHEMA, SwitchableTypes } = require("../../../constants")
929
+ const {
930
+ inputProcessing,
931
+ cleanupAttachments,
932
+ } = require("../../../utilities/rowProcessor")
933
+ const {
934
+ USERS_TABLE_SCHEMA,
935
+ SwitchableTypes,
936
+ CanSwitchTypes,
937
+ } = require("../../../constants")
791
938
  const {
792
939
  isExternalTable,
793
940
  breakExternalTableId,
941
+ isSQL,
794
942
  } = require("../../../integrations/utils")
795
943
  const { getViews, saveView } = require("../view/utils")
796
944
  const viewTemplate = require("../view/viewBuilder")
945
+ const usageQuota = require("../../../utilities/usageQuota")
946
+ const { cloneDeep } = require("lodash/fp")
797
947
  &nbsp;
798
- exports.checkForColumnUpdates = async (db, oldTable, updatedTable) =&gt; {
948
+ exports.clearColumns = <span class="fstat-no" title="function not covered" >as</span>ync (appId, table, columnNames) =&gt; {
949
+ const db = <span class="cstat-no" title="statement not covered" >new CouchDB(appId)</span>
950
+ const rows = <span class="cstat-no" title="statement not covered" >await db.allDocs(</span>
951
+ getRowParams(table._id, null, {
952
+ include_docs: true,
953
+ })
954
+ )
955
+ <span class="cstat-no" title="statement not covered" > return db.bulkDocs(</span>
956
+ rows.rows.map(<span class="fstat-no" title="function not covered" >({</span> doc }) =&gt; {
957
+ <span class="cstat-no" title="statement not covered" > columnNames.forEach(<span class="fstat-no" title="function not covered" >co</span>lName =&gt; <span class="cstat-no" title="statement not covered" >delete doc[colName])</span></span>
958
+ <span class="cstat-no" title="statement not covered" > return doc</span>
959
+ })
960
+ )
961
+ }
962
+ &nbsp;
963
+ exports.checkForColumnUpdates = async (appId, db, oldTable, updatedTable) =&gt; {
799
964
  let updatedRows = []
800
965
  const rename = updatedTable._rename
801
966
  let deletedColumns = []
@@ -812,16 +977,20 @@ exports.checkForColumnUpdates = async (db, oldTable, updatedTable) =&gt; {
812
977
  include_docs: true,
813
978
  })
814
979
  )
815
- updatedRows = rows.rows.map(({ doc }) =&gt; {
980
+ const rawRows = rows.rows.map(({ doc }) =&gt; doc)
981
+ updatedRows = rawRows.map(row =&gt; {
982
+ row = cloneDeep(row)
816
983
  if (rename) {
817
- doc[rename.updated] = doc[rename.old]
818
- delete doc[rename.old]
984
+ row[rename.updated] = row[rename.old]
985
+ delete row[rename.old]
819
986
  } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="else path not taken" >E</span>if (deletedColumns.length !== 0) {</span>
820
- <span class="cstat-no" title="statement not covered" > deletedColumns.forEach(<span class="fstat-no" title="function not covered" >co</span>lName =&gt; <span class="cstat-no" title="statement not covered" >delete doc[colName])</span></span>
987
+ <span class="cstat-no" title="statement not covered" > deletedColumns.forEach(<span class="fstat-no" title="function not covered" >co</span>lName =&gt; <span class="cstat-no" title="statement not covered" >delete row[colName])</span></span>
821
988
  }
822
- return doc
989
+ return row
823
990
  })
824
991
  &nbsp;
992
+ // cleanup any attachments from object storage for deleted attachment columns
993
+ await cleanupAttachments(appId, updatedTable, { oldTable, rows: rawRows })
825
994
  // Update views
826
995
  await exports.checkForViewUpdates(db, updatedTable, rename, deletedColumns)
827
996
  delete updatedTable._rename
@@ -890,7 +1059,11 @@ exports.handleDataImport = async (appId, user, table, dataImport) =&gt; {
890
1059
  finalData.push(row)
891
1060
  }
892
1061
  &nbsp;
1062
+ await usageQuota.update(usageQuota.Properties.ROW, finalData.length, {
1063
+ dryRun: true,
1064
+ })
893
1065
  await db.bulkDocs(finalData)
1066
+ await usageQuota.update(usageQuota.Properties.ROW, finalData.length)
894
1067
  let response = await db.put(table)
895
1068
  table._rev = response._rev
896
1069
  return table
@@ -978,6 +1151,7 @@ class TableSaveFunctions {
978
1151
  // when confirmed valid
979
1152
  async mid(table) {
980
1153
  let response = await exports.checkForColumnUpdates(
1154
+ this.appId,
981
1155
  this.db,
982
1156
  this.oldTable,
983
1157
  table
@@ -1003,6 +1177,20 @@ class TableSaveFunctions {
1003
1177
  }
1004
1178
  }
1005
1179
  &nbsp;
1180
+ exports.getAllInternalTables = async appId =&gt; {
1181
+ const db = new CouchDB(appId)
1182
+ const internalTables = await db.allDocs(
1183
+ getTableParams(null, {
1184
+ include_docs: true,
1185
+ })
1186
+ )
1187
+ return internalTables.rows.map(tableDoc =&gt; ({
1188
+ ...tableDoc.doc,
1189
+ type: "internal",
1190
+ sourceId: BudibaseInternalDB._id,
1191
+ }))
1192
+ }
1193
+ &nbsp;
1006
1194
  exports.getAllExternalTables = <span class="fstat-no" title="function not covered" >as</span>ync (appId, datasourceId) =&gt; {
1007
1195
  const db = <span class="cstat-no" title="statement not covered" >new CouchDB(appId)</span>
1008
1196
  const datasource = <span class="cstat-no" title="statement not covered" >await db.get(datasourceId)</span>
@@ -1021,7 +1209,9 @@ exports.getTable = async (appId, tableId) =&gt; {
1021
1209
  const db = new CouchDB(appId)
1022
1210
  <span class="missing-if-branch" title="if path not taken" >I</span>if (isExternalTable(tableId)) {
1023
1211
  let { datasourceId, tableName } = <span class="cstat-no" title="statement not covered" >breakExternalTableId(tableId)</span>
1024
- <span class="cstat-no" title="statement not covered" > return exports.getExternalTable(appId, datasourceId, tableName)</span>
1212
+ const datasource = <span class="cstat-no" title="statement not covered" >await db.get(datasourceId)</span>
1213
+ const table = <span class="cstat-no" title="statement not covered" >await exports.getExternalTable(appId, datasourceId, tableName)</span>
1214
+ <span class="cstat-no" title="statement not covered" > return { ...table, sql: isSQL(datasource) }</span>
1025
1215
  } else {
1026
1216
  return db.get(tableId)
1027
1217
  }
@@ -1119,6 +1309,23 @@ exports.foreignKeyStructure = <span class="fstat-no" title="function not covered
1119
1309
  <span class="cstat-no" title="statement not covered" > return structure</span>
1120
1310
  }
1121
1311
  &nbsp;
1312
+ exports.areSwitchableTypes = <span class="fstat-no" title="function not covered" >(t</span>ype1, type2) =&gt; {
1313
+ <span class="cstat-no" title="statement not covered" > if (</span>
1314
+ SwitchableTypes.indexOf(type1) === -1 &amp;&amp;
1315
+ SwitchableTypes.indexOf(type2) === -1
1316
+ ) {
1317
+ <span class="cstat-no" title="statement not covered" > return false</span>
1318
+ }
1319
+ <span class="cstat-no" title="statement not covered" > for (let option of CanSwitchTypes) {</span>
1320
+ const index1 = <span class="cstat-no" title="statement not covered" >option.indexOf(type1),</span>
1321
+ index2 = <span class="cstat-no" title="statement not covered" >option.indexOf(type2)</span>
1322
+ <span class="cstat-no" title="statement not covered" > if (index1 !== -1 &amp;&amp; index2 !== -1 &amp;&amp; index1 !== index2) {</span>
1323
+ <span class="cstat-no" title="statement not covered" > return true</span>
1324
+ }
1325
+ }
1326
+ <span class="cstat-no" title="statement not covered" > return false</span>
1327
+ }
1328
+ &nbsp;
1122
1329
  exports.hasTypeChanged = (table, oldTable) =&gt; {
1123
1330
  if (!oldTable) {
1124
1331
  return false
@@ -1129,7 +1336,7 @@ exports.hasTypeChanged = (table, oldTable) =&gt; {
1129
1336
  continue
1130
1337
  }
1131
1338
  const newType = table.schema[key].type
1132
- <span class="missing-if-branch" title="if path not taken" >I</span>if (oldType !== newType &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >SwitchableTypes.indexOf(oldType) === -1)</span> {
1339
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (oldType !== newType &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >!exports.areSwitchableTypes(oldType, newType))</span> {
1133
1340
  <span class="cstat-no" title="statement not covered" > return true</span>
1134
1341
  }
1135
1342
  }
@@ -1144,7 +1351,7 @@ exports.TableSaveFunctions = TableSaveFunctions
1144
1351
  <div class='footer quiet pad2 space-top1 center small'>
1145
1352
  Code coverage generated by
1146
1353
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1147
- at Mon Jan 24 2022 15:48:00 GMT+0000 (Coordinated Universal Time)
1354
+ at Mon Jan 31 2022 16:54:35 GMT+0000 (Coordinated Universal Time)
1148
1355
  </div>
1149
1356
  </div>
1150
1357
  <script src="../../../prettify.js"></script>
@@ -181,7 +181,7 @@ exports.downloadTemplate = async function (ctx) {
181
181
  <div class='footer quiet pad2 space-top1 center small'>
182
182
  Code coverage generated by
183
183
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
184
- at Mon Jan 24 2022 15:48:00 GMT+0000 (Coordinated Universal Time)
184
+ at Mon Jan 31 2022 16:54:35 GMT+0000 (Coordinated Universal Time)
185
185
  </div>
186
186
  </div>
187
187
  <script src="../../prettify.js"></script>