public async Task <long> ProjectionProgressFor(ShardName name, CancellationToken token = default) { await EnsureStorageExistsAsync(typeof(IEvent), token).ConfigureAwait(false); var statement = new ProjectionProgressStatement(_options.EventGraph) { Name = name }; var handler = new OneResultHandler <ShardState>(statement, new ShardStateSelector(), true, false); await using var conn = CreateConnection(); await conn.OpenAsync(token).ConfigureAwait(false); var builder = new CommandBuilder(); handler.ConfigureCommand(builder, null); await using var reader = await builder.ExecuteReaderAsync(conn, token).ConfigureAwait(false); var state = await handler.HandleAsync(reader, null, token).ConfigureAwait(false); return(state?.Sequence ?? 0); }
public async Task <long> ProjectionProgressFor(ShardName name, CancellationToken token = default) { await _store.Tenancy.Default.EnsureStorageExistsAsync(typeof(IEvent), token); var statement = new ProjectionProgressStatement(_store.Events) { Name = name }; var handler = new OneResultHandler <ShardState>(statement, new ShardStateSelector(), true, false); await using var session = (QuerySession)_store.QuerySession(); var progress = await session.ExecuteHandlerAsync(handler, token); return(progress?.Sequence ?? 0); }
/// <summary> /// Check the current progress of a single projection or projection shard /// </summary> /// <param name="token"></param> /// <returns></returns> public async Task <long> ProjectionProgressFor(string projectionOrShardName, CancellationToken token = default(CancellationToken)) { _store.Tenancy.Default.EnsureStorageExists(typeof(IEvent)); var statement = new ProjectionProgressStatement(this) { ProjectionOrShardName = projectionOrShardName }; var handler = new OneResultHandler <ProjectionProgress>(statement, new ProjectionProgressSelector(), true, false); await using var session = (QuerySession)_store.QuerySession(); var progress = await session.ExecuteHandlerAsync(handler, token); return(progress?.LastSequenceId ?? 0); }