コード例 #1
0
ファイル: DatabaseSource.cs プロジェクト: KieranFoot/ravendb
        public IEnumerable <TimeSeriesItem> GetTimeSeries(List <string> collectionsToExport)
        {
            Debug.Assert(_context != null);

            var initialState = new TimeSeriesIterationState(_context, _database.Configuration.Databases.PulseReadTransactionLimit)
            {
                StartEtag             = _startDocumentEtag,
                StartEtagByCollection = collectionsToExport.ToDictionary(x => x, x => _startDocumentEtag)
            };

            var enumerator = new PulsedTransactionEnumerator <TimeSeriesItem, TimeSeriesIterationState>(_context,
                                                                                                        state =>
            {
                if (state.StartEtagByCollection.Count != 0)
                {
                    return(GetTimeSeriesFromCollections(_context, state));
                }

                return(GetAllTimeSeriesItems(_context, state.StartEtag));
            }, initialState);

            while (enumerator.MoveNext())
            {
                yield return(enumerator.Current);
            }
        }
コード例 #2
0
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously

        public async IAsyncEnumerable <TimeSeriesItem> GetTimeSeriesAsync(List <string> collectionsToExport)
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
        {
            Debug.Assert(_context != null);

            var initialState = new TimeSeriesIterationState(_context, _database.Configuration.Databases.PulseReadTransactionLimit)
            {
                StartEtag             = _startDocumentEtag,
                StartEtagByCollection = collectionsToExport.ToDictionary(x => x, x => _startDocumentEtag)
            };

            var enumerator = new PulsedTransactionEnumerator <TimeSeriesItem, TimeSeriesIterationState>(_context,
                                                                                                        state =>
            {
                if (state.StartEtagByCollection.Count != 0)
                {
                    return(GetTimeSeriesFromCollections(_context, state));
                }

                return(GetAllTimeSeriesItems(_context, state.StartEtag));
            }, initialState);

            while (enumerator.MoveNext())
            {
                yield return(enumerator.Current);
            }
        }
コード例 #3
0
ファイル: DatabaseSource.cs プロジェクト: KieranFoot/ravendb
        private static IEnumerable <TimeSeriesItem> GetTimeSeriesFromCollections(DocumentsOperationContext context, TimeSeriesIterationState state)
        {
            var database    = context.DocumentDatabase;
            var collections = state.StartEtagByCollection.Keys.ToList();

            foreach (var collection in collections)
            {
                var etag = state.StartEtagByCollection[collection];

                state.CurrentCollection = collection;

                foreach (var ts in database.DocumentsStorage.TimeSeriesStorage.GetTimeSeriesFrom(context, collection, etag, long.MaxValue))
                {
                    yield return(new TimeSeriesItem
                    {
                        Name = database.DocumentsStorage.TimeSeriesStorage.GetOriginalName(context, ts.DocId, ts.Name),
                        DocId = ts.DocId,
                        Baseline = ts.Start,
                        ChangeVector = ts.ChangeVector,
                        Collection = ts.Collection,
                        SegmentSize = ts.SegmentSize,
                        Segment = ts.Segment,
                        Etag = ts.Etag,
                    });
                }
            }
        }