Exemplo n.º 1
0
        public ISetElement GetNextElement(ISetElement currentElelemt)
        {
            IJSONDocument doc        = _dataChunk.Documents.Skip(1).First();
            ISetElement   setElement = new SetElement(this, _dataChunk.IsLastChunk, doc);

            return(setElement);
        }
Exemplo n.º 2
0
 public bool MoveNext()
 {
     if (_limit > 0)
     {
         if (_dataSelector.MoveNext())
         {
             _current = (ISetElement)_dataSelector.Current;
             _limit--;
             return(true);
         }
     }
     _current = null;
     return(false);
 }
Exemplo n.º 3
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);
        }
Exemplo n.º 4
0
        private ISetElement GetCurrentElement(ISet set, IList <ISet> dataSetToBeRemoved)
        {
            ISetElement currentElement = set.GetTopElement();

            if (currentElement == null)
            {
                if (set.IsFixedSize == false)
                {
                    return(null);
                }
                else
                {
                    set.DisposeReader();
                    dataSetToBeRemoved.Add(set);
                }
            }
            else
            {
                set.DeleteTopElement();
            }
            return(currentElement);
        }
Exemplo n.º 5
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);
        }
Exemplo n.º 6
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);
        }
Exemplo n.º 7
0
        public bool MoveNext()
        {
            if (!_closed && _sets.Count > 0)
            {
                if (_current == null)       // For the first time it will be null
                {
                    foreach (ISet set in _sets)
                    {
                        ISetElement element = set.GetTopElement();
                        set.DeleteTopElement();
                        _topELements.Add(element);
                    }

                    _topELements.Sort(_topElementComparer);
                    _current = _topELements[0];

                    if (_current == null)
                    {
                        _closed = true;
                        return(false);
                    }

                    _topELements.RemoveAt(0);

                    return(true);
                }

                ISetElement newlyExtractedElement = _current.Set.GetTopElement();

                if (newlyExtractedElement != null)
                {
                    _current.Set.DeleteTopElement();
                    int index = 0;
                    foreach (ISetElement element in _topELements)
                    {
                        if (_comparer.Compare(element.Value, newlyExtractedElement.Value) < 0)
                        {
                            index++;
                        }
                        else
                        {
                            break;
                        }
                    }
                    _topELements.Insert(index, newlyExtractedElement);
                    _current = _topELements.First();
                    _topELements.RemoveAt(0);
                    return(true);
                }
                else if (_topELements.Count > 0 || _sets.Count > 0)
                {
                    if (!_current.Set.IsFixedSize)
                    {
                        _current.Set.Load();
                        _topELements.Add(_current.Set.GetTopElement());
                        _current.Set.DeleteTopElement();
                        _topELements.Sort(_topElementComparer); // This cost can be reduced
                    }
                    else
                    {
                        _current.Set.DisposeReader();
                        _sets.Remove(_current.Set);
                        if (_topELements.Count == 0)
                        {
                            _current = null;
                            return(false);
                        }
                    }
                    _current = _topELements.First();
                    _topELements.RemoveAt(0);
                    return(true);
                }
                else
                {
                    _current = null;
                    _closed  = true;
                    return(false);
                }
            }
            return(false);
        }