in database-jones/Adapter/common/DBTableHandler.js [782:827]
DBTableHandler.prototype.chooseIndex = function(keys, allowUnique, allowScan) {
var indexHandler, fieldName, mask, predicate, ncol, pkcol0;
udebug.log("chooseIndex for:", keys);
indexHandler = null;
ncol = this.getNumberOfColumns();
/* Create bitmasks over the key columns */
predicate = {
"usedColumnMask" : new BitMask(ncol), // all keys
"equalColumnMask" : new BitMask(ncol) // only non-null keys
};
if((typeof keys === 'number' || typeof keys === 'string')) {
/* A simple key value represents first column of primary key */
pkcol0 = this.dbIndexHandlers[0].indexColumnNumbers[0];
predicate.usedColumnMask.set(pkcol0);
predicate.equalColumnMask.set(pkcol0);
}
else {
for (fieldName in keys) {
if (keys.hasOwnProperty(fieldName) && keys[fieldName] !== undefined ) {
mask = this.getColumnMaskForField(fieldName);
if(mask) {
predicate.usedColumnMask.orWith(mask);
if(keys[fieldName] !== null) {
predicate.equalColumnMask.orWith(mask);
}
}
}
}
}
udebug.log("KeyMasks:", predicate);
/* Look for a unique index */
if(allowUnique) {
indexHandler = this.chooseUniqueIndexForPredicate(predicate);
}
/* Look for an ordered index */
if(allowScan && ! indexHandler) {
indexHandler = this.chooseOrderedIndexForPredicate(predicate);
}
return indexHandler;
};