Exemple #1
0
        public async Task <TResult> ExecuteAsync <TResult>(IEnumerable <Query> queries, QueryType queryType, CancellationToken cancellationToken = default)
        {
            if (queries == null)
            {
                throw new ArgumentNullException(nameof(queries));
            }

            if (this.Options.Store == null)
            {
                throw new InvalidOperationException("No schema builder found.");
            }

            ISchema     schema = this.Options.Store.GetSchema(typeof(TResult));
            QueryBuffer buffer = new QueryBuffer(schema, queryType);

            await using IAsyncSession connection = this.Options.GetAsyncSession();

            foreach (IBatch batch in this.FilterBatches(queries))
            {
                await foreach (DbDataReader dataReader in connection.ExecuteAsync(batch, cancellationToken).ConfigureAwait(false))
                {
                    await buffer.InsertAsync(dataReader, cancellationToken).ConfigureAwait(false);
                }
            }

            return((TResult)buffer.Commit());
        }
        public async Task ExecuteAsync(IEnumerable <Command> commands, CancellationToken cancellationToken = default)
        {
            await using IAsyncSession session = this.Options.GetAsyncSession();

            CommandBuffer buffer = new CommandBuffer();

            foreach (IBatch batch in this.GetBufferedCommands(commands, buffer))
            {
                await foreach (DbDataReader dataReader in session.ExecuteAsync(batch, cancellationToken).ConfigureAwait(false))
                {
                    buffer.Update(dataReader);
                }
            }

            buffer.Commit();
        }
Exemple #3
0
        public async IAsyncEnumerable <QueryReader> EnumerateAsync(IEnumerable <Query> queries, [EnumeratorCancellation] CancellationToken cancellationToken = default)
        {
            if (queries == null)
            {
                throw new ArgumentNullException(nameof(queries));
            }

            if (this.Options.Store == null)
            {
                throw new InvalidOperationException("No schema builder found.");
            }

            await using IAsyncSession connection = this.Options.GetAsyncSession();

            foreach (IBatch batch in this.FilterBatches(queries))
            {
                await foreach (DbDataReader dataReader in connection.ExecuteAsync(batch, cancellationToken).ConfigureAwait(false))
                {
                    yield return(new QueryReader(this.Options.Store, dataReader));
                }
            }
        }