internal T[] CompleteAsArray <T>() { _session.AssertNotDisposed(); // ensure that the user didn't do an async query then closed the session early var queryResult = _currentQueryResults.CreateSnapshot(); var result = new T[queryResult.Results.Length]; CompleteInternal <T>(queryResult, Add); return(result); void Add(int index, T r) { result[index] = r; } }
public List <T> Complete <T>() { _session.AssertNotDisposed(); // ensure that the user didn't do an async query then closed the session early var queryResult = _currentQueryResults.CreateSnapshot(); queryResult.Results.BlittableValidation(); if (DisableEntitiesTracking == false) { _session.RegisterIncludes(queryResult.Includes); } var list = new List <T>(); foreach (BlittableJsonReaderObject document in queryResult.Results) { var metadata = document.GetMetadata(); metadata.TryGetId(out var id); list.Add(Deserialize <T>(id, document, metadata, _fieldsToFetch, DisableEntitiesTracking, _session)); } if (DisableEntitiesTracking == false) { _session.RegisterMissingIncludes(queryResult.Results, queryResult.Includes, queryResult.IncludedPaths); } return(list); }
public override HttpRequestMessage CreateRequest(JsonOperationContext ctx, ServerNode node, out string url) { CanCache = _indexQuery.DisableCaching == false; // we won't allow aggressive caching of queries with WaitForNonStaleResults CanCacheAggressively = CanCache && _indexQuery.WaitForNonStaleResults == false; var path = new StringBuilder(node.Url) .Append("/databases/") .Append(node.Database) .Append("/queries?queryHash=") // we need to add a query hash because we are using POST queries // so we need to unique parameter per query so the query cache will // work properly .Append(_indexQuery.GetQueryHash(ctx, _conventions, _session.JsonSerializer)); if (_metadataOnly) { path.Append("&metadataOnly=true"); } if (_indexEntriesOnly) { path.Append("&debug=entries"); } var request = new HttpRequestMessage { Method = HttpMethod.Post, Content = new BlittableJsonContent(async stream => { // this is here to catch people closing the session before the ToListAsync() completes _session.AssertNotDisposed(); await using (var writer = new AsyncBlittableJsonTextWriter(ctx, stream)) { writer.WriteIndexQuery(_conventions, ctx, _indexQuery); } } ) }; url = path.ToString(); return(request); }