@budibase/server 0.9.174 → 0.9.176-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 (203) hide show
  1. package/builder/assets/{index.7469e1e4.css → index.75ed4773.css} +1 -1
  2. package/builder/assets/{index.ba2741f9.js → index.d3780441.js} +34 -34
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +383 -207
  5. package/coverage/coverage-final.json +8 -6
  6. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  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/cloud.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/datasource.js.html +120 -24
  15. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/hosting.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +19 -19
  18. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/query.js.html +9 -3
  23. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/index.html +14 -14
  27. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/utils.js.html +11 -32
  31. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/external.js.html +908 -0
  34. package/coverage/lcov-report/api/controllers/table/index.html +59 -29
  35. package/coverage/lcov-report/api/controllers/table/index.js.html +52 -376
  36. package/coverage/lcov-report/api/controllers/table/internal.js.html +494 -0
  37. package/coverage/lcov-report/api/controllers/table/utils.js.html +70 -10
  38. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  46. package/coverage/lcov-report/api/index.html +1 -1
  47. package/coverage/lcov-report/api/index.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/index.html +1 -1
  61. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  78. package/coverage/lcov-report/automations/actions.js.html +1 -1
  79. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  80. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  81. package/coverage/lcov-report/automations/index.html +1 -1
  82. package/coverage/lcov-report/automations/index.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/index.html +1 -1
  92. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  101. package/coverage/lcov-report/automations/thread.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  111. package/coverage/lcov-report/automations/utils.js.html +1 -1
  112. package/coverage/lcov-report/constants/index.html +5 -5
  113. package/coverage/lcov-report/constants/index.js.html +25 -4
  114. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  115. package/coverage/lcov-report/constants/screens.js.html +1 -1
  116. package/coverage/lcov-report/db/client.js.html +1 -1
  117. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  118. package/coverage/lcov-report/db/index.html +1 -1
  119. package/coverage/lcov-report/db/index.js.html +1 -1
  120. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  121. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  122. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  123. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  124. package/coverage/lcov-report/db/newid.js.html +1 -1
  125. package/coverage/lcov-report/db/utils.js.html +1 -1
  126. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  127. package/coverage/lcov-report/events/index.html +1 -1
  128. package/coverage/lcov-report/events/index.js.html +1 -1
  129. package/coverage/lcov-report/events/utils.js.html +1 -1
  130. package/coverage/lcov-report/index.html +38 -38
  131. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  132. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  133. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  134. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  135. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  136. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  137. package/coverage/lcov-report/middleware/index.html +1 -1
  138. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  139. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  140. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  141. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  142. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  143. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  144. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  145. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  146. package/coverage/lcov-report/utilities/global.js.html +1 -1
  147. package/coverage/lcov-report/utilities/index.html +1 -1
  148. package/coverage/lcov-report/utilities/index.js.html +1 -1
  149. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  150. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  151. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  152. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  153. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  154. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  155. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  156. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  157. package/coverage/lcov-report/utilities/security.js.html +1 -1
  158. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  159. package/coverage/lcov-report/utilities/users.js.html +1 -1
  160. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  161. package/coverage/lcov.info +652 -332
  162. package/dist/api/controllers/datasource.js +41 -14
  163. package/dist/api/controllers/query.js +3 -1
  164. package/dist/api/controllers/row/ExternalRequest.js +12 -10
  165. package/dist/api/controllers/row/utils.js +3 -11
  166. package/dist/api/controllers/table/external.js +222 -0
  167. package/dist/api/controllers/table/index.js +28 -121
  168. package/dist/api/controllers/table/internal.js +138 -0
  169. package/dist/api/controllers/table/utils.js +17 -0
  170. package/dist/constants/index.js +6 -0
  171. package/dist/definitions/datasource.js +3 -0
  172. package/dist/integrations/base/datasourcePlus.js +2 -0
  173. package/dist/integrations/base/sql.js +16 -11
  174. package/dist/integrations/base/sqlTable.js +141 -0
  175. package/dist/integrations/base/utils.js +30 -0
  176. package/dist/integrations/mysql.js +13 -7
  177. package/dist/integrations/postgres.js +18 -8
  178. package/dist/integrations/utils.js +21 -6
  179. package/dist/package.json +4 -4
  180. package/dist/tests/utilities/TestConfiguration.js +2 -1
  181. package/dist/tsconfig.tsbuildinfo +1 -1
  182. package/package.json +5 -5
  183. package/src/api/controllers/datasource.js +46 -14
  184. package/src/api/controllers/query.js +3 -1
  185. package/src/api/controllers/row/ExternalRequest.ts +12 -10
  186. package/src/api/controllers/row/utils.js +3 -10
  187. package/src/api/controllers/table/external.js +276 -0
  188. package/src/api/controllers/table/index.js +27 -135
  189. package/src/api/controllers/table/internal.js +138 -0
  190. package/src/api/controllers/table/utils.js +20 -0
  191. package/src/api/routes/tests/datasource.spec.js +2 -2
  192. package/src/api/routes/tests/query.spec.js +0 -1
  193. package/src/constants/index.js +7 -0
  194. package/src/definitions/common.ts +7 -1
  195. package/src/definitions/datasource.ts +5 -0
  196. package/src/integrations/base/datasourcePlus.ts +8 -0
  197. package/src/integrations/base/sql.ts +15 -16
  198. package/src/integrations/base/sqlTable.ts +167 -0
  199. package/src/integrations/base/utils.ts +19 -0
  200. package/src/integrations/mysql.ts +15 -9
  201. package/src/integrations/postgres.ts +19 -9
  202. package/src/integrations/utils.ts +22 -6
  203. package/src/tests/utilities/TestConfiguration.js +2 -1
@@ -181,7 +181,7 @@ exports.endUserPing = <span class="fstat-no" title="function not covered" >as</s
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 Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
184
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
185
185
  </div>
186
186
  </div>
187
187
  <script src="../../prettify.js"></script>
@@ -226,7 +226,7 @@ exports.update = async function (ctx) {
226
226
  <div class='footer quiet pad2 space-top1 center small'>
227
227
  Code coverage generated by
228
228
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
229
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
229
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
230
230
  </div>
231
231
  </div>
232
232
  <script src="../../prettify.js"></script>
@@ -1222,7 +1222,7 @@ const createEmptyAppPackage = async (ctx, app) =&gt; {
1222
1222
  <div class='footer quiet pad2 space-top1 center small'>
1223
1223
  Code coverage generated by
1224
1224
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1225
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
1225
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
1226
1226
  </div>
1227
1227
  </div>
1228
1228
  <script src="../../prettify.js"></script>
@@ -220,7 +220,7 @@ exports.fetchSelf = async ctx =&gt; {
220
220
  <div class='footer quiet pad2 space-top1 center small'>
221
221
  Code coverage generated by
222
222
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
223
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
223
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
224
224
  </div>
225
225
  </div>
226
226
  <script src="../../prettify.js"></script>
@@ -736,7 +736,7 @@ exports.test = async function (ctx) {
736
736
  <div class='footer quiet pad2 space-top1 center small'>
737
737
  Code coverage generated by
738
738
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
739
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
739
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
740
740
  </div>
741
741
  </div>
742
742
  <script src="../../prettify.js"></script>
@@ -91,7 +91,7 @@ exports.exportAppDump = async function (ctx) {
91
91
  <div class='footer quiet pad2 space-top1 center small'>
92
92
  Code coverage generated by
93
93
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
94
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
94
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
95
95
  </div>
96
96
  </div>
97
97
  <script src="../../prettify.js"></script>
@@ -397,7 +397,7 @@ exports.importApps = <span class="fstat-no" title="function not covered" >as</sp
397
397
  <div class='footer quiet pad2 space-top1 center small'>
398
398
  Code coverage generated by
399
399
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
400
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
400
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
401
401
  </div>
402
402
  </div>
403
403
  <script src="../../prettify.js"></script>
@@ -169,7 +169,7 @@ exports.fetchAppComponentDefinitions = async function (ctx) {
169
169
  <div class='footer quiet pad2 space-top1 center small'>
170
170
  Code coverage generated by
171
171
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
172
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
172
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
173
173
  </div>
174
174
  </div>
175
175
  <script src="../../prettify.js"></script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">61.33% </span>
26
+ <span class="strong">50% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>46/75</span>
28
+ <span class='fraction'>48/96</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">37.5% </span>
33
+ <span class="strong">25% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>6/16</span>
35
+ <span class='fraction'>7/28</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">72.73% </span>
40
+ <span class="strong">57.14% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>8/11</span>
42
+ <span class='fraction'>8/14</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">60.27% </span>
47
+ <span class="strong">48.94% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>44/73</span>
49
+ <span class='fraction'>46/94</span>
50
50
  </div>
51
51
 
52
52
 
@@ -204,7 +204,39 @@
204
204
  <a name='L145'></a><a href='#L145'>145</a>
205
205
  <a name='L146'></a><a href='#L146'>146</a>
206
206
  <a name='L147'></a><a href='#L147'>147</a>
207
- <a name='L148'></a><a href='#L148'>148</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
207
+ <a name='L148'></a><a href='#L148'>148</a>
208
+ <a name='L149'></a><a href='#L149'>149</a>
209
+ <a name='L150'></a><a href='#L150'>150</a>
210
+ <a name='L151'></a><a href='#L151'>151</a>
211
+ <a name='L152'></a><a href='#L152'>152</a>
212
+ <a name='L153'></a><a href='#L153'>153</a>
213
+ <a name='L154'></a><a href='#L154'>154</a>
214
+ <a name='L155'></a><a href='#L155'>155</a>
215
+ <a name='L156'></a><a href='#L156'>156</a>
216
+ <a name='L157'></a><a href='#L157'>157</a>
217
+ <a name='L158'></a><a href='#L158'>158</a>
218
+ <a name='L159'></a><a href='#L159'>159</a>
219
+ <a name='L160'></a><a href='#L160'>160</a>
220
+ <a name='L161'></a><a href='#L161'>161</a>
221
+ <a name='L162'></a><a href='#L162'>162</a>
222
+ <a name='L163'></a><a href='#L163'>163</a>
223
+ <a name='L164'></a><a href='#L164'>164</a>
224
+ <a name='L165'></a><a href='#L165'>165</a>
225
+ <a name='L166'></a><a href='#L166'>166</a>
226
+ <a name='L167'></a><a href='#L167'>167</a>
227
+ <a name='L168'></a><a href='#L168'>168</a>
228
+ <a name='L169'></a><a href='#L169'>169</a>
229
+ <a name='L170'></a><a href='#L170'>170</a>
230
+ <a name='L171'></a><a href='#L171'>171</a>
231
+ <a name='L172'></a><a href='#L172'>172</a>
232
+ <a name='L173'></a><a href='#L173'>173</a>
233
+ <a name='L174'></a><a href='#L174'>174</a>
234
+ <a name='L175'></a><a href='#L175'>175</a>
235
+ <a name='L176'></a><a href='#L176'>176</a>
236
+ <a name='L177'></a><a href='#L177'>177</a>
237
+ <a name='L178'></a><a href='#L178'>178</a>
238
+ <a name='L179'></a><a href='#L179'>179</a>
239
+ <a name='L180'></a><a href='#L180'>180</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
208
240
  <span class="cline-any cline-neutral">&nbsp;</span>
209
241
  <span class="cline-any cline-neutral">&nbsp;</span>
210
242
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -215,6 +247,7 @@
215
247
  <span class="cline-any cline-yes">33x</span>
216
248
  <span class="cline-any cline-yes">33x</span>
217
249
  <span class="cline-any cline-yes">33x</span>
250
+ <span class="cline-any cline-yes">33x</span>
218
251
  <span class="cline-any cline-neutral">&nbsp;</span>
219
252
  <span class="cline-any cline-yes">33x</span>
220
253
  <span class="cline-any cline-yes">2x</span>
@@ -256,6 +289,10 @@
256
289
  <span class="cline-any cline-no">&nbsp;</span>
257
290
  <span class="cline-any cline-neutral">&nbsp;</span>
258
291
  <span class="cline-any cline-no">&nbsp;</span>
292
+ <span class="cline-any cline-no">&nbsp;</span>
293
+ <span class="cline-any cline-no">&nbsp;</span>
294
+ <span class="cline-any cline-neutral">&nbsp;</span>
295
+ <span class="cline-any cline-no">&nbsp;</span>
259
296
  <span class="cline-any cline-neutral">&nbsp;</span>
260
297
  <span class="cline-any cline-neutral">&nbsp;</span>
261
298
  <span class="cline-any cline-yes">33x</span>
@@ -292,6 +329,8 @@
292
329
  <span class="cline-any cline-neutral">&nbsp;</span>
293
330
  <span class="cline-any cline-neutral">&nbsp;</span>
294
331
  <span class="cline-any cline-yes">23x</span>
332
+ <span class="cline-any cline-yes">23x</span>
333
+ <span class="cline-any cline-no">&nbsp;</span>
295
334
  <span class="cline-any cline-no">&nbsp;</span>
296
335
  <span class="cline-any cline-no">&nbsp;</span>
297
336
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -309,6 +348,8 @@
309
348
  <span class="cline-any cline-neutral">&nbsp;</span>
310
349
  <span class="cline-any cline-yes">23x</span>
311
350
  <span class="cline-any cline-yes">23x</span>
351
+ <span class="cline-any cline-no">&nbsp;</span>
352
+ <span class="cline-any cline-neutral">&nbsp;</span>
312
353
  <span class="cline-any cline-yes">23x</span>
313
354
  <span class="cline-any cline-neutral">&nbsp;</span>
314
355
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -349,6 +390,29 @@
349
390
  <span class="cline-any cline-no">&nbsp;</span>
350
391
  <span class="cline-any cline-no">&nbsp;</span>
351
392
  <span class="cline-any cline-neutral">&nbsp;</span>
393
+ <span class="cline-any cline-neutral">&nbsp;</span>
394
+ <span class="cline-any cline-no">&nbsp;</span>
395
+ <span class="cline-any cline-no">&nbsp;</span>
396
+ <span class="cline-any cline-no">&nbsp;</span>
397
+ <span class="cline-any cline-neutral">&nbsp;</span>
398
+ <span class="cline-any cline-no">&nbsp;</span>
399
+ <span class="cline-any cline-no">&nbsp;</span>
400
+ <span class="cline-any cline-neutral">&nbsp;</span>
401
+ <span class="cline-any cline-no">&nbsp;</span>
402
+ <span class="cline-any cline-no">&nbsp;</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-neutral">&nbsp;</span>
406
+ <span class="cline-any cline-no">&nbsp;</span>
407
+ <span class="cline-any cline-no">&nbsp;</span>
408
+ <span class="cline-any cline-no">&nbsp;</span>
409
+ <span class="cline-any cline-no">&nbsp;</span>
410
+ <span class="cline-any cline-no">&nbsp;</span>
411
+ <span class="cline-any cline-no">&nbsp;</span>
412
+ <span class="cline-any cline-no">&nbsp;</span>
413
+ <span class="cline-any cline-neutral">&nbsp;</span>
414
+ <span class="cline-any cline-neutral">&nbsp;</span>
415
+ <span class="cline-any cline-neutral">&nbsp;</span>
352
416
  <span class="cline-any cline-no">&nbsp;</span>
353
417
  <span class="cline-any cline-neutral">&nbsp;</span>
354
418
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../db")
@@ -360,8 +424,9 @@ const {
360
424
  BudibaseInternalDB,
361
425
  getTableParams,
362
426
  } = require("../../db/utils")
427
+ const { BuildSchemaErrors } = require("../../constants")
363
428
  const { integrations } = require("../../integrations")
364
- const { makeExternalQuery } = require("./row/utils")
429
+ const { getDatasourceAndQuery } = require("./row/utils")
365
430
  &nbsp;
366
431
  exports.fetch = async function (ctx) {
367
432
  const database = new CouchDB(ctx.appId)
@@ -396,13 +461,17 @@ exports.buildSchemaFromDb = <span class="fstat-no" title="function not covered"
396
461
  const db = <span class="cstat-no" title="statement not covered" >new CouchDB(ctx.appId)</span>
397
462
  const datasource = <span class="cstat-no" title="statement not covered" >await db.get(ctx.params.datasourceId)</span>
398
463
  &nbsp;
399
- const tables = <span class="cstat-no" title="statement not covered" >await buildSchemaHelper(datasource)</span>
464
+ const { tables, error } = <span class="cstat-no" title="statement not covered" >await buildSchemaHelper(datasource)</span>
400
465
  <span class="cstat-no" title="statement not covered" > datasource.entities = tables</span>
401
466
  &nbsp;
402
- const response = <span class="cstat-no" title="statement not covered" >await db.put(datasource)</span>
403
- <span class="cstat-no" title="statement not covered" > datasource._rev = response.rev</span>
467
+ const dbResp = <span class="cstat-no" title="statement not covered" >await db.put(datasource)</span>
468
+ <span class="cstat-no" title="statement not covered" > datasource._rev = dbResp.rev</span>
404
469
  &nbsp;
405
- <span class="cstat-no" title="statement not covered" > ctx.body = datasource</span>
470
+ const response = <span class="cstat-no" title="statement not covered" >{ datasource }</span>
471
+ <span class="cstat-no" title="statement not covered" > if (error) {</span>
472
+ <span class="cstat-no" title="statement not covered" > response.error = error</span>
473
+ }
474
+ <span class="cstat-no" title="statement not covered" > ctx.body = response</span>
406
475
  }
407
476
  &nbsp;
408
477
  exports.update = <span class="fstat-no" title="function not covered" >as</span>ync function (ctx) {
@@ -424,7 +493,7 @@ exports.update = <span class="fstat-no" title="function not covered" >as</span>y
424
493
  &nbsp;
425
494
  <span class="cstat-no" title="statement not covered" > ctx.status = 200</span>
426
495
  <span class="cstat-no" title="statement not covered" > ctx.message = "Datasource saved successfully."</span>
427
- <span class="cstat-no" title="statement not covered" > ctx.body = datasource</span>
496
+ <span class="cstat-no" title="statement not covered" > ctx.body = { datasource }</span>
428
497
  }
429
498
  &nbsp;
430
499
  exports.save = async function (ctx) {
@@ -438,13 +507,15 @@ exports.save = async function (ctx) {
438
507
  ...ctx.request.body.datasource,
439
508
  }
440
509
  &nbsp;
510
+ let schemaError = null
441
511
  <span class="missing-if-branch" title="if path not taken" >I</span>if (fetchSchema) {
442
- let tables = <span class="cstat-no" title="statement not covered" >await buildSchemaHelper(datasource)</span>
512
+ const { tables, error } = <span class="cstat-no" title="statement not covered" >await buildSchemaHelper(datasource)</span>
513
+ <span class="cstat-no" title="statement not covered" > schemaError = error</span>
443
514
  <span class="cstat-no" title="statement not covered" > datasource.entities = tables</span>
444
515
  }
445
516
  &nbsp;
446
- const response = await db.put(datasource)
447
- datasource._rev = response.rev
517
+ const dbResp = await db.put(datasource)
518
+ datasource._rev = dbResp.rev
448
519
  &nbsp;
449
520
  // Drain connection pools when configuration is changed
450
521
  <span class="missing-if-branch" title="else path not taken" >E</span>if (datasource.source) {
@@ -454,9 +525,11 @@ exports.save = async function (ctx) {
454
525
  }
455
526
  }
456
527
  &nbsp;
457
- ctx.status = 200
458
- ctx.message = "Datasource saved successfully."
459
- ctx.body = datasource
528
+ const response = { datasource }
529
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (schemaError) {
530
+ <span class="cstat-no" title="statement not covered" > response.error = schemaError</span>
531
+ }
532
+ ctx.body = response
460
533
  }
461
534
  &nbsp;
462
535
  exports.destroy = async function (ctx) {
@@ -482,7 +555,7 @@ exports.find = async function (ctx) {
482
555
  exports.query = async function (ctx) {
483
556
  const queryJson = ctx.request.body
484
557
  try {
485
- ctx.body = await makeExternalQuery(ctx.appId, queryJson)
558
+ ctx.body = await getDatasourceAndQuery(ctx.appId, queryJson)
486
559
  } catch (err) {
487
560
  <span class="cstat-no" title="statement not covered" > ctx.throw(400, err)</span>
488
561
  }
@@ -496,7 +569,30 @@ const buildSchemaHelper = <span class="fstat-no" title="function not covered" >a
496
569
  <span class="cstat-no" title="statement not covered" > await connector.buildSchema(datasource._id, datasource.entities)</span>
497
570
  <span class="cstat-no" title="statement not covered" > datasource.entities = connector.tables</span>
498
571
  &nbsp;
499
- <span class="cstat-no" title="statement not covered" > return connector.tables</span>
572
+ // make sure they all have a display name selected
573
+ <span class="cstat-no" title="statement not covered" > for (let entity of Object.values(datasource.entities)) {</span>
574
+ <span class="cstat-no" title="statement not covered" > if (entity.primaryDisplay) {</span>
575
+ <span class="cstat-no" title="statement not covered" > continue</span>
576
+ }
577
+ const notAutoColumn = <span class="cstat-no" title="statement not covered" >Object.values(entity.schema).find(</span>
578
+ <span class="fstat-no" title="function not covered" > sc</span>hema =&gt; <span class="cstat-no" title="statement not covered" >!schema.autocolumn</span>
579
+ )
580
+ <span class="cstat-no" title="statement not covered" > if (notAutoColumn) {</span>
581
+ <span class="cstat-no" title="statement not covered" > entity.primaryDisplay = notAutoColumn.name</span>
582
+ }
583
+ }
584
+ &nbsp;
585
+ const errors = <span class="cstat-no" title="statement not covered" >connector.schemaErrors</span>
586
+ let error = <span class="cstat-no" title="statement not covered" >null</span>
587
+ <span class="cstat-no" title="statement not covered" > if (errors &amp;&amp; Object.keys(errors).length &gt; 0) {</span>
588
+ const noKeyTables = <span class="cstat-no" title="statement not covered" >Object.entries(errors)</span>
589
+ .filter(<span class="fstat-no" title="function not covered" >en</span>try =&gt; <span class="cstat-no" title="statement not covered" >entry[1] === BuildSchemaErrors.NO_KEY)</span>
590
+ .map(<span class="fstat-no" title="function not covered" >([</span>name]) =&gt; <span class="cstat-no" title="statement not covered" >name)</span>
591
+ <span class="cstat-no" title="statement not covered" > error = `No primary key constraint found for the following: ${noKeyTables.join(</span>
592
+ ", "
593
+ )}`
594
+ }
595
+ <span class="cstat-no" title="statement not covered" > return { tables: connector.tables, error }</span>
500
596
  }
501
597
  &nbsp;</pre></td></tr></table></pre>
502
598
 
@@ -505,7 +601,7 @@ const buildSchemaHelper = <span class="fstat-no" title="function not covered" >a
505
601
  <div class='footer quiet pad2 space-top1 center small'>
506
602
  Code coverage generated by
507
603
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
508
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
604
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
509
605
  </div>
510
606
  </div>
511
607
  <script src="../../prettify.js"></script>
@@ -400,7 +400,7 @@ exports.getBudibaseVersion = <span class="fstat-no" title="function not covered"
400
400
  <div class='footer quiet pad2 space-top1 center small'>
401
401
  Code coverage generated by
402
402
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
403
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
403
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
404
404
  </div>
405
405
  </div>
406
406
  <script src="../../prettify.js"></script>
@@ -130,7 +130,7 @@ exports.getDeployedApps = <span class="fstat-no" title="function not covered" >a
130
130
  <div class='footer quiet pad2 space-top1 center small'>
131
131
  Code coverage generated by
132
132
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
133
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
133
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
134
134
  </div>
135
135
  </div>
136
136
  <script src="../../prettify.js"></script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">78.18% </span>
26
+ <span class="strong">76.81% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>806/1031</span>
28
+ <span class='fraction'>808/1052</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">55.31% </span>
33
+ <span class="strong">53.61% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>177/320</span>
35
+ <span class='fraction'>178/332</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">77.4% </span>
40
+ <span class="strong">75.84% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>113/146</span>
42
+ <span class='fraction'>113/149</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">78.42% </span>
47
+ <span class="strong">77.03% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>796/1015</span>
49
+ <span class='fraction'>798/1036</span>
50
50
  </div>
51
51
 
52
52
 
@@ -194,17 +194,17 @@
194
194
 
195
195
  <tr>
196
196
  <td class="file medium" data-value="datasource.js"><a href="datasource.js.html">datasource.js</a></td>
197
- <td data-value="61.33" class="pic medium">
198
- <div class="chart"><div class="cover-fill" style="width: 61%"></div><div class="cover-empty" style="width: 39%"></div></div>
197
+ <td data-value="50" class="pic medium">
198
+ <div class="chart"><div class="cover-fill" style="width: 50%"></div><div class="cover-empty" style="width: 50%"></div></div>
199
199
  </td>
200
- <td data-value="61.33" class="pct medium">61.33%</td>
201
- <td data-value="75" class="abs medium">46/75</td>
202
- <td data-value="37.5" class="pct low">37.5%</td>
203
- <td data-value="16" class="abs low">6/16</td>
204
- <td data-value="72.73" class="pct medium">72.73%</td>
205
- <td data-value="11" class="abs medium">8/11</td>
206
- <td data-value="60.27" class="pct medium">60.27%</td>
207
- <td data-value="73" class="abs medium">44/73</td>
200
+ <td data-value="50" class="pct medium">50%</td>
201
+ <td data-value="96" class="abs medium">48/96</td>
202
+ <td data-value="25" class="pct low">25%</td>
203
+ <td data-value="28" class="abs low">7/28</td>
204
+ <td data-value="57.14" class="pct medium">57.14%</td>
205
+ <td data-value="14" class="abs medium">8/14</td>
206
+ <td data-value="48.94" class="pct low">48.94%</td>
207
+ <td data-value="94" class="abs low">46/94</td>
208
208
  </tr>
209
209
 
210
210
  <tr>
@@ -425,7 +425,7 @@
425
425
  <div class='footer quiet pad2 space-top1 center small'>
426
426
  Code coverage generated by
427
427
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
428
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
428
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
429
429
  </div>
430
430
  </div>
431
431
  <script src="../../prettify.js"></script>
@@ -100,7 +100,7 @@ exports.find = async function (ctx) {
100
100
  <div class='footer quiet pad2 space-top1 center small'>
101
101
  Code coverage generated by
102
102
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
103
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
103
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
104
104
  </div>
105
105
  </div>
106
106
  <script src="../../prettify.js"></script>
@@ -217,7 +217,7 @@ exports.destroy = async function (ctx) {
217
217
  <div class='footer quiet pad2 space-top1 center small'>
218
218
  Code coverage generated by
219
219
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
220
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
220
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
221
221
  </div>
222
222
  </div>
223
223
  <script src="../../prettify.js"></script>
@@ -202,7 +202,7 @@ exports.getMetadata = async ctx =&gt; {
202
202
  <div class='footer quiet pad2 space-top1 center small'>
203
203
  Code coverage generated by
204
204
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
205
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
205
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
206
206
  </div>
207
207
  </div>
208
208
  <script src="../../prettify.js"></script>
@@ -589,7 +589,7 @@ exports.removePermission = async function (ctx) {
589
589
  <div class='footer quiet pad2 space-top1 center small'>
590
590
  Code coverage generated by
591
591
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
592
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
592
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
593
593
  </div>
594
594
  </div>
595
595
  <script src="../../prettify.js"></script>
@@ -268,7 +268,9 @@
268
268
  <a name='L209'></a><a href='#L209'>209</a>
269
269
  <a name='L210'></a><a href='#L210'>210</a>
270
270
  <a name='L211'></a><a href='#L211'>211</a>
271
- <a name='L212'></a><a href='#L212'>212</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
271
+ <a name='L212'></a><a href='#L212'>212</a>
272
+ <a name='L213'></a><a href='#L213'>213</a>
273
+ <a name='L214'></a><a href='#L214'>214</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
272
274
  <span class="cline-any cline-yes">34x</span>
273
275
  <span class="cline-any cline-yes">34x</span>
274
276
  <span class="cline-any cline-yes">34x</span>
@@ -373,6 +375,8 @@
373
375
  <span class="cline-any cline-neutral">&nbsp;</span>
374
376
  <span class="cline-any cline-no">&nbsp;</span>
375
377
  <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
380
  <span class="cline-any cline-no">&nbsp;</span>
377
381
  <span class="cline-any cline-neutral">&nbsp;</span>
378
382
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -582,7 +586,9 @@ async function enrichQueryFields(fields, parameters = <span class="branch-0 cbra
582
586
  <span class="cstat-no" title="statement not covered" > enrichedQuery[key] = await enrichQueryFields(fields[key], parameters)</span>
583
587
  } else <span class="cstat-no" title="statement not covered" >if (typeof fields[key] === "string") {</span>
584
588
  // enrich string value as normal
585
- <span class="cstat-no" title="statement not covered" > enrichedQuery[key] = await processString(fields[key], parameters)</span>
589
+ <span class="cstat-no" title="statement not covered" > enrichedQuery[key] = await processString(fields[key], parameters, {</span>
590
+ noHelpers: true,
591
+ })
586
592
  } else {
587
593
  <span class="cstat-no" title="statement not covered" > enrichedQuery[key] = fields[key]</span>
588
594
  }
@@ -697,7 +703,7 @@ exports.destroy = async function (ctx) {
697
703
  <div class='footer quiet pad2 space-top1 center small'>
698
704
  Code coverage generated by
699
705
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
700
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
706
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
701
707
  </div>
702
708
  </div>
703
709
  <script src="../../prettify.js"></script>
@@ -358,7 +358,7 @@ exports.destroy = async function (ctx) {
358
358
  <div class='footer quiet pad2 space-top1 center small'>
359
359
  Code coverage generated by
360
360
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
361
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
361
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
362
362
  </div>
363
363
  </div>
364
364
  <script src="../../prettify.js"></script>
@@ -343,7 +343,7 @@ exports.clientFetch = async ctx =&gt; {
343
343
  <div class='footer quiet pad2 space-top1 center small'>
344
344
  Code coverage generated by
345
345
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
346
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
346
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
347
347
  </div>
348
348
  </div>
349
349
  <script src="../../prettify.js"></script>
@@ -748,7 +748,7 @@ exports.fetchEnrichedRow = <span class="fstat-no" title="function not covered" >
748
748
  <div class='footer quiet pad2 space-top1 center small'>
749
749
  Code coverage generated by
750
750
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
751
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
751
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
752
752
  </div>
753
753
  </div>
754
754
  <script src="../../../prettify.js"></script>