in jones-ndb/impl/ndb/NdbOperation.js [508:554]
DBOperation.prototype.prepareScan = function(dbTransactionContext) {
var indexBounds = null;
var boundsHelpers, dbIndex, skipFilterForTesting;
/* There is one global ScanHelperSpec */
scanSpec.clear();
scanSpec[ScanHelper.table_record] = this.query.dbTableHandler.resultRecord;
if(this.query.queryType == 2) { /* Index Scan */
dbIndex = this.query.dbIndexHandler.dbIndex;
scanSpec[ScanHelper.index_record] = dbIndex.record;
indexBounds = getIndexBounds(this.query, dbIndex, this.params);
udebug.log("index bounds:", indexBounds.length);
if(indexBounds.length) {
boundsHelpers = this.buildBoundHelpers(indexBounds);
scanSpec[ScanHelper.bounds] = [];
if(indexBounds.length > 1) {
scanSpec[ScanHelper.flags] |= constants.Scan.flags.SF_MultiRange;
}
boundsHelpers.forEach(function(helper) {
var b = adapter.impl.IndexBound.create(helper);
scanSpec[ScanHelper.bounds].push(b);
});
}
}
scanSpec[ScanHelper.lock_mode] = constants.LockModes[this.lockMode];
if(this.params.order !== undefined) {
scanSpec[ScanHelper.flags] |= constants.Scan.flags.SF_OrderBy;
if(this.params.order.toLocaleLowerCase() == 'desc') {
scanSpec[ScanHelper.flags] |= constants.Scan.flags.SF_Descending;
}
}
skipFilterForTesting = false;
if(this.query.ndbFilterSpec && ! skipFilterForTesting) {
scanSpec[ScanHelper.filter_code] =
this.query.ndbFilterSpec.getScanFilterCode(this.params);
this.scan.filter = scanSpec[ScanHelper.filter_code];
udebug.log("Using Scan Filter");
}
udebug.log("Flags", scanSpec[ScanHelper.flags]);
this.scanOp = adapter.impl.Scan.create(scanSpec, 33, dbTransactionContext);
return this.scanOp;
};