@budibase/server 0.9.188 → 0.9.190-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 (307) hide show
  1. package/Dockerfile +7 -1
  2. package/__mocks__/mssql.ts +1 -1
  3. package/__mocks__/oracledb.ts +31 -0
  4. package/__mocks__/pg.ts +3 -0
  5. package/builder/assets/bb-space-man.5be51a45.svg +290 -0
  6. package/builder/assets/index.7d405e74.css +1 -0
  7. package/builder/assets/index.edea4fa5.js +1316 -0
  8. package/builder/assets/oracle.66592424.png +0 -0
  9. package/builder/assets/vendor.470042a4.js +152 -0
  10. package/builder/assets/vendor.5e1fe644.css +1 -0
  11. package/builder/index.html +4 -4
  12. package/coverage/clover.xml +1507 -1081
  13. package/coverage/coverage-final.json +93 -89
  14. package/coverage/lcov-report/api/controllers/analytics.js.html +2 -2
  15. package/coverage/lcov-report/api/controllers/apikeys.js.html +2 -2
  16. package/coverage/lcov-report/api/controllers/application.js.html +64 -13
  17. package/coverage/lcov-report/api/controllers/auth.js.html +19 -10
  18. package/coverage/lcov-report/api/controllers/automation.js.html +3 -3
  19. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  22. package/coverage/lcov-report/api/controllers/datasource.js.html +232 -28
  23. package/coverage/lcov-report/api/controllers/dev.js.html +16 -7
  24. package/coverage/lcov-report/api/controllers/hosting.js.html +10 -10
  25. package/coverage/lcov-report/api/controllers/index.html +91 -91
  26. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/layout.js.html +3 -3
  28. package/coverage/lcov-report/api/controllers/metadata.js.html +3 -3
  29. package/coverage/lcov-report/api/controllers/permission.js.html +3 -3
  30. package/coverage/lcov-report/api/controllers/query.js.html +53 -209
  31. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  32. package/coverage/lcov-report/api/controllers/routing.js.html +3 -3
  33. package/coverage/lcov-report/api/controllers/row/external.js.html +17 -8
  34. package/coverage/lcov-report/api/controllers/row/index.html +26 -26
  35. package/coverage/lcov-report/api/controllers/row/index.js.html +2 -2
  36. package/coverage/lcov-report/api/controllers/row/internal.js.html +9 -9
  37. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +2 -2
  38. package/coverage/lcov-report/api/controllers/row/utils.js.html +21 -30
  39. package/coverage/lcov-report/api/controllers/screen.js.html +2 -2
  40. package/coverage/lcov-report/api/controllers/script.js.html +3 -3
  41. package/coverage/lcov-report/api/controllers/table/external.js.html +1001 -0
  42. package/coverage/lcov-report/api/controllers/table/index.html +56 -26
  43. package/coverage/lcov-report/api/controllers/table/index.js.html +80 -350
  44. package/coverage/lcov-report/api/controllers/table/internal.js.html +545 -0
  45. package/coverage/lcov-report/api/controllers/table/utils.js.html +175 -52
  46. package/coverage/lcov-report/api/controllers/templates.js.html +4 -4
  47. package/coverage/lcov-report/api/controllers/user.js.html +390 -33
  48. package/coverage/lcov-report/api/controllers/view/exporters.js.html +19 -4
  49. package/coverage/lcov-report/api/controllers/view/index.html +22 -22
  50. package/coverage/lcov-report/api/controllers/view/index.js.html +52 -13
  51. package/coverage/lcov-report/api/controllers/view/utils.js.html +11 -11
  52. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +3 -3
  53. package/coverage/lcov-report/api/controllers/webhook.js.html +4 -4
  54. package/coverage/lcov-report/api/index.html +1 -1
  55. package/coverage/lcov-report/api/index.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/dev.js.html +2 -2
  67. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/index.html +4 -4
  69. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/query.js.html +5 -2
  75. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/static.js.html +2 -2
  81. package/coverage/lcov-report/api/routes/table.js.html +35 -2
  82. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/user.js.html +17 -2
  84. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  85. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  86. package/coverage/lcov-report/automations/actions.js.html +2 -2
  87. package/coverage/lcov-report/automations/automationUtils.js.html +4 -4
  88. package/coverage/lcov-report/automations/bullboard.js.html +71 -20
  89. package/coverage/lcov-report/automations/index.html +35 -50
  90. package/coverage/lcov-report/automations/index.js.html +2 -2
  91. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/discord.js.html +3 -3
  96. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/executeScript.js.html +3 -3
  98. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/index.html +14 -14
  100. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +3 -3
  102. package/coverage/lcov-report/automations/steps/queryRows.js.html +3 -3
  103. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  104. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  106. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  107. package/coverage/lcov-report/automations/steps/utils.js.html +7 -7
  108. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  110. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  111. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  112. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  113. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  114. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  115. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  116. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  117. package/coverage/lcov-report/automations/triggers.js.html +22 -10
  118. package/coverage/lcov-report/automations/utils.js.html +42 -12
  119. package/coverage/lcov-report/constants/index.html +5 -5
  120. package/coverage/lcov-report/constants/index.js.html +87 -21
  121. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  122. package/coverage/lcov-report/constants/screens.js.html +1 -1
  123. package/coverage/lcov-report/db/client.js.html +2 -2
  124. package/coverage/lcov-report/db/inMemoryView.js.html +2 -2
  125. package/coverage/lcov-report/db/index.html +2 -2
  126. package/coverage/lcov-report/db/index.js.html +1 -1
  127. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +6 -6
  128. package/coverage/lcov-report/db/linkedRows/index.html +10 -10
  129. package/coverage/lcov-report/db/linkedRows/index.js.html +5 -5
  130. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +6 -6
  131. package/coverage/lcov-report/db/newid.js.html +3 -3
  132. package/coverage/lcov-report/db/utils.js.html +57 -57
  133. package/coverage/lcov-report/events/AutomationEmitter.js.html +6 -6
  134. package/coverage/lcov-report/events/index.html +6 -6
  135. package/coverage/lcov-report/events/index.js.html +1 -1
  136. package/coverage/lcov-report/events/utils.js.html +5 -5
  137. package/coverage/lcov-report/index.html +106 -91
  138. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  139. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  140. package/coverage/lcov-report/middleware/appInfo.js.html +2 -2
  141. package/coverage/lcov-report/middleware/authorized.js.html +11 -8
  142. package/coverage/lcov-report/middleware/builder.js.html +16 -7
  143. package/coverage/lcov-report/middleware/currentapp.js.html +6 -6
  144. package/coverage/lcov-report/middleware/index.html +23 -23
  145. package/coverage/lcov-report/middleware/joi-validator.js.html +2 -2
  146. package/coverage/lcov-report/middleware/resourceId.js.html +18 -18
  147. package/coverage/lcov-report/middleware/selfhost.js.html +2 -2
  148. package/coverage/lcov-report/middleware/usageQuota.js.html +4 -4
  149. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  150. package/coverage/lcov-report/{automations/thread.js.html → threads/automation.js.html} +90 -33
  151. package/coverage/lcov-report/threads/index.html +141 -0
  152. package/coverage/lcov-report/threads/index.js.html +278 -0
  153. package/coverage/lcov-report/threads/query.js.html +278 -0
  154. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  155. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  156. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  157. package/coverage/lcov-report/utilities/csvParser.js.html +144 -15
  158. package/coverage/lcov-report/utilities/global.js.html +26 -11
  159. package/coverage/lcov-report/utilities/index.html +48 -48
  160. package/coverage/lcov-report/utilities/index.js.html +47 -14
  161. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +30 -9
  162. package/coverage/lcov-report/utilities/queue/index.html +14 -14
  163. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  164. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  165. package/coverage/lcov-report/utilities/rowProcessor/index.html +4 -4
  166. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +2 -2
  167. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +3 -3
  168. package/coverage/lcov-report/utilities/scriptRunner.js.html +16 -7
  169. package/coverage/lcov-report/utilities/security.js.html +3 -3
  170. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  171. package/coverage/lcov-report/utilities/users.js.html +1 -1
  172. package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
  173. package/coverage/lcov.info +2495 -1737
  174. package/dist/api/controllers/application.js +15 -1
  175. package/dist/api/controllers/auth.js +3 -3
  176. package/dist/api/controllers/datasource.js +67 -16
  177. package/dist/api/controllers/deploy/index.js +2 -0
  178. package/dist/api/controllers/dev.js +4 -1
  179. package/dist/api/controllers/query.js +30 -58
  180. package/dist/api/controllers/row/ExternalRequest.js +78 -34
  181. package/dist/api/controllers/row/external.js +3 -1
  182. package/dist/api/controllers/row/utils.js +6 -12
  183. package/dist/api/controllers/table/external.js +249 -0
  184. package/dist/api/controllers/table/index.js +49 -123
  185. package/dist/api/controllers/table/internal.js +150 -0
  186. package/dist/api/controllers/table/utils.js +62 -28
  187. package/dist/api/controllers/user.js +123 -11
  188. package/dist/api/controllers/view/exporters.js +4 -0
  189. package/dist/api/controllers/view/index.js +14 -2
  190. package/dist/api/routes/query.js +1 -1
  191. package/dist/api/routes/table.js +7 -1
  192. package/dist/api/routes/user.js +2 -1
  193. package/dist/app.js +2 -11
  194. package/dist/automations/bullboard.js +37 -10
  195. package/dist/automations/triggers.js +7 -3
  196. package/dist/automations/utils.js +11 -2
  197. package/dist/constants/index.js +19 -0
  198. package/dist/definitions/datasource.js +5 -0
  199. package/dist/environment.js +13 -0
  200. package/dist/integrations/base/IntegrationBase.js +2 -0
  201. package/dist/integrations/base/datasourcePlus.js +2 -0
  202. package/dist/integrations/base/sql.js +353 -177
  203. package/dist/integrations/base/sqlTable.js +143 -0
  204. package/dist/integrations/base/utils.js +30 -0
  205. package/dist/integrations/index.js +6 -0
  206. package/dist/integrations/microsoftSqlServer.js +117 -9
  207. package/dist/integrations/mysql.js +16 -85
  208. package/dist/integrations/oracle.js +347 -0
  209. package/dist/integrations/postgres.js +35 -28
  210. package/dist/integrations/utils.js +71 -9
  211. package/dist/middleware/authorized.js +2 -1
  212. package/dist/middleware/builder.js +4 -1
  213. package/dist/package.json +12 -7
  214. package/dist/tests/utilities/TestConfiguration.js +2 -1
  215. package/dist/{automations/thread.js → threads/automation.js} +26 -8
  216. package/dist/threads/index.js +64 -0
  217. package/dist/threads/query.js +64 -0
  218. package/dist/tsconfig.tsbuildinfo +1 -1
  219. package/dist/utilities/csvParser.js +46 -5
  220. package/dist/utilities/global.js +6 -2
  221. package/dist/utilities/index.js +11 -0
  222. package/dist/utilities/queue/inMemoryQueue.js +8 -0
  223. package/dist/utilities/scriptRunner.js +4 -1
  224. package/package.json +13 -8
  225. package/scripts/dev/manage.js +1 -0
  226. package/scripts/integrations/mssql/data/Dockerfile +9 -0
  227. package/scripts/integrations/mssql/data/entrypoint.sh +24 -0
  228. package/scripts/integrations/mssql/data/setup.sql +54 -0
  229. package/scripts/integrations/mssql/docker-compose.yaml +12 -0
  230. package/scripts/integrations/mssql/reset.sh +3 -0
  231. package/scripts/integrations/oracle/docker-compose.yml +19 -0
  232. package/scripts/integrations/oracle/instantclient/linux/x86-64/basiclite-21.4.zip +0 -0
  233. package/scripts/integrations/oracle/instantclient/linux/x86-64/install.sh +23 -0
  234. package/scripts/integrations/oracle/oracle.md +90 -0
  235. package/scripts/integrations/postgres/docker-compose.yml +3 -3
  236. package/scripts/likeCypress.ts +33 -0
  237. package/src/api/controllers/application.js +18 -1
  238. package/src/api/controllers/auth.js +3 -0
  239. package/src/api/controllers/datasource.js +84 -16
  240. package/src/api/controllers/deploy/index.js +2 -0
  241. package/src/api/controllers/dev.js +4 -1
  242. package/src/api/controllers/query.js +29 -81
  243. package/src/api/controllers/row/ExternalRequest.ts +91 -36
  244. package/src/api/controllers/row/external.js +4 -1
  245. package/src/api/controllers/row/utils.js +8 -11
  246. package/src/api/controllers/table/external.js +307 -0
  247. package/src/api/controllers/table/index.js +47 -137
  248. package/src/api/controllers/table/internal.js +155 -0
  249. package/src/api/controllers/table/utils.js +74 -33
  250. package/src/api/controllers/user.js +132 -13
  251. package/src/api/controllers/view/exporters.js +5 -0
  252. package/src/api/controllers/view/index.js +15 -2
  253. package/src/api/routes/query.js +1 -0
  254. package/src/api/routes/table.js +11 -0
  255. package/src/api/routes/tests/datasource.spec.js +2 -2
  256. package/src/api/routes/tests/misc.spec.js +5 -1
  257. package/src/api/routes/tests/query.spec.js +0 -1
  258. package/src/api/routes/user.js +5 -0
  259. package/src/app.ts +2 -10
  260. package/src/automations/bullboard.js +28 -11
  261. package/src/automations/tests/automation.spec.js +3 -4
  262. package/src/automations/triggers.js +7 -3
  263. package/src/automations/utils.js +12 -2
  264. package/src/constants/index.js +22 -0
  265. package/src/definitions/common.ts +7 -1
  266. package/src/definitions/datasource.ts +10 -3
  267. package/src/environment.js +15 -0
  268. package/src/integrations/airtable.ts +2 -1
  269. package/src/integrations/arangodb.ts +2 -1
  270. package/src/integrations/base/IntegrationBase.ts +6 -0
  271. package/src/integrations/base/datasourcePlus.ts +9 -0
  272. package/src/integrations/base/sql.ts +377 -218
  273. package/src/integrations/base/sqlTable.ts +180 -0
  274. package/src/integrations/base/utils.ts +22 -0
  275. package/src/integrations/couchdb.ts +2 -1
  276. package/src/integrations/dynamodb.ts +2 -1
  277. package/src/integrations/elasticsearch.ts +2 -1
  278. package/src/integrations/index.ts +7 -0
  279. package/src/integrations/microsoftSqlServer.ts +145 -13
  280. package/src/integrations/mongodb.ts +2 -1
  281. package/src/integrations/mysql.ts +23 -95
  282. package/src/integrations/oracle.ts +458 -0
  283. package/src/integrations/postgres.ts +45 -35
  284. package/src/integrations/rest.ts +2 -1
  285. package/src/integrations/s3.ts +2 -1
  286. package/src/integrations/tests/microsoftSqlServer.spec.js +22 -15
  287. package/src/integrations/tests/oracle.spec.js +94 -0
  288. package/src/integrations/tests/postgres.spec.js +4 -0
  289. package/src/integrations/utils.ts +78 -8
  290. package/src/middleware/authorized.js +2 -1
  291. package/src/middleware/builder.js +4 -1
  292. package/src/tests/utilities/TestConfiguration.js +2 -1
  293. package/src/{automations/thread.js → threads/automation.js} +27 -8
  294. package/src/threads/index.js +66 -0
  295. package/src/threads/query.js +66 -0
  296. package/src/utilities/csvParser.js +48 -5
  297. package/src/utilities/global.js +7 -2
  298. package/src/utilities/index.js +11 -0
  299. package/src/utilities/queue/inMemoryQueue.js +7 -0
  300. package/src/utilities/scriptRunner.js +4 -1
  301. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -6
  302. package/src/utilities/tests/csvParser.spec.js +3 -0
  303. package/tsconfig.json +1 -1
  304. package/builder/assets/index.550fdba7.js +0 -201
  305. package/builder/assets/index.7469e1e4.css +0 -29
  306. package/builder/assets/vendor.278a305c.js +0 -9
  307. package/builder/assets/vendor.d75d5eb7.css +0 -1
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">66.88% </span>
26
+ <span class="strong">66.85% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>103/154</span>
28
+ <span class='fraction'>117/175</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">44.3% </span>
33
+ <span class="strong">45.55% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>35/79</span>
35
+ <span class='fraction'>41/90</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">69.57% </span>
40
+ <span class="strong">62.96% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>16/23</span>
42
+ <span class='fraction'>17/27</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">67.55% </span>
47
+ <span class="strong">67.44% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>102/151</span>
49
+ <span class='fraction'>116/172</span>
50
50
  </div>
