Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }