@budibase/server 1.0.113 → 1.0.116

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 (238) hide show
  1. package/builder/assets/{index.e3e5909b.js → index.28d8c64f.js} +4 -4
  2. package/builder/index.html +1 -1
  3. package/coverage/clover.xml +1212 -1269
  4. package/coverage/coverage-final.json +86 -87
  5. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  6. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/application.js.html +126 -120
  8. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/automation.js.html +21 -21
  10. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +16 -16
  14. package/coverage/lcov-report/api/controllers/dev.js.html +23 -14
  15. package/coverage/lcov-report/api/controllers/index.html +17 -17
  16. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/layout.js.html +6 -6
  18. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/permission.js.html +15 -15
  21. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  22. package/coverage/lcov-report/api/controllers/query/index.js.html +19 -19
  23. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  25. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/external.js.html +19 -19
  27. package/coverage/lcov-report/api/controllers/row/index.html +10 -10
  28. package/coverage/lcov-report/api/controllers/row/index.js.html +14 -14
  29. package/coverage/lcov-report/api/controllers/row/internal.js.html +37 -34
  30. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +9 -9
  31. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +10 -10
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +12 -12
  33. package/coverage/lcov-report/api/controllers/screen.js.html +7 -7
  34. package/coverage/lcov-report/api/controllers/script.js.html +4 -4
  35. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +9 -9
  36. package/coverage/lcov-report/api/controllers/table/external.js.html +12 -12
  37. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/index.js.html +14 -14
  39. package/coverage/lcov-report/api/controllers/table/internal.js.html +13 -13
  40. package/coverage/lcov-report/api/controllers/table/utils.js.html +30 -30
  41. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/user.js.html +19 -19
  43. package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
  44. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/index.js.html +14 -14
  46. package/coverage/lcov-report/api/controllers/view/utils.js.html +12 -12
  47. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
  48. package/coverage/lcov-report/api/controllers/webhook.js.html +17 -17
  49. package/coverage/lcov-report/api/index.html +1 -1
  50. package/coverage/lcov-report/api/index.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/index.html +1 -1
  63. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  80. package/coverage/lcov-report/api/routes/utils/validators.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 +5 -5
  87. package/coverage/lcov-report/automations/index.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/bash.js.html +7 -7
  89. package/coverage/lcov-report/automations/steps/createRow.js.html +7 -7
  90. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  91. package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
  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 +1 -1
  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 +43 -40
  116. package/coverage/lcov-report/constants/index.html +1 -1
  117. package/coverage/lcov-report/constants/index.js.html +27 -27
  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/inMemoryView.js.html +52 -49
  121. package/coverage/lcov-report/db/index.html +21 -36
  122. package/coverage/lcov-report/db/index.js.html +49 -10
  123. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +7 -7
  124. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  125. package/coverage/lcov-report/db/linkedRows/index.js.html +18 -18
  126. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +13 -13
  127. package/coverage/lcov-report/db/newid.js.html +2 -2
  128. package/coverage/lcov-report/db/utils.js.html +13 -13
  129. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  130. package/coverage/lcov-report/events/index.html +1 -1
  131. package/coverage/lcov-report/events/index.js.html +5 -5
  132. package/coverage/lcov-report/events/utils.js.html +3 -3
  133. package/coverage/lcov-report/index.html +52 -52
  134. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  135. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  136. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  137. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  138. package/coverage/lcov-report/middleware/builder.js.html +15 -12
  139. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  140. package/coverage/lcov-report/middleware/index.html +4 -4
  141. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  142. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  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 +1 -1
  146. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  147. package/coverage/lcov-report/threads/automation.js.html +1 -1
  148. package/coverage/lcov-report/threads/index.html +34 -34
  149. package/coverage/lcov-report/threads/index.js.html +35 -17
  150. package/coverage/lcov-report/threads/query.js.html +20 -356
  151. package/coverage/lcov-report/threads/utils.js.html +19 -22
  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 +15 -15
  157. package/coverage/lcov-report/utilities/index.html +1 -1
  158. package/coverage/lcov-report/utilities/index.js.html +26 -26
  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 +1 -1
  164. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +18 -18
  165. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +4 -4
  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 +13 -13
  170. package/coverage/lcov-report/utilities/usageQuota/index.js.html +8 -8
  171. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +38 -26
  172. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  173. package/coverage/lcov-report/utilities/users.js.html +5 -5
  174. package/coverage/lcov-report/utilities/workerRequests.js.html +28 -28
  175. package/coverage/lcov.info +1570 -1660
  176. package/dist/api/controllers/application.js +4 -1
  177. package/dist/api/controllers/deploy/index.js +5 -1
  178. package/dist/api/controllers/dev.js +9 -5
  179. package/dist/api/controllers/row/internal.js +2 -1
  180. package/dist/api/controllers/webhook.js +2 -2
  181. package/dist/api/routes/tests/utilities/TestFunctions.js +1 -4
  182. package/dist/app.js +5 -2
  183. package/dist/automations/utils.js +6 -5
  184. package/dist/db/inMemoryView.js +33 -31
  185. package/dist/db/index.js +13 -2
  186. package/dist/integrations/couchdb.js +19 -25
  187. package/dist/integrations/queries/sql.js +108 -0
  188. package/dist/middleware/builder.js +10 -9
  189. package/dist/migrations/index.js +1 -5
  190. package/dist/package.json +5 -5
  191. package/dist/tests/utilities/TestConfiguration.js +66 -59
  192. package/dist/threads/index.js +6 -1
  193. package/dist/threads/query.js +4 -103
  194. package/dist/threads/utils.js +2 -3
  195. package/dist/tsconfig.tsbuildinfo +1 -1
  196. package/dist/utilities/fileSystem/index.js +27 -26
  197. package/dist/utilities/usageQuota/rows.js +16 -16
  198. package/package.json +6 -6
  199. package/scripts/exportAppTemplate.js +10 -8
  200. package/scripts/integrations/mysql/init.sql +1 -0
  201. package/src/api/controllers/application.js +3 -1
  202. package/src/api/controllers/deploy/index.js +4 -4
  203. package/src/api/controllers/dev.js +9 -6
  204. package/src/api/controllers/query/import/tests/index.spec.js +7 -11
  205. package/src/api/controllers/row/internal.js +2 -1
  206. package/src/api/controllers/webhook.js +2 -2
  207. package/src/api/routes/tests/row.spec.js +15 -11
  208. package/src/api/routes/tests/table.spec.js +3 -2
  209. package/src/api/routes/tests/utilities/TestFunctions.js +1 -5
  210. package/src/app.ts +2 -2
  211. package/src/automations/tests/deleteRow.spec.js +1 -1
  212. package/src/automations/utils.js +6 -5
  213. package/src/db/inMemoryView.js +37 -36
  214. package/src/db/index.js +15 -2
  215. package/src/db/tests/linkTests.spec.js +8 -7
  216. package/src/integrations/couchdb.ts +28 -24
  217. package/src/integrations/queries/sql.ts +125 -0
  218. package/src/integrations/tests/airtable.spec.js +3 -1
  219. package/src/integrations/tests/couchdb.spec.js +4 -1
  220. package/src/middleware/builder.js +10 -9
  221. package/src/middleware/tests/authorized.spec.js +0 -1
  222. package/src/middleware/tests/usageQuota.spec.js +6 -20
  223. package/src/migrations/functions/tests/appUrls.spec.js +8 -11
  224. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +13 -10
  225. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +25 -21
  226. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +26 -24
  227. package/src/migrations/index.ts +1 -2
  228. package/src/module.d.ts +8 -0
  229. package/src/tests/utilities/TestConfiguration.js +62 -55
  230. package/src/threads/index.js +7 -1
  231. package/src/threads/query.js +7 -119
  232. package/src/threads/utils.js +2 -3
  233. package/src/utilities/fileSystem/index.js +30 -30
  234. package/src/utilities/usageQuota/rows.js +22 -18
  235. package/coverage/lcov-report/db/client.js.html +0 -173
  236. package/dist/db/client.js +0 -25
  237. package/scripts/replicateApp.js +0 -50
  238. package/src/db/client.js +0 -31
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">79.31% </span>
26
+ <span class="strong">75.75% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>23/29</span>
28
+ <span class='fraction'>25/33</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">55.55% </span>
33
+ <span class="strong">59.09% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>10/18</span>
35
+ <span class='fraction'>13/22</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">79.31% </span>
47
+ <span class="strong">75.75% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>23/29</span>
49
+ <span class='fraction'>25/33</span>
50
50
  </div>