51
51
 
52
52
 
@@ -375,7 +375,48 @@
375
375
  <a name='L316'></a><a href='#L316'>316</a>
376
376
  <a name='L317'></a><a href='#L317'>317</a>
377
377
  <a name='L318'></a><a href='#L318'>318</a>
378
- <a name='L319'></a><a href='#L319'>319</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
378
+ <a name='L319'></a><a href='#L319'>319</a>
379
+ <a name='L320'></a><a href='#L320'>320</a>
380
+ <a name='L321'></a><a href='#L321'>321</a>
381
+ <a name='L322'></a><a href='#L322'>322</a>
382
+ <a name='L323'></a><a href='#L323'>323</a>
383
+ <a name='L324'></a><a href='#L324'>324</a>
384
+ <a name='L325'></a><a href='#L325'>325</a>
385
+ <a name='L326'></a><a href='#L326'>326</a>
386
+ <a name='L327'></a><a href='#L327'>327</a>
387
+ <a name='L328'></a><a href='#L328'>328</a>
388
+ <a name='L329'></a><a href='#L329'>329</a>
389
+ <a name='L330'></a><a href='#L330'>330</a>
390
+ <a name='L331'></a><a href='#L331'>331</a>
391
+ <a name='L332'></a><a href='#L332'>332</a>
392
+ <a name='L333'></a><a href='#L333'>333</a>
393
+ <a name='L334'></a><a href='#L334'>334</a>
394
+ <a name='L335'></a><a href='#L335'>335</a>
395
+ <a name='L336'></a><a href='#L336'>336</a>
396
+ <a name='L337'></a><a href='#L337'>337</a>
397
+ <a name='L338'></a><a href='#L338'>338</a>
398
+ <a name='L339'></a><a href='#L339'>339</a>
399
+ <a name='L340'></a><a href='#L340'>340</a>
400
+ <a name='L341'></a><a href='#L341'>341</a>
401
+ <a name='L342'></a><a href='#L342'>342</a>
402
+ <a name='L343'></a><a href='#L343'>343</a>
403
+ <a name='L344'></a><a href='#L344'>344</a>
404
+ <a name='L345'></a><a href='#L345'>345</a>
405
+ <a name='L346'></a><a href='#L346'>346</a>
406
+ <a name='L347'></a><a href='#L347'>347</a>
407
+ <a name='L348'></a><a href='#L348'>348</a>
408
+ <a name='L349'></a><a href='#L349'>349</a>
409
+ <a name='L350'></a><a href='#L350'>350</a>
410
+ <a name='L351'></a><a href='#L351'>351</a>
411
+ <a name='L352'></a><a href='#L352'>352</a>
412
+ <a name='L353'></a><a href='#L353'>353</a>
413
+ <a name='L354'></a><a href='#L354'>354</a>
414
+ <a name='L355'></a><a href='#L355'>355</a>
415
+ <a name='L356'></a><a href='#L356'>356</a>
416
+ <a name='L357'></a><a href='#L357'>357</a>
417
+ <a name='L358'></a><a href='#L358'>358</a>
418
+ <a name='L359'></a><a href='#L359'>359</a>
419
+ <a name='L360'></a><a href='#L360'>360</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
379
420
  <span class="cline-any cline-yes">34x</span>
