internal override void WrapPartitionedStream <TKey>( PartitionedStream <TInputOutput, TKey> inputStream, IPartitionedStreamRecipient <TInputOutput> recipient, bool preferStriping, QuerySettings settings) { int partitionCount = inputStream.PartitionCount; // If the index is not correct, we need to reindex. PartitionedStream <TInputOutput, int> inputStreamInt; if (_prematureMerge) { ListQueryResults <TInputOutput> listResults = ExecuteAndCollectResults(inputStream, partitionCount, Child.OutputOrdered, preferStriping, settings); inputStreamInt = listResults.GetPartitionedStream(); } else { Contract.Assert(typeof(TKey) == typeof(int)); inputStreamInt = (PartitionedStream <TInputOutput, int>)(object) inputStream; } // Since the index is correct, the type of the index must be int PartitionedStream <TInputOutput, int> outputStream = new PartitionedStream <TInputOutput, int>(partitionCount, Util.GetDefaultComparer <int>(), OrdinalIndexState); for (int i = 0; i < partitionCount; i++) { outputStream[i] = new IndexedWhereQueryOperatorEnumerator(inputStreamInt[i], _predicate, settings.CancellationState.MergedCancellationToken); } recipient.Receive(outputStream); }
internal override void WrapPartitionedStream <TKey>(PartitionedStream <TInputOutput, TKey> inputStream, IPartitionedStreamRecipient <TInputOutput> recipient, bool preferStriping, QuerySettings settings) { PartitionedStream <TInputOutput, int> stream; int partitionCount = inputStream.PartitionCount; if (this.m_prematureMerge) { stream = QueryOperator <TInputOutput> .ExecuteAndCollectResults <TKey>(inputStream, partitionCount, base.Child.OutputOrdered, preferStriping, settings).GetPartitionedStream(); } else { stream = (PartitionedStream <TInputOutput, int>)inputStream; } PartitionedStream <TInputOutput, int> partitionedStream = new PartitionedStream <TInputOutput, int>(partitionCount, Util.GetDefaultComparer <int>(), this.OrdinalIndexState); for (int i = 0; i < partitionCount; i++) { partitionedStream[i] = new IndexedWhereQueryOperatorEnumerator <TInputOutput>(stream[i], this.m_predicate, settings.CancellationState.MergedCancellationToken); } recipient.Receive <int>(partitionedStream); }