public YieldStream(AsyncDocumentSession parent, IAsyncDocumentQuery <T> query, FieldsToFetchToken fieldsToFetch, IAsyncEnumerator <BlittableJsonReaderObject> enumerator, CancellationToken token)
 {
     _parent        = parent;
     _enumerator    = enumerator;
     _token         = token;
     _query         = query;
     _fieldsToFetch = fieldsToFetch;
 }
        private AsyncDocumentQuery <TResult> CreateDocumentQueryInternal <TResult>(QueryData queryData = null)
        {
            var newFieldsToFetch = queryData != null && queryData.Fileds.Length > 0
                ? FieldsToFetchToken.Create(queryData.Fileds, queryData.Projections.ToArray(), queryData.IsCustomFunction)
                : null;

            if (newFieldsToFetch != null)
            {
                UpdateFieldsToFetchToken(newFieldsToFetch);
            }

            var query = new AsyncDocumentQuery <TResult>(
                TheSession,
                IndexName,
                CollectionName,
                IsGroupBy,
                queryData?.DeclareToken,
                queryData?.LoadTokens,
                queryData?.FromAlias)
            {
                PageSize           = PageSize,
                SelectTokens       = SelectTokens,
                FieldsToFetchToken = FieldsToFetchToken,
                WhereTokens        = WhereTokens,
                OrderByTokens      = OrderByTokens,
                GroupByTokens      = GroupByTokens,
                QueryParameters    = QueryParameters,
                Start      = Start,
                Timeout    = Timeout,
                CutoffEtag = CutoffEtag,
                QueryStats = QueryStats,
                TheWaitForNonStaleResults = TheWaitForNonStaleResults,
                Negate    = Negate,
                Includes  = new HashSet <string>(Includes),
                RootTypes = { typeof(T) },
                BeforeQueryExecutedCallback = BeforeQueryExecutedCallback,
                AfterQueryExecutedCallback  = AfterQueryExecutedCallback,
                AfterStreamExecutedCallback = AfterStreamExecutedCallback,
#if FEATURE_HIGHLIGHTING
                HighlightedFields   = new List <HighlightedField>(HighlightedFields),
                HighlighterPreTags  = HighlighterPreTags,
                HighlighterPostTags = HighlighterPostTags,
#endif
                DisableEntitiesTracking = DisableEntitiesTracking,
                DisableCaching          = DisableCaching,
#if FEATURE_SHOW_TIMINGS
                ShowQueryTimings = ShowQueryTimings,
#endif
                ShouldExplainScores = ShouldExplainScores,
                IsIntersect         = IsIntersect,
                DefaultOperator     = DefaultOperator
            };

            query.AfterQueryExecuted(AfterQueryExecutedCallback);
            return(query);
        }
 internal YieldStream(
     AsyncDocumentSession parent,
     StreamOperation.YieldStreamResults enumerator,
     AsyncDocumentQuery <T> query,
     FieldsToFetchToken fieldsToFetch,
     CancellationToken token) :
     base(enumerator, token)
 {
     _parent        = parent;
     _query         = query;
     _fieldsToFetch = fieldsToFetch;
 }
Exemple #4
0
        private DocumentQuery <TResult> CreateDocumentQueryInternal <TResult>(FieldsToFetchToken newFieldsToFetch = null)
        {
            if (newFieldsToFetch != null)
            {
                UpdateFieldsToFetchToken(newFieldsToFetch);
            }

            var query = new DocumentQuery <TResult>(
                TheSession,
                IndexName,
                CollectionName,
                IsGroupBy)
            {
                QueryRaw           = QueryRaw,
                PageSize           = PageSize,
                SelectTokens       = SelectTokens,
                FieldsToFetchToken = FieldsToFetchToken,
                WhereTokens        = WhereTokens,
                OrderByTokens      = OrderByTokens,
                GroupByTokens      = GroupByTokens,
                QueryParameters    = QueryParameters,
                Start      = Start,
                Timeout    = Timeout,
                CutoffEtag = CutoffEtag,
                QueryStats = QueryStats,
                TheWaitForNonStaleResults        = TheWaitForNonStaleResults,
                TheWaitForNonStaleResultsAsOfNow = TheWaitForNonStaleResultsAsOfNow,
                Negate    = Negate,
                Includes  = new HashSet <string>(Includes),
                RootTypes = { typeof(T) },
                BeforeQueryExecutedCallback = BeforeQueryExecutedCallback,
                AfterQueryExecutedCallback  = AfterQueryExecutedCallback,
                AfterStreamExecutedCallback = AfterStreamExecutedCallback,
                HighlightedFields           = new List <HighlightedField>(HighlightedFields),
                HighlighterPreTags          = HighlighterPreTags,
                HighlighterPostTags         = HighlighterPostTags,
                DisableEntitiesTracking     = DisableEntitiesTracking,
                DisableCaching      = DisableCaching,
                ShowQueryTimings    = ShowQueryTimings,
                LastEquality        = LastEquality,
                ShouldExplainScores = ShouldExplainScores,
                IsIntersect         = IsIntersect,
                DefaultOperator     = DefaultOperator
            };

            query.AfterQueryExecuted(AfterQueryExecutedCallback);
            return(query);
        }
Exemple #5
0
        public QueryOperation(
            InMemoryDocumentSessionOperations session,
            string indexName,
            IndexQuery indexQuery,
            FieldsToFetchToken fieldsToFetch,
            bool disableEntitiesTracking,
            bool metadataOnly     = false,
            bool indexEntriesOnly = false)
        {
            _session          = session;
            _indexName        = indexName;
            _indexQuery       = indexQuery;
            _fieldsToFetch    = fieldsToFetch;
            NoTracking        = disableEntitiesTracking;
            _metadataOnly     = metadataOnly;
            _indexEntriesOnly = indexEntriesOnly;

            AssertPageSizeSet();
        }
