@budibase/server 1.3.21-alpha.1 → 1.3.21

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 (308) hide show
  1. package/__mocks__/mongodb.ts +1 -1
  2. package/builder/assets/index.8d12d461.css +6 -0
  3. package/builder/assets/index.d354271c.js +879 -0
  4. package/builder/assets/vendor.5e1fe644.css +1 -0
  5. package/builder/assets/vendor.67dbd8fa.js +248 -0
  6. package/builder/index.html +4 -2
  7. package/coverage/clover.xml +390 -451
  8. package/coverage/coverage-final.json +21 -21
  9. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +8 -41
  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 +11 -68
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +34 -73
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +46 -46
  18. package/coverage/lcov-report/api/controllers/integration.js.html +6 -6
  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/migrations.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/validation.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/external.js.html +2 -2
  28. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/screen.js.html +12 -207
  34. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/bulkFormula.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/templates.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  47. package/coverage/lcov-report/api/index.html +1 -1
  48. package/coverage/lcov-report/api/index.js.html +13 -13
  49. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/apikeys.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/index.html +1 -1
  60. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/table.js.html +2 -2
  71. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/utils/index.html +9 -9
  74. package/coverage/lcov-report/api/routes/utils/validators.js.html +12 -75
  75. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  77. package/coverage/lcov-report/automations/actions.js.html +1 -1
  78. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  79. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  80. package/coverage/lcov-report/automations/index.html +1 -1
  81. package/coverage/lcov-report/automations/index.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/index.html +1 -1
  89. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  108. package/coverage/lcov-report/constants/index.html +1 -1
  109. package/coverage/lcov-report/constants/index.js.html +1 -1
  110. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  111. package/coverage/lcov-report/constants/screens.js.html +1 -1
  112. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  113. package/coverage/lcov-report/db/index.html +18 -18
  114. package/coverage/lcov-report/db/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  116. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  117. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  118. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  119. package/coverage/lcov-report/db/newid.js.html +2 -2
  120. package/coverage/lcov-report/db/utils.js.html +20 -56
  121. package/coverage/lcov-report/events/AutomationEmitter.js.html +3 -3
  122. package/coverage/lcov-report/events/index.html +1 -1
  123. package/coverage/lcov-report/events/index.js.html +1 -1
  124. package/coverage/lcov-report/events/utils.js.html +1 -1
  125. package/coverage/lcov-report/index.html +46 -46
  126. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  127. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  128. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  129. package/coverage/lcov-report/middleware/builder.js.html +12 -12
  130. package/coverage/lcov-report/middleware/currentapp.js.html +40 -46
  131. package/coverage/lcov-report/middleware/index.html +15 -15
  132. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  133. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  134. package/coverage/lcov-report/middleware/resourceId.js.html +7 -7
  135. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  136. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  137. package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -3
  138. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  139. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  140. package/coverage/lcov-report/utilities/global.js.html +16 -16
  141. package/coverage/lcov-report/utilities/index.html +15 -15
  142. package/coverage/lcov-report/utilities/index.js.html +24 -24
  143. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
  144. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  145. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  146. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  147. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  148. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  150. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  151. package/coverage/lcov-report/utilities/security.js.html +2 -2
  152. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  153. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  154. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  156. package/coverage/lcov-report/utilities/users.js.html +1 -1
  157. package/coverage/lcov-report/utilities/workerRequests.js.html +8 -32
  158. package/coverage/lcov.info +672 -798
  159. package/dist/api/controllers/application.js +5 -5
  160. package/dist/api/controllers/auth.js +0 -9
  161. package/dist/api/controllers/component.js +1 -14
  162. package/dist/api/controllers/datasource.js +8 -21
  163. package/dist/api/controllers/deploy/index.js +8 -1
  164. package/dist/api/controllers/integration.js +4 -4
  165. package/dist/api/controllers/row/external.js +1 -1
  166. package/dist/api/controllers/screen.js +2 -52
  167. package/dist/api/controllers/static/index.js +0 -1
  168. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  169. package/dist/api/controllers/static/templates/preview.hbs +1 -5
  170. package/dist/api/index.js +1 -1
  171. package/dist/api/routes/application.js +2 -3
  172. package/dist/api/routes/index.js +0 -2
  173. package/dist/api/routes/public/rows.js +82 -1
  174. package/dist/api/routes/public/tables.js +1 -1
  175. package/dist/api/routes/table.js +1 -1
  176. package/dist/api/routes/utils/validators.js +2 -20
  177. package/dist/app.js +1 -16
  178. package/dist/db/utils.js +1 -10
  179. package/dist/environment.js +0 -1
  180. package/dist/integrations/airtable.js +129 -126
  181. package/dist/integrations/arangodb.js +89 -86
  182. package/dist/integrations/base/query.js +2 -2
  183. package/dist/integrations/base/sqlTable.js +1 -3
  184. package/dist/integrations/couchdb.js +83 -80
  185. package/dist/integrations/dynamodb.js +164 -161
  186. package/dist/integrations/elasticsearch.js +138 -135
  187. package/dist/integrations/firebase.js +157 -154
  188. package/dist/integrations/googlesheets.js +327 -323
  189. package/dist/integrations/index.js +51 -99
  190. package/dist/integrations/microsoftSqlServer.js +243 -240
  191. package/dist/integrations/mongodb.js +242 -239
  192. package/dist/integrations/mysql.js +219 -215
  193. package/dist/integrations/oracle.js +322 -318
  194. package/dist/integrations/postgres.js +265 -262
  195. package/dist/integrations/redis.js +139 -134
  196. package/dist/integrations/rest.js +292 -289
  197. package/dist/integrations/s3.js +64 -61
  198. package/dist/integrations/snowflake.js +86 -83
  199. package/dist/middleware/currentapp.js +0 -2
  200. package/dist/migrations/functions/backfill/global.js +3 -0
  201. package/dist/migrations/functions/developerQuota.js +49 -0
  202. package/dist/{api/routes/plugin.js → migrations/functions/publishedAppsQuota.js} +21 -13
  203. package/dist/{api/controllers/plugin/url.js → migrations/functions/usageQuotas/syncDevelopers.js} +13 -13
  204. package/dist/{api/controllers/plugin/file.js → migrations/functions/usageQuotas/syncPublishedApps.js} +15 -13
  205. package/dist/migrations/index.js +10 -0
  206. package/dist/package.json +6 -9
  207. package/dist/tests/utilities/TestConfiguration.js +1 -1
  208. package/dist/threads/query.js +2 -2
  209. package/dist/tsconfig.build.tsbuildinfo +1 -1
  210. package/dist/utilities/fileSystem/index.js +1 -111
  211. package/dist/utilities/workerRequests.js +0 -4
  212. package/package.json +7 -10
  213. package/scripts/dev/manage.js +0 -4
  214. package/scripts/localdomain.js +1 -3
  215. package/specs/openapi.json +112 -115
  216. package/specs/openapi.yaml +94 -96
  217. package/specs/resources/misc.js +0 -116
  218. package/specs/resources/query.js +1 -1
  219. package/src/api/controllers/application.ts +2 -1
  220. package/src/api/controllers/auth.js +0 -11
  221. package/src/api/controllers/component.js +2 -21
  222. package/src/api/controllers/datasource.js +8 -21
  223. package/src/api/controllers/deploy/index.ts +6 -1
  224. package/src/api/controllers/integration.js +4 -4
  225. package/src/api/controllers/public/mapping/types.ts +0 -8
  226. package/src/api/controllers/row/external.js +1 -1
  227. package/src/api/controllers/screen.js +1 -66
  228. package/src/api/controllers/static/index.ts +1 -1
  229. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  230. package/src/api/controllers/static/templates/preview.hbs +1 -5
  231. package/src/api/index.js +1 -1
  232. package/src/api/routes/application.ts +2 -13
  233. package/src/api/routes/index.ts +0 -2
  234. package/src/api/routes/public/rows.ts +82 -1
  235. package/src/api/routes/public/tables.ts +1 -1
  236. package/src/api/routes/table.js +1 -1
  237. package/src/api/routes/tests/query.spec.js +25 -8
  238. package/src/api/routes/tests/user.spec.js +2 -0
  239. package/src/api/routes/utils/validators.js +5 -26
  240. package/src/app.ts +2 -25
  241. package/src/db/utils.js +0 -12
  242. package/src/definitions/openapi.ts +55 -56
  243. package/src/environment.js +0 -1
  244. package/src/integrations/airtable.ts +118 -116
  245. package/src/integrations/arangodb.ts +89 -87
  246. package/src/integrations/base/query.ts +2 -2
  247. package/src/integrations/base/sqlTable.ts +1 -3
  248. package/src/integrations/couchdb.ts +89 -83
  249. package/src/integrations/dynamodb.ts +175 -173
  250. package/src/integrations/elasticsearch.ts +122 -120
  251. package/src/integrations/firebase.ts +159 -157
  252. package/src/integrations/googlesheets.ts +338 -328
  253. package/src/integrations/index.ts +21 -64
  254. package/src/integrations/microsoftSqlServer.ts +251 -249
  255. package/src/integrations/mongodb.ts +258 -261
  256. package/src/integrations/mysql.ts +234 -229
  257. package/src/integrations/oracle.ts +380 -373
  258. package/src/integrations/postgres.ts +268 -264
  259. package/src/integrations/redis.ts +132 -128
  260. package/src/integrations/rest.ts +329 -324
  261. package/src/integrations/s3.ts +71 -68
  262. package/src/integrations/snowflake.ts +82 -80
  263. package/src/integrations/tests/{airtable.spec.ts → airtable.spec.js} +18 -21
  264. package/src/integrations/tests/{arangodb.spec.ts → arangodb.spec.js} +9 -12
  265. package/src/integrations/tests/{couchdb.spec.ts → couchdb.spec.js} +27 -33
  266. package/src/integrations/tests/{dynamodb.spec.ts → dynamodb.spec.js} +41 -45
  267. package/src/integrations/tests/{elasticsearch.spec.ts → elasticsearch.spec.js} +21 -22
  268. package/src/integrations/tests/{firebase.spec.ts → firebase.spec.js} +28 -33
  269. package/src/integrations/tests/{microsoftSqlServer.spec.ts → microsoftSqlServer.spec.js} +11 -12
  270. package/src/integrations/tests/{mongo.spec.ts → mongo.spec.js} +35 -46
  271. package/src/integrations/tests/{mysql.spec.ts → mysql.spec.js} +15 -17
  272. package/src/integrations/tests/{oracle.spec.ts → oracle.spec.js} +17 -19
  273. package/src/integrations/tests/{postgres.spec.ts → postgres.spec.js} +17 -19
  274. package/src/integrations/tests/{redis.spec.ts → redis.spec.js} +18 -27
  275. package/src/integrations/tests/{rest.spec.ts → rest.spec.js} +14 -22
  276. package/src/integrations/tests/{s3.spec.ts → s3.spec.js} +8 -10
  277. package/src/integrations/tests/{sql.spec.ts → sql.spec.js} +177 -228
  278. package/src/middleware/currentapp.js +0 -2
  279. package/src/migrations/functions/backfill/global.ts +3 -0
  280. package/src/migrations/functions/developerQuota.ts +15 -0
  281. package/src/migrations/functions/publishedAppsQuota.ts +13 -0
  282. package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
  283. package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
  284. package/src/migrations/index.ts +16 -0
  285. package/src/module.d.ts +0 -2
  286. package/src/tests/utilities/TestConfiguration.js +1 -1
  287. package/src/threads/query.ts +2 -2
  288. package/src/utilities/fileSystem/index.js +0 -130
  289. package/src/utilities/workerRequests.js +0 -8
  290. package/builder/assets/index.c9d3f9e8.js +0 -1005
  291. package/builder/assets/index.f1b70f52.css +0 -6
  292. package/dist/api/controllers/plugin/github.js +0 -69
  293. package/dist/api/controllers/plugin/index.js +0 -200
  294. package/dist/api/controllers/plugin/npm.js +0 -58
  295. package/dist/api/controllers/plugin/uploaders.js +0 -11
  296. package/dist/api/controllers/plugin/utils.js +0 -26
  297. package/dist/watch.js +0 -77
  298. package/dist/websocket.js +0 -22
  299. package/src/api/controllers/plugin/file.ts +0 -15
  300. package/src/api/controllers/plugin/github.ts +0 -75
  301. package/src/api/controllers/plugin/index.ts +0 -215
  302. package/src/api/controllers/plugin/npm.ts +0 -56
  303. package/src/api/controllers/plugin/uploaders.ts +0 -4
  304. package/src/api/controllers/plugin/url.ts +0 -12
  305. package/src/api/controllers/plugin/utils.ts +0 -19
  306. package/src/api/routes/plugin.ts +0 -14
  307. package/src/watch.ts +0 -38
  308. package/src/websocket.ts +0 -26
