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

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.21479aff.js} +152 -152
  4. package/builder/assets/{index.4a7c5636.css → index.67ac3a72.css} +1 -1
  5. package/builder/assets/oracle.66592424.png +0 -0
  6. package/builder/index.html +2 -2
  7. package/coverage/clover.xml +84 -84
  8. package/coverage/coverage-final.json +4 -4
  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 +4 -4
  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 +83 -83
  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
@@ -791,17 +791,17 @@ DA:14,1
791
791
  DA:20,1
792
792
  DA:21,1
793
793
  DA:22,1
794
- DA:23,46
794
+ DA:23,47
795
795
  DA:24,1
796
- DA:26,45
797
- DA:27,45
796
+ DA:26,46
797
+ DA:27,46
798
798
  DA:34,1
799
799
  LF:18
800
800
  LH:18
801
801
  BRDA:6,0,0,1
802
802
  BRDA:6,0,1,0
803
803
  BRDA:23,1,0,1
804
- BRDA:23,1,1,45
804
+ BRDA:23,1,1,46
805
805
  BRF:4
806
806
  BRH:3
807
807
  end_of_record
@@ -5781,27 +5781,27 @@ TN:
5781
5781
  SF:src/constants/index.js
5782
5782
  FNF:0
5783
5783
  FNH:0
5784
- DA:1,40
5785
- DA:2,40
5786
- DA:3,40
5787
- DA:5,40
5788
- DA:9,40
5789
- DA:22,40
5790
- DA:23,40
5791
- DA:32,40
5792
- DA:48,40
5793
- DA:55,40
5794
- DA:61,40
5795
- DA:67,40
5796
- DA:78,40
5797
- DA:83,40
5798
- DA:145,40
5799
- DA:153,40
5800
- DA:154,40
5801
- DA:161,40
5802
- DA:166,40
5803
- DA:172,40
5804
- DA:178,40
5784
+ DA:1,41
5785
+ DA:2,41
5786
+ DA:3,41
5787
+ DA:5,41
5788
+ DA:9,41
5789
+ DA:22,41
5790
+ DA:23,41
5791
+ DA:32,41
5792
+ DA:48,41
5793
+ DA:55,41
5794
+ DA:61,41
5795
+ DA:67,41
5796
+ DA:78,41
5797
+ DA:83,41
5798
+ DA:145,41
5799
+ DA:153,41
5800
+ DA:154,41
5801
+ DA:161,41
5802
+ DA:166,41
5803
+ DA:172,41
5804
+ DA:178,41
5805
5805
  LF:21
5806
5806
  LH:21
5807
5807
  BRF:0
@@ -5929,8 +5929,8 @@ FN:3,(anonymous_0)
5929
5929
  FNF:1
5930
5930
  FNH:1
5931
5931
  FNDA:803,(anonymous_0)
5932
- DA:1,46
5933
- DA:3,46
5932
+ DA:1,47
5933
+ DA:3,47
5934
5934
  DA:4,803
5935
5935
  LF:3
5936
5936
  LH:3
@@ -6001,113 +6001,113 @@ FNDA:0,(anonymous_26)
6001
6001
  FNDA:1,(anonymous_27)
6002
6002
  FNDA:0,(anonymous_28)
6003
6003
  FNDA:60,(anonymous_29)
6004
- DA:1,46
6005
- DA:12,46
6006
- DA:14,46
6007
- DA:16,46
6008
- DA:22,46
6009
- DA:45,46
6010
- DA:50,46
6011
- DA:54,46
6012
- DA:58,46
6013
- DA:60,46
6014
- DA:68,46
6015
- DA:69,46
6016
- DA:70,46
6017
- DA:71,46
6018
- DA:72,46
6019
- DA:73,46
6020
- DA:74,46
6021
- DA:75,46
6022
- DA:76,46
6023
- DA:77,46
6024
- DA:78,46
6025
- DA:79,46
6026
- DA:80,46
6027
- DA:81,46
6028
- DA:83,46
6029
- DA:84,46
6030
- DA:86,46
6004
+ DA:1,47
6005
+ DA:12,47
6006
+ DA:14,47
6007
+ DA:16,47
6008
+ DA:22,47
6009
+ DA:45,47
6010
+ DA:50,47
6011
+ DA:54,47
6012
+ DA:58,47
6013
+ DA:60,47
6014
+ DA:68,47
6015
+ DA:69,47
6016
+ DA:70,47
6017
+ DA:71,47
6018
+ DA:72,47
6019
+ DA:73,47
6020
+ DA:74,47
6021
+ DA:75,47
6022
+ DA:76,47
6023
+ DA:77,47
6024
+ DA:78,47
6025
+ DA:79,47
6026
+ DA:80,47
6027
+ DA:81,47
6028
+ DA:83,47
6029
+ DA:84,47
6030
+ DA:86,47
6031
6031
  DA:87,74
