@budibase/server 0.9.185-alpha.14 → 0.9.185-alpha.15

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 (188) hide show
  1. package/Dockerfile +7 -1
  2. package/__mocks__/oracledb.ts +31 -0
  3. package/builder/assets/{index.8ed163fd.js → index.24235702.js} +153 -153
  4. package/builder/assets/{index.4a7c5636.css → index.8687d505.css} +1 -1
  5. package/builder/assets/oracle.66592424.png +0 -0
  6. package/builder/index.html +2 -2
  7. package/coverage/clover.xml +81 -81
  8. package/coverage/coverage-final.json +3 -3
  9. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/hosting.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/index.html +1 -1
  21. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/query.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 +1 -1
  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 +1 -1
  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 +1 -1
  38. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
  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 +22 -22
  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 +3 -3
  127. package/coverage/lcov-report/db/utils.js.html +57 -57
  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 +1 -1
  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 +1 -1
  139. package/coverage/lcov-report/middleware/index.html +1 -1
  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/utilities/bcrypt.js.html +1 -1
  150. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  151. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  152. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  153. package/coverage/lcov-report/utilities/global.js.html +1 -1
  154. package/coverage/lcov-report/utilities/index.html +1 -1
  155. package/coverage/lcov-report/utilities/index.js.html +1 -1
  156. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  157. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  158. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  159. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  160. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  161. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  162. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  163. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  164. package/coverage/lcov-report/utilities/security.js.html +1 -1
  165. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  166. package/coverage/lcov-report/utilities/users.js.html +1 -1
  167. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  168. package/coverage/lcov.info +79 -79
  169. package/dist/definitions/datasource.js +1 -0
  170. package/dist/integrations/base/sql.js +4 -0
  171. package/dist/integrations/index.js +6 -0
  172. package/dist/integrations/oracle.js +345 -0
  173. package/dist/integrations/utils.js +10 -1
  174. package/dist/package.json +8 -4
  175. package/dist/tsconfig.tsbuildinfo +1 -1
  176. package/package.json +9 -5
  177. package/scripts/integrations/oracle/docker-compose.yml +19 -0
  178. package/scripts/integrations/oracle/instantclient/linux/x86-64/basiclite-21.4.zip +0 -0
  179. package/scripts/integrations/oracle/instantclient/linux/x86-64/install.sh +23 -0
  180. package/scripts/integrations/oracle/oracle.md +90 -0
  181. package/scripts/integrations/postgres/docker-compose.yml +3 -3
  182. package/src/definitions/datasource.ts +1 -0
  183. package/src/integrations/base/IntegrationBase.ts +4 -4
  184. package/src/integrations/base/sql.ts +3 -0
  185. package/src/integrations/index.ts +7 -0
  186. package/src/integrations/oracle.ts +445 -0
  187. package/src/integrations/tests/oracle.spec.js +94 -0
  188. package/src/integrations/utils.ts +10 -1
