Ejemplo n.º 1
0
        public void Can_compile_map_reduce_using_linq_methods()
        {
            var viewGenerator = new DynamicViewCompiler("test", new IndexDefinition
            {
                Map    = @"docs.Users
    .Select(user => new {Location = user.Location, Count = 1})",
                Reduce =
                    @"results
    .GroupBy(agg => agg.Location)
    .Select(g => new {Location = g.Key, Count = g.Sum(x => x.Count)})"
            }, ".").GenerateInstance();


            var source = viewGenerator.MapDefinitions[0](new[]
            {
                GetDocumentFromString(
                    @"
                {
                    '@metadata': {'Raven-Entity-Name': 'Users', '@id': 1},
                    'Location': 'Tel Aviv'
                }"),
                GetDocumentFromString(
                    @"
                {
                    '@metadata': {'Raven-Entity-Name': 'Users', '@id': 1},
                    'Location': 'Tel Aviv'
                }")
            }).ToArray();
            var results = viewGenerator.ReduceDefinition(source).Cast <object>().ToArray();

            var expected = new[]
            {
                "{ Location = Tel Aviv, Count = 2 }",
            };

            for (var i = 0; i < results.Length; i++)
            {
                Assert.Equal(expected[i], results[i].ToString());
            }
        }
        public void CanExecuteTheTransformResultFunction()
        {
            var answersIndex = new Answers_ByAnswerEntity2 {
                Conventions = new DocumentConvention()
            };
            IndexDefinition       indexDefinition       = answersIndex.CreateIndexDefinition();
            var                   dynamicViewCompiler   = new DynamicViewCompiler("test", indexDefinition, ".");
            AbstractViewGenerator abstractViewGenerator = dynamicViewCompiler.GenerateInstance();

            using (var documentStore = NewDocumentStore())
            {
                Guid questionId = Guid.NewGuid();
                Guid answerId   = Guid.NewGuid();

                using (IDocumentSession session = documentStore.OpenSession())
                {
                    var user = new User {
                        Id = @"user/222", DisplayName = "John Doe"
                    };
                    session.Store(user);

                    var question = new Question2
                    {
                        Id      = questionId,
                        Title   = "How to do this in RavenDb?",
                        Content = "I'm trying to find how to model documents for better DDD support.",
                        UserId  = @"user/222"
                    };
                    session.Store(question);


                    var answer = new AnswerEntity2
                    {
                        Id       = answerId,
                        Question = question,
                        Content  = "This is doable",
                        UserId   = user.Id
                    };
                    answer.Votes = new[]
                    {
                        new AnswerVoteEntity2
                        {
                            Id         = Guid.NewGuid(),
                            QuestionId = questionId,
                            Answer     = answer,
                            Delta      = 2
                        }
                    };


                    session.Store(new Answer2
                    {
                        Id         = answerId,
                        UserId     = user.Id,
                        QuestionId = question.Id,
                        Content    = "This is doable",
                        Votes      = new[]
                        {
                            new AnswerVote2
                            {
                                Id         = Guid.NewGuid(),
                                QuestionId = questionId,
                                AnswerId   = answerId,
                                Delta      = 2
                            }
                        }
                    });

                    session.SaveChanges();
                }

                documentStore.DocumentDatabase.TransactionalStorage.Batch(accessor =>
                {
                    var documentRetriever = new DocumentRetriever(accessor, new OrderedPartCollection <AbstractReadTrigger>(),
                                                                  documentStore.DocumentDatabase.TransactionalStorage
                                                                  .GetInFlightTransactionalState(
                                                                      documentStore.DocumentDatabase.Documents.Put,
                                                                      documentStore.DocumentDatabase.Documents.Delete));
                    var dynamicJsonObjects         = new[] { new DynamicJsonObject(accessor.Documents.DocumentByKey("answer2s/" + answerId.ToString(), null).ToJson()), };
                    var transformResultsDefinition = abstractViewGenerator.TransformResultsDefinition(documentRetriever,
                                                                                                      dynamicJsonObjects
                                                                                                      );

                    transformResultsDefinition.ToArray();
                });
            }
        }