@@ -17,342 +17,346 @@ const utils_1 = require("./utils");
17
17
  const oracledb_1 = __importDefault(require("oracledb"));
18
18
  const sql_1 = __importDefault(require("./base/sql"));
19
19
  const constants_1 = require("../constants");
20
- oracledb_1.default.outFormat = oracledb_1.default.OUT_FORMAT_OBJECT;
21
- const SCHEMA = {
22
- docs: "https://github.com/oracle/node-oracledb",
23
- plus: true,
24
- friendlyName: "Oracle",
25
- type: "Relational",
26
- description: "Oracle Database is an object-relational database management system developed by Oracle Corporation",
27
- datasource: {
28
- host: {
29
- type: types_1.DatasourceFieldType.STRING,
30
- default: "localhost",
31
- required: true,
20
+ var OracleModule;
21
+ (function (OracleModule) {
22
+ oracledb_1.default.outFormat = oracledb_1.default.OUT_FORMAT_OBJECT;
23
+ const SCHEMA = {
24
+ docs: "https://github.com/oracle/node-oracledb",
25
+ plus: true,
26
+ friendlyName: "Oracle",
27
+ type: "Relational",
28
+ description: "Oracle Database is an object-relational database management system developed by Oracle Corporation",
29
+ datasource: {
30
+ host: {
31
+ type: types_1.DatasourceFieldType.STRING,
32
+ default: "localhost",
33
+ required: true,
34
+ },
35
+ port: {
36
+ type: types_1.DatasourceFieldType.NUMBER,
37
+ required: true,
38
+ default: 1521,
39
+ },
40
+ database: {
41
+ type: types_1.DatasourceFieldType.STRING,
42
+ required: true,
43
+ },
44
+ user: {
45
+ type: types_1.DatasourceFieldType.STRING,
46
+ required: true,
47
+ },
48
+ password: {
49
+ type: types_1.DatasourceFieldType.PASSWORD,
50
+ required: true,
51
+ },
32
52
  },
33
- port: {
34
- type: types_1.DatasourceFieldType.NUMBER,
35
- required: true,
36
- default: 1521,
53
+ query: {
54
+ create: {
55
+ type: types_1.QueryType.SQL,
56
+ },
57
+ read: {
58
+ type: types_1.QueryType.SQL,
59
+ },
60
+ update: {
61
+ type: types_1.QueryType.SQL,
62
+ },
63
+ delete: {
64
+ type: types_1.QueryType.SQL,
65
+ },
37
66
  },
38
- database: {
39
- type: types_1.DatasourceFieldType.STRING,
40
- required: true,
41
- },
42
- user: {
43
- type: types_1.DatasourceFieldType.STRING,
44
- required: true,
45
- },
46
- password: {
47
- type: types_1.DatasourceFieldType.PASSWORD,
48
- required: true,
49
- },
50
- },
51
- query: {
52
- create: {
53
- type: types_1.QueryType.SQL,
54
- },
55
- read: {
56
- type: types_1.QueryType.SQL,
57
- },
58
- update: {
59
- type: types_1.QueryType.SQL,
60
- },
61
- delete: {
62
- type: types_1.QueryType.SQL,
63
- },
64
- },
65
- };
66
- const UNSUPPORTED_TYPES = ["BLOB", "CLOB", "NCLOB"];
67
- const OracleContraintTypes = {
68
- PRIMARY: "P",
69
- NOT_NULL_OR_CHECK: "C",
70
- FOREIGN_KEY: "R",
71
- UNIQUE: "U",
72
- };
73
- class OracleIntegration extends sql_1.default {
74
- constructor(config) {
75
- super(utils_1.SqlClient.ORACLE);
76
- this.index = 1;
77
- this.tables = {};
78
- this.schemaErrors = {};
79
- this.COLUMNS_SQL = `
80
- SELECT
81
- tabs.table_name,
82
- cols.column_name,
83
- cols.data_type,
84
- cols.data_default,
85
- cols.column_id,
86
- cons.constraint_name,
87
- cons.constraint_type,
88
- cons.r_constraint_name,
89
- cons.search_condition
90
- FROM
91
- user_tables tabs
92
- JOIN
93
- user_tab_columns cols
94
- ON tabs.table_name = cols.table_name
95
- LEFT JOIN
96
- user_cons_columns col_cons
97
- ON cols.column_name = col_cons.column_name
98
- AND cols.table_name = col_cons.table_name
99
- LEFT JOIN
100
- user_constraints cons
101
- ON col_cons.constraint_name = cons.constraint_name
102
- AND cons.table_name = cols.table_name
103
- WHERE
104
- (cons.status = 'ENABLED'
105
- OR cons.status IS NULL)
106
- `;
107
- this.getConnection = () => __awaiter(this, void 0, void 0, function* () {
108
- //connectString : "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SID= ORCL)))"
109
- const connectString = `${this.config.host}:${this.config.port || 1521}/${this.config.database}`;
110
- const attributes = {
111
- user: this.config.user,
112
- password: this.config.password,
113
- connectString,
114
- };
115
- return oracledb_1.default.getConnection(attributes);
116
- });
117
- this.config = config;
118
- }
119
- getBindingIdentifier() {
120
- return `:${this.index++}`;
121
- }
122
- getStringConcat(parts) {
123
- return parts.join(" || ");
124
- }
125
- /**
126
- * Map the flat tabular columns and constraints data into a nested object
127
- */
128
- mapColumns(result) {
129
- const oracleTables = {};
130
- if (result.rows) {
131
- result.rows.forEach(row => {
132
- const tableName = row.TABLE_NAME;
133
- const columnName = row.COLUMN_NAME;
134
- const dataType = row.DATA_TYPE;
135
- const dataDefault = row.DATA_DEFAULT;
136
- const columnId = row.COLUMN_ID;
137
- const constraintName = row.CONSTRAINT_NAME;
138
- const constraintType = row.CONSTRAINT_TYPE;
139
- const relatedConstraintName = row.R_CONSTRAINT_NAME;
140
- const searchCondition = row.SEARCH_CONDITION;
141
- let table = oracleTables[tableName];
142
- if (!table) {
143
- table = {
144
- name: tableName,
145
- columns: {},
146
- };
147
- oracleTables[tableName] = table;
148
- }
149
- let column = table.columns[columnName];
150
- if (!column) {
151
- column = {
152
- name: columnName,
153
- type: dataType,
154
- default: dataDefault,
155
- id: columnId,
156
- constraints: {},
157
- };
158
- table.columns[columnName] = column;
159
- }
160
- if (constraintName && constraintType) {
161
- let constraint = column.constraints[constraintName];
162
- if (!constraint) {
163
- constraint = {
164
- name: constraintName,
165
- type: constraintType,
166
- relatedConstraintName: relatedConstraintName,
167
- searchCondition: searchCondition,
67
+ };
68
+ const UNSUPPORTED_TYPES = ["BLOB", "CLOB", "NCLOB"];
69
+ const OracleContraintTypes = {
70
+ PRIMARY: "P",
71
+ NOT_NULL_OR_CHECK: "C",
72
+ FOREIGN_KEY: "R",
73
+ UNIQUE: "U",
74
+ };
75
+ class OracleIntegration extends sql_1.default {
76
+ constructor(config) {
77
+ super(utils_1.SqlClient.ORACLE);
78
+ this.index = 1;
79
+ this.tables = {};
80
+ this.schemaErrors = {};
81
+ this.COLUMNS_SQL = `
82
+ SELECT
83
+ tabs.table_name,
84
+ cols.column_name,
85
+ cols.data_type,
86
+ cols.data_default,
87
+ cols.column_id,
88
+ cons.constraint_name,
89
+ cons.constraint_type,
90
+ cons.r_constraint_name,
91
+ cons.search_condition
92
+ FROM
93
+ user_tables tabs
94
+ JOIN
95
+ user_tab_columns cols
96
+ ON tabs.table_name = cols.table_name
97
+ LEFT JOIN
98
+ user_cons_columns col_cons
99
+ ON cols.column_name = col_cons.column_name
100
+ AND cols.table_name = col_cons.table_name
101
+ LEFT JOIN
102
+ user_constraints cons
103
+ ON col_cons.constraint_name = cons.constraint_name
104
+ AND cons.table_name = cols.table_name
105
+ WHERE
106
+ (cons.status = 'ENABLED'
107
+ OR cons.status IS NULL)
108
+ `;
109
+ this.getConnection = () => __awaiter(this, void 0, void 0, function* () {
110
+ //connectString : "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SID= ORCL)))"
111
+ const connectString = `${this.config.host}:${this.config.port || 1521}/${this.config.database}`;
112
+ const attributes = {
113
+ user: this.config.user,
114
+ password: this.config.password,
115
+ connectString,
116
+ };
117
+ return oracledb_1.default.getConnection(attributes);
118
+ });
119
+ this.config = config;
120
+ }
121
+ getBindingIdentifier() {
122
+ return `:${this.index++}`;
123
+ }
124
+ getStringConcat(parts) {
125
+ return parts.join(" || ");
126
+ }
127
+ /**
128
+ * Map the flat tabular columns and constraints data into a nested object
129
+ */
130
+ mapColumns(result) {
131
+ const oracleTables = {};
132
+ if (result.rows) {
133
+ result.rows.forEach(row => {
134
+ const tableName = row.TABLE_NAME;
135
+ const columnName = row.COLUMN_NAME;
136
+ const dataType = row.DATA_TYPE;
137
+ const dataDefault = row.DATA_DEFAULT;
138
+ const columnId = row.COLUMN_ID;
139
+ const constraintName = row.CONSTRAINT_NAME;
140
+ const constraintType = row.CONSTRAINT_TYPE;
141
+ const relatedConstraintName = row.R_CONSTRAINT_NAME;
142
+ const searchCondition = row.SEARCH_CONDITION;
143
+ let table = oracleTables[tableName];
144
+ if (!table) {
145
+ table = {
146
+ name: tableName,
147
+ columns: {},
168
148
  };
149
+ oracleTables[tableName] = table;
169
150
  }
170
- column.constraints[constraintName] = constraint;
171
- }
172
- });
151
+ let column = table.columns[columnName];
152
+ if (!column) {
153
+ column = {
154
+ name: columnName,
155
+ type: dataType,
156
+ default: dataDefault,
157
+ id: columnId,
158
+ constraints: {},
159
+ };
160
+ table.columns[columnName] = column;
161
+ }
162
+ if (constraintName && constraintType) {
163
+ let constraint = column.constraints[constraintName];
164
+ if (!constraint) {
165
+ constraint = {
166
+ name: constraintName,
167
+ type: constraintType,
168
+ relatedConstraintName: relatedConstraintName,
169
+ searchCondition: searchCondition,
170
+ };
171
+ }
172
+ column.constraints[constraintName] = constraint;
173
+ }
174
+ });
175
+ }
176
+ return oracleTables;
173
177
  }
174
- return oracleTables;
175
- }
176
- static isSupportedColumn(column) {
177
- return !UNSUPPORTED_TYPES.includes(column.type);
178
- }
179
- static isAutoColumn(column) {
180
- return !!(column.default && column.default.toLowerCase().includes("nextval"));
181
- }
182
- /**
183
- * No native boolean in oracle. Best we can do is to check if a manual 1 or 0 number constraint has been set up
184
- * This matches the default behaviour for generating DDL used in knex.
185
- */
186
- isBooleanType(column) {
187
- return (column.type.toLowerCase() === "number" &&
188
- Object.values(column.constraints).filter(c => {
189
- if (c.type === OracleContraintTypes.NOT_NULL_OR_CHECK &&
190
- c.searchCondition) {
191
- const condition = c.searchCondition
192
- .replace(/\s/g, "") // remove spaces
193
- .replace(/[']+/g, ""); // remove quotes
194
- if (condition.includes("in(0,1)") || condition.includes("in(1,0)")) {
195
- return true;
178
+ static isSupportedColumn(column) {
179
+ return !UNSUPPORTED_TYPES.includes(column.type);
180
+ }
181
+ static isAutoColumn(column) {
182
+ return !!(column.default && column.default.toLowerCase().includes("nextval"));
183
+ }
184
+ /**
185
+ * No native boolean in oracle. Best we can do is to check if a manual 1 or 0 number constraint has been set up
186
+ * This matches the default behaviour for generating DDL used in knex.
187
+ */
188
+ isBooleanType(column) {
189
+ return (column.type.toLowerCase() === "number" &&
190
+ Object.values(column.constraints).filter(c => {
191
+ if (c.type === OracleContraintTypes.NOT_NULL_OR_CHECK &&
192
+ c.searchCondition) {
193
+ const condition = c.searchCondition
194
+ .replace(/\s/g, "") // remove spaces
195
+ .replace(/[']+/g, ""); // remove quotes
196
+ if (condition.includes("in(0,1)") ||
197
+ condition.includes("in(1,0)")) {
198
+ return true;
199
+ }
196
200
  }
197
- }
198
- return false;
199
- }).length > 0);
200
- }
201
- internalConvertType(column) {
202
- if (this.isBooleanType(column)) {
203
- return { type: constants_1.FieldTypes.BOOLEAN };
201
+ return false;
202
+ }).length > 0);
204
203
  }
205
- return (0, utils_1.convertSqlType)(column.type);
206
- }
207
- /**
208
- * Fetches the tables from the oracle table and assigns them to the datasource.
209
- * @param {*} datasourceId - datasourceId to fetch
210
- * @param entities - the tables that are to be built
211
- */
212
- buildSchema(datasourceId, entities) {
213
- return __awaiter(this, void 0, void 0, function* () {
214
- const columnsResponse = yield this.internalQuery({
215
- sql: this.COLUMNS_SQL,
216
- });
217
- const oracleTables = this.mapColumns(columnsResponse);
218
- const tables = {};
219
- // iterate each table
220
- Object.values(oracleTables).forEach(oracleTable => {
221
- let table = tables[oracleTable.name];
222
- if (!table) {
223
- table = {
224
- _id: (0, utils_1.buildExternalTableId)(datasourceId, oracleTable.name),
225
- primary: [],
226
- name: oracleTable.name,
227
- schema: {},
228
- };
229
- tables[oracleTable.name] = table;
230
- }
231
- // iterate each column on the table
232
- Object.values(oracleTable.columns)
233
- // remove columns that we can't read / save
234
- .filter(oracleColumn => OracleIntegration.isSupportedColumn(oracleColumn))
235
- // match the order of the columns in the db
236
- .sort((c1, c2) => c1.id - c2.id)
237
- .forEach(oracleColumn => {
238
- const columnName = oracleColumn.name;
239
- let fieldSchema = table.schema[columnName];
240
- if (!fieldSchema) {
241
- fieldSchema = Object.assign({ autocolumn: OracleIntegration.isAutoColumn(oracleColumn), name: columnName }, this.internalConvertType(oracleColumn));
242
- table.schema[columnName] = fieldSchema;
204
+ internalConvertType(column) {
205
+ if (this.isBooleanType(column)) {
206
+ return { type: constants_1.FieldTypes.BOOLEAN };
207
+ }
208
+ return (0, utils_1.convertSqlType)(column.type);
209
+ }
210
+ /**
211
+ * Fetches the tables from the oracle table and assigns them to the datasource.
212
+ * @param {*} datasourceId - datasourceId to fetch
213
+ * @param entities - the tables that are to be built
214
+ */
215
+ buildSchema(datasourceId, entities) {
216
+ return __awaiter(this, void 0, void 0, function* () {
217
+ const columnsResponse = yield this.internalQuery({
218
+ sql: this.COLUMNS_SQL,
219
+ });
220
+ const oracleTables = this.mapColumns(columnsResponse);
221
+ const tables = {};
222
+ // iterate each table
223
+ Object.values(oracleTables).forEach(oracleTable => {
224
+ let table = tables[oracleTable.name];
225
+ if (!table) {
226
+ table = {
227
+ _id: (0, utils_1.buildExternalTableId)(datasourceId, oracleTable.name),
228
+ primary: [],
229
+ name: oracleTable.name,
230
+ schema: {},
231
+ };
232
+ tables[oracleTable.name] = table;
243
233
  }
244
- // iterate each constraint on the column
245
- Object.values(oracleColumn.constraints).forEach(oracleConstraint => {
246
- if (oracleConstraint.type === OracleContraintTypes.PRIMARY) {
247
- table.primary.push(columnName);
234
+ // iterate each column on the table
235
+ Object.values(oracleTable.columns)
236
+ // remove columns that we can't read / save
237
+ .filter(oracleColumn => OracleIntegration.isSupportedColumn(oracleColumn))
238
+ // match the order of the columns in the db
239
+ .sort((c1, c2) => c1.id - c2.id)
240
+ .forEach(oracleColumn => {
241
+ const columnName = oracleColumn.name;
242
+ let fieldSchema = table.schema[columnName];
243
+ if (!fieldSchema) {
244
+ fieldSchema = Object.assign({ autocolumn: OracleIntegration.isAutoColumn(oracleColumn), name: columnName }, this.internalConvertType(oracleColumn));
245
+ table.schema[columnName] = fieldSchema;
248
246
  }
247
+ // iterate each constraint on the column
248
+ Object.values(oracleColumn.constraints).forEach(oracleConstraint => {
249
+ if (oracleConstraint.type === OracleContraintTypes.PRIMARY) {
250
+ table.primary.push(columnName);
251
+ }
252
+ });
249
253
  });
250
254
  });
255
+ const final = (0, utils_1.finaliseExternalTables)(tables, entities);
256
+ this.tables = final.tables;
257
+ this.schemaErrors = final.errors;
251
258
  });
252
- const final = (0, utils_1.finaliseExternalTables)(tables, entities);
253
- this.tables = final.tables;
254
- this.schemaErrors = final.errors;
255
- });
256
- }
257
- internalQuery(query) {
258
- return __awaiter(this, void 0, void 0, function* () {
259
- let connection;
260
- try {
261
- this.index = 1;
262
- connection = yield this.getConnection();
263
- const options = { autoCommit: true };
264
- const bindings = query.bindings || [];
265
- return yield connection.execute(query.sql, bindings, options);
266
- }
267
- finally {
268
- if (connection) {
269
- try {
270
- yield connection.close();
271
- }
272
- catch (err) {
273
- console.error(err);
274
- }
275
- }
276
- }
277
- });
278
- }
279
- create(query) {
280
- return __awaiter(this, void 0, void 0, function* () {
281
- const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
282
- return response.rows && response.rows.length
283
- ? response.rows
284
- : [{ created: true }];
285
- });
286
- }
287
- read(query) {
288
- return __awaiter(this, void 0, void 0, function* () {
289
- const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
290
- return response.rows ? response.rows : [];
291
- });
292
- }
293
- update(query) {
294
- return __awaiter(this, void 0, void 0, function* () {
295
- const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
296
- return response.rows && response.rows.length
297
- ? response.rows
298
- : [{ updated: true }];
299
- });
300
- }
301
- delete(query) {
302
- return __awaiter(this, void 0, void 0, function* () {
303
- const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
304
- return response.rows && response.rows.length
305
- ? response.rows
306
- : [{ deleted: true }];
307
- });
308
- }
309
- query(json) {
310
- var _a, _b, _c;
311
- return __awaiter(this, void 0, void 0, function* () {
312
- const operation = this._operation(json);
313
- const input = this._query(json, { disableReturning: true });
314
- if (Array.isArray(input)) {
315
- const responses = [];
316
- for (let query of input) {
317
- responses.push(yield this.internalQuery(query));
318
- }
319
- return responses;
320
- }
321
- else {
322
- // read the row to be deleted up front for the return
323
- let deletedRows;
324
- if (operation === types_1.Operation.DELETE) {
325
- const queryFn = (query) => this.internalQuery(query);
326
- deletedRows = yield this.getReturningRow(queryFn, json);
259
+ }
260
+ internalQuery(query) {
261
+ return __awaiter(this, void 0, void 0, function* () {
262
+ let connection;
263
+ try {
264
+ this.index = 1;
265
+ connection = yield this.getConnection();
266
+ const options = { autoCommit: true };
267
+ const bindings = query.bindings || [];
268
+ return yield connection.execute(query.sql, bindings, options);
327
269
  }
328
- // run the query
329
- const response = yield this.internalQuery(input);
330
- // get the results or return the created / updated / deleted row
331
- if ((_a = deletedRows === null || deletedRows === void 0 ? void 0 : deletedRows.rows) === null || _a === void 0 ? void 0 : _a.length) {
332
- return deletedRows.rows;
270
+ finally {
271
+ if (connection) {
272
+ try {
273
+ yield connection.close();
274
+ }
275
+ catch (err) {
276
+ console.error(err);
277
+ }
278
+ }
333
279
  }
334
- else if ((_b = response.rows) === null || _b === void 0 ? void 0 : _b.length) {
335
- return response.rows;
280
+ });
281
+ }
282
+ create(query) {
283
+ return __awaiter(this, void 0, void 0, function* () {
284
+ const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
285
+ return response.rows && response.rows.length
286
+ ? response.rows
287
+ : [{ created: true }];
288
+ });
289
+ }
290
+ read(query) {
291
+ return __awaiter(this, void 0, void 0, function* () {
292
+ const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
293
+ return response.rows ? response.rows : [];
294
+ });
295
+ }
296
+ update(query) {
297
+ return __awaiter(this, void 0, void 0, function* () {
298
+ const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
299
+ return response.rows && response.rows.length
300
+ ? response.rows
301
+ : [{ updated: true }];
302
+ });
303
+ }
304
+ delete(query) {
305
+ return __awaiter(this, void 0, void 0, function* () {
306
+ const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
307
+ return response.rows && response.rows.length
308
+ ? response.rows
309
+ : [{ deleted: true }];
310
+ });
311
+ }
312
+ query(json) {
313
+ var _a, _b, _c;
314
+ return __awaiter(this, void 0, void 0, function* () {
315
+ const operation = this._operation(json);
316
+ const input = this._query(json, { disableReturning: true });
317
+ if (Array.isArray(input)) {
318
+ const responses = [];
319
+ for (let query of input) {
320
+ responses.push(yield this.internalQuery(query));
321
+ }
322
+ return responses;
336
323
  }
337
324
  else {
338
- // get the last row that was updated
339
- if (response.lastRowid &&
340
- ((_c = json.endpoint) === null || _c === void 0 ? void 0 : _c.entityId) &&
341
- operation !== types_1.Operation.DELETE) {
342
- const lastRow = yield this.internalQuery({
343
- sql: `SELECT * FROM \"${json.endpoint.entityId}\" WHERE ROWID = '${response.lastRowid}'`,
344
- });
345
- return lastRow.rows;
325
+ // read the row to be deleted up front for the return
326
+ let deletedRows;
327
+ if (operation === types_1.Operation.DELETE) {
328
+ const queryFn = (query) => this.internalQuery(query);
329
+ deletedRows = yield this.getReturningRow(queryFn, json);
330
+ }
331
+ // run the query
332
+ const response = yield this.internalQuery(input);
333
+ // get the results or return the created / updated / deleted row
334
+ if ((_a = deletedRows === null || deletedRows === void 0 ? void 0 : deletedRows.rows) === null || _a === void 0 ? void 0 : _a.length) {
335
+ return deletedRows.rows;
336
+ }
337
+ else if ((_b = response.rows) === null || _b === void 0 ? void 0 : _b.length) {
338
+ return response.rows;
346
339
  }
347
340
  else {
348
- return [{ [operation.toLowerCase()]: true }];
341
+ // get the last row that was updated
342
+ if (response.lastRowid &&
343
+ ((_c = json.endpoint) === null || _c === void 0 ? void 0 : _c.entityId) &&
344
+ operation !== types_1.Operation.DELETE) {
345
+ const lastRow = yield this.internalQuery({
346
+ sql: `SELECT * FROM \"${json.endpoint.entityId}\" WHERE ROWID = '${response.lastRowid}'`,
347
+ });
348
+ return lastRow.rows;
349
+ }
350
+ else {
351
+ return [{ [operation.toLowerCase()]: true }];
352
+ }
349
353
  }
350
354
  }
351
- }
352
- });
355
+ });
356
+ }
353
357
  }
354
- }
355
- exports.default = {
356
- schema: SCHEMA,
357
- integration: OracleIntegration,
358
- };
358
+ module.exports = {
359
+ schema: SCHEMA,
360
+ integration: OracleIntegration,
361
+ };
362
+ })(OracleModule || (OracleModule = {}));