in jones-ndb/impl/ndb/NdbOperation.js [718:801]
function getQueryResults(op, userCallback) {
var i = 0;
var sectors = [];
var ndbProjection = op.query;
while(ndbProjection) {
sectors[i++] = ndbProjection;
ndbProjection = ndbProjection.next;
}
op.scanOp.fetchAllResults(function(err, nresults) {
var wrapper, level, current, parentLevel, resultObject;
current = []; // current values for each sector
current[0] = null;
wrapper = {}; // the wrapper is reused in each call to getResult()
function setValueInRelatedTable(relatedField, resultValue) {
if(relatedField.toMany) {
if(current[parentLevel][relatedField.fieldName] === undefined) {
current[parentLevel][relatedField.fieldName] = [];
}
if(resultValue !== null) {
current[parentLevel][relatedField.fieldName].push(resultValue);
}
} else { // toOne
current[parentLevel][relatedField.fieldName] = resultValue;
}
}
function assemble() {
current[level] = resultObject;
if(level > 0) {
setValueInRelatedTable(sectors[level].relatedField, resultObject);
}
}
function assembleSpecial(tag) {
udebug.log_detail("assembleSpecial table", level, "tag", tag);
if(tag & 2) { /* This row came from a many-to-many join table but
is not itself part of the user's result object. */
current[level] = current[parentLevel];
}
if(tag & 1) { /* Row is null */
current[level] = null;
if(level > 0) {
setValueInRelatedTable(sectors[level].relatedField, null);
}
}
if(tag & 8) {
udebug.log_detail("Filtered - row is duplicate");
}
}
udebug.log("fetchAllResults returns", err, nresults);
if(err) {
op.result.success = false;
op.result.error = new DBOperationError().fromNdbError(err);
} else if (nresults == 0) {
op.result.success = false;
op.result.error = new DBOperationError().fromSqlState("02000");
} else {
for(i = 0 ; i < nresults ; i++) {
op.scanOp.getResult(i, wrapper);
level = wrapper.level;
if(level > 0) { parentLevel = sectors[level].parent.serial; }
if(udebug.is_detail) {
udebug.log("TABLE", level, sectors[level].tableHandler.dbTable.name,
"PARENT TABLE", parentLevel);
}
if(wrapper.tag) {
assembleSpecial(wrapper.tag);
} else {
resultObject = getResultValue(op, sectors[level].tableHandler,
wrapper.data, null);
assemble();
}
}
op.result.success = true;
op.result.value = current[0];
}
udebug.log("Join result:", current[0]);
userCallback(err, op.result.value);
});
}