initial implementation of providing command execution results
This commit is contained in:
parent
1aee4786a0
commit
31b5f82ad0
23
lib/query.js
23
lib/query.js
@ -36,7 +36,8 @@ p.submit = function(connection) {
|
||||
}
|
||||
var converters = [];
|
||||
var names = [];
|
||||
var rows = [];
|
||||
|
||||
var result = new Result();
|
||||
var handleRowDescription = function(msg) {
|
||||
for(var i = 0; i < msg.fields.length; i++) {
|
||||
converters[i] = dataTypeParsers[msg.fields[i].dataTypeID] || noParse;
|
||||
@ -44,25 +45,30 @@ p.submit = function(connection) {
|
||||
};
|
||||
};
|
||||
var handleDatarow = function(msg) {
|
||||
var result = {};
|
||||
var row = {};
|
||||
for(var i = 0; i < msg.fields.length; i++) {
|
||||
var rawValue = msg.fields[i];
|
||||
result[names[i]] = rawValue === null ? null : converters[i](rawValue);
|
||||
row[names[i]] = rawValue === null ? null : converters[i](rawValue);
|
||||
}
|
||||
self.emit('row', result);
|
||||
self.emit('row', row);
|
||||
|
||||
//if no reciever, buffer rows
|
||||
//if there is a callback collect rows
|
||||
if(self.callback) {
|
||||
rows.push(result);
|
||||
result.addRow(row);
|
||||
}
|
||||
};
|
||||
|
||||
var onCommandComplete = function(msg) {
|
||||
result.addCommandComplete(msg);
|
||||
};
|
||||
|
||||
var onError = function(err) {
|
||||
//remove all listeners
|
||||
connection.removeListener('rowDescription', handleDatarow);
|
||||
connection.removeListener('dataRow', handleDatarow);
|
||||
connection.removeListener('error', onError);
|
||||
connection.removeListener('readyForQuery', onReadyForQuery);
|
||||
connection.removeListener('commandComplete', onCommandComplete);
|
||||
if(self.callback) {
|
||||
self.callback(err);
|
||||
} else {
|
||||
@ -77,17 +83,18 @@ p.submit = function(connection) {
|
||||
connection.removeListener('dataRow', handleDatarow);
|
||||
connection.removeListener('readyForQuery', onReadyForQuery);
|
||||
connection.removeListener('error', onError);
|
||||
connection.removeListener('commandComplete', onCommandComplete);
|
||||
if(self.callback) {
|
||||
self.callback(null, {rows: rows});
|
||||
rows = [];
|
||||
}
|
||||
self.emit('end');
|
||||
self.emit('end', result);
|
||||
};
|
||||
|
||||
connection.on('rowDescription', handleRowDescription);
|
||||
connection.on('dataRow', handleDatarow);
|
||||
connection.on('readyForQuery', onReadyForQuery);
|
||||
|
||||
connection.on('commandComplete', onCommandComplete);
|
||||
connection.on('error', onError);
|
||||
};
|
||||
|
||||
|
@ -2,11 +2,24 @@
|
||||
//in the 'end' event and also
|
||||
//passed as second argument to provided callback
|
||||
var Result = function() {
|
||||
this.rows = [];
|
||||
};
|
||||
|
||||
var p = Result.prototype;
|
||||
|
||||
//adds a command complete message
|
||||
p.addCommandComplete = function(msg) {
|
||||
|
||||
var splitMsg = msg.text.split(' ');
|
||||
this.commandType = splitMsg.shift();
|
||||
this.rowCount = splitMsg.pop();
|
||||
//with INSERT we have oid in the middle
|
||||
if(splitMsg.length) {
|
||||
this.oid = splitMsg[0];
|
||||
}
|
||||
};
|
||||
|
||||
p.addRow = function(row) {
|
||||
this.rows.push(row);
|
||||
};
|
||||
|
||||
module.exports = Result;
|
||||
|
@ -23,7 +23,7 @@ con.execute = function(arg) {
|
||||
executeArg = arg;
|
||||
process.nextTick(function() {
|
||||
con.emit('rowData',{ fields: [] });
|
||||
con.emit('commandComplete');
|
||||
con.emit('commandComplete', { text: "" });
|
||||
});
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user