6032
6032
  DA:103,603
6033
6033
  DA:104,590
6034
6034
  DA:106,603
6035
- DA:113,46
6036
- DA:118,46
6035
+ DA:113,47
6036
+ DA:118,47
6037
6037
  DA:119,3
6038
- DA:126,46
6038
+ DA:126,47
6039
6039
  DA:127,99
6040
- DA:138,46
6040
+ DA:138,47
6041
6041
  DA:139,11
6042
6042
  DA:140,0
6043
6043
  DA:143,11
6044
6044
  DA:145,11
6045
- DA:154,46
6045
+ DA:154,47
6046
6046
  DA:155,200
6047
6047
  DA:156,200
6048
- DA:162,46
6048
+ DA:162,47
6049
6049
  DA:163,3
6050
- DA:171,46
6050
+ DA:171,47
6051
6051
  DA:172,132
6052
- DA:178,46
6052
+ DA:178,47
6053
6053
  DA:179,2
6054
6054
  DA:180,2
6055
6055
  DA:181,1
6056
6056
  DA:183,1
6057
- DA:189,46
6057
+ DA:189,47
6058
6058
  DA:190,203
6059
- DA:197,46
6059
+ DA:197,47
6060
6060
  DA:198,20
6061
- DA:212,46
6061
+ DA:212,47
6062
6062
  DA:220,9
6063
6063
  DA:221,9
6064
6064
  DA:222,9
6065
6065
  DA:223,9
6066
- DA:229,46
6066
+ DA:229,47
6067
6067
  DA:230,0
6068
- DA:237,46
6068
+ DA:237,47
6069
6069
  DA:238,178
6070
6070
  DA:239,178
6071
6071
  DA:240,0
6072
6072
  DA:242,178
6073
- DA:249,46
6073
+ DA:249,47
6074
6074
  DA:250,178
6075
6075
  DA:251,178
6076
6076
  DA:252,178
6077
- DA:259,46
6077
+ DA:259,47
6078
6078
  DA:260,5
6079
- DA:266,46
6079
+ DA:266,47
6080
6080
  DA:267,188
6081
- DA:274,46
6081
+ DA:274,47
6082
6082
  DA:275,197
6083
- DA:281,46
6083
+ DA:281,47
6084
6084
  DA:282,190
6085
- DA:289,46
6085
+ DA:289,47
6086
6086
  DA:290,10
6087
- DA:296,46
6087
+ DA:296,47
6088
6088
  DA:297,2
6089
- DA:304,46
6089
+ DA:304,47
6090
6090
  DA:305,23
6091
- DA:313,46
6091
+ DA:313,47
6092
6092
  DA:314,3
6093
- DA:321,46
6093
+ DA:321,47
6094
6094
  DA:322,18
6095
- DA:330,46
6095
+ DA:330,47
6096
6096
  DA:331,3
6097
6097
  DA:332,2
6098
6098
  DA:335,1
6099
- DA:342,46
6099
+ DA:342,47
6100
6100
  DA:343,10
6101
- DA:346,46
6101
+ DA:346,47
6102
6102
  DA:347,0
6103
6103
  DA:348,0
6104
6104
  DA:349,0
6105
6105
  DA:351,0
6106
- DA:354,46
6106
+ DA:354,47
6107
6107
  DA:355,1
6108
- DA:358,46
6108
+ DA:358,47
6109
6109
  DA:359,0
6110
- DA:365,46
6110
+ DA:365,47
6111
6111
  DA:366,60
6112
6112
  LF:108
6113
6113
  LH:100
@@ -48,6 +48,7 @@ var SourceNames;
48
48
  SourceNames["MYSQL"] = "MYSQL";
49
49
  SourceNames["ARANGODB"] = "ARANGODB";
50
50
  SourceNames["REST"] = "REST";
51
+ SourceNames["ORACLE"] = "ORACLE";
51
52
  })(SourceNames = exports.SourceNames || (exports.SourceNames = {}));
52
53
  var IncludeRelationships;
