Skip to content

Commit d023535

Browse files
Fixed bug in persistenceStoreManager for deleteStore()
1 parent 8ae6d15 commit d023535

File tree

4 files changed

+144
-84
lines changed

4 files changed

+144
-84
lines changed

docs/PersistenceStoreManager.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ <h4 class="name" id="getStoresMetadata"><span class="type-signature"></span>##ge
388388

389389
<dt class="tag-source">Source:</dt>
390390
<dd class="tag-source"><ul class="dummy"><li>
391-
<a href="persistenceStoreManager.js.html">persistenceStoreManager.js</a>, <a href="persistenceStoreManager.js.html#line231">line 231</a>
391+
<a href="persistenceStoreManager.js.html">persistenceStoreManager.js</a>, <a href="persistenceStoreManager.js.html#line255">line 255</a>
392392
</li></ul></dd>
393393

394394

docs/persistenceStoreManager.js.html

Lines changed: 69 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -209,51 +209,75 @@ <h1 class="page-title">Source: persistenceStoreManager.js</h1>
209209
logger.log("Offline Persistence Toolkit PersistenceStoreManager: deleteStore() for name: " + name);
210210
var self = this;
211211
var storeName = this._mapStoreName(name);
212-
var allversions = this._stores[storeName];
213-
if (!allversions) {
214-
return Promise.resolve(false);
215-
} else {
216-
var version = options &amp;&amp; options.version;
217-
if (version) {
218-
var store = allversions[version];
219-
if (!store) {
220-
return Promise.resolve(false);
212+
return new Promise(function(resolve, reject) {
213+
var localvars = {};
214+
localvars.options = options;
215+
localvars.self = self;
216+
var allversions = self._stores[storeName];
217+
if (!allversions) {
218+
return self.getStoresMetadata().then(function(storeMetadataMap) {
219+
var openStoresPromiseArray = [];
220+
var storeMetadata = storeMetadataMap.get(storeName);
221+
if (storeMetadata &amp;&amp; storeMetadata.versions) {
222+
storeMetadata.versions.forEach(function(version) {
223+
openStoresPromiseArray.push(self.openStore(storeName, version));
224+
});
225+
}
226+
return Promise.all(openStoresPromiseArray);
227+
}).then(function() {
228+
resolve(localvars);
229+
});
230+
} else {
231+
resolve(localvars);
232+
}
233+
}).then(function(localvars) {
234+
var self = localvars.self;
235+
var options = localvars.options;
236+
var allversions = self._stores[storeName];
237+
if (!allversions) {
238+
return Promise.resolve(false);
239+
} else {
240+
var version = options &amp;&amp; options.version;
241+
if (version) {
242+
var store = allversions[version];
243+
if (!store) {
244+
return Promise.resolve(false);
245+
} else {
246+
logger.log("Offline Persistence Toolkit PersistenceStoreManager: Calling delete on store");
247+
return store.delete().then(function () {
248+
delete allversions[version];
249+
return self._getMetadataStore().then(function(store) {
250+
if (allversions &amp;&amp; Object.keys(allversions).length > 0) {
251+
var encodedStoreName = self._encodeString(storeName);
252+
return store.upsert(encodedStoreName, null, Object.keys(allversions));
253+
} else {
254+
return store.removeByKey(storeName);
255+
}
256+
});
257+
}).then(function() {
258+
return true;
259+
});
260+
}
221261
} else {
222-
logger.log("Offline Persistence Toolkit PersistenceStoreManager: Calling delete on store");
223-
return store.delete().then(function () {
224-
delete allversions[version];
262+
var mapcallback = function (origObject) {
263+
return function (version) {
264+
var value = origObject[version];
265+
return value.delete();
266+
};
267+
};
268+
var promises = Object.keys(allversions).map(mapcallback(allversions), this);
269+
return Promise.all(promises).then(function () {
270+
delete self._stores[storeName];
225271
return self._getMetadataStore().then(function(store) {
226-
if (allversions &amp;&amp; Object.keys(allversions).length > 0) {
227-
var encodedStoreName = self._encodeString(storeName);
228-
return store.upsert(encodedStoreName, null, Object.keys(allversions));
229-
} else {
230-
return store.removeByKey(storeName);
231-
}
272+
var encodedStoreName = self._encodeString(storeName);
273+
return store.removeByKey(encodedStoreName);
274+
}).then(function() {
275+
return true;
232276
});
233-
}).then(function() {
234-
return true;
235277
});
236278
}
237-
} else {
238-
var mapcallback = function (origObject) {
239-
return function (version) {
240-
var value = origObject[version];
241-
return value.delete();
242-
};
243-
};
244-
var promises = Object.keys(allversions).map(mapcallback(allversions), this);
245-
var self = this;
246-
return Promise.all(promises).then(function () {
247-
delete self._stores[storeName];
248-
return self._getMetadataStore().then(function(store) {
249-
var encodedStoreName = self._encodeString(storeName);
250-
return store.removeByKey(encodedStoreName);
251-
}).then(function() {
252-
return true;
253-
});
254-
});
255279
}
256-
}
280+
})
257281
};
258282

259283
/**
@@ -282,6 +306,12 @@ <h1 class="page-title">Source: persistenceStoreManager.js</h1>
282306
}));
283307
});
284308
return Promise.all(allKeysPromiseArray);
309+
}).then(function(storeMetadataArray) {
310+
var storesMetadataMap = new Map();
311+
storeMetadataArray.forEach(function(storeMetadata) {
312+
storesMetadataMap.set(storeMetadata.name, storeMetadata);
313+
});
314+
return storesMetadataMap;
285315
});
286316
});
287317
}

src/persistenceStoreManager.js

Lines changed: 69 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -181,51 +181,75 @@ define(['./impl/logger', './impl/PersistenceStoreMetadata', './pouchDBPersistenc
181181
logger.log("Offline Persistence Toolkit PersistenceStoreManager: deleteStore() for name: " + name);
182182
var self = this;
183183
var storeName = this._mapStoreName(name);
184-
var allversions = this._stores[storeName];
185-
if (!allversions) {
186-
return Promise.resolve(false);
187-
} else {
188-
var version = options && options.version;
189-
if (version) {
190-
var store = allversions[version];
191-
if (!store) {
192-
return Promise.resolve(false);
184+
return new Promise(function(resolve, reject) {
185+
var localvars = {};
186+
localvars.options = options;
187+
localvars.self = self;
188+
var allversions = self._stores[storeName];
189+
if (!allversions) {
190+
return self.getStoresMetadata().then(function(storeMetadataMap) {
191+
var openStoresPromiseArray = [];
192+
var storeMetadata = storeMetadataMap.get(storeName);
193+
if (storeMetadata && storeMetadata.versions) {
194+
storeMetadata.versions.forEach(function(version) {
195+
openStoresPromiseArray.push(self.openStore(storeName, version));
196+
});
197+
}
198+
return Promise.all(openStoresPromiseArray);
199+
}).then(function() {
200+
resolve(localvars);
201+
});
202+
} else {
203+
resolve(localvars);
204+
}
205+
}).then(function(localvars) {
206+
var self = localvars.self;
207+
var options = localvars.options;
208+
var allversions = self._stores[storeName];
209+
if (!allversions) {
210+
return Promise.resolve(false);
211+
} else {
212+
var version = options && options.version;
213+
if (version) {
214+
var store = allversions[version];
215+
if (!store) {
216+
return Promise.resolve(false);
217+
} else {
218+
logger.log("Offline Persistence Toolkit PersistenceStoreManager: Calling delete on store");
219+
return store.delete().then(function () {
220+
delete allversions[version];
221+
return self._getMetadataStore().then(function(store) {
222+
if (allversions && Object.keys(allversions).length > 0) {
223+
var encodedStoreName = self._encodeString(storeName);
224+
return store.upsert(encodedStoreName, null, Object.keys(allversions));
225+
} else {
226+
return store.removeByKey(storeName);
227+
}
228+
});
229+
}).then(function() {
230+
return true;
231+
});
232+
}
193233
} else {
194-
logger.log("Offline Persistence Toolkit PersistenceStoreManager: Calling delete on store");
195-
return store.delete().then(function () {
196-
delete allversions[version];
234+
var mapcallback = function (origObject) {
235+
return function (version) {
236+
var value = origObject[version];
237+
return value.delete();
238+
};
239+
};
240+
var promises = Object.keys(allversions).map(mapcallback(allversions), this);
241+
return Promise.all(promises).then(function () {
242+
delete self._stores[storeName];
197243
return self._getMetadataStore().then(function(store) {
198-
if (allversions && Object.keys(allversions).length > 0) {
199-
var encodedStoreName = self._encodeString(storeName);
200-
return store.upsert(encodedStoreName, null, Object.keys(allversions));
201-
} else {
202-
return store.removeByKey(storeName);
203-
}
244+
var encodedStoreName = self._encodeString(storeName);
245+
return store.removeByKey(encodedStoreName);
246+
}).then(function() {
247+
return true;
204248
});
205-
}).then(function() {
206-
return true;
207249
});
208250
}
209-
} else {
210-
var mapcallback = function (origObject) {
211-
return function (version) {
212-
var value = origObject[version];
213-
return value.delete();
214-
};
215-
};
216-
var promises = Object.keys(allversions).map(mapcallback(allversions), this);
217-
var self = this;
218-
return Promise.all(promises).then(function () {
219-
delete self._stores[storeName];
220-
return self._getMetadataStore().then(function(store) {
221-
var encodedStoreName = self._encodeString(storeName);
222-
return store.removeByKey(encodedStoreName);
223-
}).then(function() {
224-
return true;
225-
});
226-
});
227251
}
228-
}
252+
})
229253
};
230254

231255
/**
@@ -254,6 +278,12 @@ define(['./impl/logger', './impl/PersistenceStoreMetadata', './pouchDBPersistenc
254278
}));
255279
});
256280
return Promise.all(allKeysPromiseArray);
281+
}).then(function(storeMetadataArray) {
282+
var storesMetadataMap = new Map();
283+
storeMetadataArray.forEach(function(storeMetadata) {
284+
storesMetadataMap.set(storeMetadata.name, storeMetadata);
285+
});
286+
return storesMetadataMap;
257287
});
258288
});
259289
}

test/storage/storagetest.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -453,11 +453,11 @@ define(['persist/persistenceStoreManager', 'persist/localPersistenceStoreFactory
453453
}).then(function(){
454454
return persistenceStoreManager.getStoresMetadata();
455455
}).then(function(storesMetadata) {
456-
assert.ok(storesMetadata != null && Object.keys(storesMetadata).length > 0);
457-
Object.keys(storesMetadata).forEach(function(storeName) {
458-
assert.ok(storesMetadata[storeName].name != null);
459-
assert.ok(storesMetadata[storeName].persistenceStoreFactory != null);
460-
assert.ok(storesMetadata[storeName].versions instanceof Array);
456+
assert.ok(storesMetadata != null && storesMetadata.size > 0);
457+
storesMetadata.forEach(function(storeMetadata, storeName) {
458+
assert.ok(storeMetadata.name == storeName);
459+
assert.ok(storeMetadata.hasOwnProperty('persistenceStoreFactory'));
460+
assert.ok(storeMetadata.versions instanceof Array);
461461
});
462462
assert.ok(true);
463463
var executeTestCaseArray = function (testCases) {

0 commit comments

Comments
 (0)