@things-factory/integration-base 6.1.112 → 6.1.115
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/dist-server/engine/connector/oracle-connector.js +11 -1
- package/dist-server/engine/connector/oracle-connector.js.map +1 -1
- package/dist-server/engine/task/database-procedure.js +65 -0
- package/dist-server/engine/task/database-procedure.js.map +1 -0
- package/dist-server/engine/task/index.js +1 -0
- package/dist-server/engine/task/index.js.map +1 -1
- package/dist-server/engine/task/oracle-procedure.js +90 -0
- package/dist-server/engine/task/oracle-procedure.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/server/engine/connector/oracle-connector.ts +12 -1
- package/server/engine/task/index.ts +1 -0
- package/server/engine/task/oracle-procedure.ts +106 -0
@@ -31,6 +31,15 @@ class OracleConnector {
|
|
31
31
|
outFormat: Client.OBJECT
|
32
32
|
})).rows;
|
33
33
|
},
|
34
|
+
execute: async (procedure, params) => {
|
35
|
+
// TODO: need to check if this is available when procedure string is a common query.
|
36
|
+
procedure = `BEGIN
|
37
|
+
${procedure}
|
38
|
+
END;`;
|
39
|
+
return await client.execute(procedure, params, {
|
40
|
+
outFormat: Client.OBJECT
|
41
|
+
});
|
42
|
+
},
|
34
43
|
close: client.close.bind(client)
|
35
44
|
});
|
36
45
|
connection_manager_1.ConnectionManager.logger.info(`Oracle Database(${connection.name}:${database}) at ${endpoint} connected.`);
|
@@ -67,7 +76,7 @@ class OracleConnector {
|
|
67
76
|
];
|
68
77
|
}
|
69
78
|
get taskPrefixes() {
|
70
|
-
return ['database'];
|
79
|
+
return ['database', 'oracle'];
|
71
80
|
}
|
72
81
|
get help() {
|
73
82
|
return 'integration/connector/oracle-connector';
|
@@ -77,5 +86,6 @@ exports.OracleConnector = OracleConnector;
|
|
77
86
|
connection_manager_1.ConnectionManager.registerConnector('oracle-connector', new OracleConnector());
|
78
87
|
// need reference:
|
79
88
|
// https://download.oracle.com/otn_software/mac/instantclient/193000/instantclient-basiclite-macos.x64-19.3.0.0.0dbru.zip
|
89
|
+
// https://node-oracledb.readthedocs.io/en/latest/index.html
|
80
90
|
// docker pull store/oracle/database-instantclient:12.2.0.1
|
81
91
|
//# sourceMappingURL=oracle-connector.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"oracle-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/oracle-connector.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE5C,8DAAyD;AAGzD,IAAI;IACF,IAAI,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CACjC;AAAC,OAAO,GAAG,EAAE;IACZ,YAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAA;CAC/C;AAED,MAAa,eAAe;IAC1B,KAAK,CAAC,KAAK,CAAC,iBAAiB;QAC3B,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;QAEtD,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAU;QACtB,MAAM,EACJ,QAAQ,EACR,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EACrC,GAAG,UAAU,CAAA;QAEd,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;SAClD;QAED,6FAA6F;QAC7F,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;YACxC,IAAI;YACJ,QAAQ;YACR,aAAa,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,QAAQ,EAAE;SAChD,CAAC,CAAA;QAEF,sCAAiB,CAAC,qBAAqB,CAAC,UAAU,EAAE;YAClD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC7B,OAAO,CACL,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE;oBAClC,SAAS,EAAE,MAAM,CAAC,MAAM;iBACzB,CAAC,CACH,CAAC,IAAI,CAAA;YACR,CAAC;YACD,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;SACjC,CAAC,CAAA;QAEF,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,IAAI,IAAI,QAAQ,QAAQ,QAAQ,aAAa,CAAC,CAAA;IAC5G,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAU;QACzB,IAAI,MAAM,GAAG,sCAAiB,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAA;QAChE,IAAI;YACF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YACpB,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,IAAI,WAAW,CAAC,CAAA;SAC7E;QAAC,OAAO,CAAC,EAAE;YACV,sCAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;SAClC;QAED,sCAAiB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,aAAa;QACf,OAAO;YACL;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;aACd;YACD;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,UAAU;aAClB;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,KAAK;gBAClB,KAAK,EAAE,UAAU;aAClB;SACF,CAAA;IACH,CAAC;IAED,IAAI,YAAY;QACd,OAAO,CAAC,UAAU,CAAC,CAAA;
|
1
|
+
{"version":3,"file":"oracle-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/oracle-connector.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '@things-factory/env'\n\nimport { ConnectionManager } from '../connection-manager'\nimport { Connector } from '../types'\n\ntry {\n var Client = require('oracledb')\n} catch (err) {\n logger.error('oracledb module loading failed')\n}\n\nexport class OracleConnector implements Connector {\n async ready(connectionConfigs) {\n await Promise.all(connectionConfigs.map(this.connect))\n\n ConnectionManager.logger.info('oracle-connector connections are ready')\n }\n\n async connect(connection) {\n const {\n endpoint,\n params: { user, password, database }\n } = connection\n\n if (!Client) {\n throw new Error('oracledb module loading failed')\n }\n\n //when oracle not using default port must add connection string with port like localhsot:port\n const client = await Client.getConnection({\n user,\n password,\n connectString: `${endpoint.trim()}/${database}`\n })\n\n ConnectionManager.addConnectionInstance(connection, {\n query: async (query, params) => {\n return (\n await client.execute(query, params, {\n outFormat: Client.OBJECT\n })\n ).rows\n },\n execute: async (procedure, params) => {\n // TODO: need to check if this is available when procedure string is a common query.\n procedure = `BEGIN\n ${procedure}\n END;`\n\n return await client.execute(procedure, params, {\n outFormat: Client.OBJECT\n })\n },\n close: client.close.bind(client)\n })\n\n ConnectionManager.logger.info(`Oracle Database(${connection.name}:${database}) at ${endpoint} connected.`)\n }\n\n async disconnect(connection) {\n var client = ConnectionManager.getConnectionInstance(connection)\n try {\n await client.close()\n ConnectionManager.logger.info(`Oracle Database(${connection.name}) closed.`)\n } catch (e) {\n ConnectionManager.logger.error(e)\n }\n\n ConnectionManager.removeConnectionInstance(connection)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'string',\n name: 'user',\n label: 'user'\n },\n {\n type: 'password',\n name: 'password',\n label: 'password'\n },\n {\n type: 'string',\n name: 'database',\n placeholder: 'SID',\n label: 'database'\n }\n ]\n }\n\n get taskPrefixes() {\n return ['database', 'oracle']\n }\n\n get help() {\n return 'integration/connector/oracle-connector'\n }\n}\n\nConnectionManager.registerConnector('oracle-connector', new OracleConnector())\n\n// need reference:\n// https://download.oracle.com/otn_software/mac/instantclient/193000/instantclient-basiclite-macos.x64-19.3.0.0.0dbru.zip\n// https://node-oracledb.readthedocs.io/en/latest/index.html\n\n// docker pull store/oracle/database-instantclient:12.2.0.1\n"]}
|
@@ -0,0 +1,65 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const vm2_1 = require("vm2");
|
4
|
+
const utils_1 = require("@things-factory/utils");
|
5
|
+
const connection_manager_1 = require("../connection-manager");
|
6
|
+
const task_registry_1 = require("../task-registry");
|
7
|
+
const oracledb = require('oracledb');
|
8
|
+
const TYPES = {
|
9
|
+
Number: oracledb.NUMBER,
|
10
|
+
String: oracledb.STRING,
|
11
|
+
Date: oracledb.DATE,
|
12
|
+
Buffer: oracledb.BUFFER,
|
13
|
+
Blob: oracledb.BLOB,
|
14
|
+
Clob: oracledb.CLOB,
|
15
|
+
Cursor: oracledb.CURSOR
|
16
|
+
};
|
17
|
+
const DIR = {
|
18
|
+
In: oracledb.BIND_IN,
|
19
|
+
Inout: oracledb.BIND_INOUT,
|
20
|
+
Out: oracledb.BIND_OUT
|
21
|
+
};
|
22
|
+
async function DatabaseExecute(step, context) {
|
23
|
+
var { domain, data, variables } = context;
|
24
|
+
var { connection: connectionName, params } = step;
|
25
|
+
var { procedure, parameters } = params;
|
26
|
+
var dbconnection = connection_manager_1.ConnectionManager.getConnectionInstanceByName(domain, connectionName);
|
27
|
+
const vm = new vm2_1.VM({
|
28
|
+
sandbox: {
|
29
|
+
domain,
|
30
|
+
data,
|
31
|
+
variables
|
32
|
+
}
|
33
|
+
});
|
34
|
+
procedure = vm.run('`' + procedure + '`');
|
35
|
+
console.log('procedure: ', procedure);
|
36
|
+
const procedureParameters = parameters &&
|
37
|
+
parameters.reduce((sum, { name, val, dir, type, maxSize }) => {
|
38
|
+
sum[name] = {
|
39
|
+
dir: DIR[dir],
|
40
|
+
type: TYPES[type],
|
41
|
+
val: (0, utils_1.access)(val),
|
42
|
+
maxSize
|
43
|
+
};
|
44
|
+
return sum;
|
45
|
+
}, {});
|
46
|
+
var procedureResult = await dbconnection.executeProcedure(procedure, procedureParameters);
|
47
|
+
console.log('procedureResult: ', procedureResult);
|
48
|
+
return {
|
49
|
+
data: procedureResult
|
50
|
+
};
|
51
|
+
}
|
52
|
+
DatabaseExecute.parameterSpec = [
|
53
|
+
{
|
54
|
+
type: 'textarea',
|
55
|
+
name: 'procedure',
|
56
|
+
label: 'procedure'
|
57
|
+
},
|
58
|
+
{
|
59
|
+
type: 'procedure-parameters',
|
60
|
+
name: 'parameters',
|
61
|
+
label: 'parameters'
|
62
|
+
}
|
63
|
+
];
|
64
|
+
task_registry_1.TaskRegistry.registerTaskHandler('database-procedure', DatabaseExecute);
|
65
|
+
//# sourceMappingURL=database-procedure.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"database-procedure.js","sourceRoot":"","sources":["../../../server/engine/task/database-procedure.ts"],"names":[],"mappings":";;AAAA,6BAAwB;AACxB,iDAA8C;AAC9C,8DAAyD;AACzD,oDAA+C;AAE/C,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAIpC,MAAM,KAAK,GAAG;IACZ,MAAM,EAAE,QAAQ,CAAC,MAAM;IACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;IACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;IACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;IACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;IACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;IACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;CACxB,CAAA;AAED,MAAM,GAAG,GAAG;IACV,EAAE,EAAE,QAAQ,CAAC,OAAO;IACpB,KAAK,EAAE,QAAQ,CAAC,UAAU;IAC1B,GAAG,EAAE,QAAQ,CAAC,QAAQ;CACvB,CAAA;AAED,KAAK,UAAU,eAAe,CAAC,IAAI,EAAE,OAAO;IAC1C,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IACzC,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAEjD,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAqE,CAAA;IAErG,IAAI,YAAY,GAAG,sCAAiB,CAAC,2BAA2B,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAExF,MAAM,EAAE,GAAG,IAAI,QAAE,CAAC;QAChB,OAAO,EAAE;YACP,MAAM;YACN,IAAI;YACJ,SAAS;SACV;KACF,CAAC,CAAA;IAEF,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC,CAAA;IAEzC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;IAErC,MAAM,mBAAmB,GACvB,UAAU;QACV,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;YAC3D,GAAG,CAAC,IAAI,CAAC,GAAG;gBACV,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;gBACb,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;gBACjB,GAAG,EAAE,IAAA,cAAM,EAAC,GAAG,CAAC;gBAChB,OAAO;aACR,CAAA;YAED,OAAO,GAAG,CAAA;QACZ,CAAC,EAAE,EAAE,CAAC,CAAA;IAER,IAAI,eAAe,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAA;IAEzF,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAA;IAEjD,OAAO;QACL,IAAI,EAAE,eAAe;KACtB,CAAA;AACH,CAAC;AAED,eAAe,CAAC,aAAa,GAAG;IAC9B;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,WAAW;KACnB;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,YAAY;KACpB;CACF,CAAA;AAED,4BAAY,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAA","sourcesContent":["import { VM } from 'vm2'\nimport { access } from '@things-factory/utils'\nimport { ConnectionManager } from '../connection-manager'\nimport { TaskRegistry } from '../task-registry'\n\nconst oracledb = require('oracledb')\n\ntype ProcedureParameterType = { name: string; dir: string; type: string; val: any; maxSize: number }\n\nconst TYPES = {\n Number: oracledb.NUMBER,\n String: oracledb.STRING,\n Date: oracledb.DATE,\n Buffer: oracledb.BUFFER,\n Blob: oracledb.BLOB,\n Clob: oracledb.CLOB,\n Cursor: oracledb.CURSOR\n}\n\nconst DIR = {\n In: oracledb.BIND_IN,\n Inout: oracledb.BIND_INOUT,\n Out: oracledb.BIND_OUT\n}\n\nasync function DatabaseExecute(step, context) {\n var { domain, data, variables } = context\n var { connection: connectionName, params } = step\n\n var { procedure, parameters } = params as { procedure: string; parameters: ProcedureParameterType[] }\n\n var dbconnection = ConnectionManager.getConnectionInstanceByName(domain, connectionName)\n\n const vm = new VM({\n sandbox: {\n domain,\n data,\n variables\n }\n })\n\n procedure = vm.run('`' + procedure + '`')\n\n console.log('procedure: ', procedure)\n\n const procedureParameters =\n parameters &&\n parameters.reduce((sum, { name, val, dir, type, maxSize }) => {\n sum[name] = {\n dir: DIR[dir],\n type: TYPES[type],\n val: access(val), // TODO change by type\n maxSize\n }\n\n return sum\n }, {})\n\n var procedureResult = await dbconnection.executeProcedure(procedure, procedureParameters)\n\n console.log('procedureResult: ', procedureResult)\n\n return {\n data: procedureResult\n }\n}\n\nDatabaseExecute.parameterSpec = [\n {\n type: 'textarea',\n name: 'procedure',\n label: 'procedure'\n },\n {\n type: 'procedure-parameters',\n name: 'parameters',\n label: 'parameters'\n }\n]\n\nTaskRegistry.registerTaskHandler('database-procedure', DatabaseExecute)\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/engine/task/index.ts"],"names":[],"mappings":";;AAAA,uBAAoB;AACpB,0BAAuB;AACvB,mBAAgB;AAChB,iBAAc;AACd,qBAAkB;AAClB,sBAAmB;AACnB,uBAAoB;AACpB,2BAAwB;AACxB,4BAAyB;AACzB,iCAA8B;AAC9B,kCAA+B;AAC/B,0BAAuB;AACvB,2BAAwB;AACxB,8BAA2B;AAC3B,mCAAgC;AAChC,iCAA8B;AAC9B,yBAAsB;AACtB,kBAAe;AACf,iBAAc;AACd,yBAAsB;AACtB,+BAA4B;AAC5B,6BAA0B;AAC1B,mCAAgC;AAChC,wBAAqB;AACrB,8BAA2B;AAC3B,oBAAiB;AACjB,4BAAyB;AACzB,4BAAyB;AACzB,0BAAuB;AACvB,mBAAgB;AAChB,uBAAoB;AACpB,4BAAyB;AACzB,6BAA0B;AAC1B,oBAAiB;AACjB,0BAAuB;AACvB,yBAAsB;AACtB,2BAAwB;AACxB,4BAAyB;AACzB,wBAAqB","sourcesContent":["import './echo-send'\nimport './echo-receive'\nimport './sleep'\nimport './log'\nimport './publish'\nimport './http-get'\nimport './http-post'\nimport './graphql-query'\nimport './graphql-mutate'\nimport './local-graphql-query'\nimport './local-graphql-mutate'\nimport './sub-scenario'\nimport './stop-scenario'\nimport './book-up-scenario'\nimport './pick-pending-scenario'\nimport './reset-pending-queue'\nimport './empty-check'\nimport './goto'\nimport './end'\nimport './switch-goto'\nimport './switch-range-goto'\nimport './switch-scenario'\nimport './switch-range-scenario'\nimport './switch-set'\nimport './switch-range-set'\nimport './script'\nimport './database-query'\nimport './mqtt-subscribe'\nimport './mqtt-publish'\nimport './throw'\nimport './variables'\nimport './floating-point'\nimport './socket-listener'\nimport './random'\nimport './csv-readline'\nimport './data-mapper'\nimport './headless-post'\nimport './headless-scrap'\nimport './set-domain'\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/engine/task/index.ts"],"names":[],"mappings":";;AAAA,uBAAoB;AACpB,0BAAuB;AACvB,mBAAgB;AAChB,iBAAc;AACd,qBAAkB;AAClB,sBAAmB;AACnB,uBAAoB;AACpB,2BAAwB;AACxB,4BAAyB;AACzB,iCAA8B;AAC9B,kCAA+B;AAC/B,0BAAuB;AACvB,2BAAwB;AACxB,8BAA2B;AAC3B,mCAAgC;AAChC,iCAA8B;AAC9B,yBAAsB;AACtB,kBAAe;AACf,iBAAc;AACd,yBAAsB;AACtB,+BAA4B;AAC5B,6BAA0B;AAC1B,mCAAgC;AAChC,wBAAqB;AACrB,8BAA2B;AAC3B,oBAAiB;AACjB,4BAAyB;AACzB,4BAAyB;AACzB,0BAAuB;AACvB,mBAAgB;AAChB,uBAAoB;AACpB,4BAAyB;AACzB,6BAA0B;AAC1B,oBAAiB;AACjB,0BAAuB;AACvB,yBAAsB;AACtB,2BAAwB;AACxB,4BAAyB;AACzB,wBAAqB;AACrB,8BAA2B","sourcesContent":["import './echo-send'\nimport './echo-receive'\nimport './sleep'\nimport './log'\nimport './publish'\nimport './http-get'\nimport './http-post'\nimport './graphql-query'\nimport './graphql-mutate'\nimport './local-graphql-query'\nimport './local-graphql-mutate'\nimport './sub-scenario'\nimport './stop-scenario'\nimport './book-up-scenario'\nimport './pick-pending-scenario'\nimport './reset-pending-queue'\nimport './empty-check'\nimport './goto'\nimport './end'\nimport './switch-goto'\nimport './switch-range-goto'\nimport './switch-scenario'\nimport './switch-range-scenario'\nimport './switch-set'\nimport './switch-range-set'\nimport './script'\nimport './database-query'\nimport './mqtt-subscribe'\nimport './mqtt-publish'\nimport './throw'\nimport './variables'\nimport './floating-point'\nimport './socket-listener'\nimport './random'\nimport './csv-readline'\nimport './data-mapper'\nimport './headless-post'\nimport './headless-scrap'\nimport './set-domain'\nimport './oracle-procedure'\n"]}
|
@@ -0,0 +1,90 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const vm2_1 = require("vm2");
|
4
|
+
const env_1 = require("@things-factory/env");
|
5
|
+
const utils_1 = require("@things-factory/utils");
|
6
|
+
const connection_manager_1 = require("../connection-manager");
|
7
|
+
const task_registry_1 = require("../task-registry");
|
8
|
+
try {
|
9
|
+
var oracledb = require('oracledb');
|
10
|
+
}
|
11
|
+
catch (err) {
|
12
|
+
env_1.logger.error('oracledb module loading failed');
|
13
|
+
}
|
14
|
+
const TYPES = {
|
15
|
+
Number: oracledb.NUMBER,
|
16
|
+
String: oracledb.STRING,
|
17
|
+
Date: oracledb.DATE,
|
18
|
+
Buffer: oracledb.BUFFER,
|
19
|
+
Blob: oracledb.BLOB,
|
20
|
+
Clob: oracledb.CLOB,
|
21
|
+
Cursor: oracledb.CURSOR
|
22
|
+
};
|
23
|
+
const DIR = {
|
24
|
+
In: oracledb.BIND_IN,
|
25
|
+
Inout: oracledb.BIND_INOUT,
|
26
|
+
Out: oracledb.BIND_OUT
|
27
|
+
};
|
28
|
+
async function OracleProcedure(step, context) {
|
29
|
+
var { domain, data, variables } = context;
|
30
|
+
var { connection: connectionName, params } = step;
|
31
|
+
var { procedure, parameters } = params;
|
32
|
+
var dbconnection = connection_manager_1.ConnectionManager.getConnectionInstanceByName(domain, connectionName);
|
33
|
+
const vm = new vm2_1.VM({
|
34
|
+
sandbox: {
|
35
|
+
domain,
|
36
|
+
data,
|
37
|
+
variables
|
38
|
+
}
|
39
|
+
});
|
40
|
+
procedure = vm.run('`' + procedure + '`');
|
41
|
+
const procedureParameters = parameters &&
|
42
|
+
parameters.reduce((sum, { name, val, dir, type, maxSize }) => {
|
43
|
+
sum[name] = {
|
44
|
+
dir: DIR[dir],
|
45
|
+
type: TYPES[type],
|
46
|
+
val: (0, utils_1.access)(val, data),
|
47
|
+
maxSize
|
48
|
+
};
|
49
|
+
// remove empty keys
|
50
|
+
Object.keys(sum[name]).forEach(key => {
|
51
|
+
if (!sum[name][key]) {
|
52
|
+
delete sum[name][key];
|
53
|
+
}
|
54
|
+
});
|
55
|
+
return sum;
|
56
|
+
}, {});
|
57
|
+
const result = await dbconnection.execute(procedure, procedureParameters);
|
58
|
+
var taskResult = {};
|
59
|
+
let paramKeys = Object.keys(procedureParameters);
|
60
|
+
for (const paramKey of paramKeys) {
|
61
|
+
if (procedureParameters[paramKey].dir === oracledb.BIND_OUT) {
|
62
|
+
if (procedureParameters[paramKey].type === oracledb.CURSOR) {
|
63
|
+
const resultSetTemp = result.outBinds[paramKey];
|
64
|
+
taskResult[paramKey] = await resultSetTemp.getRows();
|
65
|
+
await resultSetTemp.close();
|
66
|
+
}
|
67
|
+
else {
|
68
|
+
taskResult[paramKey] = result.outBinds[paramKey];
|
69
|
+
}
|
70
|
+
}
|
71
|
+
}
|
72
|
+
console.log('taskResult: ', taskResult);
|
73
|
+
return {
|
74
|
+
data: taskResult
|
75
|
+
};
|
76
|
+
}
|
77
|
+
OracleProcedure.parameterSpec = [
|
78
|
+
{
|
79
|
+
type: 'textarea',
|
80
|
+
name: 'procedure',
|
81
|
+
label: 'procedure'
|
82
|
+
},
|
83
|
+
{
|
84
|
+
type: 'procedure-parameters',
|
85
|
+
name: 'parameters',
|
86
|
+
label: 'params'
|
87
|
+
}
|
88
|
+
];
|
89
|
+
task_registry_1.TaskRegistry.registerTaskHandler('oracle-procedure', OracleProcedure);
|
90
|
+
//# sourceMappingURL=oracle-procedure.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"oracle-procedure.js","sourceRoot":"","sources":["../../../server/engine/task/oracle-procedure.ts"],"names":[],"mappings":";;AAAA,6BAAwB;AACxB,6CAA4C;AAC5C,iDAA8C;AAC9C,8DAAyD;AACzD,oDAA+C;AAE/C,IAAI;IACF,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CACnC;AAAC,OAAO,GAAG,EAAE;IACZ,YAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAA;CAC/C;AAID,MAAM,KAAK,GAAG;IACZ,MAAM,EAAE,QAAQ,CAAC,MAAM;IACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;IACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;IACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;IACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;IACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;IACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;CACxB,CAAA;AAED,MAAM,GAAG,GAAG;IACV,EAAE,EAAE,QAAQ,CAAC,OAAO;IACpB,KAAK,EAAE,QAAQ,CAAC,UAAU;IAC1B,GAAG,EAAE,QAAQ,CAAC,QAAQ;CACvB,CAAA;AAED,KAAK,UAAU,eAAe,CAAC,IAAI,EAAE,OAAO;IAC1C,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IACzC,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAEjD,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAqE,CAAA;IAErG,IAAI,YAAY,GAAG,sCAAiB,CAAC,2BAA2B,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAExF,MAAM,EAAE,GAAG,IAAI,QAAE,CAAC;QAChB,OAAO,EAAE;YACP,MAAM;YACN,IAAI;YACJ,SAAS;SACV;KACF,CAAC,CAAA;IAEF,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC,CAAA;IAEzC,MAAM,mBAAmB,GACvB,UAAU;QACV,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;YAC3D,GAAG,CAAC,IAAI,CAAC,GAAG;gBACV,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;gBACb,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;gBACjB,GAAG,EAAE,IAAA,cAAM,EAAC,GAAG,EAAE,IAAI,CAAC;gBACtB,OAAO;aACR,CAAA;YAED,oBAAoB;YACpB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACnC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;oBACnB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;iBACtB;YACH,CAAC,CAAC,CAAA;YAEF,OAAO,GAAG,CAAA;QACZ,CAAC,EAAE,EAAE,CAAC,CAAA;IAER,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAA;IAEzE,IAAI,UAAU,GAAG,EAAE,CAAA;IACnB,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAEhD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAChC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,QAAQ,EAAE;YAC3D,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,EAAE;gBAC1D,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;gBAC/C,UAAU,CAAC,QAAQ,CAAC,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAA;gBACpD,MAAM,aAAa,CAAC,KAAK,EAAE,CAAA;aAC5B;iBAAM;gBACL,UAAU,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;aACjD;SACF;KACF;IAED,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;IAEvC,OAAO;QACL,IAAI,EAAE,UAAU;KACjB,CAAA;AACH,CAAC;AAED,eAAe,CAAC,aAAa,GAAG;IAC9B;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,WAAW;KACnB;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,QAAQ;KAChB;CACF,CAAA;AAED,4BAAY,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAA","sourcesContent":["import { VM } from 'vm2'\nimport { logger } from '@things-factory/env'\nimport { access } from '@things-factory/utils'\nimport { ConnectionManager } from '../connection-manager'\nimport { TaskRegistry } from '../task-registry'\n\ntry {\n var oracledb = require('oracledb')\n} catch (err) {\n logger.error('oracledb module loading failed')\n}\n\ntype ProcedureParameterType = { name: string; dir: string; type: string; val: any; maxSize: number }\n\nconst TYPES = {\n Number: oracledb.NUMBER,\n String: oracledb.STRING,\n Date: oracledb.DATE,\n Buffer: oracledb.BUFFER,\n Blob: oracledb.BLOB,\n Clob: oracledb.CLOB,\n Cursor: oracledb.CURSOR\n}\n\nconst DIR = {\n In: oracledb.BIND_IN,\n Inout: oracledb.BIND_INOUT,\n Out: oracledb.BIND_OUT\n}\n\nasync function OracleProcedure(step, context) {\n var { domain, data, variables } = context\n var { connection: connectionName, params } = step\n\n var { procedure, parameters } = params as { procedure: string; parameters: ProcedureParameterType[] }\n\n var dbconnection = ConnectionManager.getConnectionInstanceByName(domain, connectionName)\n\n const vm = new VM({\n sandbox: {\n domain,\n data,\n variables\n }\n })\n\n procedure = vm.run('`' + procedure + '`')\n\n const procedureParameters =\n parameters &&\n parameters.reduce((sum, { name, val, dir, type, maxSize }) => {\n sum[name] = {\n dir: DIR[dir],\n type: TYPES[type],\n val: access(val, data),\n maxSize\n }\n\n // remove empty keys\n Object.keys(sum[name]).forEach(key => {\n if (!sum[name][key]) {\n delete sum[name][key]\n }\n })\n\n return sum\n }, {})\n\n const result = await dbconnection.execute(procedure, procedureParameters)\n\n var taskResult = {}\n let paramKeys = Object.keys(procedureParameters)\n\n for (const paramKey of paramKeys) {\n if (procedureParameters[paramKey].dir === oracledb.BIND_OUT) {\n if (procedureParameters[paramKey].type === oracledb.CURSOR) {\n const resultSetTemp = result.outBinds[paramKey]\n taskResult[paramKey] = await resultSetTemp.getRows()\n await resultSetTemp.close()\n } else {\n taskResult[paramKey] = result.outBinds[paramKey]\n }\n }\n }\n\n console.log('taskResult: ', taskResult)\n\n return {\n data: taskResult\n }\n}\n\nOracleProcedure.parameterSpec = [\n {\n type: 'textarea',\n name: 'procedure',\n label: 'procedure'\n },\n {\n type: 'procedure-parameters',\n name: 'parameters',\n label: 'params'\n }\n]\n\nTaskRegistry.registerTaskHandler('oracle-procedure', OracleProcedure)\n"]}
|