@@ -0,0 +1,94 @@
1
+ const oracledb = require("oracledb")
2
+ const OracleIntegration = require("../oracle")
3
+ jest.mock("oracledb")
4
+
5
+ class TestConfiguration {
6
+ constructor(config = {}) {
7
+ this.integration = new OracleIntegration.integration(config)
8
+ }
9
+ }
10
+
11
+ const options = { autoCommit: true }
12
+
13
+ describe("Oracle Integration", () => {
14
+ let config
15
+
16
+ beforeEach(() => {
17
+ jest.clearAllMocks()
18
+ config = new TestConfiguration()
19
+ })
20
+
21
+ afterEach(() => {
22
+ expect(oracledb.closeMock).toHaveBeenCalled()
23
+ expect(oracledb.closeMock).toHaveBeenCalledTimes(1)
24
+ })
25
+
26
+ it("calls the create method with the correct params", async () => {
27
+ const sql = "insert into users (name, age) values ('Joe', 123);"
28
+ await config.integration.create({
29
+ sql
30
+ })
31
+ expect(oracledb.executeMock).toHaveBeenCalledWith(sql, [], options)
32
+ expect(oracledb.executeMock).toHaveBeenCalledTimes(1)
33
+ })
34
+
35
+ it("calls the read method with the correct params", async () => {
36
+ const sql = "select * from users;"
37
+ await config.integration.read({
38
+ sql
39
+ })
40
+ expect(oracledb.executeMock).toHaveBeenCalledWith(sql, [], options)
41
+ expect(oracledb.executeMock).toHaveBeenCalledTimes(1)
42
+ })
43
+
44
+ it("calls the update method with the correct params", async () => {
45
+ const sql = "update table users set name = 'test';"
46
+ const response = await config.integration.update({
47
+ sql
48
+ })
49
+ expect(oracledb.executeMock).toHaveBeenCalledWith(sql, [], options)
50
+ expect(oracledb.executeMock).toHaveBeenCalledTimes(1)
51
+ })
52
+
53
+ it("calls the delete method with the correct params", async () => {
54
+ const sql = "delete from users where name = 'todelete';"
55
+ await config.integration.delete({
56
+ sql
57
+ })
58
+ expect(oracledb.executeMock).toHaveBeenCalledWith(sql, [], options)
59
+ expect(oracledb.executeMock).toHaveBeenCalledTimes(1)
60
+ })
61
+
62
+ describe("no rows returned", () => {
63
+ beforeEach(() => {
64
+ oracledb.executeMock.mockImplementation(() => ({ rows: [] }))
65
+ })
66
+
67
+ it("returns the correct response when the create response has no rows", async () => {
68
+ const sql = "insert into users (name, age) values ('Joe', 123);"
69
+ const response = await config.integration.create({
70
+ sql
71
+ })
72
+ expect(response).toEqual([{ created: true }])
73
+ expect(oracledb.executeMock).toHaveBeenCalledTimes(1)
74
+ })
75
+
76
+ it("returns the correct response when the update response has no rows", async () => {
77
+ const sql = "update table users set name = 'test';"
78
+ const response = await config.integration.update({
79
+ sql
80
+ })
81
+ expect(response).toEqual([{ updated: true }])
82
+ expect(oracledb.executeMock).toHaveBeenCalledTimes(1)
83
+ })
84
+
85
+ it("returns the correct response when the delete response has no rows", async () => {
86
+ const sql = "delete from users where name = 'todelete';"
87
+ const response = await config.integration.delete({
88
+ sql
89
+ })
90
+ expect(response).toEqual([{ deleted: true }])
91
+ expect(oracledb.executeMock).toHaveBeenCalledTimes(1)
92
+ })
93
+ })
94
+ })
@@ -32,12 +32,17 @@ const SQL_TYPE_MAP = {
32
32
  fixed: FieldTypes.NUMBER,
33
33
  datetime: FieldTypes.DATETIME,
34
34
  tinyint: FieldTypes.BOOLEAN,
35
+ long: FieldTypes.LONGFORM,
36
+ number: FieldTypes.NUMBER,
37
+ binary_float: FieldTypes.NUMBER,
38
+ binary_double: FieldTypes.NUMBER,
35
39
  }
36
40
 
37
41
  export enum SqlClients {
38
42
  MS_SQL = "mssql",
39
43
  POSTGRES = "pg",
40
44
  MY_SQL = "mysql",
45
+ ORACLE = "oracledb"
41
46
  }
42
47
 
43
48
  export function isExternalTable(tableId: string) {
@@ -162,7 +167,7 @@ export function finaliseExternalTables(
162
167
  entities: { [key: string]: any }
163
168
  ) {
164
169
  const invalidColumns = Object.values(InvalidColumns)
165
- const finalTables: { [key: string]: any } = {}
170
+ let finalTables: { [key: string]: any } = {}
166
171
  const errors: { [key: string]: string } = {}
167
172
  for (let [name, table] of Object.entries(tables)) {
168
173
  const schemaFields = Object.keys(table.schema)
@@ -177,5 +182,9 @@ export function finaliseExternalTables(
177
182
  // make sure all previous props have been added back
178
183
  finalTables[name] = copyExistingPropsOver(name, table, entities)
179
184
  }
185
+ // sort the tables by name
186
+ finalTables = Object.entries(finalTables)
187
+ .sort(([a], [b]) => a.localeCompare(b))
188
+ .reduce((r, [k, v]) => ({ ...r, [k]: v }), {})
180
189
  return { tables: finalTables, errors }
181
190
  }