internal static async Task <DocumentLookupResult> LookupDocumentAsync(ICouchbaseCollection collection, string docId, TimeSpan?keyValueTimeout, bool fullDocument = true) { var specs = new List <LookupInSpec>() { LookupInSpec.Get(TransactionFields.TransactionInterfacePrefixOnly, isXattr: true), LookupInSpec.Get("$document", isXattr: true), LookupInSpec.Get(TransactionFields.StagedData, isXattr: true) }; var opts = new LookupInOptions().Defaults(keyValueTimeout).AccessDeleted(true); int?txnIndex = 0; int docMetaIndex = 1; int?stagedDataIndex = 2; int?fullDocIndex = null; if (fullDocument) { specs.Add(LookupInSpec.GetFull()); fullDocIndex = specs.Count - 1; } ILookupInResult lookupInResult; try { lookupInResult = await collection.LookupInAsync(docId, specs, opts).CAF(); } catch (PathInvalidException) { throw; } var docMeta = lookupInResult.ContentAs <DocumentMetadata>(docMetaIndex); IContentAsWrapper?unstagedContent = fullDocIndex.HasValue ? new LookupInContentAsWrapper(lookupInResult, fullDocIndex.Value) : null; var stagedContent = stagedDataIndex.HasValue && lookupInResult.Exists(stagedDataIndex.Value) ? new LookupInContentAsWrapper(lookupInResult, stagedDataIndex.Value) : null; var result = new DocumentLookupResult(docId, unstagedContent, stagedContent, lookupInResult, docMeta, collection); if (txnIndex.HasValue && lookupInResult.Exists(txnIndex.Value)) { result.TransactionXattrs = lookupInResult.ContentAs <TransactionXattrs>(txnIndex.Value); } return(result); }
public void Add(ICouchbaseCollection collection, string docId, DocumentLookupResult doc) => Docs.Add(collection.GetKey(docId), doc);