public async Task <AllCommittedEventsPage> LoadAllCommittedEvents(
            GlobalPosition globalPosition,
            int pageSize,
            CancellationToken cancellationToken)
        {
            var startPosition = globalPosition.IsStart
                ? 0
                : long.Parse(globalPosition.Value);
            var endPosition = startPosition + pageSize;

            const string sql             = @"
                SELECT
                    GlobalSequenceNumber, BatchId, AggregateId, AggregateName, Data, Metadata, AggregateSequenceNumber
                FROM EventFlow
                WHERE
                    GlobalSequenceNumber >= @FromId AND GlobalSequenceNumber <= @ToId
                ORDER BY
                    GlobalSequenceNumber ASC";
            var          eventDataModels = await _connection.QueryAsync <EventDataModel>(
                Label.Named("mssql-fetch-events"),
                cancellationToken,
                sql,
                new
            {
                FromId = startPosition,
                ToId   = endPosition,
            })
                                           .ConfigureAwait(false);

            var nextPosition = eventDataModels.Any()
                ? eventDataModels.Max(e => e.GlobalSequenceNumber) + 1
                : startPosition;

            return(new AllCommittedEventsPage(new GlobalPosition(nextPosition.ToString()), eventDataModels));
        }
 public async Task<Thingy> ExecuteQueryAsync(ThingyGetQuery query, CancellationToken cancellationToken)
 {
     var readModels = await _sqLiteConnection.QueryAsync<SQLiteThingyReadModel>(
         Label.Named("sqlite-fetch-test-read-model"),
         cancellationToken,
         "SELECT * FROM [ReadModel-ThingyAggregate] WHERE AggregateId = @AggregateId",
         new { AggregateId = query.ThingyId.Value })
         .ConfigureAwait(false);
     return readModels.SingleOrDefault()?.ToThingy();
 }
        public async Task <IReadOnlyCollection <ThingyMessage> > ExecuteQueryAsync(ThingyGetMessagesQuery query, CancellationToken cancellationToken)
        {
            var readModels = await _sqLiteConnection.QueryAsync <SQLiteThingyMessageReadModel>(
                Label.Named("sqlite-fetch-thingy-message-read-model"),
                cancellationToken,
                "SELECT * FROM [ReadModel-ThingyMessage] WHERE ThingyId = @ThingyId",
                new { ThingyId = query.ThingyId.Value })
                             .ConfigureAwait(false);

            return(readModels
                   .Select(rm => rm.ToThingyMessage())
                   .ToList());
        }