53
54
  (function (IncludeRelationships) {
@@ -379,6 +379,9 @@ class SqlQueryBuilder extends sqlTable_1.default {
379
379
  else if (sqlClient === utils_1.SqlClients.MY_SQL) {
380
380
  id = results === null || results === void 0 ? void 0 : results.insertId;
381
381
  }
382
+ else if (sqlClient === utils_1.SqlClients.ORACLE) {
383
+ id = response.outBinds[0][0];
384
+ }
382
385
  row = processFn(yield this.getReturningRow(queryFn, this.checkLookupKeys(id, json)));
383
386
  }
384
387
  if (operation !== datasource_1.Operation.READ) {
@@ -388,4 +391,5 @@ class SqlQueryBuilder extends sqlTable_1.default {
388
391
  });
389
392
  }
390
393
  }
394
+ exports.default = SqlQueryBuilder;
391
395
  module.exports = SqlQueryBuilder;
@@ -37,6 +37,12 @@ const INTEGRATIONS = {
37
37
  [SourceNames.ARANGODB]: arangodb.integration,
38
38
  [SourceNames.REST]: rest.integration,
39
39
  };
40
+ // optionally add oracle integration if the oracle binary can be installed
41
+ if (!(process.arch === 'arm64' && process.platform === 'darwin')) {
42
+ const oracle = require("./oracle");
43
+ DEFINITIONS[SourceNames.ORACLE] = oracle.schema;
44
+ INTEGRATIONS[SourceNames.ORACLE] = oracle.integration;
45
+ }
40
46
  module.exports = {
41
47
  definitions: DEFINITIONS,
42
48
  integrations: INTEGRATIONS,
@@ -0,0 +1,345 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const datasource_1 = require("../definitions/datasource");
16
+ const utils_1 = require("./utils");
17
+ const oracledb_1 = __importDefault(require("oracledb"));
18
+ const sql_1 = __importDefault(require("./base/sql"));
19
+ const constants_1 = require("../constants");
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
+ description: "Oracle Database is an object-relational database management system developed by Oracle Corporation",
28
+ datasource: {
29
+ host: {
30
+ type: datasource_1.DatasourceFieldTypes.STRING,
31
+ default: "localhost",
32
+ required: true,
33
+ },
34
+ port: {
35
+ type: datasource_1.DatasourceFieldTypes.NUMBER,
36
+ required: true,
37
+ default: 1521,
38
+ },
39
+ database: {
40
+ type: datasource_1.DatasourceFieldTypes.STRING,
41
+ required: true,
42
+ },
43
+ user: {
44
+ type: datasource_1.DatasourceFieldTypes.STRING,
45
+ required: true,
46
+ },
47
+ password: {
48
+ type: datasource_1.DatasourceFieldTypes.PASSWORD,
49
+ required: true,
50
+ },
51
+ },
52
+ query: {
53
+ create: {
54
+ type: datasource_1.QueryTypes.SQL,
55
+ },
56
+ read: {
57
+ type: datasource_1.QueryTypes.SQL,
58
+ },
59
+ update: {
60
+ type: datasource_1.QueryTypes.SQL,
61
+ },
62
+ delete: {
63
+ type: datasource_1.QueryTypes.SQL,
64
+ },
65
+ },
66
+ };
67
+ const UNSUPPORTED_TYPES = ["BLOB", "CLOB", "NCLOB"];
68
+ const OracleContraintTypes = {
69
+ PRIMARY: "P",
70
+ NOT_NULL_OR_CHECK: "C",
71
+ FOREIGN_KEY: "R",
72
+ UNIQUE: "U",
73
+ };
74
+ class OracleIntegration extends sql_1.default {
75
+ constructor(config) {
76
+ super(utils_1.SqlClients.ORACLE);
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.user,
113
+ connectString,
114
+ };
115
+ return oracledb_1.default.getConnection(attributes);
116
+ });
117
+ this.config = config;
118
+ }
119
+ /**
120
+ * Map the flat tabular columns and constraints data into a nested object
121
+ */
122
+ mapColumns(result) {
123
+ const oracleTables = {};
124
+ if (result.rows) {
125
+ result.rows.forEach(row => {
126
+ const tableName = row.TABLE_NAME;
127
+ const columnName = row.COLUMN_NAME;
128
+ const dataType = row.DATA_TYPE;
129
+ const dataDefault = row.DATA_DEFAULT;
130
+ const columnId = row.COLUMN_ID;
131
+ const constraintName = row.CONSTRAINT_NAME;
132
+ const constraintType = row.CONSTRAINT_TYPE;
133
+ const relatedConstraintName = row.R_CONSTRAINT_NAME;
134
+ const searchCondition = row.SEARCH_CONDITION;
135
+ let table = oracleTables[tableName];
136
+ if (!table) {
137
+ table = {
138
+ name: tableName,
139
+ columns: {},
140
+ };
141
+ oracleTables[tableName] = table;
142
+ }
143
+ let column = table.columns[columnName];
144
+ if (!column) {
145
+ column = {
146
+ name: columnName,
147
+ type: dataType,
148
+ default: dataDefault,
149
+ id: columnId,
150
+ constraints: {},
151
+ };
152
+ table.columns[columnName] = column;
153
+ }
154
+ if (constraintName && constraintType) {
155
+ let constraint = column.constraints[constraintName];
156
+ if (!constraint) {
157
+ constraint = {
158
+ name: constraintName,
159
+ type: constraintType,
160
+ relatedConstraintName: relatedConstraintName,
161
+ searchCondition: searchCondition,
162
+ };
163
+ }
164
+ column.constraints[constraintName] = constraint;
165
+ }
166
+ });
167
+ }
168
+ return oracleTables;
169
+ }
170
+ isSupportedColumn(column) {
171
+ if (UNSUPPORTED_TYPES.includes(column.type)) {
172
+ return false;
173
+ }
174
+ return true;
175
+ }
176
+ isAutoColumn(column) {
177
+ if (column.default && column.default.toLowerCase().includes("nextval")) {
178
+ return true;
179
+ }
180
+ return false;
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
+ if (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)") ||
195
+ condition.includes("in(1,0)")) {
196
+ return true;
197
+ }
198
+ }
199
+ return false;
200
+ }).length > 0) {
201
+ return true;
202
+ }
203
+ return false;
204
+ }
205
+ internalConvertType(column) {
206
+ if (this.isBooleanType(column)) {
207
+ return constants_1.FieldTypes.BOOLEAN;
208
+ }
209
+ return utils_1.convertSqlType(column.type);
210
+ }
211
+ /**
212
+ * Fetches the tables from the oracle table and assigns them to the datasource.
213
+ * @param {*} datasourceId - datasourceId to fetch
214
+ * @param entities - the tables that are to be built
215
+ */
216
+ buildSchema(datasourceId, entities) {
217
+ return __awaiter(this, void 0, void 0, function* () {
218
+ const columnsResponse = yield this.internalQuery({
219
+ sql: this.COLUMNS_SQL,
220
+ });
221
+ const oracleTables = this.mapColumns(columnsResponse);
222
+ const tables = {};
223
+ // iterate each table
224
+ Object.values(oracleTables).forEach(oracleTable => {
225
+ let table = tables[oracleTable.name];
226
+ if (!table) {
227
+ table = {
228
+ _id: utils_1.buildExternalTableId(datasourceId, oracleTable.name),
229
+ primary: [],
230
+ name: oracleTable.name,
231
+ schema: {},
232
+ };
233
+ tables[oracleTable.name] = table;
234
+ }
235
+ // iterate each column on the table
236
+ Object.values(oracleTable.columns)
237
+ // remove columns that we can't read / save
238
+ .filter(oracleColumn => this.isSupportedColumn(oracleColumn))
239
+ // match the order of the columns in the db
240
+ .sort((c1, c2) => c1.id - c2.id)
241
+ .forEach(oracleColumn => {
242
+ const columnName = oracleColumn.name;
243
+ let fieldSchema = table.schema[columnName];
244
+ if (!fieldSchema) {
245
+ fieldSchema = {
246
+ autocolumn: this.isAutoColumn(oracleColumn),
247
+ name: columnName,
248
+ type: this.internalConvertType(oracleColumn),
249
+ };
250
+ table.schema[columnName] = fieldSchema;
251
+ }
252
+ // iterate each constraint on the column
253
+ Object.values(oracleColumn.constraints).forEach(oracleConstraint => {
254
+ if (oracleConstraint.type === OracleContraintTypes.PRIMARY) {
255
+ table.primary.push(columnName);
256
+ }
257
+ });
258
+ });
259
+ });
260
+ const final = utils_1.finaliseExternalTables(tables, entities);
261
+ this.tables = final.tables;
262
+ this.schemaErrors = final.errors;
263
+ });
264
+ }
265
+ /**
266
+ * Knex default returning behaviour does not work with oracle
267
+ * Manually add the behaviour for the return column
268
+ */
269
+ addReturning(query, bindings, returnColumn) {
270
+ if (bindings instanceof Array) {
271
+ bindings.push({ dir: oracledb_1.default.BIND_OUT });
272
+ query.sql = query.sql + ` returning \"${returnColumn}\" into :${bindings.length}`;
273
+ }
274
+ }
275
+ internalQuery(query, returnColum, operation) {
276
+ return __awaiter(this, void 0, void 0, function* () {
277
+ let connection;
278
+ try {
279
+ connection = yield this.getConnection();
280
+ const options = { autoCommit: true };
281
+ const bindings = query.bindings || [];
282
+ if (returnColum && (operation === datasource_1.Operation.CREATE || operation === datasource_1.Operation.UPDATE)) {
283
+ this.addReturning(query, bindings, returnColum);
284
+ }
285
+ const result = yield connection.execute(query.sql, bindings, options);
286
+ return result;
287
+ }
288
+ finally {
289
+ if (connection) {
290
+ try {
291
+ yield connection.close();
292
+ }
293
+ catch (err) {
294
+ console.error(err);
295
+ }
296
+ }
297
+ }
298
+ });
299
+ }
300
+ create(query) {
301
+ return __awaiter(this, void 0, void 0, function* () {
302
+ const response = yield this.internalQuery(utils_1.getSqlQuery(query));
303
+ return response.rows && response.rows.length
304
+ ? response.rows
305
+ : [{ created: true }];
306
+ });
307
+ }
308
+ read(query) {
309
+ return __awaiter(this, void 0, void 0, function* () {
310
+ const response = yield this.internalQuery(utils_1.getSqlQuery(query));
311
+ return response.rows ? response.rows : [];
312
+ });
313
+ }
314
+ update(query) {
315
+ return __awaiter(this, void 0, void 0, function* () {
316
+ const response = yield this.internalQuery(utils_1.getSqlQuery(query));
317
+ return response.rows && response.rows.length
318
+ ? response.rows
319
+ : [{ updated: true }];
320
+ });
321
+ }
322
+ delete(query) {
323
+ return __awaiter(this, void 0, void 0, function* () {
324
+ const response = yield this.internalQuery(utils_1.getSqlQuery(query));
325
+ return response.rows && response.rows.length
326
+ ? response.rows
327
+ : [{ deleted: true }];
328
+ });
329
+ }
330
+ query(json) {
331
+ return __awaiter(this, void 0, void 0, function* () {
332
+ const primaryKeys = json.meta.table.primary;
333
+ const primaryKey = primaryKeys ? primaryKeys[0] : undefined;
334
+ const queryFn = (query, operation) => this.internalQuery(query, primaryKey, operation);
335
+ const processFn = (response) => response.rows ? response.rows : [];
336
+ const output = yield this.queryWithReturning(json, queryFn, processFn);
337
+ return output;
338
+ });
339
+ }
340
+ }
341
+ module.exports = {
342
+ schema: SCHEMA,
343
+ integration: OracleIntegration,
344
+ };
345
+ })(OracleModule || (OracleModule = {}));
@@ -31,12 +31,17 @@ const SQL_TYPE_MAP = {
31
31
  fixed: FieldTypes.NUMBER,
32
32
  datetime: FieldTypes.DATETIME,
33
33
  tinyint: FieldTypes.BOOLEAN,
34
+ long: FieldTypes.LONGFORM,
35
+ number: FieldTypes.NUMBER,
36
+ binary_float: FieldTypes.NUMBER,
37
+ binary_double: FieldTypes.NUMBER,
34
38
  };