380
421
  <span class="cline-any cline-neutral">&nbsp;</span>
381
422
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -450,11 +491,16 @@
450
491
  <span class="cline-any cline-neutral">&nbsp;</span>
451
492
  <span class="cline-any cline-yes">34x</span>
452
493
  <span class="cline-any cline-yes">100x</span>
453
- <span class="cline-any cline-yes">100x</span>
494
+ <span class="cline-any cline-yes">99x</span>
454
495
  <span class="cline-any cline-neutral">&nbsp;</span>
455
496
  <span class="cline-any cline-yes">1x</span>
456
497
  <span class="cline-any cline-neutral">&nbsp;</span>
457
498
  <span class="cline-any cline-yes">1x</span>
499
+ <span class="cline-any cline-neutral">&nbsp;</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">1x</span>
458
504
  <span class="cline-any cline-yes">1x</span>
459
505
  <span class="cline-any cline-yes">1x</span>
460
506
  <span class="cline-any cline-yes">1x</span>
@@ -485,8 +531,7 @@
485
531
  <span class="cline-any cline-yes">1x</span>
486
532
  <span class="cline-any cline-yes">1x</span>
487
533
  <span class="cline-any cline-yes">1x</span>
488
- <span class="cline-any cline-neutral">&nbsp;</span>
489
- <span class="cline-any cline-yes">100x</span>
534
+ <span class="cline-any cline-yes">1x</span>
490
535
  <span class="cline-any cline-neutral">&nbsp;</span>
