/// <summary> /// Converts a BlittableJsonReaderObject to an entity without a session. /// </summary> /// <param name="entityType"></param> /// <param name="id">The id.</param> /// <param name="document">The document found.</param> /// <param name="conventions">The conventions.</param> /// <returns>The converted entity</returns> public static object ConvertToEntity(Type entityType, string id, BlittableJsonReaderObject document, DocumentConventions conventions) { try { var defaultValue = InMemoryDocumentSessionOperations.GetDefaultValue(entityType); var entity = defaultValue; var documentType = conventions.GetClrType(id, document); if (documentType != null) { var type = Type.GetType(documentType); if (type != null && entityType.IsAssignableFrom(type)) { entity = conventions.DeserializeEntityFromBlittable(type, document); } } if (Equals(entity, defaultValue)) { entity = conventions.DeserializeEntityFromBlittable(entityType, document); } return(entity); } catch (Exception ex) { throw new InvalidOperationException($"Could not convert document {id} to entity of type {entityType}", ex); } }
public override void SetResponse(JsonOperationContext context, BlittableJsonReaderObject response, bool fromCache) { if (response == null) { return; } Result = (OperationState)_conventions.DeserializeEntityFromBlittable(typeof(OperationState), response); }
public override void SetResponse(BlittableJsonReaderObject response, bool fromCache) { if (response == null) { ThrowInvalidResponse(); } Result = (CollectionStatistics)_conventions.DeserializeEntityFromBlittable(typeof(CollectionStatistics), response); }
internal static OperationStatusChange FromJson(BlittableJsonReaderObject value, DocumentConventions conventions) { value.TryGet(nameof(OperationId), out long operationId); value.TryGet(nameof(State), out BlittableJsonReaderObject stateAsJson); return(new OperationStatusChange { OperationId = operationId, State = (OperationState)conventions.DeserializeEntityFromBlittable(typeof(OperationState), stateAsJson) }); }
public override void SetResponse(BlittableJsonReaderObject response, bool fromCache) { if (response == null || response.TryGet("Results", out BlittableJsonReaderArray results) == false) { ThrowInvalidResponse(); return; // never hit } var stats = new IndexPerformanceStats[results.Length]; for (var i = 0; i < results.Length; i++) { stats[i] = (IndexPerformanceStats)_conventions.DeserializeEntityFromBlittable(typeof(IndexPerformanceStats), (BlittableJsonReaderObject)results[i]); } Result = stats; }
public override void SetResponse(JsonOperationContext context, BlittableJsonReaderObject response, bool fromCache) { if (response == null) { Result = null; return; } if (response.TryGet("Results", out BlittableJsonReaderArray array) == false) { ThrowInvalidResponse(); return; // never hit } var results = new ExplainQueryResult[array.Length]; for (var i = 0; i < array.Length; i++) { var result = (BlittableJsonReaderObject)array[i]; results[i] = (ExplainQueryResult)_conventions.DeserializeEntityFromBlittable(typeof(ExplainQueryResult), result); } Result = results; }
public override void SetResponse(BlittableJsonReaderObject response, bool fromCache) { Result = (IndexStaleness)_conventions.DeserializeEntityFromBlittable(typeof(IndexStaleness), response); }
public async Task QueriesRunning() { using (var store = GetDocumentStore()) { IndexQuery q; using (var session = store.OpenSession()) { var people = session.Query <Person>() .Where(x => x.Name == "John") .ToList(); // create index q = session.Advanced.DocumentQuery <Person>() .WhereEquals(x => x.Name, "John") .Take(20) .GetIndexQuery(); } using (var context = JsonOperationContext.ShortTermSingleUse()) { var query1 = new IndexQueryServerSide(q.Query, context.ReadObject(new DynamicJsonValue { ["p0"] = q.QueryParameters["p0"] }, "query/parameters")) { Start = q.Start, CutoffEtag = q.CutoffEtag, ExplainScores = q.ExplainScores, PageSize = q.PageSize, ShowTimings = q.ShowTimings, SkipDuplicateChecking = q.SkipDuplicateChecking, WaitForNonStaleResults = q.WaitForNonStaleResults, WaitForNonStaleResultsTimeout = q.WaitForNonStaleResultsTimeout }; var query2 = new MoreLikeThisQueryServerSide { DocumentId = "docs/1" }; var query3 = new FacetQuery { FacetSetupDoc = "setup/1" }; var database = await Server .ServerStore .DatabasesLandlord .TryGetOrCreateResourceStore(new StringSegment(store.Database)); var index = database.IndexStore.GetIndexes().First(); var now = SystemTime.UtcNow; index.CurrentlyRunningQueries.TryAdd(new ExecutingQueryInfo(now, query1, 10, OperationCancelToken.None)); index.CurrentlyRunningQueries.TryAdd(new ExecutingQueryInfo(now, query2, 11, OperationCancelToken.None)); index.CurrentlyRunningQueries.TryAdd(new ExecutingQueryInfo(now, query3, 12, OperationCancelToken.None)); var conventions = new DocumentConventions(); using (var commands = store.Commands()) { var json = commands.RawGetJson <BlittableJsonReaderObject>("/debug/queries/running"); Assert.True(json.TryGet(index.Name, out BlittableJsonReaderArray array)); Assert.Equal(3, array.Length); foreach (BlittableJsonReaderObject info in array) { int queryId; Assert.True(info.TryGet(nameof(ExecutingQueryInfo.QueryId), out queryId)); string duration; Assert.True(info.TryGet(nameof(ExecutingQueryInfo.Duration), out duration)); Assert.NotNull(duration); string startTimeAsString; Assert.True(info.TryGet(nameof(ExecutingQueryInfo.StartTime), out startTimeAsString)); Assert.Equal(now, DateTime.Parse(startTimeAsString).ToUniversalTime()); object token; Assert.False(info.TryGetMember(nameof(ExecutingQueryInfo.Token), out token)); Assert.Null(token); if (queryId == 10) { BlittableJsonReaderObject queryInfo; Assert.True(info.TryGet(nameof(ExecutingQueryInfo.QueryInfo), out queryInfo)); var query = (IndexQuery)conventions.DeserializeEntityFromBlittable(typeof(IndexQuery), queryInfo); Assert.True(q.Equals(query)); continue; } if (queryId == 11) { BlittableJsonReaderObject queryInfo; Assert.True(info.TryGet(nameof(ExecutingQueryInfo.QueryInfo), out queryInfo)); var query = (MoreLikeThisQuery)conventions.DeserializeEntityFromBlittable(typeof(MoreLikeThisQuery), queryInfo); Assert.Equal(query2.DocumentId, query.DocumentId); continue; } if (queryId == 12) { BlittableJsonReaderObject queryInfo; Assert.True(info.TryGet(nameof(ExecutingQueryInfo.QueryInfo), out queryInfo)); var query = (FacetQuery)conventions.DeserializeEntityFromBlittable(typeof(FacetQuery), queryInfo); Assert.Equal(query3.FacetSetupDoc, query.FacetSetupDoc); continue; } throw new NotSupportedException("Should not happen."); } } } } }
public async Task QueriesRunning() { using (var store = GetDocumentStore()) { IndexQuery q; using (var session = store.OpenSession()) { var people = session.Query <Person>() .Where(x => x.Name == "John") .ToList(); // create index q = session.Advanced.DocumentQuery <Person>() .WhereEquals(x => x.Name, "John") .Take(20) .GetIndexQuery(); } using (var context = JsonOperationContext.ShortTermSingleUse()) { var query1 = new IndexQueryServerSide(q.Query, context.ReadObject(new DynamicJsonValue { ["p0"] = q.QueryParameters["p0"] }, "query/parameters")) { #pragma warning disable 618 Start = q.Start, PageSize = q.PageSize, #pragma warning restore 618 SkipDuplicateChecking = q.SkipDuplicateChecking, WaitForNonStaleResults = q.WaitForNonStaleResults, WaitForNonStaleResultsTimeout = q.WaitForNonStaleResultsTimeout }; var database = await Server .ServerStore .DatabasesLandlord .TryGetOrCreateResourceStore(new StringSegment(store.Database)); var index = database.IndexStore.GetIndexes().First(); var marker = database.QueryRunner.MarkQueryAsRunning(index.Name, query1, OperationCancelToken.None); var now = marker.StartTime; var queryId = marker.QueryId; var conventions = new DocumentConventions(); using (var commands = store.Commands()) { var json = commands.RawGetJson <BlittableJsonReaderObject>("/debug/queries/running"); Assert.True(json.TryGet(index.Name, out BlittableJsonReaderArray array)); Assert.Equal(1, array.Length); foreach (BlittableJsonReaderObject info in array) { Assert.True(info.TryGet(nameof(ExecutingQueryInfo.QueryId), out long actualQueryId)); Assert.True(info.TryGet(nameof(ExecutingQueryInfo.Duration), out string duration)); Assert.NotNull(duration); Assert.True(info.TryGet(nameof(ExecutingQueryInfo.IndexName), out string indexName)); Assert.Equal(index.Name, indexName); Assert.True(info.TryGet(nameof(ExecutingQueryInfo.StartTime), out string startTimeAsString)); Assert.Equal(now, DateTime.Parse(startTimeAsString).ToUniversalTime()); Assert.False(info.TryGetMember(nameof(ExecutingQueryInfo.Token), out object token)); Assert.Null(token); if (actualQueryId == queryId) { BlittableJsonReaderObject queryInfo; Assert.True(info.TryGet(nameof(ExecutingQueryInfo.QueryInfo), out queryInfo)); var query = (IndexQuery)conventions.DeserializeEntityFromBlittable(typeof(IndexQuery), queryInfo); Assert.True(q.Equals(query)); continue; } throw new NotSupportedException("Should not happen."); } } } } }