(txn)
| 6047 | // - metadata.seq |
| 6048 | // - stringify the metadata when storing it |
| 6049 | function migrateMetadata(txn) { |
| 6050 | |
| 6051 | function decodeMetadataCompat(storedObject) { |
| 6052 | if (!storedObject.data) { |
| 6053 | // old format, when we didn't store it stringified |
| 6054 | storedObject.deleted = storedObject.deletedOrLocal === '1'; |
| 6055 | return storedObject; |
| 6056 | } |
| 6057 | return decodeMetadata(storedObject); |
| 6058 | } |
| 6059 | |
| 6060 | // ensure that every metadata has a winningRev and seq, |
| 6061 | // which was previously created on-the-fly but better to migrate |
| 6062 | var bySeqStore = txn.objectStore(BY_SEQ_STORE); |
| 6063 | var docStore = txn.objectStore(DOC_STORE); |
| 6064 | var cursor = docStore.openCursor(); |
| 6065 | cursor.onsuccess = function (e) { |
| 6066 | var cursor = e.target.result; |
| 6067 | if (!cursor) { |
| 6068 | return; // done |
| 6069 | } |
| 6070 | var metadata = decodeMetadataCompat(cursor.value); |
| 6071 | |
| 6072 | metadata.winningRev = metadata.winningRev || |
| 6073 | winningRev(metadata); |
| 6074 | |
| 6075 | function fetchMetadataSeq() { |
| 6076 | // metadata.seq was added post-3.2.0, so if it's missing, |
| 6077 | // we need to fetch it manually |
| 6078 | var start = metadata.id + '::'; |
| 6079 | var end = metadata.id + '::\uffff'; |
| 6080 | var req = bySeqStore.index('_doc_id_rev').openCursor( |
| 6081 | IDBKeyRange.bound(start, end)); |
| 6082 | |
| 6083 | var metadataSeq = 0; |
| 6084 | req.onsuccess = function (e) { |
| 6085 | var cursor = e.target.result; |
| 6086 | if (!cursor) { |
| 6087 | metadata.seq = metadataSeq; |
| 6088 | return onGetMetadataSeq(); |
| 6089 | } |
| 6090 | var seq = cursor.primaryKey; |
| 6091 | if (seq > metadataSeq) { |
| 6092 | metadataSeq = seq; |
| 6093 | } |
| 6094 | cursor.continue(); |
| 6095 | }; |
| 6096 | } |
| 6097 | |
| 6098 | function onGetMetadataSeq() { |
| 6099 | var metadataToStore = encodeMetadata(metadata, |
| 6100 | metadata.winningRev, metadata.deleted); |
| 6101 | |
| 6102 | var req = docStore.put(metadataToStore); |
| 6103 | req.onsuccess = function () { |
| 6104 | cursor.continue(); |
| 6105 | }; |
| 6106 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…