491
536
  <span class="cline-any cline-neutral">&nbsp;</span>
492
537
  <span class="cline-any cline-yes">34x</span>
@@ -611,12 +656,12 @@
611
656
  <span class="cline-any cline-neutral">&nbsp;</span>
612
657
  <span class="cline-any cline-neutral">&nbsp;</span>
613
658
  <span class="cline-any cline-yes">34x</span>
614
- <span class="cline-any cline-yes">28x</span>
615
- <span class="cline-any cline-yes">28x</span>
659
+ <span class="cline-any cline-yes">30x</span>
660
+ <span class="cline-any cline-yes">30x</span>
616
661
  <span class="cline-any cline-no">&nbsp;</span>
617
662
  <span class="cline-any cline-no">&nbsp;</span>
618
663
  <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-yes">28x</span>
664
+ <span class="cline-any cline-yes">30x</span>
620
665
  <span class="cline-any cline-neutral">&nbsp;</span>
621
666
  <span class="cline-any cline-neutral">&nbsp;</span>
622
667
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -693,6 +738,43 @@
693
738
  <span class="cline-any cline-neutral">&nbsp;</span>
694
739
  <span class="cline-any cline-neutral">&nbsp;</span>
695
740
  <span class="cline-any cline-yes">34x</span>
741
+ <span class="cline-any cline-no">&nbsp;</span>
742
+ <span class="cline-any cline-neutral">&nbsp;</span>
743
+ <span class="cline-any cline-neutral">&nbsp;</span>
744
+ <span class="cline-any cline-yes">34x</span>
745
+ <span class="cline-any cline-no">&nbsp;</span>
746
+ <span class="cline-any cline-neutral">&nbsp;</span>
747
+ <span class="cline-any cline-neutral">&nbsp;</span>
748
+ <span class="cline-any cline-yes">34x</span>
749
+ <span class="cline-any cline-no">&nbsp;</span>
750
+ <span class="cline-any cline-neutral">&nbsp;</span>
751
+ <span class="cline-any cline-neutral">&nbsp;</span>
752
+ <span class="cline-any cline-neutral">&nbsp;</span>
753
+ <span class="cline-any cline-neutral">&nbsp;</span>
754
+ <span class="cline-any cline-no">&nbsp;</span>
755
+ <span class="cline-any cline-no">&nbsp;</span>
756
+ <span class="cline-any cline-neutral">&nbsp;</span>
757
+ <span class="cline-any cline-no">&nbsp;</span>
758
+ <span class="cline-any cline-neutral">&nbsp;</span>
759
+ <span class="cline-any cline-neutral">&nbsp;</span>
760
+ <span class="cline-any cline-yes">34x</span>
761
+ <span class="cline-any cline-yes">99x</span>
762
+ <span class="cline-any cline-yes">95x</span>
763
+ <span class="cline-any cline-neutral">&nbsp;</span>
764
+ <span class="cline-any cline-yes">4x</span>
765
+ <span class="cline-any cline-yes">11x</span>
766
+ <span class="cline-any cline-yes">11x</span>
767
+ <span class="cline-any cline-yes">7x</span>
768
+ <span class="cline-any cline-neutral">&nbsp;</span>
769
+ <span class="cline-any cline-yes">4x</span>
770
+ <span class="cline-any cline-yes">4x</span>
771
+ <span class="cline-any cline-no">&nbsp;</span>
772
+ <span class="cline-any cline-neutral">&nbsp;</span>
773
+ <span class="cline-any cline-neutral">&nbsp;</span>
774
+ <span class="cline-any cline-yes">4x</span>
775
+ <span class="cline-any cline-neutral">&nbsp;</span>
776
+ <span class="cline-any cline-neutral">&nbsp;</span>
777
+ <span class="cline-any cline-yes">34x</span>
696
778
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../../db")
697
779
  const csvParser = require("../../../utilities/csvParser")
