nodejs-db-informix
Version:
Informix database bindings for Node.JS
219 lines (191 loc) • 5.87 kB
JavaScript
/* informix cli using nodejs-db-informix */
var readline = require('readline'),
rl = readline.createInterface(process.stdin, process.stdout);
/*
* Connection configurations
*/
// var settings = JSON.parse(require('fs').readFileSync('./tests/db_conf.json','utf8'));
var settings = {
"host": ""
, "user": ""
, "password": ""
, "database": "sysmaster"
, "charset": ""
// , "port": ""
// , "compress": ""
// , "initCommand": ""
// , "readTimeout": ""
// , "reconnect": ""
// , "socket": ""
// , "sslVerifyServer": ""
// , "timeout": ""
// , "writeTimeout": ""
};
/*
* Create a new Informix database bindings. Setup event callbacks. Connect to
* the database.
* c - connection
*/
function connect(settings) {
if (!settings || typeof(settings) !== 'object') {
throw new Error("No settings provided");
}
/*
* Create an Informix database nodejs object
*/
var bindings = require("../nodejs-db-informix");
console.log(bindings);
var c = new bindings.Informix(settings);
c.on('error', function(error) {
console.log("Error: ");
console.log(error);
}).on('ready', function(server) {
console.log("Connection ready to ");
console.log(server);
}).connect(function(err) {
if (err) {
throw new Error('Could not connect to DB');
}
console.log('Connected to db with ');
console.log(settings);
console.log("isConnected() == " + c.isConnected());
this
.on('each', function(e, idx, more) {
console.log('each');
console.log(arguments);
})
.on('success', function() {
console.log('success');
console.log(arguments);
});
/*
var rs = this.query("select first 10 * from systables", function(s,r) {
console.log(s);
console.log(r);
}).execute();
*/
/*
var rs = this
.query(
"SELECT FIRST 10 * FROM systables"
, []
, function (status, results) {
console.log('CALLBACK:');
// console.log(arguments);
console.log("status:" + status);
console.log(results);
}
, {
start: function(q) {
console.log('Query:');
console.log(q);
}
, finish: function(f) {
console.log('Finish:');
console.log(f);
}
, async: true
, cast: true
}
)
.execute();
*/
/*
var rs = this
.query(
""
, []
, function (status, results) {
console.log('CALLBACK:');
// console.log(arguments);
console.log("status:" + status);
console.log(results);
}
, {
start: function(q) {
console.log('Query:');
console.log(q);
}
, finish: function(f) {
console.log('Finish:');
console.log(f);
}
, async: true
, cast: true
}
)
.select("*")
.first(10)
.from("systables", false)
.execute();
*/
});
return c;
}
function execQuery(conn,qry) {
if (!conn || conn == undefined || conn == null) {
throw Error("_main: connection is not valid");
}
var rs = conn
.query(
qry
, []
, function (status, results) {
console.log('CALLBACK:');
// console.log(arguments);
console.log("status:" + status);
console.log(results);
}
, {
start: function(q) {
console.log('Query:');
console.log(q);
}
, finish: function(f) {
console.log('Finish:');
console.log(f);
}
, async: true
, cast: true
}
)
.execute();
return rs;
}
function _main () {
var conn = connect(settings);
if (!conn || conn == undefined || conn == null) {
throw Error("_main: connection is not valid");
}
console.log('connection:');
console.log(conn);
rl.setPrompt('inf> ');
rl.prompt();
rl.on('line', function(line) {
var cmd = line.trim();
if (cmd == '' || cmd == undefined || cmd == null) {
rl.prompt();
return;
}
var c_reg = /^\s*connect\s+(\w+)/;
if (c_reg.test(cmd)) {
var m = cmd.match(c_reg);
var db = m[1];
if (db == null || db == undefined || db.trim() == '') {
console.log("Invalid command: " + cmd);
rl.prompt();
return;
}
conn.disconnect();
settings.database = db;
conn = connect(settings);
} else {
execQuery(conn, cmd);
}
rl.prompt();
}).on('close', function() {
console.log('Exit.');
});
}
_main();