51
51
 
52
52
 
@@ -123,10 +123,16 @@
123
123
  <a name='L64'></a><a href='#L64'>64</a>
124
124
  <a name='L65'></a><a href='#L65'>65</a>
125
125
  <a name='L66'></a><a href='#L66'>66</a>
126
- <a name='L67'></a><a href='#L67'>67</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">40x</span>
127
- <span class="cline-any cline-yes">40x</span>
126
+ <a name='L67'></a><a href='#L67'>67</a>
127
+ <a name='L68'></a><a href='#L68'>68</a>
128
+ <a name='L69'></a><a href='#L69'>69</a>
129
+ <a name='L70'></a><a href='#L70'>70</a>
130
+ <a name='L71'></a><a href='#L71'>71</a>
131
+ <a name='L72'></a><a href='#L72'>72</a>
132
+ <a name='L73'></a><a href='#L73'>73</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">41x</span>
133
+ <span class="cline-any cline-yes">41x</span>
128
134
  <span class="cline-any cline-neutral">&nbsp;</span>
129
- <span class="cline-any cline-yes">40x</span>
135
+ <span class="cline-any cline-yes">41x</span>
130
136
  <span class="cline-any cline-neutral">&nbsp;</span>
131
137
  <span class="cline-any cline-neutral">&nbsp;</span>
132
138
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -148,20 +154,21 @@
148
154
  <span class="cline-any cline-neutral">&nbsp;</span>
149
155
  <span class="cline-any cline-neutral">&nbsp;</span>
150
156
  <span class="cline-any cline-neutral">&nbsp;</span>
