private async Task <EventPage> buildEventPage(long lastEncountered, NpgsqlCommand cmd) { IList <IEvent> events = null; IList <long> sequences = new List <long>(); using (var reader = await cmd.ExecuteReaderAsync(_token).ConfigureAwait(false)) { while (await reader.ReadAsync(_token).ConfigureAwait(false)) { var seq = await reader.GetFieldValueAsync <long>(0, _token).ConfigureAwait(false); sequences.Add(seq); } if (sequences.Any()) { await reader.NextResultAsync(_token).ConfigureAwait(false); events = await _selector.ReadAsync(reader, _map, null, _token).ConfigureAwait(false); } else { events = new List <IEvent>(); } } return(new EventPage(lastEncountered, sequences, events) { Count = events.Count }); }
private async Task <EventPage> buildEventPage(long @from, NpgsqlCommand cmd) { IList <IEvent> events = null; IList <long> sequences = new List <long>(); long nextKnown = 0; long lastKnown = 0; using (var reader = await cmd.ExecuteReaderAsync(_token).ConfigureAwait(false)) { while (await reader.ReadAsync(_token).ConfigureAwait(false)) { var seq = await reader.GetFieldValueAsync <long>(0, _token).ConfigureAwait(false); sequences.Add(seq); } if (sequences.Any()) { await reader.NextResultAsync(_token).ConfigureAwait(false); events = await _selector.ReadAsync(reader, _map, null, _token).ConfigureAwait(false); } else { await reader.NextResultAsync(_token).ConfigureAwait(false); events = new List <IEvent>(); } nextKnown = await getLong(reader).ConfigureAwait(false); lastKnown = await getLong(reader).ConfigureAwait(false); } return(new EventPage(@from, sequences, events) { Count = events.Count, NextKnownSequence = nextKnown, LastKnownSequence = lastKnown }); }
public async Task <EventPage> FetchNextPage(long lastEncountered) { var lastPossible = lastEncountered + _options.PageSize; var sql = $@" select max(seq_id) from mt_events where seq_id > :last and seq_id <= :limit; {_selector.ToSelectClause(null)} where seq_id > :last and seq_id <= :limit and type = ANY(:types) order by seq_id; "; var cmd = _conn.CreateCommand().Sql(sql) .With("last", lastEncountered) .With("limit", lastPossible) .With("types", _options.EventTypeNames, NpgsqlDbType.Array | NpgsqlDbType.Varchar); long furthestExtant; IList <IEvent> events = null; using (var reader = await cmd.ExecuteReaderAsync(Cancellation).ConfigureAwait(false)) { await reader.ReadAsync(Cancellation).ConfigureAwait(false); furthestExtant = await reader.GetFieldValueAsync <long>(0, Cancellation).ConfigureAwait(false); await reader.NextResultAsync(Cancellation).ConfigureAwait(false); events = await _selector.ReadAsync(reader, _map, Cancellation).ConfigureAwait(false); } var streams = events.GroupBy(x => x.StreamId).Select(group => { return(new EventStream(group.Key, group.OrderBy(x => x.Version).ToArray(), false)); }).ToArray(); return(new EventPage(lastEncountered, furthestExtant, streams)); }