コード例 #1
0
        public void read_stream_backward_respects_max_count()
        {
            var res = _connection.ReadStreamEventsBackward(Stream, -1, 100, false);

            Assert.AreEqual(SliceReadStatus.Success, res.Status);
            Assert.AreEqual(3, res.Events.Length);
            Assert.AreEqual(_testEvents.Skip(2).Select(x => x.EventId).ToArray(),
                            res.Events.Reverse().Select(x => x.Event.EventId).ToArray());
        }
コード例 #2
0
 private static StreamEventsSlice ReadStreamEventsBackwards(this IEventStoreConnection connection, string streamName, int lastEventNumber)
 {
     return(connection.ReadStreamEventsBackward(
                streamName,
                lastEventNumber,
                PageSize, false,
                EventStoreCredentials.Default));
 }
        public IEnumerable <MeasurementReadAveragePerDay> GetValues(string deviceStreamName)
        {
            var projectionResultStream = "MeasurementAverageDay-" + deviceStreamName;

            return(_connection.ReadStreamEventsBackward <MeasurementAverageDay>(projectionResultStream)
                   .Select(e => new MeasurementReadAveragePerDay(e.Timeslot, e.Average))
                   .ToList());
        }
コード例 #4
0
        public void read_stream_backward_respects_truncatebefore()
        {
            const string stream = "read_stream_backward_respects_truncatebefore";

            _connection.AppendToStream(stream, ExpectedVersion.EmptyStream, _testEvents);

            _connection.SetStreamMetadata(stream, ExpectedVersion.EmptyStream, StreamMetadata.Build().SetTruncateBefore(2));

            var res = _connection.ReadStreamEventsBackward(stream, -1, 100, false);

            Assert.AreEqual(SliceReadStatus.Success, res.Status);
            Assert.AreEqual(3, res.Events.Length);
            Assert.AreEqual(_testEvents.Skip(2).Select(x => x.EventId).ToArray(),
                            res.Events.Reverse().Select(x => x.Event.EventId).ToArray());
        }
        protected void AssertStreamTail(string streamId, params string[] events)
        {
#if DEBUG
            var result = _conn.ReadStreamEventsBackward(streamId, -1, events.Length, true, _admin);
            switch (result.Status)
            {
            case SliceReadStatus.StreamDeleted:
                Assert.Fail("Stream '{0}' is deleted", streamId);
                break;

            case SliceReadStatus.StreamNotFound:
                Assert.Fail("Stream '{0}' does not exist", streamId);
                break;

            case SliceReadStatus.Success:
                var resultEventsReversed = result.Events.Reverse().ToArray();
                if (resultEventsReversed.Length < events.Length)
                {
                    DumpFailed("Stream does not contain enough events", streamId, events, result.Events);
                }
                else
                {
                    for (var index = 0; index < events.Length; index++)
                    {
                        var parts     = events[index].Split(new char[] { ':' }, 2);
                        var eventType = parts[0];
                        var eventData = parts[1];

                        if (resultEventsReversed[index].Event.EventType != eventType)
                        {
                            DumpFailed("Invalid event type", streamId, events, resultEventsReversed);
                        }
                        else
                        if (resultEventsReversed[index].Event.DebugDataView != eventData)
                        {
                            DumpFailed("Invalid event body", streamId, events, resultEventsReversed);
                        }
                    }
                }
                break;
            }
#endif
        }
        public T GetLatestSnapshot <T>(string streamName) where T : class
        {
            var stream        = SnapshotStreamNameFor(streamName);
            var amountToFetch = 1; // just the latest one
            var ev            = esConn.ReadStreamEventsBackward(stream, StreamPosition.End, amountToFetch, false);

            if (ev.Events.Any())
            {
                return((T)RebuildEvent(ev.Events.Single()));
            }
            else
            {
                return(null);
            }
        }
コード例 #7
0
        private void UpgradeProjectionStream(string projectionStream)
        {
            Log("Reading the last event from the {0}", projectionStream);
            var lastProjectionVersion = _connection.ReadStreamEventsBackward(
                projectionStream, -1, 1, false, _credentials);

            if (lastProjectionVersion.Events.Length > 0)
            {
                Log("Loaded the last event from the {0} stream", projectionStream);
                var projectionDefinition = lastProjectionVersion.Events[0].Event;
                Log("The last event type is: {0}", projectionDefinition.EventType);
                if (projectionDefinition.EventType == ProjectionUpdatedOld)
                {
                    Log("The old style projection definition event found");
                    if (!_runUpgrade)
                    {
                        Log(
                            "*** Skipping projection definition stream {0} upgrade.  Run with --upgrade option to upgrade",
                            projectionStream);
                        _upgradeRequired = true;
                        return;
                    }
                    Log("Writing new projection definition event to {0}", projectionStream);
                    _connection.AppendToStream(
                        projectionStream, projectionDefinition.EventNumber, _credentials,
                        new EventData(
                            Guid.NewGuid(), ProjectionUpdatedNew, true, projectionDefinition.Data,
                            projectionDefinition.Metadata));
                    Log("New projection definition has been written to {0}", projectionStream);
                }
            }
            else
            {
                Log("The {0} projection definition stream is empty", projectionStream);
            }
        }
コード例 #8
0
        private TAggregate LoadFromSnapshot(Guid id, int version)
        {
            var streamName = _aggregateIdToSnapshotStreamName(typeof(TAggregate), id);

            var sliceStart = StreamPosition.End;
            var sliceCount = ReadPageSize;
            StreamEventsSlice currentSlice;

            do
            {
                currentSlice = _eventStoreConnection.ReadStreamEventsBackward(streamName, sliceStart, sliceCount, false);

                if (currentSlice.Status == SliceReadStatus.StreamNotFound)
                {
                    return(null);
                }

                if (currentSlice.Status == SliceReadStatus.StreamDeleted)
                {
                    throw new AggregateDeletedException(id, typeof(TAggregate));
                }

                sliceStart = currentSlice.NextEventNumber;

                foreach (var resolvedEvent in currentSlice.Events)
                {
                    var aggregate = DeserializeObject <TAggregate>(resolvedEvent.OriginalEvent.Metadata, resolvedEvent.OriginalEvent.Data);

                    if (aggregate.Version <= version)
                    {
                        return(aggregate);
                    }
                }
            } while (!currentSlice.IsEndOfStream);

            return(null);
        }
コード例 #9
0
 protected void ReadStreamBackward(string streamId, string login, string password)
 {
     Connection.ReadStreamEventsBackward(streamId, 0, 1, false,
                                         login == null && password == null ? null : new UserCredentials(login, password));
 }