Exemplo n.º 1
0
        public T[] Complete <T>()
        {
            for (var i = 0; i < includeResults.Length; i++)
            {
                var include = includeResults[i];
                sessionOperations.TrackIncludedDocument(include);
            }

            var transformedResults = TransformResults().ToList();
            var finalResults       = transformedResults.Select(ApplyTrackingIfNeeded <T>)
                                     .ToArray();

            for (var i = 0; i < finalResults.Length; i++)
            {
                if (ReferenceEquals(finalResults[i], null))
                {
                    sessionOperations.RegisterMissing(ids[i]);
                }
            }

            var includePaths = includes != null?includes.Select(x => x.Key).ToArray() : null;

            sessionOperations.RegisterMissingIncludes(results.Where(x => x != null).Select(x => x.DataAsJson), includePaths);

            return(finalResults);
        }
Exemplo n.º 2
0
        private void CompleteInternal <T>(QueryResult queryResult, Action <int, T> addToResult)
        {
            queryResult.Results.BlittableValidation();

            if (NoTracking == false)
            {
                _session.RegisterIncludes(queryResult.Includes);
            }

            for (int i = 0; i < queryResult.Results.Length; i++)
            {
                var document = (BlittableJsonReaderObject)queryResult.Results[i];
                var metadata = document.GetMetadata();

                metadata.TryGetId(out var id);

                addToResult(i, Deserialize <T>(id, document, metadata, _fieldsToFetch, NoTracking, _session));
            }

            if (NoTracking == false)
            {
                _session.RegisterMissingIncludes(queryResult.Results, queryResult.Includes, queryResult.IncludedPaths);
                if (queryResult.CounterIncludes != null)
                {
                    _session.RegisterCounters(
                        queryResult.CounterIncludes,
                        queryResult.IncludedCounterNames);
                }
            }
        }
Exemplo n.º 3
0
        public IList <T> Complete <T>()
        {
            var queryResult = currentQueryResults.CreateSnapshot();

            foreach (var include in SerializationHelper.RavenJObjectsToJsonDocuments(queryResult.Includes))
            {
                sessionOperations.TrackIncludedDocument(include);
            }

            var list = queryResult.Results
                       .Select(x => x != null ? Deserialize <T>(x) : default(T))
                       .ToList();

            if (disableEntitiesTracking == false)
            {
                sessionOperations.RegisterMissingIncludes(queryResult.Results.Where(x => x != null), includes);
            }

            if (transformResults == null)
            {
                return(list);
            }

            return(transformResults(indexQuery, list.Cast <object>()).Cast <T>().ToList());
        }
Exemplo n.º 4
0
        public T[] Complete <T>()
        {
            for (var i = 0; i < includeResults.Length; i++)
            {
                var include    = includeResults[i];
                var entityType = includes.Length > i ? includes[i].Value : typeof(object);
                sessionOperations.TrackEntity(entityType, include);
            }

            var finalResults = SelectResults()
                               .Select(document => document == null ? default(T) : sessionOperations.TrackEntity <T>(document))
                               .ToArray();

            for (var i = 0; i < finalResults.Length; i++)
            {
                if (ReferenceEquals(finalResults[i], null))
                {
                    sessionOperations.RegisterMissing(ids[i]);
                }
            }

            var includePaths = includes != null?includes.Select(x => x.Key).ToArray() : null;

            sessionOperations.RegisterMissingIncludes(results.Where(x => x != null).Select(x => x.DataAsJson), includePaths);

            return(finalResults);
        }
Exemplo n.º 5
0
        public IList <T> Complete <T>()
        {
            var queryResult = currentQueryResults.CreateSnapshot();

            foreach (var include in queryResult.Includes)
            {
                var metadata = include.Value <RavenJObject>("@metadata");

                sessionOperations.TrackEntity <object>(metadata.Value <string>("@id"),
                                                       include,
                                                       metadata, disableEntitiesTracking);
            }
            var list = queryResult.Results
                       .Select(Deserialize <T>)
                       .ToList();

            sessionOperations.RegisterMissingIncludes(queryResult.Results, includes);

            if (transformResults == null)
            {
                return(list);
            }

            return(transformResults(indexQuery, list.Cast <object>()).Cast <T>().ToList());
        }
