DBOperation.prototype.prepareScan = function()

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; 
};