private async Task <Result> ExecuteAsync(WorkerPlan plan, Uri source)
        {
            var input = new WorkerPublicInput
            {
                UnderlyingQuery = plan.UnderlyingQuery.ToString(),
                Order           = plan.Order.IsSome ? plan.Order.AsT0.ToString() : null,
                Limit           = plan.Limit.IsSome ? plan.Limit.AsT0.ToString() : null,

                DataLocation = source
            };

            var response = await _lambda.InvokeAsync(new InvokeRequest
            {
                FunctionName   = _workerFunctionName,
                InvocationType = InvocationType.RequestResponse,
                Payload        = JsonConvert.SerializeObject(input),
            }).ConfigureAwait(false);

            if (!string.IsNullOrEmpty(response.FunctionError))
            {
                throw new WorkerException(response.FunctionError);
            }

            using var payload = response.Payload;
            return(await PublicResult.DeserializeAsync(payload).ConfigureAwait(false));
        }
        public IAsyncEnumerable <Result> ExecuteAsync(WorkerPlan plan, IReadOnlyList <Uri> sources)
        {
            if (ExpectedPlan.IsSome)
            {
                Assert.Equal(ExpectedPlan.AsT0, plan);
            }
            if (ExpectedSources.IsSome)
            {
                Assert.Equal(ExpectedSources.AsT0, sources);
            }

            return(_results.ToAsyncEnumerable());
        }
Example #3
0
        private static WorkerInput ConvertInput(WorkerPublicInput input)
        {
            var underlyingQuery = Parse(Parser.Query, input.UnderlyingQuery);
            var order           = string.IsNullOrEmpty(input.Order)
                ? (Option <OrderClause>) new None()
                : Parse(Parser.OrderByClause, input.Order);
            var limit = string.IsNullOrEmpty(input.Limit)
                ? (Option <LimitClause>) new None()
                : Parse(Parser.LimitClause, input.Limit);

            var plan = new WorkerPlan(underlyingQuery, order, limit);

            return(new WorkerInput(plan, input.DataLocation));
        }
 public IAsyncEnumerable <Result> ExecuteAsync(WorkerPlan plan, IReadOnlyList <Uri> sources)
 {
     return(sources.ToAsyncEnumerable().SelectAwait(async source => await _worker.QueryAsync(new WorkerInput(plan, source)).ConfigureAwait(false)));
 }
 public IAsyncEnumerable <Result> ExecuteAsync(WorkerPlan plan, IReadOnlyList <Uri> sources)
 {
     return(sources.ToObservable().SelectMany(source => ExecuteAsync(plan, source)).ToAsyncEnumerable());
 }
Example #6
0
 public async Task BasicQuery_ShouldReturnUnderlyingResults()
 {
     var plan = new WorkerPlan(Query, new None(), new None());
     var underlyingResults = new[]