@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
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">83.95% </span>
26
+ <span class="strong">91.3% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>68/81</span>
28
+ <span class='fraction'>42/46</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">73.17% </span>
33
+ <span class="strong">78.95% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>30/41</span>
35
+ <span class='fraction'>15/19</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">70% </span>
40
+ <span class="strong">77.78% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>7/10</span>
42
+ <span class='fraction'>7/9</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">88.16% </span>
47
+ <span class="strong">93.18% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>67/76</span>
49
+ <span class='fraction'>41/44</span>
50
50
  </div>
51
51
 
52
52
 
@@ -145,264 +145,76 @@
145
145
  <a name='L86'></a><a href='#L86'>86</a>
146
146
  <a name='L87'></a><a href='#L87'>87</a>
147
147
  <a name='L88'></a><a href='#L88'>88</a>
148
- <a name='L89'></a><a href='#L89'>89</a>
149
- <a name='L90'></a><a href='#L90'>90</a>
150
- <a name='L91'></a><a href='#L91'>91</a>
151
- <a name='L92'></a><a href='#L92'>92</a>
152
- <a name='L93'></a><a href='#L93'>93</a>
153
- <a name='L94'></a><a href='#L94'>94</a>
154
- <a name='L95'></a><a href='#L95'>95</a>
155
- <a name='L96'></a><a href='#L96'>96</a>
156
- <a name='L97'></a><a href='#L97'>97</a>
157
- <a name='L98'></a><a href='#L98'>98</a>
158
- <a name='L99'></a><a href='#L99'>99</a>
159
- <a name='L100'></a><a href='#L100'>100</a>
160
- <a name='L101'></a><a href='#L101'>101</a>
161
- <a name='L102'></a><a href='#L102'>102</a>
162
- <a name='L103'></a><a href='#L103'>103</a>
163
- <a name='L104'></a><a href='#L104'>104</a>
164
- <a name='L105'></a><a href='#L105'>105</a>
165
- <a name='L106'></a><a href='#L106'>106</a>
166
- <a name='L107'></a><a href='#L107'>107</a>
167
- <a name='L108'></a><a href='#L108'>108</a>
168
- <a name='L109'></a><a href='#L109'>109</a>
169
- <a name='L110'></a><a href='#L110'>110</a>
170
- <a name='L111'></a><a href='#L111'>111</a>
171
- <a name='L112'></a><a href='#L112'>112</a>
172
- <a name='L113'></a><a href='#L113'>113</a>
173
- <a name='L114'></a><a href='#L114'>114</a>
174
- <a name='L115'></a><a href='#L115'>115</a>
175
- <a name='L116'></a><a href='#L116'>116</a>
176
- <a name='L117'></a><a href='#L117'>117</a>
177
- <a name='L118'></a><a href='#L118'>118</a>
178
- <a name='L119'></a><a href='#L119'>119</a>
179
- <a name='L120'></a><a href='#L120'>120</a>
180
- <a name='L121'></a><a href='#L121'>121</a>
181
- <a name='L122'></a><a href='#L122'>122</a>
182
- <a name='L123'></a><a href='#L123'>123</a>
183
- <a name='L124'></a><a href='#L124'>124</a>
184
- <a name='L125'></a><a href='#L125'>125</a>
185
- <a name='L126'></a><a href='#L126'>126</a>
186
- <a name='L127'></a><a href='#L127'>127</a>
187
- <a name='L128'></a><a href='#L128'>128</a>
188
- <a name='L129'></a><a href='#L129'>129</a>
189
- <a name='L130'></a><a href='#L130'>130</a>
190
- <a name='L131'></a><a href='#L131'>131</a>
191
- <a name='L132'></a><a href='#L132'>132</a>
192
- <a name='L133'></a><a href='#L133'>133</a>
193
- <a name='L134'></a><a href='#L134'>134</a>
194
- <a name='L135'></a><a href='#L135'>135</a>
195
- <a name='L136'></a><a href='#L136'>136</a>
196
- <a name='L137'></a><a href='#L137'>137</a>
197
- <a name='L138'></a><a href='#L138'>138</a>
198
- <a name='L139'></a><a href='#L139'>139</a>
199
- <a name='L140'></a><a href='#L140'>140</a>
200
- <a name='L141'></a><a href='#L141'>141</a>
201
- <a name='L142'></a><a href='#L142'>142</a>
202
- <a name='L143'></a><a href='#L143'>143</a>
203
- <a name='L144'></a><a href='#L144'>144</a>
204
- <a name='L145'></a><a href='#L145'>145</a>
205
- <a name='L146'></a><a href='#L146'>146</a>
206
- <a name='L147'></a><a href='#L147'>147</a>
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>
240
- <a name='L181'></a><a href='#L181'>181</a>
241
- <a name='L182'></a><a href='#L182'>182</a>
242
- <a name='L183'></a><a href='#L183'>183</a>
243
- <a name='L184'></a><a href='#L184'>184</a>
244
- <a name='L185'></a><a href='#L185'>185</a>
245
- <a name='L186'></a><a href='#L186'>186</a>
246
- <a name='L187'></a><a href='#L187'>187</a>
247
- <a name='L188'></a><a href='#L188'>188</a>
248
- <a name='L189'></a><a href='#L189'>189</a>
249
- <a name='L190'></a><a href='#L190'>190</a>
250
- <a name='L191'></a><a href='#L191'>191</a>
251
- <a name='L192'></a><a href='#L192'>192</a>
252
- <a name='L193'></a><a href='#L193'>193</a>
253
- <a name='L194'></a><a href='#L194'>194</a>
254
- <a name='L195'></a><a href='#L195'>195</a>
255
- <a name='L196'></a><a href='#L196'>196</a>
256
- <a name='L197'></a><a href='#L197'>197</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
148
+ <a name='L89'></a><a href='#L89'>89</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
257
149
  <span class="cline-any cline-yes">34x</span>
