UNPKG

enhancer-data-bridge

Version:

A bridge between Enhancer Clould and user business datasource

148 lines (145 loc) 5.01 kB
var dmdb = require('dmdb'); var logger = require('log4js').getLogger('io'); var dbTypeMap = { }; var varTypeMap = { }; module.exports = { testConnection: function(dbConfig, cb) { dmdb.createPool({ connectString: `dm://${dbConfig.user}:${dbConfig.password}@${dbConfig.host}:${dbConfig.port}?injectArray=true`, poolMin: 1, poolMax: 1 }).then(function(pool) { pool.getConnection(function(err, conn) { if (err) { cb(err); return } conn.execute('SELECT 1 FROM DUAL', [], function(err, result) { if (err) { cb(err); return } cb(null, true); conn.close(); pool.close(); }); }); }).catch(function(err) { cb(err); }); }, testSql: function(dbConfig, sql, params, cb) { // limit sql = sql.replace(/\sLIMIT\s+(\d+|\?)\s*(\,\s*(\d+|\?)\s*)?$/i, '').trim(); var isSelect = /^SELECT(\s|\()/i.test(sql); if (isSelect) { sql = sql + ' LIMIT 0, 1'; } params = params.map(function(val) { if (val === 0) { return null; } return val; }); logger.debug('TEST SQL:\n', sql); logger.debug('PARAMS:\n', params); dmdb.createPool({ connectString: `dm://${dbConfig.user}:${dbConfig.password}\@${dbConfig.host}:${dbConfig.port}`, poolMin: 1, poolMax: 1 }).then(function(pool) { pool.getConnection(function(err, conn) { if (err) { cb(err); return } console.log(sql); console.log(params); conn.execute(sql, params, function(err, result) { if (err) { cb(err); return } // for sql procure if (result.implicitResults && result.implicitResults.length) { var last = result.implicitResults.length - 1; result.rows = result.implicitResults[last]; result.metaData = result.metaData[last]; } cb(null, { success: true, metaData: result.metaData.map(function(r) { r.dbType = 'VARCHAR'; r.varType = 'string'; return r; }) }); conn.close(); pool.close(); }); }); }).catch(function(err) { cb(err); }); }, getTableNames: function(dbConfig, cb) { dmdb.createPool({ connectString: `dm://${dbConfig.user}:${dbConfig.password}@${dbConfig.host}:${dbConfig.port}`, poolMin: 1, poolMax: 1 }).then(function(pool) { pool.getConnection(function(err, conn) { if (err) { cb(err); return } conn.execute('SELECT TABLE_NAME FROM USER_TABLES', [], function(err, result) { if (err) { cb(err); return } cb(null, result.rows.map(function(a) { return a[0]; })); conn.close(); pool.close(); }); }); }).catch(function(err) { cb(err); }); }, getTableColumns: function(dbConfig, tabName, cb) { dmdb.createPool({ connectString: `dm://${dbConfig.user}:${dbConfig.password}\@${dbConfig.host}:${dbConfig.port}`, poolMin: 1, poolMax: 1 }).then(function(pool) { pool.getConnection(function(err, conn) { if (err) { cb(err); return } conn.execute('SELECT COLUMN_NAME, DATA_TYPE FROM USER_TAB_COLUMNS WHERE TABLE_NAME = ?', [tabName], function(err, result) { if (err) { cb(err); return } console.log(result); cb(null, result.rows.map(function(a) { return { name: a[0], dbType: a[1] } })); conn.close(); pool.close(); }); }); }).catch(function(err) { cb(err); }); } }