Beispiel #1
0
        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);
        }
Beispiel #2
0
 public bool MoveNext()
 {
     if (_limit > 0)
     {
         if (_dataSelector.MoveNext())
         {
             _current = (ISetElement)_dataSelector.Current;
             _limit--;
             return(true);
         }
     }
     _current = null;
     return(false);
 }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        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);
        }