protected override unsafe long CalculateIndexEtag(QueryOperationContext queryContext, TransactionOperationContext indexContext, QueryMetadata query, bool isStale) { if (_handleReferences == null && _handleCompareExchangeReferences == null) { return(base.CalculateIndexEtag(queryContext, indexContext, query, isStale)); } var minLength = MinimumSizeForCalculateIndexEtagLength(query); var length = minLength; if (_handleReferences != null) { length += sizeof(long) * 4 * (Collections.Count * _referencedCollections.Count); // last referenced collection etags (document + tombstone) and last processed reference collection etags (document + tombstone) } if (_handleCompareExchangeReferences != null) { length += sizeof(long) * 4 * _compiled.CollectionsWithCompareExchangeReferences.Count; // last referenced collection etags (document + tombstone) and last processed reference collection etags (document + tombstone) } var indexEtagBytes = stackalloc byte[length]; CalculateIndexEtagInternal(indexEtagBytes, isStale, State, queryContext, indexContext); UseAllDocumentsCounterCmpXchgAndTimeSeriesEtags(queryContext, query, length, indexEtagBytes); var writePos = indexEtagBytes + minLength; return(StaticIndexHelper.CalculateIndexEtag(this, length, indexEtagBytes, writePos, queryContext, indexContext)); }
protected override unsafe long CalculateIndexEtag(bool isStale, DocumentsOperationContext documentsContext, TransactionOperationContext indexContext) { if (_referencedCollections.Count == 0) { return(base.CalculateIndexEtag(isStale, documentsContext, indexContext)); } var minLength = MinimumSizeForCalculateIndexEtagLength(); var length = minLength + sizeof(long) * 2 * (Collections.Count * _referencedCollections.Count); // last referenced collection etags and last processed reference collection etags var indexEtagBytes = stackalloc byte[length]; CalculateIndexEtagInternal(indexEtagBytes, isStale, State, documentsContext, indexContext); var writePos = indexEtagBytes + minLength; return(StaticIndexHelper.CalculateIndexEtag(this, length, indexEtagBytes, writePos, documentsContext, indexContext)); }
protected override unsafe long CalculateIndexEtag(DocumentsOperationContext documentsContext, TransactionOperationContext indexContext, QueryMetadata query, bool isStale) { if (_referencedCollections.Count == 0) return base.CalculateIndexEtag(documentsContext, indexContext, query, isStale); var minLength = MinimumSizeForCalculateIndexEtagLength(query); var length = minLength + sizeof(long) * 4 * (Collections.Count * _referencedCollections.Count); // last referenced collection etags (document + tombstone) and last processed reference collection etags (document + tombstone) var indexEtagBytes = stackalloc byte[length]; CalculateIndexEtagInternal(indexEtagBytes, isStale, State, documentsContext, indexContext); UseAllDocumentsCounterAndCmpXchgEtags(documentsContext, query, length, indexEtagBytes); var writePos = indexEtagBytes + minLength; return StaticIndexHelper.CalculateIndexEtag(this, length, indexEtagBytes, writePos, documentsContext, indexContext); }