UNPKG

enhancer-data-bridge

Version:

A bridge between Enhancer Clould and user business datasource

142 lines (136 loc) 4.42 kB
var oracle = require('oracledb'); var logger = require('log4js').getLogger('io'); var dbTypeMap = { '101': 'BINARY_DOUBLE', '100': 'BINARY_FLOAT', '113': 'BLOB', '96': 'CHAR', '112': 'CLOB', '12': 'DATE', '2': 'NUMBER', // or FlOAT '104': 'ROWID', '187': 'TIMESTAMP', '232': 'TIMESTAMP', '188': 'TIMESTAMP', '1': 'VARCHAR', 'VARCHAR2': 'VARCHAR' }; var varTypeMap = { '101': 'number', '100': 'number', '113': 'string', '96': 'string', '112': 'string', '12': 'string', '2': 'number', // or FlOAT '104': 'string', '187': 'string', '232': 'string', '188': 'string', '1': 'string', 'VARCHAR2': 'string', 'NUMBER': 'number', 'FLOAT': 'number', 'DATE': 'string', 'TIMESTAMP': 'string' }; module.exports = { testConnection: function(dbConfig, cb) { dbConfig.connectString = dbConfig.host + '/' + dbConfig.database; oracle.getConnection(dbConfig, function(err, conn) { if (err) { return cb(null, err.message); } conn.execute('SELECT 1 FROM dual', function(err, result) { err ? cb(null, err.message) : cb(null, true); conn.close(); }); }); }, testSql: function(dbConfig, sql, params, cb) { dbConfig.connectString = dbConfig.host + '/' + dbConfig.database; // filter result sql = 'SELECT * FROM (' + sql + ') A WHERE 1 = 0'; sql = sql.replace(/\?/g, ':var '); params = params.map(function(val) { if (val === 0) { return null; } return val; }); logger.debug('TEST SQL:\n', sql); logger.debug('PARAMS:\n', params); oracle.getConnection(dbConfig, function(err, conn) { if (err) { return cb(err); } conn.execute(sql, params, { outFormat: oracle.OBJECT, extendedMetaData: true }, function(err, result) { if (err) { cb(null, { success: false, message: err.message }); return conn.close(); } cb(null, { success: true, metaData: result.metaData.map(function(f) { f.varType = varTypeMap[f.dbType] || varTypeMap[f.dbTypeName] || 'string'; f.dbType = dbTypeMap[f.dbType] || f.dbTypeName; return f; }) }); conn.close(); }); }); }, getTableNames: function(dbConfig, cb) { dbConfig.connectString = dbConfig.host + '/' + dbConfig.database; var conn = oracle.getConnection(dbConfig, function(err, conn) { if (err) { return cb(err); } var sql = 'SELECT TABLE_NAME FROM USER_TABLES'; conn.execute(sql, [], { outFormat: oracle.OBJECT, extendedMetaData: false }, function(err, result) { if (err) { cb(err); return conn.close(); } cb(null, result.rows.map(function(f) { return f.TABLE_NAME; })); conn.close(); }); }); }, getTableColumns: function(dbConfig, tabName, cb) { dbConfig.connectString = dbConfig.host + '/' + dbConfig.database; var conn = oracle.getConnection(dbConfig, function(err, conn) { if (err) { return cb(err); } var sql = 'SELECT COLUMN_NAME, DATA_TYPE FROM USER_TAB_COLUMNS WHERE TABLE_NAME = :tabName'; conn.execute(sql, [tabName.toUpperCase()], { outFormat: oracle.OBJECT, extendedMetaData: false }, function(err, result) { if (err) { cb(err); return conn.close(); } cb(null, result.rows.map(function(f) { f.name = f.COLUMN_NAME; f.dbType = f.DATA_TYPE; return f; })); conn.close(); }); }); } }