151
- <span class="cline-any cline-yes">79x</span>
152
- <span class="cline-any cline-yes">79x</span>
153
- <span class="cline-any cline-yes">79x</span>
157
+ <span class="cline-any cline-yes">81x</span>
158
+ <span class="cline-any cline-yes">81x</span>
159
+ <span class="cline-any cline-yes">81x</span>
154
160
  <span class="cline-any cline-neutral">&nbsp;</span>
155
161
  <span class="cline-any cline-neutral">&nbsp;</span>
156
162
  <span class="cline-any cline-neutral">&nbsp;</span>
157
163
  <span class="cline-any cline-neutral">&nbsp;</span>
158
- <span class="cline-any cline-yes">79x</span>
164
+ <span class="cline-any cline-yes">81x</span>
159
165
  <span class="cline-any cline-no">&nbsp;</span>
160
166
  <span class="cline-any cline-neutral">&nbsp;</span>
161
167
  <span class="cline-any cline-neutral">&nbsp;</span>
162
168
  <span class="cline-any cline-neutral">&nbsp;</span>
163
169
  <span class="cline-any cline-no">&nbsp;</span>
164
170
  <span class="cline-any cline-no">&nbsp;</span>
171
+ <span class="cline-any cline-no">&nbsp;</span>
165
172
  <span class="cline-any cline-neutral">&nbsp;</span>
166
173
  <span class="cline-any cline-no">&nbsp;</span>
167
174
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -169,6 +176,7 @@
169
176
  <span class="cline-any cline-neutral">&nbsp;</span>
170
177
  <span class="cline-any cline-neutral">&nbsp;</span>
171
178
  <span class="cline-any cline-yes">20x</span>
179
+ <span class="cline-any cline-yes">20x</span>
172
180
  <span class="cline-any cline-neutral">&nbsp;</span>
173
181
  <span class="cline-any cline-neutral">&nbsp;</span>
174
182
  <span class="cline-any cline-yes">20x</span>
@@ -178,6 +186,10 @@
178
186
  <span class="cline-any cline-neutral">&nbsp;</span>
179
187
  <span class="cline-any cline-yes">20x</span>
180
188
  <span class="cline-any cline-yes">16x</span>
189
+ <span class="cline-any cline-no">&nbsp;</span>
190
+ <span class="cline-any cline-neutral">&nbsp;</span>
191
+ <span class="cline-any cline-neutral">&nbsp;</span>
192
+ <span class="cline-any cline-yes">16x</span>
181
193
  <span class="cline-any cline-yes">2x</span>
182
194
  <span class="cline-any cline-neutral">&nbsp;</span>
183
195
  <span class="cline-any cline-yes">14x</span>
@@ -187,8 +199,8 @@
187
199
  <span class="cline-any cline-neutral">&nbsp;</span>
188
200
  <span class="cline-any cline-neutral">&nbsp;</span>
189
201
  <span class="cline-any cline-neutral">&nbsp;</span>
190
- <span class="cline-any cline-yes">40x</span>
191
- <span class="cline-any cline-yes">40x</span>
202
+ <span class="cline-any cline-yes">41x</span>
203
+ <span class="cline-any cline-yes">41x</span>
192
204
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const workerFarm = require("worker-farm")
193
205
  const env = require("../environment")
194
206
  &nbsp;
@@ -227,6 +239,7 @@ class Thread {
227
239
  maxConcurrentWorkers: this.count,
228
240
  }
229
241
  <span class="cstat-no" title="statement not covered" > if (opts.timeoutMs) {</span>
242
+ <span class="cstat-no" title="statement not covered" > this.timeoutMs = opts.timeoutMs</span>
230
243
  <span class="cstat-no" title="statement not covered" > workerOpts.maxCallTime = opts.timeoutMs</span>
231
244
  }
232
245
  <span class="cstat-no" title="statement not covered" > this.workers = workerFarm(workerOpts, typeToFile(type))</span>
@@ -234,6 +247,7 @@ class Thread {
234
247
  }
235
248
  &nbsp;
