MCPcopy
hub / github.com/apache/pouchdb / updateDoc

Function updateDoc

lib/index.es.js:4648–4712  ·  view source on GitHub ↗
(revLimit, prev, docInfo, results,
                   i, cb, writeDoc, newEdits)

Source from the content-addressed store, hash-verified

4646}
4647
4648function updateDoc(revLimit, prev, docInfo, results,
4649 i, cb, writeDoc, newEdits) {
4650
4651 if (revExists(prev.rev_tree, docInfo.metadata.rev) && !newEdits) {
4652 results[i] = docInfo;
4653 return cb();
4654 }
4655
4656 // sometimes this is pre-calculated. historically not always
4657 var previousWinningRev = prev.winningRev || winningRev(prev);
4658 var previouslyDeleted = 'deleted' in prev ? prev.deleted :
4659 isDeleted(prev, previousWinningRev);
4660 var deleted = 'deleted' in docInfo.metadata ? docInfo.metadata.deleted :
4661 isDeleted(docInfo.metadata);
4662 var isRoot = /^1-/.test(docInfo.metadata.rev);
4663
4664 if (previouslyDeleted && !deleted && newEdits && isRoot) {
4665 var newDoc = docInfo.data;
4666 newDoc._rev = previousWinningRev;
4667 newDoc._id = docInfo.metadata.id;
4668 docInfo = parseDoc(newDoc, newEdits);
4669 }
4670
4671 var merged = merge(prev.rev_tree, docInfo.metadata.rev_tree[0], revLimit);
4672
4673 var inConflict = newEdits && ((
4674 (previouslyDeleted && deleted && merged.conflicts !== 'new_leaf') ||
4675 (!previouslyDeleted && merged.conflicts !== 'new_leaf') ||
4676 (previouslyDeleted && !deleted && merged.conflicts === 'new_branch')));
4677
4678 if (inConflict) {
4679 var err = createError(REV_CONFLICT);
4680 results[i] = err;
4681 return cb();
4682 }
4683
4684 var newRev = docInfo.metadata.rev;
4685 docInfo.metadata.rev_tree = merged.tree;
4686 docInfo.stemmedRevs = merged.stemmedRevs || [];
4687 /* istanbul ignore else */
4688 if (prev.rev_map) {
4689 docInfo.metadata.rev_map = prev.rev_map; // used only by leveldb
4690 }
4691
4692 // recalculate
4693 var winningRev$$1 = winningRev(docInfo.metadata);
4694 var winningRevIsDeleted = isDeleted(docInfo.metadata, winningRev$$1);
4695
4696 // calculate the total number of documents that were added/removed,
4697 // from the perspective of total_rows/doc_count
4698 var delta = (previouslyDeleted === winningRevIsDeleted) ? 0 :
4699 previouslyDeleted < winningRevIsDeleted ? -1 : 1;
4700
4701 var newRevIsDeleted;
4702 if (newRev === winningRev$$1) {
4703 // if the new rev is the same as the winning rev, we can reuse that value
4704 newRevIsDeleted = winningRevIsDeleted;
4705 } else {

Callers 1

nextDocFunction · 0.70

Calls 7

revExistsFunction · 0.70
winningRevFunction · 0.70
isDeletedFunction · 0.70
parseDocFunction · 0.70
mergeFunction · 0.70
createErrorFunction · 0.70
writeDocFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…