258
150
  <span class="cline-any cline-yes">34x</span>
259
- <span class="cline-any cline-neutral">&nbsp;</span>
260
- <span class="cline-any cline-neutral">&nbsp;</span>
261
- <span class="cline-any cline-neutral">&nbsp;</span>
262
- <span class="cline-any cline-neutral">&nbsp;</span>
263
- <span class="cline-any cline-neutral">&nbsp;</span>
264
- <span class="cline-any cline-neutral">&nbsp;</span>
265
151
  <span class="cline-any cline-yes">34x</span>
266
152
  <span class="cline-any cline-yes">34x</span>
267
- <span class="cline-any cline-yes">34x</span>
268
- <span class="cline-any cline-neutral">&nbsp;</span>
269
- <span class="cline-any cline-yes">34x</span>
270
- <span class="cline-any cline-yes">1x</span>
271
- <span class="cline-any cline-neutral">&nbsp;</span>
272
- <span class="cline-any cline-yes">1x</span>
273
- <span class="cline-any cline-neutral">&nbsp;</span>
274
- <span class="cline-any cline-neutral">&nbsp;</span>
275
- <span class="cline-any cline-neutral">&nbsp;</span>
276
- <span class="cline-any cline-neutral">&nbsp;</span>
277
- <span class="cline-any cline-neutral">&nbsp;</span>
278
- <span class="cline-any cline-yes">2x</span>
279
- <span class="cline-any cline-neutral">&nbsp;</span>
280
- <span class="cline-any cline-neutral">&nbsp;</span>
281
- <span class="cline-any cline-neutral">&nbsp;</span>
282
- <span class="cline-any cline-neutral">&nbsp;</span>
283
- <span class="cline-any cline-neutral">&nbsp;</span>
284
- <span class="cline-any cline-yes">1x</span>
285
- <span class="cline-any cline-neutral">&nbsp;</span>
286
- <span class="cline-any cline-neutral">&nbsp;</span>
287
- <span class="cline-any cline-neutral">&nbsp;</span>
288
- <span class="cline-any cline-neutral">&nbsp;</span>
289
- <span class="cline-any cline-neutral">&nbsp;</span>
290
- <span class="cline-any cline-yes">1x</span>
291
- <span class="cline-any cline-no">&nbsp;</span>
292
- <span class="cline-any cline-neutral">&nbsp;</span>
293
153
  <span class="cline-any cline-neutral">&nbsp;</span>