236
249
  run(data) {
250
+ const timeoutMs = this.timeoutMs
237
251
  return new Promise((resolve, reject) =&gt; {
238
252
  let fncToCall
239
253
  // if in test then don't use threading
@@ -243,7 +257,11 @@ class Thread {
243
257
  <span class="cstat-no" title="statement not covered" > fncToCall = this.workers</span>
244
258
  }
245
259
  fncToCall(data, (err, response) =&gt; {
246
- if (err) {
260
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (err &amp;&amp; err.type === "TimeoutError") {
261
+ <span class="cstat-no" title="statement not covered" > reject(</span>
262
+ new Error(`Query response time exceeded ${timeoutMs}ms timeout.`)
263
+ )
264
+ } else if (err) {
247
265
  reject(err)
248
266
  } else {
249
267
  resolve(response)
@@ -262,7 +280,7 @@ module.exports.ThreadType = ThreadType
262
280
  <div class='footer quiet pad2 space-top1 center small'>
263
281
  Code coverage generated by
264
282
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
265
- at Wed Apr 13 2022 12:20:55 GMT+0000 (Coordinated Universal Time)
283
+ at Fri Apr 22 2022 14:39:19 GMT+0000 (Coordinated Universal Time)
266
284
  </div>
267
285
  </div>
268
286
  <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">68.62% </span>
26
+ <span class="strong">91.26% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>105/153</span>
28
+ <span class='fraction'>94/103</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">59.72% </span>
33
+ <span class="strong">79.06% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>43/72</span>
35
+ <span class='fraction'>34/43</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">82.35% </span>
40
+ <span class="strong">92.3% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>14/17</span>
42
+ <span class='fraction'>12/13</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">68.91% </span>
47
+ <span class="strong">91.91% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>102/148</span>
49
+ <span class='fraction'>91/99</span>
50
50
  </div>
51
51
 
52
52
 
@@ -55,7 +55,7 @@
55
55
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
56
  </p>
57
57
  </div>
58
- <div class='status-line medium'></div>
58
+ <div class='status-line high'></div>
59
59
  <pre><table class="coverage">
60
60
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
61
  <a name='L2'></a><a href='#L2'>2</a>
@@ -261,129 +261,16 @@
261
261
  <a name='L202'></a><a href='#L202'>202</a>
262
262
  <a name='L203'></a><a href='#L203'>203</a>
263
263
  <a name='L204'></a><a href='#L204'>204</a>
264
- <a name='L205'></a><a href='#L205'>205</a>
265
- <a name='L206'></a><a href='#L206'>206</a>
266
- <a name='L207'></a><a href='#L207'>207</a>
267
- <a name='L208'></a><a href='#L208'>208</a>
268
- <a name='L209'></a><a href='#L209'>209</a>
269
- <a name='L210'></a><a href='#L210'>210</a>
270
- <a name='L211'></a><a href='#L211'>211</a>
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>
274
- <a name='L215'></a><a href='#L215'>215</a>
275
- <a name='L216'></a><a href='#L216'>216</a>
276
- <a name='L217'></a><a href='#L217'>217</a>
277
- <a name='L218'></a><a href='#L218'>218</a>
278
- <a name='L219'></a><a href='#L219'>219</a>
279
- <a name='L220'></a><a href='#L220'>220</a>
280
- <a name='L221'></a><a href='#L221'>221</a>
281
- <a name='L222'></a><a href='#L222'>222</a>
282
- <a name='L223'></a><a href='#L223'>223</a>
283
- <a name='L224'></a><a href='#L224'>224</a>
284
- <a name='L225'></a><a href='#L225'>225</a>
285
- <a name='L226'></a><a href='#L226'>226</a>
286
- <a name='L227'></a><a href='#L227'>227</a>
287
- <a name='L228'></a><a href='#L228'>228</a>
288
- <a name='L229'></a><a href='#L229'>229</a>
289
- <a name='L230'></a><a href='#L230'>230</a>
290
- <a name='L231'></a><a href='#L231'>231</a>
291
- <a name='L232'></a><a href='#L232'>232</a>
292
- <a name='L233'></a><a href='#L233'>233</a>
293
- <a name='L234'></a><a href='#L234'>234</a>
294
- <a name='L235'></a><a href='#L235'>235</a>
295
- <a name='L236'></a><a href='#L236'>236</a>
296
- <a name='L237'></a><a href='#L237'>237</a>
297
- <a name='L238'></a><a href='#L238'>238</a>
298
- <a name='L239'></a><a href='#L239'>239</a>
299
- <a name='L240'></a><a href='#L240'>240</a>
300
- <a name='L241'></a><a href='#L241'>241</a>
301
- <a name='L242'></a><a href='#L242'>242</a>
302
- <a name='L243'></a><a href='#L243'>243</a>
303
- <a name='L244'></a><a href='#L244'>244</a>
304
- <a name='L245'></a><a href='#L245'>245</a>
305
- <a name='L246'></a><a href='#L246'>246</a>
306
- <a name='L247'></a><a href='#L247'>247</a>
307
- <a name='L248'></a><a href='#L248'>248</a>
308
- <a name='L249'></a><a href='#L249'>249</a>
309
- <a name='L250'></a><a href='#L250'>250</a>
310
- <a name='L251'></a><a href='#L251'>251</a>
311
- <a name='L252'></a><a href='#L252'>252</a>
312
- <a name='L253'></a><a href='#L253'>253</a>
313
- <a name='L254'></a><a href='#L254'>254</a>
314
- <a name='L255'></a><a href='#L255'>255</a>
315
- <a name='L256'></a><a href='#L256'>256</a>
316
- <a name='L257'></a><a href='#L257'>257</a>
317
- <a name='L258'></a><a href='#L258'>258</a>
318
- <a name='L259'></a><a href='#L259'>259</a>
319
- <a name='L260'></a><a href='#L260'>260</a>
320
- <a name='L261'></a><a href='#L261'>261</a>
321
- <a name='L262'></a><a href='#L262'>262</a>
322
- <a name='L263'></a><a href='#L263'>263</a>
323
- <a name='L264'></a><a href='#L264'>264</a>
324
- <a name='L265'></a><a href='#L265'>265</a>
325
- <a name='L266'></a><a href='#L266'>266</a>
326
- <a name='L267'></a><a href='#L267'>267</a>
327
- <a name='L268'></a><a href='#L268'>268</a>
328
- <a name='L269'></a><a href='#L269'>269</a>
329
- <a name='L270'></a><a href='#L270'>270</a>
330
- <a name='L271'></a><a href='#L271'>271</a>
331
- <a name='L272'></a><a href='#L272'>272</a>
332
- <a name='L273'></a><a href='#L273'>273</a>
333
- <a name='L274'></a><a href='#L274'>274</a>
334
- <a name='L275'></a><a href='#L275'>275</a>
335
- <a name='L276'></a><a href='#L276'>276</a>
336
- <a name='L277'></a><a href='#L277'>277</a>
337
- <a name='L278'></a><a href='#L278'>278</a>
338
- <a name='L279'></a><a href='#L279'>279</a>
339
- <a name='L280'></a><a href='#L280'>280</a>
340
- <a name='L281'></a><a href='#L281'>281</a>
341
- <a name='L282'></a><a href='#L282'>282</a>
342
- <a name='L283'></a><a href='#L283'>283</a>
343
- <a name='L284'></a><a href='#L284'>284</a>
344
- <a name='L285'></a><a href='#L285'>285</a>
345
- <a name='L286'></a><a href='#L286'>286</a>
346
- <a name='L287'></a><a href='#L287'>287</a>
347
- <a name='L288'></a><a href='#L288'>288</a>
348
- <a name='L289'></a><a href='#L289'>289</a>
349
- <a name='L290'></a><a href='#L290'>290</a>
350
- <a name='L291'></a><a href='#L291'>291</a>
351
- <a name='L292'></a><a href='#L292'>292</a>
352
- <a name='L293'></a><a href='#L293'>293</a>
353
- <a name='L294'></a><a href='#L294'>294</a>
354
- <a name='L295'></a><a href='#L295'>295</a>
355
- <a name='L296'></a><a href='#L296'>296</a>
356
- <a name='L297'></a><a href='#L297'>297</a>
357
- <a name='L298'></a><a href='#L298'>298</a>
358
- <a name='L299'></a><a href='#L299'>299</a>
359
- <a name='L300'></a><a href='#L300'>300</a>
360
- <a name='L301'></a><a href='#L301'>301</a>
361
- <a name='L302'></a><a href='#L302'>302</a>
362
- <a name='L303'></a><a href='#L303'>303</a>
363
- <a name='L304'></a><a href='#L304'>304</a>
364
- <a name='L305'></a><a href='#L305'>305</a>
365
- <a name='L306'></a><a href='#L306'>306</a>
366
- <a name='L307'></a><a href='#L307'>307</a>
367
- <a name='L308'></a><a href='#L308'>308</a>
368
- <a name='L309'></a><a href='#L309'>309</a>
369
- <a name='L310'></a><a href='#L310'>310</a>
370
- <a name='L311'></a><a href='#L311'>311</a>
371
- <a name='L312'></a><a href='#L312'>312</a>
372
- <a name='L313'></a><a href='#L313'>313</a>
373
- <a name='L314'></a><a href='#L314'>314</a>
374
- <a name='L315'></a><a href='#L315'>315</a>
375
- <a name='L316'></a><a href='#L316'>316</a>
376
- <a name='L317'></a><a href='#L317'>317</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
264
+ <a name='L205'></a><a href='#L205'>205</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
377
265
  <span class="cline-any cline-yes">2x</span>
378
266
  <span class="cline-any cline-yes">2x</span>
379
267
  <span class="cline-any cline-yes">2x</span>
380
- <span class="cline-any cline-neutral">&nbsp;</span>
381
- <span class="cline-any cline-neutral">&nbsp;</span>
382
- <span class="cline-any cline-neutral">&nbsp;</span>
383
268
  <span class="cline-any cline-yes">2x</span>
384
269
  <span class="cline-any cline-yes">2x</span>
385
270
  <span class="cline-any cline-yes">2x</span>
386
271
  <span class="cline-any cline-neutral">&nbsp;</span>
272
+ <span class="cline-any cline-neutral">&nbsp;</span>
273
+ <span class="cline-any cline-neutral">&nbsp;</span>
387
274
  <span class="cline-any cline-yes">2x</span>
388
275
  <span class="cline-any cline-neutral">&nbsp;</span>
389
276
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -405,76 +292,6 @@
405
292
  <span class="cline-any cline-neutral">&nbsp;</span>
406
293
  <span class="cline-any cline-neutral">&nbsp;</span>
407
294
  <span class="cline-any cline-neutral">&nbsp;</span>
408
- <span class="cline-any cline-yes">2x</span>
409
- <span class="cline-any cline-yes">2x</span>
410
- <span class="cline-any cline-yes">2x</span>
411
- <span class="cline-any cline-neutral">&nbsp;</span>
412
- <span class="cline-any cline-no">&nbsp;</span>
413
- <span class="cline-any cline-no">&nbsp;</span>
414
- <span class="cline-any cline-no">&nbsp;</span>
415
- <span class="cline-any cline-no">&nbsp;</span>
416
- <span class="cline-any cline-neutral">&nbsp;</span>
417
- <span class="cline-any cline-no">&nbsp;</span>
418
- <span class="cline-any cline-neutral">&nbsp;</span>
419
- <span class="cline-any cline-neutral">&nbsp;</span>
420
- <span class="cline-any cline-neutral">&nbsp;</span>
421
- <span class="cline-any cline-neutral">&nbsp;</span>
422
- <span class="cline-any cline-no">&nbsp;</span>
423
- <span class="cline-any cline-neutral">&nbsp;</span>
424
- <span class="cline-any cline-no">&nbsp;</span>
425
- <span class="cline-any cline-no">&nbsp;</span>
426
- <span class="cline-any cline-neutral">&nbsp;</span>
427
- <span class="cline-any cline-no">&nbsp;</span>
428
- <span class="cline-any cline-no">&nbsp;</span>
429
- <span class="cline-any cline-no">&nbsp;</span>
430
- <span class="cline-any cline-no">&nbsp;</span>
431
- <span class="cline-any cline-no">&nbsp;</span>
432
- <span class="cline-any cline-neutral">&nbsp;</span>
433
- <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-neutral">&nbsp;</span>
435
- <span class="cline-any cline-neutral">&nbsp;</span>
436
- <span class="cline-any cline-neutral">&nbsp;</span>
437
- <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-neutral">&nbsp;</span>
439
- <span class="cline-any cline-neutral">&nbsp;</span>
440
- <span class="cline-any cline-neutral">&nbsp;</span>
441
- <span class="cline-any cline-no">&nbsp;</span>
442
- <span class="cline-any cline-no">&nbsp;</span>
443
- <span class="cline-any cline-neutral">&nbsp;</span>
444
- <span class="cline-any cline-no">&nbsp;</span>
445
- <span class="cline-any cline-neutral">&nbsp;</span>
446
- <span class="cline-any cline-neutral">&nbsp;</span>
447
- <span class="cline-any cline-neutral">&nbsp;</span>
448
- <span class="cline-any cline-no">&nbsp;</span>
449
- <span class="cline-any cline-no">&nbsp;</span>
450
- <span class="cline-any cline-neutral">&nbsp;</span>
451
- <span class="cline-any cline-neutral">&nbsp;</span>
452
- <span class="cline-any cline-no">&nbsp;</span>
453
- <span class="cline-any cline-no">&nbsp;</span>
454
- <span class="cline-any cline-neutral">&nbsp;</span>
455
- <span class="cline-any cline-no">&nbsp;</span>
456
- <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-no">&nbsp;</span>
458
- <span class="cline-any cline-neutral">&nbsp;</span>
459
- <span class="cline-any cline-no">&nbsp;</span>
460
- <span class="cline-any cline-neutral">&nbsp;</span>
461
- <span class="cline-any cline-neutral">&nbsp;</span>
462
- <span class="cline-any cline-no">&nbsp;</span>
463
- <span class="cline-any cline-no">&nbsp;</span>
464
- <span class="cline-any cline-neutral">&nbsp;</span>
465
- <span class="cline-any cline-no">&nbsp;</span>
466
- <span class="cline-any cline-no">&nbsp;</span>
467
- <span class="cline-any cline-no">&nbsp;</span>
468
- <span class="cline-any cline-no">&nbsp;</span>
469
- <span class="cline-any cline-neutral">&nbsp;</span>
470
- <span class="cline-any cline-no">&nbsp;</span>
471
- <span class="cline-any cline-neutral">&nbsp;</span>
472
- <span class="cline-any cline-neutral">&nbsp;</span>
473
- <span class="cline-any cline-no">&nbsp;</span>
474
- <span class="cline-any cline-no">&nbsp;</span>
475
- <span class="cline-any cline-neutral">&nbsp;</span>
476
- <span class="cline-any cline-neutral">&nbsp;</span>
477
- <span class="cline-any cline-neutral">&nbsp;</span>
478
295
  <span class="cline-any cline-yes">16x</span>
479
296
  <span class="cline-any cline-yes">16x</span>
480
297
  <span class="cline-any cline-yes">16x</span>
@@ -636,47 +453,6 @@
636
453
  <span class="cline-any cline-neutral">&nbsp;</span>
637
454
  <span class="cline-any cline-neutral">&nbsp;</span>
638
455
  <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-yes">12x</span>
640
- <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-yes">12x</span>
643
- <span class="cline-any cline-yes">19x</span>
644
- <span class="cline-any cline-no">&nbsp;</span>
645
- <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-yes">19x</span>
647
- <span class="cline-any cline-neutral">&nbsp;</span>
648
- <span class="cline-any cline-no">&nbsp;</span>
649
- <span class="cline-any cline-yes">19x</span>
650
- <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-yes">19x</span>
652
- <span class="cline-any cline-neutral">&nbsp;</span>
653
- <span class="cline-any cline-neutral">&nbsp;</span>
654
- <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-neutral">&nbsp;</span>
656
- <span class="cline-any cline-neutral">&nbsp;</span>
657
- <span class="cline-any cline-no">&nbsp;</span>
658
- <span class="cline-any cline-neutral">&nbsp;</span>
659
- <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-yes">12x</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-neutral">&nbsp;</span>
663
- <span class="cline-any cline-neutral">&nbsp;</span>
664
- <span class="cline-any cline-neutral">&nbsp;</span>
665
- <span class="cline-any cline-no">&nbsp;</span>
666
- <span class="cline-any cline-no">&nbsp;</span>
667
- <span class="cline-any cline-neutral">&nbsp;</span>
668
- <span class="cline-any cline-neutral">&nbsp;</span>
669
- <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-neutral">&nbsp;</span>
671
- <span class="cline-any cline-neutral">&nbsp;</span>
672
- <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-neutral">&nbsp;</span>
674
- <span class="cline-any cline-no">&nbsp;</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-yes">12x</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-neutral">&nbsp;</span>
680
456
  <span class="cline-any cline-yes">2x</span>
681
457
  <span class="cline-any cline-yes">10x</span>
682
458
  <span class="cline-any cline-yes">10x</span>
@@ -693,14 +469,13 @@
693
469
  threadUtils.threadSetup()
694
470
  const ScriptRunner = require("../utilities/scriptRunner")
695
471
  const { integrations } = require("../integrations")
696
- const {
697
- processStringSync,
698
- findHBSBlocks,
699
- } = require("@budibase/string-templates")
472
+ const { processStringSync } = require("@budibase/string-templates")
700
473
  const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
701
474
  const { isSQL } = require("../integrations/utils")
702
- &nbsp;
703
- const CONST_CHAR_REGEX = new RegExp("'[^']*'", "g")
475
+ const {
476
+ enrichQueryFields,
477
+ interpolateSQL,
478
+ } = require("../integrations/queries/sql")
704
479
  &nbsp;
705
480
  class QueryRunner {
706
481
  constructor(input, flags = { noRecursiveQuery: false }) {
@@ -719,76 +494,6 @@ class QueryRunner {
719
494
  this.queryResponse = {}
720
495
  this.hasRerun = false
721
496
  }
722
- &nbsp;
723
- interpolateSQL(fields, parameters, integration) {
724
- let sql = fields.sql
725
- if (!sql) {
726
- return fields
727
- }
728
- const bindings = <span class="cstat-no" title="statement not covered" >findHBSBlocks(sql)</span>
729
- let variables = <span class="cstat-no" title="statement not covered" >[],</span>
730
- arrays = <span class="cstat-no" title="statement not covered" >[]</span>
731
- <span class="cstat-no" title="statement not covered" > for (let binding of bindings) {</span>
732
- // look for array/list operations in the SQL statement, which will need handled later
733
- const listRegexMatch = <span class="cstat-no" title="statement not covered" >sql.match(</span>
734
- new RegExp(`(in|IN|In|iN)( )+[(]?${binding}[)]?`)
735
- )
736
- // check if the variable was used as part of a string concat e.g. 'Hello {{binding}}'
737
- // start by finding all the instances of const character strings
738
- const charConstMatch = <span class="cstat-no" title="statement not covered" >sql.match(CONST_CHAR_REGEX) || []</span>
739
- // now look within them to see if a binding is used
740
- const charConstBindingMatch = <span class="cstat-no" title="statement not covered" >charConstMatch.find(<span class="fstat-no" title="function not covered" >st</span>ring =&gt;</span>
741
- <span class="cstat-no" title="statement not covered" > string.match(new RegExp(`'[^']*${binding}[^']*'`))</span>
742
- )
743
- <span class="cstat-no" title="statement not covered" > if (charConstBindingMatch) {</span>
744
- let [part1, part2] = <span class="cstat-no" title="statement not covered" >charConstBindingMatch.split(binding)</span>
745
- <span class="cstat-no" title="statement not covered" > part1 = `'${part1.substring(1)}'`</span>
746
- <span class="cstat-no" title="statement not covered" > part2 = `'${part2.substring(0, part2.length - 1)}'`</span>
747
- <span class="cstat-no" title="statement not covered" > sql = sql.replace(</span>
748
- charConstBindingMatch,
749
- integration.getStringConcat([
750
- part1,
751
- integration.getBindingIdentifier(),
752
- part2,
753
- ])
754
- )
755
- }
756
- // generate SQL parameterised array
757
- else <span class="cstat-no" title="statement not covered" >if (listRegexMatch) {</span>
758
- <span class="cstat-no" title="statement not covered" > arrays.push(binding)</span>
759
- // determine the length of the array
760
- const value = <span class="cstat-no" title="statement not covered" >this.enrichQueryFields([binding], parameters)[0].split(</span>
761
- ","
762
- )
763
- // build a string like ($1, $2, $3)
764
- let replacement = <span class="cstat-no" title="statement not covered" >`${Array.apply(null, Array(value.length))</span>
765
- .map(<span class="fstat-no" title="function not covered" >()</span> =&gt; <span class="cstat-no" title="statement not covered" >integration.getBindingIdentifier())</span>
766
- .join(",")}`
767
- // check if parentheses are needed
768
- <span class="cstat-no" title="statement not covered" > if (!listRegexMatch[0].includes(`(${binding})`)) {</span>
769
- <span class="cstat-no" title="statement not covered" > replacement = `(${replacement})`</span>
770
- }
771
- <span class="cstat-no" title="statement not covered" > sql = sql.replace(binding, replacement)</span>
772
- } else {
773
- <span class="cstat-no" title="statement not covered" > sql = sql.replace(binding, integration.getBindingIdentifier())</span>
774
- }
775
- <span class="cstat-no" title="statement not covered" > variables.push(binding)</span>
776
- }
777
- // replicate the knex structure
778
- <span class="cstat-no" title="statement not covered" > fields.sql = sql</span>
779
- <span class="cstat-no" title="statement not covered" > fields.bindings = this.enrichQueryFields(variables, parameters)</span>
780
- // check for arrays in the data
781
- let updated = <span class="cstat-no" title="statement not covered" >[]</span>
782
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; variables.length; i++) {</span>
783
- <span class="cstat-no" title="statement not covered" > if (arrays.includes(variables[i])) {</span>
784
- <span class="cstat-no" title="statement not covered" > updated = updated.concat(fields.bindings[i].split(","))</span>
785
- } else {
786
- <span class="cstat-no" title="statement not covered" > updated.push(fields.bindings[i])</span>
787
- }
788
- }
789
- <span class="cstat-no" title="statement not covered" > fields.bindings = updated</span>
790
- <span class="cstat-no" title="statement not covered" > return fields</span>
791
- }
792
497
  &nbsp;
793
498
  async execute() {
794
499
  let { datasource, fields, queryVerb, transformer } = this
@@ -803,9 +508,9 @@ class QueryRunner {
803
508
  let query
804
509
  // handle SQL injections by interpolating the variables
805
510
  if (isSQL(datasource)) {
806
- query = this.interpolateSQL(fields, parameters, integration)
511
+ query = interpolateSQL(fields, parameters, integration)
807
512
  } else {
808
- query = this.enrichQueryFields(fields, parameters)
513
+ query = enrichQueryFields(fields, parameters)
809
514
  }
810
515
  &nbsp;
811
516
  // Add pagination values for REST queries
@@ -950,47 +655,6 @@ class QueryRunner {
950
655
  }
951
656
  return parameters
952
657
  }
953
- &nbsp;
954
- enrichQueryFields(fields, parameters = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
955
- const enrichedQuery = Array.isArray(fields) ? <span class="branch-0 cbranch-no" title="branch not covered" >[] </span>: {}
956
- &nbsp;
957
- // enrich the fields with dynamic parameters
958
- for (let key of Object.keys(fields)) {
959
- <span class="missing-if-branch" title="if path not taken" >I</span>if (fields[key] == null) {
960
- <span class="cstat-no" title="statement not covered" > continue</span>
961
- }
962
- <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof fields[key] === "object") {
963
- // enrich nested fields object
964
- <span class="cstat-no" title="statement not covered" > enrichedQuery[key] = this.enrichQueryFields(fields[key], parameters)</span>
965
- } else if (typeof fields[key] === "string") {
966
- // enrich string value as normal
967
- enrichedQuery[key] = processStringSync(fields[key], parameters, {
968
- noEscaping: true,
969
- noHelpers: true,
970
- escapeNewlines: true,
971
- })
972
- } else <span class="missing-if-branch" title="else path not taken" >E</span>{
973
- <span class="cstat-no" title="statement not covered" > enrichedQuery[key] = fields[key]</span>
974
- }
975
- }
976
- <span class="missing-if-branch" title="if path not taken" >I</span>if (
977
- enrichedQuery.json ||
978
- enrichedQuery.customData ||
979
- enrichedQuery.requestBody
980
- ) {
981
- <span class="cstat-no" title="statement not covered" > try {</span>
982
- <span class="cstat-no" title="statement not covered" > enrichedQuery.json = JSON.parse(</span>
983
- enrichedQuery.json ||
984
- enrichedQuery.customData ||
985
- enrichedQuery.requestBody
986
- )
987
- } catch (err) {
988
- // no json found, ignore
989
- }
990
- <span class="cstat-no" title="statement not covered" > delete enrichedQuery.customData</span>
991
- }
992
- return enrichedQuery
993
- }
994
658
  }
995
659
  &nbsp;
996
660
  module.exports = (input, callback) =&gt; {
@@ -1012,7 +676,7 @@ module.exports = (input, callback) =&gt; {
1012
676
  <div class='footer quiet pad2 space-top1 center small'>
1013
677
  Code coverage generated by
1014
678
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1015
- at Wed Apr 13 2022 12:20:55 GMT+0000 (Coordinated Universal Time)
679
+ at Fri Apr 22 2022 14:39:19 GMT+0000 (Coordinated Universal Time)
1016
680
  </div>
1017
681
  </div>
1018
682
  <script src="../prettify.js"></script>