try it out, fail
diff --git a/lib/adapters/idb/idb.js b/lib/adapters/idb/idb.js
index 2d41a53..c0a8487 100644
--- a/lib/adapters/idb/idb.js
+++ b/lib/adapters/idb/idb.js
@@ -628,18 +628,18 @@
api._getLocal = function (id, callback) {
+ if (!api._localDocIds[id.substring(7)]) {
+ return callback(errors.error(errors.MISSING_DOC));
+ }
+
var tx = idb.transaction([LOCAL_STORE], 'readonly');
var req = tx.objectStore(LOCAL_STORE).get(id);
req.onerror = idbError(callback);
req.onsuccess = function (e) {
var doc = e.target.result;
- if (!doc) {
- callback(errors.error(errors.MISSING_DOC));
- } else {
- delete doc['_doc_id_rev']; // for backwards compat
- callback(null, doc);
- }
+ delete doc['_doc_id_rev']; // for backwards compat
+ callback(null, doc);
};
};
@@ -697,6 +697,7 @@
};
req.onsuccess = function (e) {
ret = {ok: true, id: doc._id, rev: doc._rev};
+ api._localDocIds.add(id.substring(7));
if (opts.ctx) { // return immediately
callback(null, ret);
}
@@ -724,6 +725,7 @@
} else {
oStore.delete(id);
ret = {ok: true, id: id, rev: '0-0'};
+ api._localDocIds.delete(id.substring(7));
}
};
};
@@ -780,7 +782,8 @@
cachedDBs.delete(name);
};
- var txn = idb.transaction([META_STORE, DETECT_BLOB_SUPPORT_STORE],
+ var txn = idb.transaction(
+ [META_STORE, DETECT_BLOB_SUPPORT_STORE, LOCAL_STORE],
'readwrite');
var req = txn.objectStore(META_STORE).get(META_STORE);
@@ -793,7 +796,7 @@
function onGetMetadata(meta) {
function checkSetupComplete() {
- if (api._blobSupport === null || !idStored) {
+ if (api._blobSupport === null || !idStored || !api._localDocIds) {
return;
} else {
cachedDBs[name] = {
@@ -801,6 +804,7 @@
instanceId: instanceId,
idStored: idStored,
blobSupport: api._blobSupport,
+ localDocIds: api._localDocIds,
loaded: true
};
callback(null, api);
@@ -878,8 +882,27 @@
});
}
+ function readLocalDocIds() {
+ var cursor = txn.objectStore(LOCAL_STORE).openCursor();
+
+ var localDocIds = new utils.Set();
+
+ cursor.onsuccess = function (e) {
+ var cursor = e.target.result;
+ if (!cursor) { // done
+ api._localDocIds = localDocIds;
+ checkSetupComplete();
+ } else {
+ // remove leading '_local/'
+ localDocIds.add(cursor.primaryKey.substring(7));
+ cursor.continue();
+ }
+ };
+ }
+
storeId();
checkBlobSupport();
+ readLocalDocIds();
}
}
@@ -902,6 +925,7 @@
instanceId = cached.instanceId;
idStored = cached.idStored;
api._blobSupport = cached.blobSupport;
+ api._localDocIds = cached.localDocIds;
process.nextTick(function () {
callback(null, api);
});