294
154
  <span class="cline-any cline-neutral">&nbsp;</span>
295
155
  <span class="cline-any cline-neutral">&nbsp;</span>
296
156
  <span class="cline-any cline-neutral">&nbsp;</span>
297
- <span class="cline-any cline-neutral">&nbsp;</span>
298
- <span class="cline-any cline-yes">1x</span>
299
- <span class="cline-any cline-neutral">&nbsp;</span>
300
- <span class="cline-any cline-neutral">&nbsp;</span>
301
157
  <span class="cline-any cline-yes">34x</span>
302
- <span class="cline-any cline-yes">19x</span>
303
- <span class="cline-any cline-yes">19x</span>
304
- <span class="cline-any cline-neutral">&nbsp;</span>
305
- <span class="cline-any cline-neutral">&nbsp;</span>
306
158
  <span class="cline-any cline-yes">34x</span>
307
- <span class="cline-any cline-yes">99x</span>
308
- <span class="cline-any cline-yes">99x</span>
309
- <span class="cline-any cline-yes">99x</span>
310
- <span class="cline-any cline-yes">99x</span>
311
- <span class="cline-any cline-neutral">&nbsp;</span>
312
- <span class="cline-any cline-neutral">&nbsp;</span>
313
- <span class="cline-any cline-neutral">&nbsp;</span>
314
- <span class="cline-any cline-neutral">&nbsp;</span>
315
- <span class="cline-any cline-neutral">&nbsp;</span>
316
- <span class="cline-any cline-neutral">&nbsp;</span>
317
159
  <span class="cline-any cline-neutral">&nbsp;</span>
318
160
  <span class="cline-any cline-neutral">&nbsp;</span>
161
+ <span class="cline-any cline-yes">101x</span>
319
162
  <span class="cline-any cline-yes">99x</span>
320
- <span class="cline-any cline-yes">4x</span>
321
- <span class="cline-any cline-neutral">&nbsp;</span>
322
- <span class="cline-any cline-neutral">&nbsp;</span>
323
- <span class="cline-any cline-neutral">&nbsp;</span>
324
- <span class="cline-any cline-neutral">&nbsp;</span>
325
- <span class="cline-any cline-yes">99x</span>
326
- <span class="cline-any cline-neutral">&nbsp;</span>
327
- <span class="cline-any cline-neutral">&nbsp;</span>
328
- <span class="cline-any cline-neutral">&nbsp;</span>
329
- <span class="cline-any cline-neutral">&nbsp;</span>
330
- <span class="cline-any cline-neutral">&nbsp;</span>
331
- <span class="cline-any cline-yes">99x</span>
332
- <span class="cline-any cline-neutral">&nbsp;</span>
333
- <span class="cline-any cline-neutral">&nbsp;</span>
334
163
  <span class="cline-any cline-neutral">&nbsp;</span>
335
- <span class="cline-any cline-yes">99x</span>
336
- <span class="cline-any cline-yes">4x</span>
337
- <span class="cline-any cline-yes">13x</span>
338
- <span class="cline-any cline-yes">13x</span>
339
- <span class="cline-any cline-yes">13x</span>
164
+ <span class="cline-any cline-yes">101x</span>
340
165
  <span class="cline-any cline-no">&nbsp;</span>
341
- <span class="cline-any cline-neutral">&nbsp;</span>
342
- <span class="cline-any cline-yes">13x</span>
166
+ <span class="cline-any cline-yes">101x</span>
343
167
  <span class="cline-any cline-no">&nbsp;</span>
344
168
  <span class="cline-any cline-neutral">&nbsp;</span>
169
+ <span class="cline-any cline-yes">101x</span>
345
170
  <span class="cline-any cline-neutral">&nbsp;</span>
346
171
  <span class="cline-any cline-neutral">&nbsp;</span>
