@budibase/server 1.0.44-alpha.7 → 1.0.45

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 (187) hide show
  1. package/builder/assets/{index.dc63b6b2.js → index.04ee727d.js} +234 -235
  2. package/builder/assets/{index.deca2e9d.css → index.39e01193.css} +1 -1
  3. package/builder/assets/{vendor.10e2ad1b.js → vendor.f9faf6ab.js} +12 -12
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +208 -217
  6. package/coverage/coverage-final.json +5 -5
  7. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/hosting.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/index.html +1 -1
  19. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  24. package/coverage/lcov-report/api/controllers/query/index.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/index.html +15 -15
  30. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/row/utils.js.html +14 -29
  34. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/index.html +17 -17
  38. package/coverage/lcov-report/api/controllers/table/index.js.html +16 -34
  39. package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/table/utils.js.html +7 -16
  41. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  47. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  48. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  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/hosting.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/index.html +1 -1
  64. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/metadata.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/view.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  81. package/coverage/lcov-report/automations/actions.js.html +1 -1
  82. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  83. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  84. package/coverage/lcov-report/automations/index.html +1 -1
  85. package/coverage/lcov-report/automations/index.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/index.html +1 -1
  95. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  111. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  112. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  113. package/coverage/lcov-report/automations/utils.js.html +1 -1
  114. package/coverage/lcov-report/constants/index.html +1 -1
  115. package/coverage/lcov-report/constants/index.js.html +1 -1
  116. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  117. package/coverage/lcov-report/constants/screens.js.html +1 -1
  118. package/coverage/lcov-report/db/client.js.html +1 -1
  119. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  120. package/coverage/lcov-report/db/index.html +1 -1
  121. package/coverage/lcov-report/db/index.js.html +1 -1
  122. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  123. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  124. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  125. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  126. package/coverage/lcov-report/db/newid.js.html +1 -1
  127. package/coverage/lcov-report/db/utils.js.html +1 -1
  128. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  129. package/coverage/lcov-report/events/index.html +1 -1
  130. package/coverage/lcov-report/events/index.js.html +1 -1
  131. package/coverage/lcov-report/events/utils.js.html +1 -1
  132. package/coverage/lcov-report/index.html +25 -25
  133. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  134. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  135. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  136. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  137. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  138. package/coverage/lcov-report/middleware/currentapp.js.html +6 -33
  139. package/coverage/lcov-report/middleware/index.html +10 -10
  140. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  141. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  142. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  143. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  144. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  145. package/coverage/lcov-report/threads/automation.js.html +1 -1
  146. package/coverage/lcov-report/threads/index.html +1 -1
  147. package/coverage/lcov-report/threads/index.js.html +1 -1
  148. package/coverage/lcov-report/threads/query.js.html +1 -1
  149. package/coverage/lcov-report/threads/utils.js.html +1 -1
  150. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  151. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  152. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  153. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  154. package/coverage/lcov-report/utilities/global.js.html +1 -1
  155. package/coverage/lcov-report/utilities/index.html +1 -1
  156. package/coverage/lcov-report/utilities/index.js.html +1 -1
  157. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  158. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  159. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  160. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  161. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  162. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  163. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  164. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  165. package/coverage/lcov-report/utilities/security.js.html +1 -1
  166. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  167. package/coverage/lcov-report/utilities/users.js.html +1 -1
  168. package/coverage/lcov-report/utilities/workerRequests.js.html +2 -2
  169. package/coverage/lcov.info +347 -361
  170. package/dist/api/controllers/row/utils.js +6 -12
  171. package/dist/api/controllers/table/index.js +4 -10
  172. package/dist/api/controllers/table/utils.js +2 -4
  173. package/dist/integrations/base/sql.js +6 -13
  174. package/dist/integrations/utils.js +8 -53
  175. package/dist/middleware/currentapp.js +0 -9
  176. package/dist/package.json +4 -4
  177. package/dist/tsconfig.tsbuildinfo +1 -1
  178. package/dist/utilities/workerRequests.js +1 -1
  179. package/package.json +5 -5
  180. package/src/api/controllers/row/utils.js +6 -11
  181. package/src/api/controllers/table/index.js +9 -15
  182. package/src/api/controllers/table/utils.js +1 -4
  183. package/src/integrations/base/sql.ts +7 -14
  184. package/src/integrations/tests/sql.spec.js +0 -16
  185. package/src/integrations/utils.ts +10 -57
  186. package/src/middleware/currentapp.js +0 -9
  187. package/src/utilities/workerRequests.js +1 -1
