|
|
|
@ -10,6 +10,7 @@ var Result = function(rowMode) {
|
|
|
|
|
this.rows = [];
|
|
|
|
|
this.fields = [];
|
|
|
|
|
this._parsers = [];
|
|
|
|
|
this.RowCtor = null;
|
|
|
|
|
if(rowMode == "array") {
|
|
|
|
|
this.parseRow = this._parseRowAsArray;
|
|
|
|
|
}
|
|
|
|
@ -56,25 +57,33 @@ Result.prototype._parseRowAsArray = function(rowData) {
|
|
|
|
|
//rowData is an array of text or binary values
|
|
|
|
|
//this turns the row into a JavaScript object
|
|
|
|
|
Result.prototype.parseRow = function(rowData) {
|
|
|
|
|
var row = {};
|
|
|
|
|
for(var i = 0, len = rowData.length; i < len; i++) {
|
|
|
|
|
var rawValue = rowData[i];
|
|
|
|
|
var field = this.fields[i];
|
|
|
|
|
var fieldType = field.dataTypeID;
|
|
|
|
|
var parsedValue = null;
|
|
|
|
|
if(rawValue !== null) {
|
|
|
|
|
parsedValue = this._parsers[i](rawValue);
|
|
|
|
|
}
|
|
|
|
|
var fieldName = field.name;
|
|
|
|
|
row[fieldName] = parsedValue;
|
|
|
|
|
}
|
|
|
|
|
return row;
|
|
|
|
|
return new this.RowCtor(this._parsers, rowData);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Result.prototype.addRow = function(row) {
|
|
|
|
|
this.rows.push(row);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var inlineParsers = function(dataTypeID, index, format) {
|
|
|
|
|
var access = "rowData["+ index + "]";
|
|
|
|
|
var accessNotNull = access + ' == null ? null : ';
|
|
|
|
|
if(format != 'text') {
|
|
|
|
|
return accessNotNull + "parsers["+index+"]("+access+")";
|
|
|
|
|
}
|
|
|
|
|
switch (dataTypeID) {
|
|
|
|
|
case 21: //integers
|
|
|
|
|
case 22:
|
|
|
|
|
case 23:
|
|
|
|
|
return accessNotNull + "parseInt("+access+")";
|
|
|
|
|
case 16: //boolean
|
|
|
|
|
return accessNotNull + access + "=='t'";
|
|
|
|
|
case 25: //string
|
|
|
|
|
return access;
|
|
|
|
|
default:
|
|
|
|
|
return accessNotNull + "parsers["+index+"]("+access+")";
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Result.prototype.addFields = function(fieldDescriptions) {
|
|
|
|
|
//clears field definitions
|
|
|
|
|
//multiple query statements in 1 action can result in multiple sets
|
|
|
|
@ -84,11 +93,16 @@ Result.prototype.addFields = function(fieldDescriptions) {
|
|
|
|
|
this.fields = [];
|
|
|
|
|
this._parsers = [];
|
|
|
|
|
}
|
|
|
|
|
var ctorBody = "";
|
|
|
|
|
var parse = "";
|
|
|
|
|
for(var i = 0; i < fieldDescriptions.length; i++) {
|
|
|
|
|
var desc = fieldDescriptions[i];
|
|
|
|
|
this.fields.push(desc);
|
|
|
|
|
this._parsers.push(types.getTypeParser(desc.dataTypeID, desc.format || 'text'));
|
|
|
|
|
var parser = types.getTypeParser(desc.dataTypeID, desc.format || 'text');
|
|
|
|
|
this._parsers.push(parser);
|
|
|
|
|
ctorBody += "\nthis['" + desc.name + "'] = " + inlineParsers(desc.dataTypeID, i, desc.format) + ';';
|
|
|
|
|
}
|
|
|
|
|
this.RowCtor = Function("parsers", "rowData", ctorBody);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
module.exports = Result;
|
|
|
|
|