347
172
  <span class="cline-any cline-neutral">&nbsp;</span>
173
+ <span class="cline-any cline-yes">34x</span>
174
+ <span class="cline-any cline-yes">1x</span>
348
175
  <span class="cline-any cline-neutral">&nbsp;</span>
349
- <span class="cline-any cline-yes">99x</span>
176
+ <span class="cline-any cline-yes">1x</span>
350
177
  <span class="cline-any cline-neutral">&nbsp;</span>
351
178
  <span class="cline-any cline-neutral">&nbsp;</span>
352
179
  <span class="cline-any cline-neutral">&nbsp;</span>
353
180
  <span class="cline-any cline-neutral">&nbsp;</span>
354
181
  <span class="cline-any cline-neutral">&nbsp;</span>
182
+ <span class="cline-any cline-yes">2x</span>
355
183
  <span class="cline-any cline-neutral">&nbsp;</span>
356
184
  <span class="cline-any cline-neutral">&nbsp;</span>
357
185
  <span class="cline-any cline-neutral">&nbsp;</span>
358
186
  <span class="cline-any cline-neutral">&nbsp;</span>
359
187
  <span class="cline-any cline-neutral">&nbsp;</span>
188
+ <span class="cline-any cline-yes">1x</span>
360
189
  <span class="cline-any cline-neutral">&nbsp;</span>
361
190
  <span class="cline-any cline-neutral">&nbsp;</span>
362
- <span class="cline-any cline-yes">99x</span>
363
191
  <span class="cline-any cline-neutral">&nbsp;</span>
364
192
  <span class="cline-any cline-neutral">&nbsp;</span>
365
- <span class="cline-any cline-yes">99x</span>
366
- <span class="cline-any cline-no">&nbsp;</span>
367
- <span class="cline-any cline-no">&nbsp;</span>
368
193
  <span class="cline-any cline-neutral">&nbsp;</span>
194
+ <span class="cline-any cline-yes">1x</span>
369
195
  <span class="cline-any cline-no">&nbsp;</span>
370
- <span class="cline-any cline-no">&nbsp;</span>
371
- <span class="cline-any cline-neutral">&nbsp;</span>
372
- <span class="cline-any cline-neutral">&nbsp;</span>
373
- <span class="cline-any cline-neutral">&nbsp;</span>
374
- <span class="cline-any cline-yes">99x</span>
375
- <span class="cline-any cline-yes">99x</span>
376
196
  <span class="cline-any cline-neutral">&nbsp;</span>
377
197
  <span class="cline-any cline-neutral">&nbsp;</span>
378
198
  <span class="cline-any cline-neutral">&nbsp;</span>
379
199
  <span class="cline-any cline-neutral">&nbsp;</span>
380
200
  <span class="cline-any cline-neutral">&nbsp;</span>
381
201
  <span class="cline-any cline-neutral">&nbsp;</span>
382
- <span class="cline-any cline-neutral">&nbsp;</span>
383
- <span class="cline-any cline-yes">99x</span>
384
- <span class="cline-any cline-yes">4x</span>
385
- <span class="cline-any cline-neutral">&nbsp;</span>
386
- <span class="cline-any cline-neutral">&nbsp;</span>
387
- <span class="cline-any cline-no">&nbsp;</span>
202
+ <span class="cline-any cline-yes">1x</span>
388
203
  <span class="cline-any cline-neutral">&nbsp;</span>
389
204
  <span class="cline-any cline-neutral">&nbsp;</span>
205
+ <span class="cline-any cline-yes">34x</span>
206
+ <span class="cline-any cline-yes">19x</span>
207
+ <span class="cline-any cline-yes">19x</span>
390
208
  <span class="cline-any cline-neutral">&nbsp;</span>
391
209
  <span class="cline-any cline-neutral">&nbsp;</span>
210
+ <span class="cline-any cline-yes">34x</span>
392
211
  <span class="cline-any cline-yes">99x</span>
393
212
  <span class="cline-any cline-yes">99x</span>