Exemple #6
0
        internal static T Deserialize <T>(string id, BlittableJsonReaderObject document, BlittableJsonReaderObject metadata, FieldsToFetchToken fieldsToFetch, bool disableEntitiesTracking, InMemoryDocumentSessionOperations session)
        {
            if (metadata.TryGetProjection(out var projection) == false || projection == false)
            {
                return(session.TrackEntity <T>(id, document, metadata, disableEntitiesTracking));
            }

            if (fieldsToFetch?.Projections != null && fieldsToFetch.Projections.Length == 1) // we only select a single field
            {
                var type            = typeof(T);
                var typeInfo        = type.GetTypeInfo();
                var projectionField = fieldsToFetch.Projections[0];

                if (fieldsToFetch.SourceAlias != null)
                {
                    if (projectionField.StartsWith(fieldsToFetch.SourceAlias))
                    {
                        // remove source-alias from projection name
                        projectionField = projectionField.Substring(fieldsToFetch.SourceAlias.Length + 1);
                    }
                    if (Regex.IsMatch(projectionField, "'([^']*)"))
                    {
                        // projection field is quoted, remove quotes
                        projectionField = projectionField.Substring(1, projectionField.Length - 2);
                    }
                }

                if (type == typeof(string) || typeInfo.IsValueType || typeInfo.IsEnum)
                {
                    return(document.TryGet(projectionField, out T value) == false
                        ? default
                        : value);
                }

                if (document.TryGetMember(projectionField, out object inner) == false)
                {
                    return(default);
        private StreamResult <T> CreateStreamResult <T>(BlittableJsonReaderObject json, FieldsToFetchToken fieldsToFetch, bool isProjectInto)
        {
            var metadata     = json.GetMetadata();
            var changeVector = metadata.GetChangeVector();

            //MapReduce indexes return reduce results that don't have @id property
            metadata.TryGetId(out string id);

            var entity = QueryOperation.Deserialize <T>(id, json, metadata, fieldsToFetch, true, this, isProjectInto);

            var streamResult = new StreamResult <T>
            {
                ChangeVector = changeVector,
                Id           = id,
                Document     = entity,
                Metadata     = new MetadataAsDictionary(metadata)
            };

            return(streamResult);
        }
Exemple #8
0
        private StreamResult <T> CreateStreamResult <T>(BlittableJsonReaderObject json, FieldsToFetchToken fieldsToFetch)
        {
            var metadata     = json.GetMetadata();
            var changeVector = metadata.GetChangeVector();

            //MapReduce indexes return reduce results that don't have @id property
            metadata.TryGetId(out string id);

            //TODO - Investigate why ConvertToEntity fails if we don't call ReadObject before
            json = Context.ReadObject(json, id);
            var entity = QueryOperation.Deserialize <T>(id, json, metadata, fieldsToFetch, true, this);

            var streamResult = new StreamResult <T>
            {
                ChangeVector = changeVector,
                Id           = id,
                Document     = entity,
                Metadata     = new MetadataAsDictionary(metadata)
            };

            return(streamResult);
        }
        internal static T Deserialize <T>(string id, BlittableJsonReaderObject document, BlittableJsonReaderObject metadata, FieldsToFetchToken fieldsToFetch, bool disableEntitiesTracking, InMemoryDocumentSessionOperations session)
        {
            if (metadata.TryGetProjection(out var projection) == false || projection == false)
            {
                return(session.TrackEntity <T>(id, document, metadata, disableEntitiesTracking));
            }

            if (fieldsToFetch?.Projections != null && fieldsToFetch.Projections.Length == 1) // we only select a single field
            {
                var type     = typeof(T);
                var typeInfo = type.GetTypeInfo();
                if (type == typeof(string) || typeInfo.IsValueType || typeInfo.IsEnum)
                {
                    var projectionField = fieldsToFetch.Projections[0];
                    T   value;

                    if (fieldsToFetch.SourceAlias != null)
                    {
                        // remove source-alias from projection name
                        projectionField = projectionField.Substring(fieldsToFetch.SourceAlias.Length + 1);
                    }

                    return(document.TryGet(projectionField, out value) == false
                        ? default(T)
                        : value);
                }

                if (document.TryGetMember(fieldsToFetch.Projections[0], out object inner) == false)
                {
                    return(default(T));
                }

                if (fieldsToFetch.FieldsToFetch != null && fieldsToFetch.FieldsToFetch[0] == fieldsToFetch.Projections[0])
                {
                    if (inner is BlittableJsonReaderObject innerJson) //extraction from original type
                    {
                        document = innerJson;
                    }
                }
            }

            var result = (T)session.Conventions.DeserializeEntityFromBlittable(typeof(T), document);

            if (string.IsNullOrEmpty(id) == false)
            {
                // we need to make an additional check, since it is possible that a value was explicitly stated
                // for the identity property, in which case we don't want to override it.
                object value;
                var    identityProperty = session.Conventions.GetIdentityProperty(typeof(T));
                if (identityProperty != null && (document.TryGetMember(identityProperty.Name, out value) == false || value == null))
                {
                    session.GenerateEntityIdOnTheClient.TrySetIdentity(result, id);
                }
            }

            return(result);
        }
Exemple #10
0
 /// <inheritdoc />
 public IAsyncDocumentQuery <TProjection> SelectFields <TProjection>(string[] fields, string[] projections)
 {
     return(CreateDocumentQueryInternal <TProjection>(fields.Length > 0 ? FieldsToFetchToken.Create(fields, projections) : null));
 }