public bool MoveNext() { while (_skip > 0) { if (!_dataSelector.MoveNext()) { _current = null; return(false); } _skip--; } if (_dataSelector.MoveNext()) { _current = (ISetElement)_dataSelector.Current; return(true); } _current = null; return(false); }
public bool MoveNext() { if (_limit > 0) { if (_dataSelector.MoveNext()) { _current = (ISetElement)_dataSelector.Current; _limit--; return(true); } } _current = null; return(false); }
/// <summary> /// Returns the DataChunk that will be sent to the client, who requested for it, inside the Response /// </summary> /// <param name="chunkId"></param> /// <param name="numOfRequiredDocuments"></param> /// <returns></returns> internal IDataChunk GetDataChunk(int chunkId, int numOfRequiredDocuments) { if (chunkId != _lastSentChunkId) // If last Chunk was not received properly at client end { if (_lastSentDataChunk == null) { throw new Exception("Invalid ChunkId"); } return(_lastSentDataChunk); } _numOfRequiredDocuments = numOfRequiredDocuments; IDataChunk dataChunk = new DataChunk(); _autoChunkId++; dataChunk.ChunkId = _autoChunkId; for (int i = 0; i < numOfRequiredDocuments; i++) { if (_dataSelector.MoveNext()) { ISetElement element = (ISetElement)_dataSelector.Current; dataChunk.Documents.Add((IJSONDocument)element.Value); } else { dataChunk.IsLastChunk = true; return(dataChunk); } } _lastSentChunkId = dataChunk.ChunkId; _lastSentDataChunk = dataChunk; return(dataChunk); }
public bool MoveNext() { if (!_closed) { if (_combiners.Count < 1) { throw new Exception("DataCombiner is not defined for Group By Operation"); } if (_current == null && _lastUnSentElement == null) // True first time only { if (_dataSelector.MoveNext()) { _lastUnSentElement = (ISetElement)_dataSelector.Current; } else { _closed = true; return(false); } } if (_lastUnSentElement == null) { _closed = true; return(false); } // bool found = false; _current = _lastUnSentElement; _lastUnSentElement = null; foreach (IDataCombiner dataCombiner in _combiners) { dataCombiner.Reset(); _current.Value = dataCombiner.Initialize(_current.Value) as IJSONDocument; } while (_dataSelector.MoveNext()) { _lastUnSentElement = (ISetElement)_dataSelector.Current; if (_comparer.Compare(_current.Value, _lastUnSentElement.Value) == 0) { //JSONDocumentComparer jdocComparer = (JSONDocumentComparer)_comparer; //foreach (string field in jdocComparer.FieldNamesGroupBy) // Can be optimized for better performance. Will do it later if required // _current.Value.Remove(field); foreach (IDataCombiner dataCombiner in _combiners) { JsonDocumentUtil.Update(_current.Value, (IJSONDocument)dataCombiner.Combine(_lastUnSentElement.Value)); // _current.Value.Update((IJSONDocument)dataCombiner.Combine(_lastUnSentElement.Value)); } _lastUnSentElement = null; } else { return(true); } } return(true); } return(false); }