394
- <span class="cline-any cline-yes">1x</span>
395
- <span class="cline-any cline-neutral">&nbsp;</span>
396
213
  <span class="cline-any cline-yes">99x</span>
397
214
  <span class="cline-any cline-yes">99x</span>
398
- <span class="cline-any cline-neutral">&nbsp;</span>
399
215
  <span class="cline-any cline-yes">99x</span>
400
- <span class="cline-any cline-neutral">&nbsp;</span>
401
216
  <span class="cline-any cline-yes">99x</span>
402
217
  <span class="cline-any cline-neutral">&nbsp;</span>
403
- <span class="cline-any cline-neutral">&nbsp;</span>
404
- <span class="cline-any cline-yes">99x</span>
405
- <span class="cline-any cline-yes">99x</span>
406
218
  <span class="cline-any cline-yes">99x</span>
407
219
  <span class="cline-any cline-neutral">&nbsp;</span>
408
220
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -410,34 +222,6 @@
410
222
  <span class="cline-any cline-yes">2x</span>
411
223
  <span class="cline-any cline-yes">2x</span>
412
224
  <span class="cline-any cline-yes">2x</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-yes">2x</span>
416
- <span class="cline-any cline-neutral">&nbsp;</span>
417
- <span class="cline-any cline-neutral">&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-yes">2x</span>
421
- <span class="cline-any cline-neutral">&nbsp;</span>
422
- <span class="cline-any cline-neutral">&nbsp;</span>
423
- <span class="cline-any cline-yes">2x</span>
424
- <span class="cline-any cline-neutral">&nbsp;</span>
425
- <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-neutral">&nbsp;</span>
427
- <span class="cline-any cline-neutral">&nbsp;</span>
428
- <span class="cline-any cline-neutral">&nbsp;</span>
429
- <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-yes">2x</span>
431
- <span class="cline-any cline-neutral">&nbsp;</span>
432
- <span class="cline-any cline-neutral">&nbsp;</span>
433
- <span class="cline-any cline-yes">2x</span>
434
- <span class="cline-any cline-yes">2x</span>
435
- <span class="cline-any cline-yes">2x</span>
436
- <span class="cline-any cline-neutral">&nbsp;</span>
437
- <span class="cline-any cline-yes">2x</span>
438
- <span class="cline-any cline-no">&nbsp;</span>
439
- <span class="cline-any cline-neutral">&nbsp;</span>
440
- <span class="cline-any cline-neutral">&nbsp;</span>
441
225
  <span class="cline-any cline-yes">2x</span>
442
226
  <span class="cline-any cline-neutral">&nbsp;</span>
443
227
  <span class="cline-any cline-yes">2x</span>
@@ -450,18 +234,30 @@
450
234
  <span class="cline-any cline-yes">1x</span>
451
235
  <span class="cline-any cline-neutral">&nbsp;</span>
452
236
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../../db")
453
- const linkRows = require("../../../db/linkedRows")
237
+ const internal = require("./internal")
238
+ const external = require("./external")
454
239
  const csvParser = require("../../../utilities/csvParser")
240
+ const { isExternalTable } = require("../../../integrations/utils")
455
241
  const {
456
- getRowParams,
457
242
  getTableParams,
458
- generateTableID,
459
243
  getDatasourceParams,
460
244
  BudibaseInternalDB,
461
245
  } = require("../../../db/utils")
462
- const { FieldTypes } = require("../../../constants")
463
- const { TableSaveFunctions, getTable } = require("./utils")
246
+ const { getTable } = require("./utils")
247
+ &nbsp;
248
+ function pickApi({ tableId, table }) {
249
+ if (table &amp;&amp; !tableId) {
250
+ tableId = table._id
251
+ }
252
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (table &amp;&amp; table.type === "external") {
253
+ <span class="cstat-no" title="statement not covered" > return external</span>
254
+ } else <span class="missing-if-branch" title="if path not taken" >I</span>if (tableId &amp;&amp; isExternalTable(tableId)) {
255
+ <span class="cstat-no" title="statement not covered" > return external</span>
256
+ }
257
+ return internal
258
+ }
464
259
  &nbsp;
