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; }
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); }
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(); }
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); }
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); }
/// <inheritdoc /> public IAsyncDocumentQuery <TProjection> SelectFields <TProjection>(string[] fields, string[] projections) { return(CreateDocumentQueryInternal <TProjection>(fields.Length > 0 ? FieldsToFetchToken.Create(fields, projections) : null)); }