Exemplo n.º 6
0
        public List <T> Complete <T>()
        {
            var queryResult = _currentQueryResults.CreateSnapshot();

            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, _projectionFields, DisableEntitiesTracking, _session));
            }

            if (DisableEntitiesTracking == false)
            {
                _session.RegisterMissingIncludes(queryResult.Results, queryResult.Includes, queryResult.IncludedPaths);
            }

            return(list);
        }
Exemplo n.º 7
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);
        }
Exemplo n.º 8
0
        public T[] Complete <T>()
        {
            for (var i = 0; i < includeResults.Length; i++)
            {
                var include = includeResults[i];
                sessionOperations.TrackIncludedDocument(include);
            }

            var finalResults = ids != null?
                               ReturnResultsById <T>() :
                                   ReturnResults <T>();

            for (var i = 0; i < finalResults.Length; i++)
            {
                var finalResult = finalResults[i];
                if (ReferenceEquals(finalResult, null))
                {
                    sessionOperations.RegisterMissing(ids[i]);
                }
            }

            var includePaths = includes != null?includes.Select(x => x.Key).ToArray() : null;

            sessionOperations.RegisterMissingIncludes(results.Where(x => x != null).Select(x => x.DataAsJson), includePaths);

            return(finalResults);
        }
Exemplo n.º 9
0
        public IList <T> Complete <T>()
        {
            var queryResult = _currentQueryResults.CreateSnapshot();

            foreach (BlittableJsonReaderObject include in queryResult.Includes)
            {
                var newDocumentInfo = DocumentInfo.GetNewDocumentInfo(include);
                _session.includedDocumentsByKey[newDocumentInfo.Id] = newDocumentInfo;
            }

            var usedTransformer = string.IsNullOrEmpty(_indexQuery.Transformer) == false;
            var list            = new List <T>();

            foreach (BlittableJsonReaderObject document in queryResult.Results)
            {
                if (usedTransformer)
                {
                    BlittableJsonReaderArray values;
                    if (document.TryGet("$values", out values) == false)
                    {
                        throw new InvalidOperationException("Transformed document must have a $values property");
                    }

                    list.AddRange(TransformerHelpers.ParseValuesFromBlittableArray <T>(_session, values));

                    continue;
                }

                BlittableJsonReaderObject metadata;
                string id;
                if (document.TryGet(Constants.Metadata.Key, out metadata) == false)
                {
                    throw new InvalidOperationException("Document must have a metadata");
                }
                if (metadata.TryGet(Constants.Metadata.Id, out id) == false)
                {
                    throw new InvalidOperationException("Document must have an id");
                }

                list.Add(_session.TrackEntity <T>(id, document, metadata, _disableEntitiesTracking));
            }

            if (_disableEntitiesTracking == false)
            {
                _session.RegisterMissingIncludes(queryResult.Results, _includes);
            }

            if (_transformResults == null)
            {
                return(list);
            }

            return(_transformResults(_indexQuery, list.Cast <object>()).Cast <T>().ToList());
        }