260
+ // covers both internal and external
465
261
  exports.fetch = async function (ctx) {
466
262
  const db = new CouchDB(ctx.appId)
467
263
  &nbsp;
@@ -501,143 +297,23 @@ exports.find = async function (ctx) {
501
297
  &nbsp;
502
298
  exports.save = async function (ctx) {
503
299
  const appId = ctx.appId
504
- const db = new CouchDB(appId)
505
- const { dataImport, ...rest } = ctx.request.body
506
- let tableToSave = {
507
- type: "table",
508
- _id: generateTableID(),
509
- views: {},
510
- ...rest,
511
- }
512
- &nbsp;
513
- // if the table obj had an _id then it will have been retrieved
514
- let oldTable
515
- if (ctx.request.body &amp;&amp; ctx.request.body._id) {
516
- oldTable = await db.get(ctx.request.body._id)
517
- }
518
- &nbsp;
519
- // saving a table is a complex operation, involving many different steps, this
520
- // has been broken out into a utility to make it more obvious/easier to manipulate
521
- const tableSaveFunctions = new TableSaveFunctions({
522
- db,
523
- ctx,
524
- oldTable,
525
- dataImport,
526
- })
527
- tableToSave = await tableSaveFunctions.before(tableToSave)
528
- &nbsp;
529
- // make sure that types don't change of a column, have to remove
530
- // the column if you want to change the type
531
- if (oldTable &amp;&amp; oldTable.schema) {
532
- for (let propKey of Object.keys(tableToSave.schema)) {
533
- let column = tableToSave.schema[propKey]
534
- let oldColumn = oldTable.schema[propKey]
535
- <span class="missing-if-branch" title="if path not taken" >I</span>if (oldColumn &amp;&amp; oldColumn.type === "internal") {
536
- <span class="cstat-no" title="statement not covered" > oldColumn.type = "auto"</span>
537
- }
538
- <span class="missing-if-branch" title="if path not taken" >I</span>if (oldColumn &amp;&amp; oldColumn.type !== column.type) {
539
- <span class="cstat-no" title="statement not covered" > ctx.throw(400, "Cannot change the type of a column")</span>
540
- }
541
- }
542
- }
543
- &nbsp;
544
- // Don't rename if the name is the same
545
- let { _rename } = tableToSave
546
- /* istanbul ignore next */
547
- if (_rename &amp;&amp; _rename.old === _rename.updated) {
548
- _rename = null
549
- delete tableToSave._rename
550
- }
551
- &nbsp;
552
- // rename row fields when table column is renamed
553
- /* istanbul ignore next */
554
- if (_rename &amp;&amp; tableToSave.schema[_rename.updated].type === FieldTypes.LINK) {
555
- ctx.throw(400, "Cannot rename a linked column.")
556
- }
557
- &nbsp;
558
- tableToSave = await tableSaveFunctions.mid(tableToSave)
559
- &nbsp;
560
- // update schema of non-statistics views when new columns are added
561
- for (let view in tableToSave.views) {
562
- const tableView = <span class="cstat-no" title="statement not covered" >tableToSave.views[view]</span>
563
- <span class="cstat-no" title="statement not covered" > if (!tableView) <span class="cstat-no" title="statement not covered" >continue</span></span>
564
- &nbsp;
565
- <span class="cstat-no" title="statement not covered" > if (tableView.schema.group || tableView.schema.field) <span class="cstat-no" title="statement not covered" >continue</span></span>
566
- <span class="cstat-no" title="statement not covered" > tableView.schema = tableToSave.schema</span>
567
- }
568
- &nbsp;
569
- // update linked rows
570
- try {
571
- const linkResp = await linkRows.updateLinks({
572
- appId,
573
- eventType: oldTable
574
- ? linkRows.EventType.TABLE_UPDATED
575
- : linkRows.EventType.TABLE_SAVE,
576
- table: tableToSave,
577
- oldTable: oldTable,
578
- })
579
- if (linkResp != null &amp;&amp; linkResp._rev) {
580
- tableToSave._rev = linkResp._rev
581
- }
582
- } catch (err) {
583
- <span class="cstat-no" title="statement not covered" > ctx.throw(400, err)</span>
584
- }
585
- &nbsp;
586
- // don't perform any updates until relationships have been
587
- // checked by the updateLinks function
588
- const updatedRows = tableSaveFunctions.getUpdatedRows()
589
- if (updatedRows &amp;&amp; updatedRows.length !== 0) {
590
- await db.bulkDocs(updatedRows)
591
- }
592
- const result = await db.put(tableToSave)
593
- tableToSave._rev = result.rev
594
- &nbsp;
595
- tableToSave = await tableSaveFunctions.after(tableToSave)
596
- &nbsp;
597
- ctx.eventEmitter &amp;&amp;
598
- ctx.eventEmitter.emitTable(`table:save`, appId, tableToSave)
599
- &nbsp;
300
+ const table = ctx.request.body
301
+ const savedTable = await pickApi({ table }).save(ctx)
600
302
  ctx.status = 200
601
- ctx.message = `Table ${ctx.request.body.name} saved successfully.`
602
- ctx.body = tableToSave
303
+ ctx.message = `Table ${table.name} saved successfully.`
304
+ ctx.eventEmitter &amp;&amp;
305
+ ctx.eventEmitter.emitTable(`table:save`, appId, savedTable)
306
+ ctx.body = savedTable
603
307
  }
604
308
  &nbsp;
605
309
  exports.destroy = async function (ctx) {
606
310
  const appId = ctx.appId
607
- const db = new CouchDB(appId)
608
- const tableToDelete = await db.get(ctx.params.tableId)
609
- &nbsp;
610
- // Delete all rows for that table
611
- const rows = await db.allDocs(
612
- getRowParams(ctx.params.tableId, null, {
613
- include_docs: true,
614
- })
615
- )
616
- await db.bulkDocs(rows.rows.map(<span class="fstat-no" title="function not covered" >ro</span>w =&gt; (<span class="cstat-no" title="statement not covered" >{ ...row.doc, _deleted: true })</span>))
617
- &nbsp;
618
- // update linked rows
619
- await linkRows.updateLinks({
620
- appId,
621
- eventType: linkRows.EventType.TABLE_DELETE,
622
- table: tableToDelete,
623
- })
624
- &nbsp;
625
- // don't remove the table itself until very end
626
- await db.remove(tableToDelete)
627
- &nbsp;
628
- // remove table search index
629
- const currentIndexes = await db.getIndexes()
630
- const existingIndex = currentIndexes.indexes.find(
631
- existing =&gt; existing.name === `search:${ctx.params.tableId}`
632
- )
633
- <span class="missing-if-branch" title="if path not taken" >I</span>if (existingIndex) {
634
- <span class="cstat-no" title="statement not covered" > await db.deleteIndex(existingIndex)</span>
635
- }
636
- &nbsp;
311
+ const tableId = ctx.params.tableId
312
+ const deletedTable = await pickApi({ tableId }).destroy(ctx)
637
313
  ctx.eventEmitter &amp;&amp;
638
- ctx.eventEmitter.emitTable(`table:delete`, appId, tableToDelete)
314
+ ctx.eventEmitter.emitTable(`table:delete`, appId, deletedTable)
639
315
  ctx.status = 200
640
- ctx.body = { message: `Table ${ctx.params.tableId} deleted.` }
316
+ ctx.body = { message: `Table ${tableId} deleted.` }
641
317
  }
642
318
  &nbsp;
643
319
  exports.validateCSVSchema = async function (ctx) {
@@ -652,7 +328,7 @@ exports.validateCSVSchema = async function (ctx) {
652
328
  <div class='footer quiet pad2 space-top1 center small'>
653
329
  Code coverage generated by
654
330
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
655
- at Wed Nov 03 2021 15:07:55 GMT+0000 (Coordinated Universal Time)
331
+ at Thu Nov 04 2021 09:21:53 GMT+0000 (Coordinated Universal Time)
656
332
  </div>
657
333
  </div>
658
334
  <script src="../../../prettify.js"></script>