-
Notifications
You must be signed in to change notification settings - Fork 130
Example of querying using Promises
Tom Conlon edited this page May 24, 2014
·
1 revision
var
fb = require("node-firebird"), // firebird lib
q = require('q'), // promises lib
db, // this will store the global db object
cfg; // cfg object
cfg =
{
host: '127.0.0.1',
port: 3050,
database: 'C:\\A.FDB',
user: 'SYSDBA',
password: 'masterkey'
};
/*------------------------------ UTILITY -------------------------------*/
function ab2str(buf) {
return String.fromCharCode.apply(null, new Uint16Array(buf));
}
function str2ab(str) {
var buf = new ArrayBuffer(str.length*2); // 2 bytes for each char
var bufView = new Uint16Array(buf);
for (var i=0, strLen=str.length; i<strLen; i++) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}
/*------------------------------ CONNECT/DISCONNECT -------------------------------*/
connectToDB = function (acfg){
var def = q.defer();
fb.attach( acfg,
function(err, db){
err ? def.reject(err) : def.resolve(db);
}
);
return def.promise;
};
disconnectFromDB = function() {
db.detach(
function(){
console.log('database detached');
}
);
};
/*------------------------------ QUERY -------------------------------*/
queryDB = function(sql){
var def = q.defer();
connectToDB(cfg).then(
// success
function(dbconn){
db = dbconn;
db.query(sql,
function(err, rs){
err ? def.reject(err) : def.resolve(rs);
});
},
// fail
function(err) {
console.log(err);
}
);
return def.promise;
};
/*------------------------------------------------
example of querying using promises
------------------------------------------------*/
queryDB( "select id, name from users order by id").then(
// success
function(rs) {
rs.forEach( function(row){
console.log( row.id, ab2str(row.name));
});
disconnectFromDB();
},
// fail
function(err) {
console.log(err);
disconnectFromDB();
}
);