Exemplo n.º 10
0
        private void CompleteInternal <T>(QueryResult queryResult, Action <int, T> addToResult)
        {
            queryResult.Results.BlittableValidation();

            if (NoTracking == false)
            {
                _session.RegisterIncludes(queryResult.Includes);
            }

            for (int i = 0; i < queryResult.Results.Length; i++)
            {
                var document = (BlittableJsonReaderObject)queryResult.Results[i];
                BlittableJsonReaderObject metadata;

                try
                {
                    metadata = document.GetMetadata();
                }
                catch (InvalidOperationException)
                {
                    if (document.Count != _facetResultProperties.Length)
                    {
                        throw;
                    }

                    foreach (var prop in _facetResultProperties)
                    {
                        if (document.TryGetMember(prop.Name, out _) == false)
                        {
                            throw;
                        }
                    }

                    throw new InvalidOperationException("Raw query with aggregation by facet should be called by " +
                                                        $"{nameof(IRawDocumentQuery<T>.ExecuteAggregation)} or {nameof(IAsyncRawDocumentQuery<T>.ExecuteAggregationAsync)} method.");
                }

                metadata.TryGetId(out var id);

                addToResult(i, Deserialize <T>(id, document, metadata, _fieldsToFetch, NoTracking, _session, _isProjectInto));
            }

            if (NoTracking == false)
            {
                _session.RegisterMissingIncludes(queryResult.Results, queryResult.Includes, queryResult.IncludedPaths);
                if (queryResult.CounterIncludes != null)
                {
                    _session.RegisterCounters(
                        queryResult.CounterIncludes,
                        queryResult.IncludedCounterNames);
                }
            }
        }
        public void SetResult(GetDocumentResult result)
        {
            if (result.Includes != null)
            {
                foreach (BlittableJsonReaderObject include in result.Includes)
                {
                    var newDocumentInfo = DocumentInfo.GetNewDocumentInfo(include);
                    _session.includedDocumentsByKey[newDocumentInfo.Id] = newDocumentInfo;
                }
            }

            if (_includes != null && _includes.Length > 0)
            {
                _session.RegisterMissingIncludes(result.Results, _includes);
            }
        }
Exemplo n.º 12
0
        public IList <T> Complete <T>()
        {
            var queryResult = currentQueryResults.CreateSnapshot();

            foreach (var include in SerializationHelper.RavenJObjectsToJsonDocuments(queryResult.Includes))
            {
                sessionOperations.TrackIncludedDocument(include);
            }

            var usedTransformer = string.IsNullOrEmpty(indexQuery.Transformer) == false;
            var list            = new List <T>();

            foreach (var result in queryResult.Results)
            {
                if (result == null)
                {
                    list.Add(default(T));
                    continue;
                }

                if (usedTransformer)
                {
                    var values = result.Value <RavenJArray>("$values");
                    foreach (RavenJObject value in values)
                    {
                        list.Add(Deserialize <T>(value));
                    }

                    continue;
                }

                list.Add(Deserialize <T>(result));
            }

            if (disableEntitiesTracking == false)
            {
                sessionOperations.RegisterMissingIncludes(queryResult.Results.Where(x => x != null), indexQuery.Includes);
            }

            if (transformResults == null)
            {
                return(list);
            }

            return(transformResults(indexQuery, list.Cast <object>()).Cast <T>().ToList());
        }
Exemplo n.º 13
0
        public List <T> Complete <T>()
        {
            _session.RegisterIncludes(_result.Includes);

            var list = new List <T>();

            foreach (BlittableJsonReaderObject document in _result.Results)
            {
                var metadata = document.GetMetadata();

                metadata.TryGetId(out var id);

                list.Add(QueryOperation.Deserialize <T>(id, document, metadata, projectionFields: null, disableEntitiesTracking: false, session: _session));
            }

            _session.RegisterMissingIncludes(_result.Results, _result.Includes, _query.Includes);

            return(list);
        }
Exemplo n.º 14
0
        public void SetResult(GetDocumentResult result)
        {
            if (result == null)
            {
                return;
            }

            _session.RegisterIncludes(result.Includes);

            foreach (BlittableJsonReaderObject document in result.Results)
            {
                if (document == null)
                {
                    continue;
                }

                var newDocumentInfo = DocumentInfo.GetNewDocumentInfo(document);
                _session.DocumentsById.Add(newDocumentInfo);
            }

            _session.RegisterMissingIncludes(result.Results, result.Includes, _includes);
        }
Exemplo n.º 15
0
        public T[] Complete <T>()
        {
            foreach (var include in includeResults)
            {
                sessionOperations.TrackEntity <object>(include);
            }


            var finalResults = SelectResults()
                               .Select(document => document == null ? default(T) : sessionOperations.TrackEntity <T>(document))
                               .ToArray();

            for (var i = 0; i < finalResults.Length; i++)
            {
                if (ReferenceEquals(finalResults[i], null))
                {
                    sessionOperations.RegisterMissing(ids[i]);
                }
            }

            sessionOperations.RegisterMissingIncludes(results.Where(x => x != null).Select(x => x.DataAsJson), includes);

            return(finalResults);
        }