enhancer-data-bridge
Version:
A bridge between Enhancer Clould and user business datasource
148 lines (145 loc) • 5.01 kB
JavaScript
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);
});
}
}