@@ -71,7 +71,7 @@ exports.getDeployedApps = () => __awaiter(void 0, void 0, void 0, function* () {
71
71
  for (let [key, value] of Object.entries(json)) {
72
72
  if (value.url) {
73
73
  value.url = value.url.toLowerCase();
74
- apps[key] = value;
74
+ apps[key.toLowerCase()] = value;
75
75
  }
76
76
  }
77
77
  return apps;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "1.0.44-alpha.7",
4
+ "version": "1.0.45",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -70,9 +70,9 @@
70
70
  "license": "GPL-3.0",
71
71
  "dependencies": {
72
72
  "@apidevtools/swagger-parser": "^10.0.3",
73
- "@budibase/backend-core": "^1.0.44-alpha.7",
74
- "@budibase/client": "^1.0.44-alpha.7",
75
- "@budibase/string-templates": "^1.0.44-alpha.7",
73
+ "@budibase/backend-core": "^1.0.45",
74
+ "@budibase/client": "^1.0.45",
75
+ "@budibase/string-templates": "^1.0.45",
76
76
  "@bull-board/api": "^3.7.0",
77
77
  "@bull-board/koa": "^3.7.0",
78
78
  "@elastic/elasticsearch": "7.10.0",
@@ -165,5 +165,5 @@
165
165
  "optionalDependencies": {
166
166
  "oracledb": "^5.3.0"
167
167
  },
168
- "gitHead": "133f3db658aedb6db72aba10ab9680a1790c8570"
168
+ "gitHead": "38122eec327e124055adcbb89c456756c5e822d1"
169
169
  }
@@ -61,17 +61,12 @@ exports.validate = async ({ appId, tableId, row, table }) => {
61
61
  let res
62
62
 
63
63
  // Validate.js doesn't seem to handle array
64
- if (type === FieldTypes.ARRAY && row[fieldName]) {
65
- if (row[fieldName].length) {
66
- row[fieldName].map(val => {
67
- if (!constraints.inclusion.includes(val)) {
68
- errors[fieldName] = "Field not in list"
69
- }
70
- })
71
- } else if (constraints.presence && row[fieldName].length === 0) {
72
- // non required MultiSelect creates an empty array, which should not throw errors
73
- errors[fieldName] = [`${fieldName} is required`]
74
- }
64
+ if (type === FieldTypes.ARRAY && row[fieldName] && row[fieldName].length) {
65
+ row[fieldName].map(val => {
66
+ if (!constraints.inclusion.includes(val)) {
67
+ errors[fieldName] = "Field not in list"
68
+ }
69
+ })
75
70
  } else if (type === FieldTypes.JSON && typeof row[fieldName] === "string") {
76
71
  // this should only happen if there is an error
77
72
  try {
@@ -2,7 +2,7 @@ const CouchDB = require("../../../db")
2
2
  const internal = require("./internal")
3
3
  const external = require("./external")
4
4
  const csvParser = require("../../../utilities/csvParser")
5
- const { isExternalTable, isSQL } = require("../../../integrations/utils")
5
+ const { isExternalTable } = require("../../../integrations/utils")
6
6
  const {
7
7
  getTableParams,
8
8
  getDatasourceParams,
@@ -32,8 +32,8 @@ exports.fetch = async function (ctx) {
32
32
  })
33
33
  )
34
34
 
35
- const internal = internalTables.rows.map(tableDoc => ({
36
- ...tableDoc.doc,
35
+ const internal = internalTables.rows.map(row => ({
36
+ ...row.doc,
37
37
  type: "internal",
38
38
  sourceId: BudibaseInternalDB._id,
39
39
  }))
@@ -44,18 +44,12 @@ exports.fetch = async function (ctx) {
44
44
  })
45
45
  )
46
46
 
47
- const external = externalTables.rows.flatMap(tableDoc => {
48
- let entities = tableDoc.doc.entities
49
- if (entities) {
50
- return Object.values(entities).map(entity => ({
51
- ...entity,
52
- type: "external",
53
- sourceId: tableDoc.doc._id,
54
- sql: isSQL(tableDoc.doc),
55
- }))
56
- } else {
57
- return []
58
- }
47
+ const external = externalTables.rows.flatMap(row => {
48
+ return Object.values(row.doc.entities || {}).map(entity => ({
49
+ ...entity,
50
+ type: "external",
51
+ sourceId: row.doc._id,
52
+ }))
59
53
  })
60
54
 
61
55
  ctx.body = [...internal, ...external]
@@ -12,7 +12,6 @@ const { USERS_TABLE_SCHEMA, SwitchableTypes } = require("../../../constants")
12
12
  const {
13
13
  isExternalTable,
14
14
  breakExternalTableId,
15
- isSQL,
16
15
  } = require("../../../integrations/utils")
17
16
  const { getViews, saveView } = require("../view/utils")
18
17
  const viewTemplate = require("../view/viewBuilder")
@@ -243,9 +242,7 @@ exports.getTable = async (appId, tableId) => {
243
242
  const db = new CouchDB(appId)
244
243
  if (isExternalTable(tableId)) {
245
244
  let { datasourceId, tableName } = breakExternalTableId(tableId)
246
- const datasource = await db.get(datasourceId)
247
- const table = await exports.getExternalTable(appId, datasourceId, tableName)
248
- return { ...table, sql: isSQL(datasource) }
245
+ return exports.getExternalTable(appId, datasourceId, tableName)
249
246
  } else {
250
247
  return db.get(tableId)
251
248
  }
@@ -72,22 +72,16 @@ class InternalBuilder {
72
72
 
73
73
  // right now we only do filters on the specific table being queried
74
74
  addFilters(
75
+ tableName: string,
75
76
  query: KnexQuery,
76
- filters: SearchFilters | undefined,
77
- opts: { relationship?: boolean; tableName?: string }
77
+ filters: SearchFilters | undefined
78
78
  ): KnexQuery {
79
79
  function iterate(
80
80
  structure: { [key: string]: any },
81
81
  fn: (key: string, value: any) => void
82
82
  ) {
83
83
  for (let [key, value] of Object.entries(structure)) {
84
- const isRelationshipField = key.includes(".")
85
- if (!opts.relationship && !isRelationshipField) {
86
- fn(`${opts.tableName}.${key}`, value)
87
- }
88
- if (opts.relationship && isRelationshipField) {
89
- fn(key, value)
90
- }
84
+ fn(`${tableName}.${key}`, value)
91
85
  }
92
86
  }
93
87
  if (!filters) {
@@ -278,7 +272,7 @@ class InternalBuilder {
278
272
  if (foundOffset) {
279
273
  query = query.offset(foundOffset)
280
274
  }
281
- query = this.addFilters(query, filters, { tableName })
275
+ query = this.addFilters(tableName, query, filters)
282
276
  // add sorting to pre-query
283
277
  query = this.addSorting(query, json)
284
278
  // @ts-ignore
@@ -291,21 +285,20 @@ class InternalBuilder {
291
285
  preQuery = this.addSorting(preQuery, json)
292
286
  }
293
287
  // handle joins
294
- query = this.addRelationships(
288
+ return this.addRelationships(
295
289
  knex,
296
290
  preQuery,
297
291
  selectStatement,
298
292
  tableName,
299
293
  relationships
300
294
  )
301
- return this.addFilters(query, filters, { relationship: true })
302
295
  }
303
296
 
304
297
  update(knex: Knex, json: QueryJson, opts: QueryOptions): KnexQuery {
305
298
  const { endpoint, body, filters } = json
306
299
  let query: KnexQuery = knex(endpoint.entityId)
307
300
  const parsedBody = parseBody(body)
308
- query = this.addFilters(query, filters, { tableName: endpoint.entityId })
301
+ query = this.addFilters(endpoint.entityId, query, filters)
309
302
  // mysql can't use returning
310
303
  if (opts.disableReturning) {
311
304
  return query.update(parsedBody)
@@ -317,7 +310,7 @@ class InternalBuilder {
317
310
  delete(knex: Knex, json: QueryJson, opts: QueryOptions): KnexQuery {
318
311
  const { endpoint, filters } = json
319
312
  let query: KnexQuery = knex(endpoint.entityId)
320
- query = this.addFilters(query, filters, { tableName: endpoint.entityId })
313
+ query = this.addFilters(endpoint.entityId, query, filters)
321
314
  // mysql can't use returning
322
315
  if (opts.disableReturning) {
323
316
  return query.delete()
@@ -119,22 +119,6 @@ describe("SQL query builder", () => {
119
119
  })
120
120
  })
121
121
 
122
- it("should allow filtering on a related field", () => {
123
- const query = sql._query(generateReadJson({
124
- filters: {
125
- equal: {
126
- age: 10,
127
- "task.name": "task 1",
128
- },
129
- },
130
- }))
131
- // order of bindings changes because relationship filters occur outside inner query
132
- expect(query).toEqual({
133
- bindings: [10, limit, "task 1"],
134
- sql: `select * from (select * from "${TABLE_NAME}" where "${TABLE_NAME}"."age" = $1 limit $2) as "${TABLE_NAME}" where "task"."name" = $3`
135
- })
136
- })
137
-
138
122
  it("should test an create statement", () => {
139
123
  const query = sql._query(generateCreateJson(TABLE_NAME, {
140
124
  name: "Michael",
@@ -1,5 +1,6 @@
1
- import { SourceNames, SqlQuery } from "../definitions/datasource"
1
+ import { SqlQuery } from "../definitions/datasource"
2
2
  import { Datasource, Table } from "../definitions/common"
3
+ import { SourceNames } from "../definitions/datasource"
3
4
  import { DocumentTypes, SEPARATOR } from "../db/utils"
4
5
  import { FieldTypes, BuildSchemaErrors, InvalidColumns } from "../constants"
5
6
 
@@ -126,12 +127,7 @@ export function isSQL(datasource: Datasource): boolean {
126
127
  if (!datasource || !datasource.source) {
127
128
  return false
128
129
  }
129
- const SQL = [
130
- SourceNames.POSTGRES,
131
- SourceNames.SQL_SERVER,
132
- SourceNames.MYSQL,
133
- SourceNames.ORACLE,
134
- ]
130
+ const SQL = [SourceNames.POSTGRES, SourceNames.SQL_SERVER, SourceNames.MYSQL]
135
131
  return SQL.indexOf(datasource.source) !== -1
136
132
  }
137
133
 
@@ -143,46 +139,11 @@ export function isIsoDateString(str: string) {
143
139
  return d.toISOString() === str
144
140
  }
145
141
 
146
- /**
147
- * This function will determine whether a column is a relationship and whether it
148
- * is currently valid. The reason for the validity check is that tables can be deleted
149
- * outside of Budibase control and if this is the case it will break Budibase relationships.
150
- * The tableIds is a list passed down from the main finalise tables function, which is
151
- * based on the tables that have just been fetched. This will only really be used on subsequent
152
- * fetches to the first one - if the user is periodically refreshing Budibase knowledge of tables.
153
- * @param column The column to check, to see if it is a valid relationship.
154
- * @param tableIds The IDs of the tables which currently exist.
155
- */
156
- function shouldCopyRelationship(column: { type: string, tableId?: string }, tableIds: [string]) {
157
- return column.type === FieldTypes.LINK && column.tableId && tableIds.includes(column.tableId)
158
- }
159
-
160
- /**
161
- * Similar function to the shouldCopyRelationship function, but instead this looks for options and boolean
162
- * types. It is possible to switch a string -> options and a number -> boolean (and vice versus) need to make
163
- * sure that these get copied over when tables are fetched. Also checks whether they are still valid, if a
164
- * column has changed type in the external database then copying it over may not be possible.
165
- * @param column The column to check for options or boolean type.
166
- * @param fetchedColumn The fetched column to check for the type in the external database.
167
- */
168
- function shouldCopySpecialColumn(column: { type: string }, fetchedColumn: { type: string } | undefined) {
169
- return column.type === FieldTypes.OPTIONS ||
170
- ((!fetchedColumn || fetchedColumn.type === FieldTypes.NUMBER) && column.type === FieldTypes.BOOLEAN)
171
- }
172
-
173
- /**
174
- * Looks for columns which need to be copied over into the new table definitions, like relationships
175
- * and options types.
176
- * @param tableName The name of the table which is being checked.
177
- * @param table The specific table which is being checked.
178
- * @param entities All the tables that existed before - the old table definitions.
179
- * @param tableIds The IDs of the tables which exist now, to check if anything has been removed.
180
- */
142
+ // add the existing relationships from the entities if they exist, to prevent them from being overridden
181
143
  function copyExistingPropsOver(
182
144
  tableName: string,
183
145
  table: Table,
184
- entities: { [key: string]: any },
185
- tableIds: [string]
146
+ entities: { [key: string]: any }
186
147
  ) {
187
148
  if (entities && entities[tableName]) {
188
149
  if (entities[tableName].primaryDisplay) {
@@ -193,10 +154,11 @@ function copyExistingPropsOver(
193
154
  if (!existingTableSchema.hasOwnProperty(key)) {
194
155
  continue
195
156
  }
196
- const column = existingTableSchema[key]
197
157
  if (
198
- shouldCopyRelationship(column, tableIds) ||
199
- shouldCopySpecialColumn(column, table.schema[key])
158
+ existingTableSchema[key].type === FieldTypes.LINK ||
159
+ existingTableSchema[key].type === FieldTypes.OPTIONS ||
160
+ ((!table.schema[key] || table.schema[key].type === FieldTypes.NUMBER) &&
161
+ existingTableSchema[key].type === FieldTypes.BOOLEAN)
200
162
  ) {
201
163
  table.schema[key] = existingTableSchema[key]
202
164
  }
@@ -205,13 +167,6 @@ function copyExistingPropsOver(
205
167
  return table
206
168
  }
207
169
 
208
- /**
209
- * Look through the final table definitions to see if anything needs to be
210
- * copied over from the old and if any errors have occurred mark them so
211
- * that the user can be made aware.
212
- * @param tables The list of tables that have been retrieved from the external database.
213
- * @param entities The old list of tables, if there was any to look for definitions in.
214
- */
215
170
  export function finaliseExternalTables(
216
171
  tables: { [key: string]: any },
217
172
  entities: { [key: string]: any }
@@ -219,8 +174,6 @@ export function finaliseExternalTables(
219
174
  const invalidColumns = Object.values(InvalidColumns)
220
175
  let finalTables: { [key: string]: any } = {}
221
176
  const errors: { [key: string]: string } = {}
222
- // @ts-ignore
223
- const tableIds: [string] = Object.values(tables).map(table => table._id)
224
177
  for (let [name, table] of Object.entries(tables)) {
225
178
  const schemaFields = Object.keys(table.schema)
226
179
  // make sure every table has a key
@@ -232,7 +185,7 @@ export function finaliseExternalTables(
232
185
  continue
233
186
  }
234
187
  // make sure all previous props have been added back
235
- finalTables[name] = copyExistingPropsOver(name, table, entities, tableIds)
188
+ finalTables[name] = copyExistingPropsOver(name, table, entities)
236
189
  }
237
190
  // sort the tables by name
238
191
  finalTables = Object.entries(finalTables)
@@ -47,15 +47,6 @@ module.exports = async (ctx, next) => {
47
47
  (!ctx.user || !ctx.user.builder || !ctx.user.builder.global)
48
48
  ) {
49
49
  clearCookie(ctx, Cookies.CurrentApp)
50
- // have to set the return url on the server side as client side is not available
51
- setCookie(ctx, ctx.url, Cookies.RETURN_URL, {
52
- // don't sign so the browser can easily read
53
- sign: false,
54
- // use the request domain to match how ui handles the return url cookie.
55
- // it's important we don't use the shared domain here as the builder
56
- // can't delete from it without awareness of the domain.
57
- requestDomain: true,
58
- })
59
50
  return ctx.redirect("/")
60
51
  }
61
52
 
@@ -71,7 +71,7 @@ exports.getDeployedApps = async () => {
71
71
  for (let [key, value] of Object.entries(json)) {
72
72
  if (value.url) {
73
73
  value.url = value.url.toLowerCase()
74
- apps[key] = value
74
+ apps[key.toLowerCase()] = value
75
75
  }
76
76
  }
77
77
  return apps