Пример #1
0
        /// <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);
            }
        }
Пример #2
0
            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);
            }
Пример #4
0
        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;
            }
Пример #6
0
        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;
        }
Пример #7
0
 public override void SetResponse(BlittableJsonReaderObject response, bool fromCache)
 {
     Result = (IndexStaleness)_conventions.DeserializeEntityFromBlittable(typeof(IndexStaleness), response);
 }
Пример #8
0
        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.");
                        }
                    }
                }
            }
        }
Пример #9
0
        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.");
                        }
                    }
                }
            }
        }