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