Test IndexedDB: iterating backwards through an index, skipping duplicates

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;

dbname = "index-prev-no-duplicate.html"
indexedDB.deleteDatabase(dbname)
indexedDB.open(dbname)
objectStore = db.createObjectStore(objectStoreName);
First, add all our data to the object store.
request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
Now create the indexes.
objectStore.createIndex(indexData[i].name, indexData[i].keyPath, indexData[i].options);
objectStore.createIndex(indexData[i].name, indexData[i].keyPath, indexData[i].options);
objectStore.createIndex(indexData[i].name, indexData[i].keyPath, indexData[i].options);
trans = db.transaction(objectStoreName, 'readwrite')
objectStore = trans.objectStore(objectStoreName)
testPrev()
trans = db.transaction(objectStoreName)
objectStore = trans.objectStore(objectStoreName);
keyIndex = 8;
request = objectStore.index('height').openCursor(null, 'prev');
cursor = event.target.result;
PASS cursor.key is 73
PASS cursor.primaryKey is '237-23-7740'
PASS cursor.value.name is 'Sam'
PASS cursor.value.height is 73
PASS cursor.value.weight is 110
cursor.continue();
keyIndex--;
  => 7
cursor = event.target.result;
PASS cursor.key is 73
PASS cursor.primaryKey is '237-23-7734'
PASS cursor.value.name is 'Ron'
PASS cursor.value.height is 73
PASS cursor.value.weight is 180
cursor.continue();
keyIndex--;
  => 6
cursor = event.target.result;
PASS cursor.key is 65
PASS cursor.primaryKey is '237-23-7739'
PASS cursor.value.name is 'Jef'
PASS cursor.value.height is 65
PASS cursor.value.weight is 120
cursor.continue();
keyIndex--;
  => 5
cursor = event.target.result;
PASS cursor.key is 65
PASS cursor.primaryKey is '237-23-7738'
PASS cursor.value.name is 'Leo'
PASS cursor.value.height is 65
PASS cursor.value.weight is 180
cursor.continue();
keyIndex--;
  => 4
cursor = event.target.result;
PASS cursor.key is 65
PASS cursor.primaryKey is '237-23-7737'
PASS cursor.value.name is 'Pat'
PASS cursor.value.height is 65
PASS cursor.value.weight is 100
cursor.continue();
keyIndex--;
  => 3
cursor = event.target.result;
PASS cursor.key is 65
PASS cursor.primaryKey is '237-23-7736'
PASS cursor.value.name is 'Joe'
PASS cursor.value.height is 65
PASS cursor.value.weight is 150
cursor.continue();
keyIndex--;
  => 2
cursor = event.target.result;
PASS cursor.key is 60
PASS cursor.primaryKey is '237-23-7732'
PASS cursor.value.name is 'Bob'
PASS cursor.value.height is 60
PASS cursor.value.weight is 120
cursor.continue();
keyIndex--;
  => 1
cursor = event.target.result;
PASS cursor.key is 58
PASS cursor.primaryKey is '237-23-7735'
PASS cursor.value.name is 'Sue'
PASS cursor.value.height is 58
PASS cursor.value.weight is 130
cursor.continue();
keyIndex--;
  => 0
cursor = event.target.result;
PASS cursor.key is 52
PASS cursor.primaryKey is '237-23-7733'
PASS cursor.value.name is 'Ann'
PASS cursor.value.height is 52
PASS cursor.value.weight is 110
cursor.continue();
keyIndex--;
  => -1
cursor = event.target.result;
No cursor: null
PASS keyIndex is -1
testPrevNoDuplicate()
objectStore = db.transaction(objectStoreName).objectStore(objectStoreName);
keyIndex = 8;
request = objectStore.index('height').openCursor(null, 'prevunique');
cursor = event.target.result;
keyIndex -= 1
  => Entering with keyIndex = 7
PASS cursor.key is 73
PASS cursor.primaryKey is '237-23-7734'
PASS cursor.value.name is 'Ron'
PASS cursor.value.height is 73
PASS cursor.value.weight is 180
cursor.continue();
keyIndex--;
cursor = event.target.result;
keyIndex -= 3;
  => Entering with keyIndex = 3
PASS cursor.key is 65
PASS cursor.primaryKey is '237-23-7736'
PASS cursor.value.name is 'Joe'
PASS cursor.value.height is 65
PASS cursor.value.weight is 150
cursor.continue();
keyIndex--;
cursor = event.target.result;
  => Entering with keyIndex = 2
PASS cursor.key is 60
PASS cursor.primaryKey is '237-23-7732'
PASS cursor.value.name is 'Bob'
PASS cursor.value.height is 60
PASS cursor.value.weight is 120
cursor.continue();
keyIndex--;
cursor = event.target.result;
  => Entering with keyIndex = 1
PASS cursor.key is 58
PASS cursor.primaryKey is '237-23-7735'
PASS cursor.value.name is 'Sue'
PASS cursor.value.height is 58
PASS cursor.value.weight is 130
cursor.continue();
keyIndex--;
cursor = event.target.result;
  => Entering with keyIndex = 0
PASS cursor.key is 52
PASS cursor.primaryKey is '237-23-7733'
PASS cursor.value.name is 'Ann'
PASS cursor.value.height is 52
PASS cursor.value.weight is 110
cursor.continue();
keyIndex--;
cursor = event.target.result;
  => Entering with keyIndex = -1
No cursor: null
PASS keyIndex is -1
PASS successfullyParsed is true

TEST COMPLETE