698
780
  const {
@@ -703,7 +785,7 @@ const {
703
785
  const { isEqual } = require("lodash/fp")
704
786
  const { AutoFieldSubTypes, FieldTypes } = require("../../../constants")
705
787
  const { inputProcessing } = require("../../../utilities/rowProcessor")
706
- const { USERS_TABLE_SCHEMA } = require("../../../constants")
788
+ const { USERS_TABLE_SCHEMA, SwitchableTypes } = require("../../../constants")
707
789
  const {
708
790
  isExternalTable,
709
791
  breakExternalTableId,
@@ -729,10 +811,10 @@ exports.checkForColumnUpdates = async (db, oldTable, updatedTable) =&gt; {
729
811
  })
730
812
  )
731
813
  updatedRows = rows.rows.map(({ doc }) =&gt; {
732
- <span class="missing-if-branch" title="else path not taken" >E</span>if (rename) {
814
+ if (rename) {
733
815
  doc[rename.updated] = doc[rename.old]
734
816
  delete doc[rename.old]
735
- } else <span class="cstat-no" title="statement not covered" >if (deletedColumns.length !== 0) {</span>
817
+ } 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>
736
818
  <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>
737
819
  }
738
820
  return doc
@@ -767,43 +849,47 @@ exports.makeSureTableUpToDate = (table, tableToSave) =&gt; {
767
849
  }
768
850
  &nbsp;
769
851
  exports.handleDataImport = async (appId, user, table, dataImport) =&gt; {
852
+ if (!dataImport || !dataImport.csvString) {
853
+ return table
854
+ }
770
855
  const db = new CouchDB(appId)
771
- if (dataImport &amp;&amp; dataImport.csvString) {
772
- // Populate the table with rows imported from CSV in a bulk update
773
- const data = await csvParser.transform(dataImport)
856
+ // Populate the table with rows imported from CSV in a bulk update
857
+ const data = await csvParser.transform({
858
+ ...dataImport,
859
+ existingTable: table,
860
+ })
774
861
  &nbsp;
775
- let finalData = []
776
- for (let i = 0; i &lt; data.length; i++) {
777
- let row = data[i]
778
- row._id = generateRowID(table._id)
779
- row.tableId = table._id
780
- const processed = inputProcessing(user, table, row, {
781
- noAutoRelationships: true,
782
- })
783
- table = processed.table
784
- row = processed.row
862
+ let finalData = []
863
+ for (let i = 0; i &lt; data.length; i++) {
864
+ let row = data[i]
865
+ row._id = generateRowID(table._id)
866
+ row.tableId = table._id
867
+ const processed = inputProcessing(user, table, row, {
868
+ noAutoRelationships: true,
869
+ })
870
+ table = processed.table
871
+ row = processed.row
785
872
  &nbsp;
786
- for (let [fieldName, schema] of Object.entries(table.schema)) {
787
- // check whether the options need to be updated for inclusion as part of the data import
788
- <span class="missing-if-branch" title="if path not taken" >I</span>if (
789
- schema.type === FieldTypes.OPTIONS &amp;&amp;
790
- (<span class="branch-1 cbranch-no" title="branch not covered" >!schema.constraints.inclusion </span>||
791
- <span class="branch-2 cbranch-no" title="branch not covered" > schema.constraints.inclusion.indexOf(row[fieldName]) === -1)</span>
792
- ) {
793
- <span class="cstat-no" title="statement not covered" > schema.constraints.inclusion = [</span>
794
- ...schema.constraints.inclusion,
795
- row[fieldName],
796
- ]
797
- }
873
+ for (let [fieldName, schema] of Object.entries(table.schema)) {
874
+ // check whether the options need to be updated for inclusion as part of the data import
875
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (
876
+ schema.type === FieldTypes.OPTIONS &amp;&amp;
877
+ (<span class="branch-1 cbranch-no" title="branch not covered" >!schema.constraints.inclusion </span>||
878
+ <span class="branch-2 cbranch-no" title="branch not covered" > schema.constraints.inclusion.indexOf(row[fieldName]) === -1)</span>
879
+ ) {
880
+ <span class="cstat-no" title="statement not covered" > schema.constraints.inclusion = [</span>
881
+ ...schema.constraints.inclusion,
882
+ row[fieldName],
883
+ ]
798
884
  }
799
- &nbsp;
800
- finalData.push(row)
801
885
  }
802
886
  &nbsp;
803
- await db.bulkDocs(finalData)
804
- let response = await db.put(table)
805
- table._rev = response._rev
887
+ finalData.push(row)
806
888
  }
889
+ &nbsp;
890
+ await db.bulkDocs(finalData)
891
+ let response = await db.put(table)
892
+ table._rev = response._rev
807
893
  return table
808
894
  }
809
895
  &nbsp;
@@ -824,7 +910,7 @@ exports.handleSearchIndexes = async (appId, table) =&gt; {
824
910
  )
825
911
  &nbsp;
826
912
  // if index fields have changed, delete the original index
827
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!isEqual(currentFields, table.indexes)) {
913
+ if (!isEqual(currentFields, table.indexes)) {
828
914
  await db.deleteIndex(existingIndex)
829
915
  // create/recreate the index with fields
830
916
  await db.createIndex({
@@ -856,7 +942,7 @@ exports.checkStaticTables = table =&gt; {
856
942
  if (table._id === InternalTables.USER_METADATA) {
857
943
  for (let [key, schema] of Object.entries(USERS_TABLE_SCHEMA.schema)) {
858
944
  // check if the schema exists on the table to be created/updated
859
- <span class="missing-if-branch" title="else path not taken" >E</span>if (table.schema[key] == null) {
945
+ if (table.schema[key] == null) {
860
946
  table.schema[key] = schema
861
947
  }
862
948
  }
@@ -868,7 +954,7 @@ class TableSaveFunctions {
868
954
  constructor({ db, ctx, oldTable, dataImport }) {
869
955
  this.db = db
870
956
  this.ctx = ctx
871
- <span class="missing-if-branch" title="else path not taken" >E</span>if (this.ctx &amp;&amp; this.ctx.user) {
957
+ if (this.ctx &amp;&amp; this.ctx.user) {
872
958
  this.appId = this.ctx.appId
873
959
  }
874
960
  this.oldTable = oldTable
@@ -1010,6 +1096,43 @@ exports.checkForViewUpdates = async (db, table, rename, deletedColumns) =&gt; {
1010
1096
  }
1011
1097
  }
1012
1098
  &nbsp;
1099
+ exports.generateForeignKey = <span class="fstat-no" title="function not covered" >(c</span>olumn, relatedTable) =&gt; {
1100
+ <span class="cstat-no" title="statement not covered" > return `fk_${relatedTable.name}_${column.fieldName}`</span>
1101
+ }
1102
+ &nbsp;
1103
+ exports.generateJunctionTableName = <span class="fstat-no" title="function not covered" >(c</span>olumn, table, relatedTable) =&gt; {
1104
+ <span class="cstat-no" title="statement not covered" > return `jt_${table.name}_${relatedTable.name}_${column.name}_${column.fieldName}`</span>
1105
+ }
1106
+ &nbsp;
1107
+ exports.foreignKeyStructure = <span class="fstat-no" title="function not covered" >(k</span>eyName, meta = <span class="branch-0 cbranch-no" title="branch not covered" >null)</span> =&gt; {
1108
+ const structure = <span class="cstat-no" title="statement not covered" >{</span>
1109
+ type: FieldTypes.NUMBER,
1110
+ constraints: {},
1111
+ name: keyName,
1112
+ }
1113
+ <span class="cstat-no" title="statement not covered" > if (meta) {</span>
1114
+ <span class="cstat-no" title="statement not covered" > structure.meta = meta</span>
1115
+ }
1116
+ <span class="cstat-no" title="statement not covered" > return structure</span>
1117
+ }
1118
+ &nbsp;
1119
+ exports.hasTypeChanged = (table, oldTable) =&gt; {
1120
+ if (!oldTable) {
1121
+ return false
1122
+ }
1123
+ for (let [key, field] of Object.entries(oldTable.schema)) {
1124
+ const oldType = field.type
1125
+ if (!table.schema[key]) {
1126
+ continue
1127
+ }
1128
+ const newType = table.schema[key].type
1129
+ <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> {
1130
+ <span class="cstat-no" title="statement not covered" > return true</span>
1131
+ }
1132
+ }
1133
+ return false
1134
+ }
1135
+ &nbsp;
1013
1136
  exports.TableSaveFunctions = TableSaveFunctions
1014
1137
  &nbsp;</pre></td></tr></table></pre>
1015
1138
 
@@ -1018,7 +1141,7 @@ exports.TableSaveFunctions = TableSaveFunctions
1018
1141
  <div class='footer quiet pad2 space-top1 center small'>
1019
1142
  Code coverage generated by
1020
1143
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1021
- at Thu Nov 18 2021 07:07:10 GMT+0000 (Coordinated Universal Time)
1144
+ at Thu Nov 25 2021 16:48:05 GMT+0000 (Coordinated Universal Time)
1022
1145
  </div>
1023
1146
  </div>
1024
1147
  <script src="../../../prettify.js"></script>
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">71.43% </span>
33
+ <span class="strong">71.42% </span>
34
34
  <span class="quiet">Branches</span>
35
35
  <span class='fraction'>5/7</span>
36
36
  </div>
@@ -155,10 +155,10 @@ exports.fetch = async function (ctx) {
155
155
  <span class="cstat-no" title="statement not covered" > error = true</span>
156
156
  }
157
157
  // if there is an error, simply return no templates
158
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!error &amp;&amp; response) {
158
+ if (!error &amp;&amp; response) {
159
159
  const json = await response.json()
160
160
  ctx.body = Object.values(json.templates[type])
161
- } else {
161
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
162
162
  <span class="cstat-no" title="statement not covered" > ctx.body = []</span>
163
163
  }
164
164
  }
@@ -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 Thu Nov 18 2021 07:07:10 GMT+0000 (Coordinated Universal Time)
184
+ at Thu Nov 25 2021 16:48:05 GMT+0000 (Coordinated Universal Time)
185
185
  </div>
186
186
  </div>
187
187
  <script src="../../prettify.js"></script>