public override bool MoveNext() { if (_partitionRecordSets.Count == 0) { return(false); } IRecordSetEnumerator rse = _partitionRecordSets[0]; _current = _partitionRecordSets[0].Current; foreach (IRecordSetEnumerator rs in _partitionRecordSets) { if (_current.CompareOrder(rs.Current, _orderByArguments) > 0) { _current = rs.Current; rse = rs; } } if (!rse.MoveNext()) { _partitionRecordSets.Remove(rse); RemoveFromValidReaders(rse); } if (_current == null) { return(false); } return(true); }
public PartitionRSEnumerator(IRecordSetEnumerator recordSetEnumerator, string readerId, string nodeIP, int nextIdex, IRecordSetLoader cacheImpl) { _recordSetEnumerator = recordSetEnumerator; _readerId = readerId; _nodeIP = nodeIP; _nextIndex = nextIdex; _cacheImpl = cacheImpl; }
internal CacheDataReader(IRecordSetEnumerator recordSetEnumerator) { _recordSetEnumerator = recordSetEnumerator; _columns = _recordSetEnumerator != null ? _recordSetEnumerator.ColumnCollection : null; if (_columns != null) { _hiddenColumnCount = _columns.HiddenColumnCount; } }
public PartitionRSEnumerator(IRecordSetEnumerator recordSetEnumerator, string readerId, string nodeIP, int nextIdex, IRecordSetLoader cacheImpl) { _recordSetEnumerator = recordSetEnumerator; _readerId = readerId; _nextIndex = nextIdex; _cacheImpl = cacheImpl; uniqueId = Guid.NewGuid().ToString(); ParseAddress(nodeIP); }
private void SetCurrentEnumerator() //for each move next,call pick one of partition record set. { if (_partitionRecordSets.Count == 0) { return; } bool hasNext = false; do { try { if (_partitionRecordSets.Count <= _counter) { throw new InvalidReaderException("Data reader has lost its state"); } _currentRecordSet = _partitionRecordSets[_counter]; hasNext = _currentRecordSet.MoveNext(); } catch (InvalidReaderException e) { this.Dispose(); throw; } catch (Exception e) { throw; } if (hasNext) { _current = _currentRecordSet.Current; } else { _partitionRecordSets.Remove(_currentRecordSet); RemoveFromValidReaders(_currentRecordSet); } _counter++; if (_counter >= _partitionRecordSets.Count) { _counter = 0; } } while (!hasNext && _partitionRecordSets.Count > 0); _next = hasNext; }
public void RemoveFromValidReaders(IRecordSetEnumerator pe) { IPartitionInfo info = pe as IPartitionInfo; if (info != null) { var readers = default(Dictionary <IRecordSetEnumerator, Object>); lock (_validReaders) { _validReaders.TryGetValue(info.Server, out readers); if (readers != null) { readers.Remove(pe); } } } }
public bool GetNextRecordSetChunk() { ReaderResultSet readerChunk = null; if (_cacheImpl != null) { if (!isValid) { throw new InvalidReaderException("Reader state has been lost."); } readerChunk = _cacheImpl.GetRecordSet(_readerId, _nodeIP, _nextIndex); } if (readerChunk != null && readerChunk.RecordSet != null && readerChunk.RecordSet.RowCount > 0) { _recordSetEnumerator = new RecordSetEnumerator(readerChunk.RecordSet); _nextIndex = readerChunk.NextIndex; return(_recordSetEnumerator.MoveNext()); } return(false); }