35
39
  var SqlClients;
36
40
  (function (SqlClients) {
37
41
  SqlClients["MS_SQL"] = "mssql";
38
42
  SqlClients["POSTGRES"] = "pg";
39
43
  SqlClients["MY_SQL"] = "mysql";
44
+ SqlClients["ORACLE"] = "oracledb";
40
45
  })(SqlClients = exports.SqlClients || (exports.SqlClients = {}));
41
46
  function isExternalTable(tableId) {
42
47
  return tableId.includes(DocumentTypes.DATASOURCE);
@@ -152,7 +157,7 @@ function copyExistingPropsOver(tableName, table, entities) {
152
157
  }
153
158
  function finaliseExternalTables(tables, entities) {
154
159
  const invalidColumns = Object.values(InvalidColumns);
155
- const finalTables = {};
160
+ let finalTables = {};
156
161
  const errors = {};
157
162
  for (let [name, table] of Object.entries(tables)) {
158
163
  const schemaFields = Object.keys(table.schema);
@@ -168,6 +173,10 @@ function finaliseExternalTables(tables, entities) {
168
173
  // make sure all previous props have been added back
169
174
  finalTables[name] = copyExistingPropsOver(name, table, entities);
170
175
  }
176
+ // sort the tables by name
177
+ finalTables = Object.entries(finalTables)
178
+ .sort(([a], [b]) => a.localeCompare(b))
179
+ .reduce((r, [k, v]) => (Object.assign(Object.assign({}, r), { [k]: v })), {});
171
180
  return { tables: finalTables, errors };
172
181
  }
173
182
  exports.finaliseExternalTables = finaliseExternalTables;