示例#1
0
        public async Task StreamQueryGet()
        {
            using (TrackRequestTime())
                using (var token = CreateTimeLimitedOperationToken())
                    using (Database.DocumentsStorage.ContextPool.AllocateOperationContext(out DocumentsOperationContext context))
                    {
                        var queryJson = await context.ReadForMemoryAsync(RequestBodyStream(), "index/query");

                        var query = IndexQueryServerSide.Create(queryJson, context, Database.QueryMetadataCache);

                        var runner = new QueryRunner(Database, context);

                        using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream()))
                        {
                            try
                            {
                                await runner.ExecuteStreamQuery(query, HttpContext.Response, writer, token).ConfigureAwait(false);
                            }
                            catch (IndexDoesNotExistException)
                            {
                                HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound;
                                context.Write(writer, json: new DynamicJsonValue
                                {
                                    ["Error"] = "Index " + query.Metadata.IndexName + " does not exists"
                                });
                            }
                        }
                    }
        }
示例#2
0
        public async Task StreamQueryGet()
        {
            var indexName = RouteMatch.Url.Substring(RouteMatch.MatchLength);

            DocumentsOperationContext context;

            using (TrackRequestTime())
                using (var token = CreateTimeLimitedOperationToken())
                    using (Database.DocumentsStorage.ContextPool.AllocateOperationContext(out context))
                    {
                        var query = IndexQueryServerSide.Create(HttpContext, GetStart(), GetPageSize(int.MaxValue), context);
                        if (string.IsNullOrWhiteSpace(query.Query))
                        {
                            query.Query = _postQuery;
                        }

                        var runner = new QueryRunner(Database, context);

                        using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream()))
                        {
                            try
                            {
                                await runner.ExecuteStreamQuery(indexName, query, HttpContext.Response, writer, token).ConfigureAwait(false);
                            }
                            catch (IndexDoesNotExistsException)
                            {
                                HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound;
                            }
                        }
                    }
        }