Bug 725418: IndexedDB - GetAll[Keys] with an explicit 0, null, or undefined for the maximum number of records should return all records. r=bent

--HG--
extra : rebase_source : d4ebec7bb33e581bf9e709440a20117e245d1fcd
This commit is contained in:
Kyle Huey 2012-02-09 20:56:48 -08:00
parent 91a3b842e3
commit f20ce02de5
5 changed files with 142 additions and 4 deletions

View File

@ -526,7 +526,7 @@ IDBIndex::GetAll(const jsval& aKey,
NS_ENSURE_SUCCESS(rv, rv);
}
if (aOptionalArgCount < 2) {
if (aOptionalArgCount < 2 || aLimit == 0) {
aLimit = PR_UINT32_MAX;
}
@ -565,7 +565,7 @@ IDBIndex::GetAllKeys(const jsval& aKey,
NS_ENSURE_SUCCESS(rv, rv);
}
if (aOptionalArgCount < 2) {
if (aOptionalArgCount < 2 || aLimit == 0) {
aLimit = PR_UINT32_MAX;
}

View File

@ -1532,7 +1532,7 @@ IDBObjectStore::GetAll(const jsval& aKey,
NS_ENSURE_SUCCESS(rv, rv);
}
if (aOptionalArgCount < 2) {
if (aOptionalArgCount < 2 || aLimit == 0) {
aLimit = PR_UINT32_MAX;
}

View File

@ -82,6 +82,42 @@ function testSteps()
is(event.target.result[i], values[i], "Same value");
}
request = db.transaction("foo").objectStore("foo").getAll(keyRange, 0);
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield;
is(event.target.result instanceof Array, true, "Got an array object");
is(event.target.result.length, values.length, "Correct length");
for (let i in event.target.result) {
is(event.target.result[i], values[i], "Same value");
}
request = db.transaction("foo").objectStore("foo").getAll(keyRange, null);
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield;
is(event.target.result instanceof Array, true, "Got an array object");
is(event.target.result.length, values.length, "Correct length");
for (let i in event.target.result) {
is(event.target.result[i], values[i], "Same value");
}
request = db.transaction("foo").objectStore("foo").getAll(keyRange, undefined);
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield;
is(event.target.result instanceof Array, true, "Got an array object");
is(event.target.result.length, values.length, "Correct length");
for (let i in event.target.result) {
is(event.target.result[i], values[i], "Same value");
}
keyRange = IDBKeyRange.bound(4, 7);
request = db.transaction("foo").objectStore("foo").getAll(keyRange);
@ -139,7 +175,7 @@ function testSteps()
event = yield;
is(event.target.result instanceof Array, true, "Got an array object");
is(event.target.result.length, 0, "Correct length");
is(event.target.result.length, 4, "Correct length");
keyRange = IDBKeyRange.bound(4, 7, true, true);

View File

@ -104,6 +104,48 @@ function testSteps()
"Correct key");
}
request = objectStore.index("height").getAllKeys(65, 0);
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield;
ok(true, "3");
is(event.target.result instanceof Array, true, "Got an array object");
is(event.target.result.length, 2, "Correct length");
for (let i in event.target.result) {
is(event.target.result[i], objectStoreDataHeightSort[parseInt(i) + 3].key,
"Correct key");
}
request = objectStore.index("height").getAllKeys(65, null);
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield;
ok(true, "3");
is(event.target.result instanceof Array, true, "Got an array object");
is(event.target.result.length, 2, "Correct length");
for (let i in event.target.result) {
is(event.target.result[i], objectStoreDataHeightSort[parseInt(i) + 3].key,
"Correct key");
}
request = objectStore.index("height").getAllKeys(65, undefined);
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield;
ok(true, "3");
is(event.target.result instanceof Array, true, "Got an array object");
is(event.target.result.length, 2, "Correct length");
for (let i in event.target.result) {
is(event.target.result[i], objectStoreDataHeightSort[parseInt(i) + 3].key,
"Correct key");
}
request = objectStore.index("height").getAllKeys();
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;

View File

@ -108,6 +108,66 @@ function testSteps()
}
}
request = objectStore.index("height").getAll(65, 0);
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield;
is(event.target.result instanceof Array, true, "Got an array object");
is(event.target.result.length, 2, "Correct length");
for (let i in event.target.result) {
let result = event.target.result[i];
let testObj = objectStoreDataHeightSort[parseInt(i) + 3].value;
is(result.name, testObj.name, "Correct name");
is(result.height, testObj.height, "Correct height");
if (testObj.hasOwnProperty("weight")) {
is(result.weight, testObj.weight, "Correct weight");
}
}
request = objectStore.index("height").getAll(65, null);
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield;
is(event.target.result instanceof Array, true, "Got an array object");
is(event.target.result.length, 2, "Correct length");
for (let i in event.target.result) {
let result = event.target.result[i];
let testObj = objectStoreDataHeightSort[parseInt(i) + 3].value;
is(result.name, testObj.name, "Correct name");
is(result.height, testObj.height, "Correct height");
if (testObj.hasOwnProperty("weight")) {
is(result.weight, testObj.weight, "Correct weight");
}
}
request = objectStore.index("height").getAll(65, undefined);
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield;
is(event.target.result instanceof Array, true, "Got an array object");
is(event.target.result.length, 2, "Correct length");
for (let i in event.target.result) {
let result = event.target.result[i];
let testObj = objectStoreDataHeightSort[parseInt(i) + 3].value;
is(result.name, testObj.name, "Correct name");
is(result.height, testObj.height, "Correct height");
if (testObj.hasOwnProperty("weight")) {
is(result.weight, testObj.weight, "Correct weight");
}
}
request = objectStore.index("height").getAll();
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;