in jones-ndb/impl/src/ndb/QueryOperation.cpp [168:208]
bool QueryOperation::pushResultForTable(short level) {
QueryBuffer & current = buffers[level];
QueryBuffer & parent = buffers[current.parent];
if(level == 0) // reset flags for new root result
for(int i = 0 ; i < this->size ; i++)
buffers[i].result_flags = buffers[i].static_flags;
/* Push NULL result, or skip if parent was also NULL */
if(ndbQuery->getQueryOperation(level)->isRowNULL())
{
current.result_flags |= flag_row_is_null;
if(parent.result_flags & flag_row_is_null)
{
DEBUG_PRINT("table %d SKIP -- parent is null", level);
return true; /* skip */
}
return pushResultNull(level);
}
if(isDuplicate(level))
{
DEBUG_PRINT("table %d SKIP DUPLICATE", level);
return true; /* skip */
}
bool ok = pushResultValue(level);
/* Finally compare the entire row against all previous values,
unless it is the very first row.
*/
if(ok && (int) nresults > size) {
if(compareRowToAllPrevious()) {
int r = nresults - 1;
DEBUG_PRINT("table %d PRUNE LAST RESULT", results[r].sector);
results[r].tag |= flag_row_is_duplicate;
free(results[r].data);
}
}
return ok;
}