@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.
- package/Dockerfile +7 -1
- package/__mocks__/oracledb.ts +31 -0
- package/builder/assets/{index.8ed163fd.js → index.21479aff.js} +152 -152
- package/builder/assets/{index.4a7c5636.css → index.67ac3a72.css} +1 -1
- package/builder/assets/oracle.66592424.png +0 -0
- package/builder/index.html +2 -2
- package/coverage/clover.xml +84 -84
- package/coverage/coverage-final.json +4 -4
- package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/application.js.html +1 -1
- package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
- package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
- package/coverage/lcov-report/api/controllers/component.js.html +4 -4
- package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/hosting.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +1 -1
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
- package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
- package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query.js.html +1 -1
- package/coverage/lcov-report/api/controllers/role.js.html +1 -1
- package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/index.html +1 -1
- package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
- package/coverage/lcov-report/api/controllers/script.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
- package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +1 -1
- package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
- package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/routes/application.js.html +1 -1
- package/coverage/lcov-report/api/routes/auth.js.html +1 -1
- package/coverage/lcov-report/api/routes/automation.js.html +1 -1
- package/coverage/lcov-report/api/routes/backup.js.html +1 -1
- package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
- package/coverage/lcov-report/api/routes/component.js.html +1 -1
- package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
- package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
- package/coverage/lcov-report/api/routes/dev.js.html +1 -1
- package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +1 -1
- package/coverage/lcov-report/api/routes/index.js.html +1 -1
- package/coverage/lcov-report/api/routes/integration.js.html +1 -1
- package/coverage/lcov-report/api/routes/layout.js.html +1 -1
- package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
- package/coverage/lcov-report/api/routes/permission.js.html +1 -1
- package/coverage/lcov-report/api/routes/query.js.html +1 -1
- package/coverage/lcov-report/api/routes/role.js.html +1 -1
- package/coverage/lcov-report/api/routes/routing.js.html +1 -1
- package/coverage/lcov-report/api/routes/row.js.html +1 -1
- package/coverage/lcov-report/api/routes/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/static.js.html +1 -1
- package/coverage/lcov-report/api/routes/table.js.html +1 -1
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +1 -1
- package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
- package/coverage/lcov-report/automations/bullboard.js.html +1 -1
- package/coverage/lcov-report/automations/index.html +1 -1
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
- package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
- package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
- package/coverage/lcov-report/automations/steps/index.html +1 -1
- package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
- package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
- package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
- package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
- package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
- package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/triggers.js.html +1 -1
- package/coverage/lcov-report/automations/utils.js.html +1 -1
- package/coverage/lcov-report/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +22 -22
- package/coverage/lcov-report/constants/layouts.js.html +1 -1
- package/coverage/lcov-report/constants/screens.js.html +1 -1
- package/coverage/lcov-report/db/client.js.html +1 -1
- package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
- package/coverage/lcov-report/db/index.html +1 -1
- package/coverage/lcov-report/db/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
- package/coverage/lcov-report/db/newid.js.html +3 -3
- package/coverage/lcov-report/db/utils.js.html +57 -57
- package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
- package/coverage/lcov-report/events/index.html +1 -1
- package/coverage/lcov-report/events/index.js.html +1 -1
- package/coverage/lcov-report/events/utils.js.html +1 -1
- package/coverage/lcov-report/index.html +1 -1
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
- package/coverage/lcov-report/middleware/authorized.js.html +1 -1
- package/coverage/lcov-report/middleware/builder.js.html +1 -1
- package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
- package/coverage/lcov-report/middleware/index.html +1 -1
- package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
- package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
- package/coverage/lcov-report/middleware/utils.js.html +1 -1
- package/coverage/lcov-report/threads/automation.js.html +1 -1
- package/coverage/lcov-report/threads/index.html +1 -1
- package/coverage/lcov-report/threads/index.js.html +1 -1
- package/coverage/lcov-report/threads/query.js.html +1 -1
- package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
- package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
- package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
- package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
- package/coverage/lcov-report/utilities/global.js.html +1 -1
- package/coverage/lcov-report/utilities/index.html +1 -1
- package/coverage/lcov-report/utilities/index.js.html +1 -1
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
- package/coverage/lcov-report/utilities/queue/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
- package/coverage/lcov-report/utilities/security.js.html +1 -1
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +1 -1
- package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
- package/coverage/lcov.info +83 -83
- package/dist/definitions/datasource.js +1 -0
- package/dist/integrations/base/sql.js +4 -0
- package/dist/integrations/index.js +6 -0
- package/dist/integrations/oracle.js +345 -0
- package/dist/integrations/utils.js +10 -1
- package/dist/package.json +8 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -5
- package/scripts/integrations/oracle/docker-compose.yml +19 -0
- package/scripts/integrations/oracle/instantclient/linux/x86-64/basiclite-21.4.zip +0 -0
- package/scripts/integrations/oracle/instantclient/linux/x86-64/install.sh +23 -0
- package/scripts/integrations/oracle/oracle.md +90 -0
- package/scripts/integrations/postgres/docker-compose.yml +3 -3
- package/src/definitions/datasource.ts +1 -0
- package/src/integrations/base/IntegrationBase.ts +4 -4
- package/src/integrations/base/sql.ts +3 -0
- package/src/integrations/index.ts +7 -0
- package/src/integrations/oracle.ts +445 -0
- package/src/integrations/tests/oracle.spec.js +94 -0
- package/src/integrations/utils.ts +10 -1
package/coverage/lcov.info
CHANGED
|
@@ -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,
|
|
794
|
+
DA:23,47
|
|
795
795
|
DA:24,1
|
|
796
|
-
DA:26,
|
|
797
|
-
DA:27,
|
|
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,
|
|
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,
|
|
5785
|
-
DA:2,
|
|
5786
|
-
DA:3,
|
|
5787
|
-
DA:5,
|
|
5788
|
-
DA:9,
|
|
5789
|
-
DA:22,
|
|
5790
|
-
DA:23,
|
|
5791
|
-
DA:32,
|
|
5792
|
-
DA:48,
|
|
5793
|
-
DA:55,
|
|
5794
|
-
DA:61,
|
|
5795
|
-
DA:67,
|
|
5796
|
-
DA:78,
|
|
5797
|
-
DA:83,
|
|
5798
|
-
DA:145,
|
|
5799
|
-
DA:153,
|
|
5800
|
-
DA:154,
|
|
5801
|
-
DA:161,
|
|
5802
|
-
DA:166,
|
|
5803
|
-
DA:172,
|
|
5804
|
-
DA:178,
|
|
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,
|
|
5933
|
-
DA:3,
|
|
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,
|
|
6005
|
-
DA:12,
|
|
6006
|
-
DA:14,
|
|
6007
|
-
DA:16,
|
|
6008
|
-
DA:22,
|
|
6009
|
-
DA:45,
|
|
6010
|
-
DA:50,
|
|
6011
|
-
DA:54,
|
|
6012
|
-
DA:58,
|
|
6013
|
-
DA:60,
|
|
6014
|
-
DA:68,
|
|
6015
|
-
DA:69,
|
|
6016
|
-
DA:70,
|
|
6017
|
-
DA:71,
|
|
6018
|
-
DA:72,
|
|
6019
|
-
DA:73,
|
|
6020
|
-
DA:74,
|
|
6021
|
-
DA:75,
|
|
6022
|
-
DA:76,
|
|
6023
|
-
DA:77,
|
|
6024
|
-
DA:78,
|
|
6025
|
-
DA:79,
|
|
6026
|
-
DA:80,
|
|
6027
|
-
DA:81,
|
|
6028
|
-
DA:83,
|
|
6029
|
-
DA:84,
|
|
6030
|
-
DA:86,
|
|
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,
|
|
6036
|
-
DA:118,
|
|
6035
|
+
DA:113,47
|
|
6036
|
+
DA:118,47
|
|
6037
6037
|
DA:119,3
|
|
6038
|
-
DA:126,
|
|
6038
|
+
DA:126,47
|
|
6039
6039
|
DA:127,99
|
|
6040
|
-
DA:138,
|
|
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,
|
|
6045
|
+
DA:154,47
|
|
6046
6046
|
DA:155,200
|
|
6047
6047
|
DA:156,200
|
|
6048
|
-
DA:162,
|
|
6048
|
+
DA:162,47
|
|
6049
6049
|
DA:163,3
|
|
6050
|
-
DA:171,
|
|
6050
|
+
DA:171,47
|
|
6051
6051
|
DA:172,132
|
|
6052
|
-
DA:178,
|
|
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,
|
|
6057
|
+
DA:189,47
|
|
6058
6058
|
DA:190,203
|
|
6059
|
-
DA:197,
|
|
6059
|
+
DA:197,47
|
|
6060
6060
|
DA:198,20
|
|
6061
|
-
DA:212,
|
|
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,
|
|
6066
|
+
DA:229,47
|
|
6067
6067
|
DA:230,0
|
|
6068
|
-
DA:237,
|
|
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,
|
|
6073
|
+
DA:249,47
|
|
6074
6074
|
DA:250,178
|
|
6075
6075
|
DA:251,178
|
|
6076
6076
|
DA:252,178
|
|
6077
|
-
DA:259,
|
|
6077
|
+
DA:259,47
|
|
6078
6078
|
DA:260,5
|
|
6079
|
-
DA:266,
|
|
6079
|
+
DA:266,47
|
|
6080
6080
|
DA:267,188
|
|
6081
|
-
DA:274,
|
|
6081
|
+
DA:274,47
|
|
6082
6082
|
DA:275,197
|
|
6083
|
-
DA:281,
|
|
6083
|
+
DA:281,47
|
|
6084
6084
|
DA:282,190
|
|
6085
|
-
DA:289,
|
|
6085
|
+
DA:289,47
|
|
6086
6086
|
DA:290,10
|
|
6087
|
-
DA:296,
|
|
6087
|
+
DA:296,47
|
|
6088
6088
|
DA:297,2
|
|
6089
|
-
DA:304,
|
|
6089
|
+
DA:304,47
|
|
6090
6090
|
DA:305,23
|
|
6091
|
-
DA:313,
|
|
6091
|
+
DA:313,47
|
|
6092
6092
|
DA:314,3
|
|
6093
|
-
DA:321,
|
|
6093
|
+
DA:321,47
|
|
6094
6094
|
DA:322,18
|
|
6095
|
-
DA:330,
|
|
6095
|
+
DA:330,47
|
|
6096
6096
|
DA:331,3
|
|
6097
6097
|
DA:332,2
|
|
6098
6098
|
DA:335,1
|
|
6099
|
-
DA:342,
|
|
6099
|
+
DA:342,47
|
|
6100
6100
|
DA:343,10
|
|
6101
|
-
DA:346,
|
|
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,
|
|
6106
|
+
DA:354,47
|
|
6107
6107
|
DA:355,1
|
|
6108
|
-
DA:358,
|
|
6108
|
+
DA:358,47
|
|
6109
6109
|
DA:359,0
|
|
6110
|
-
DA:365,
|
|
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
|
-
|
|
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;
|