public void MultiFetchNoCollectionWorks() { var func = GenerateMultipleNoCollectionMapper(); var comment = new Comment(); var post = new Post { PostId = 1 }; var author = new User { UserId = 3 }; var resultComment = ((Func<object[], Comment>)func)(new object[] { comment, post, author }); Assert.Equal(3, resultComment.Post.Author.UserId); }
public void MultiFetchNoCollectionHasTrackingEnabled() { var func = GenerateMultipleNoCollectionMapper(); var comment = new Comment(); var post = new Post { PostId = 1 }; var author = new User { UserId = 3 }; var resultComment = ((Func<object[], Comment>)func)(new object[] { comment, post, author }); Assert.True(((ITrackedEntity)resultComment).IsTrackingEnabled()); Assert.True(((ITrackedEntity)resultComment.Post).IsTrackingEnabled()); Assert.True(((ITrackedEntity)resultComment.Post.Author).IsTrackingEnabled()); }
public void SingleRowCollectionTestForJames() { var funcFac = GenerateSingleMapperWithFetch(); var post1 = new Post { PostId = 1 }; var comment1 = new Comment { CommentId = 1 }; var blog1 = new Blog { BlogId = 1 }; Post currentRoot = null; IList<Post> results = new List<Post>(); var func = (Func<object[], Post>)funcFac.DynamicInvoke(currentRoot, results); func(new object[] { post1, blog1, comment1 }); Assert.Equal(1, results[0].Comments.First().CommentId); Assert.Equal(1, results[0].Blog.BlogId); }
public void SingleCollectionWorks() { var funcFac = GenerateSingleMapper(); var post1 = new Post { PostId = 1 }; var post2 = new Post { PostId = 2 }; var comment1 = new Comment { CommentId = 1 }; var comment2 = new Comment { CommentId = 2 }; var comment3 = new Comment { CommentId = 3 }; Post currentRoot = null; IList<Post> results = new List<Post>(); var func = (Func<object[], Post>)funcFac.DynamicInvoke(currentRoot, results); func(new object[] { post1, comment1 }); func(new object[] { post1, comment2 }); func(new object[] { post2, comment3 }); Assert.Equal(1, results[0].Comments.First().CommentId); Assert.Equal(2, results[0].Comments.Last().CommentId); Assert.Equal(3, results[1].Comments.First().CommentId); }
public void SingleCollectionHasTrackingEnabledLast() { var funcFac = GenerateSingleMapper(); var post1 = new Post { PostId = 1 }; var post2 = new Post { PostId = 2 }; var comment1 = new Comment { CommentId = 1 }; var comment2 = new Comment { CommentId = 2 }; var comment3 = new Comment { CommentId = 3 }; Post currentRoot = null; IList<Post> results = new List<Post>(); var func = (Func<object[], Post>)funcFac.DynamicInvoke(currentRoot, results); func(new object[] { post1, comment1 }); func(new object[] { post1, comment2 }); func(new object[] { post2, comment3 }); Assert.False(((ITrackedEntity)results[0]).GetDirtyProperties().Any()); Assert.False(((ITrackedEntity)results[0].Comments.First()).GetDirtyProperties().Any()); Assert.False(((ITrackedEntity)results[0].Comments.ElementAt(1)).GetDirtyProperties().Any()); Assert.False(((ITrackedEntity)results[1]).GetDirtyProperties().Any()); Assert.False(((ITrackedEntity)results[1].Comments.First()).GetDirtyProperties().Any()); }
public void MultiFetchNoCollectionNullWorks() { var func = GenerateMultipleNoCollectionMapper(); var comment = new Comment { CommentId = 1 }; Post post = null; var author = new User { UserId = 3 }; var resultComment = ((Func<object[], Comment>)func)(new object[] { comment, post, author }); Assert.Equal(1, resultComment.CommentId); Assert.Null(resultComment.Post); }
public void FetchManyNonRootTrackingEnabledLast() { var config = new CustomConfig(); var selectQuery = new SelectQuery<PostTag>(new Mock<ISelectQueryExecutor>().Object).FetchMany(p => p.Post.Comments).ThenFetch(c => c.User) as SelectQuery<PostTag>; var writer = new SelectWriter(new SqlServer2012Dialect(), config); var result = writer.GenerateSql(selectQuery); var mapper = new SingleCollectionMapperGenerator(config); var funcFac = mapper.GenerateCollectionMapper<PostTag>(result.FetchTree).Item1; // setup the scenario var tag1 = new PostTag { PostTagId = 1 }; var tag2 = new PostTag { PostTagId = 2 }; var tag3 = new PostTag { PostTagId = 3 }; var post1 = new Post { PostId = 1, Title = "Foo" }; var anotherPost1 = new Post { PostId = 1, Title = "Foo" }; var post2 = new Post { PostId = 2, Title = "Foo" }; var post3 = new Post { PostId = 3, Title = "Foo" }; var post4 = new Post { PostId = 4, Title = "Foo" }; var comment1 = new Comment { CommentId = 1 }; var comment2 = new Comment { CommentId = 2 }; var comment3 = new Comment { CommentId = 3 }; var comment4 = new Comment { CommentId = 4 }; var comment5 = new Comment { CommentId = 5 }; var comment6 = new Comment { CommentId = 6 }; var user1 = new User { UserId = 1 }; var user2 = new User { UserId = 2 }; var user3 = new User { UserId = 3 }; var user4 = new User { UserId = 4 }; var user5 = new User { UserId = 5 }; PostTag currentRoot = null; IList<PostTag> results = new List<PostTag>(); var func = (Func<object[], PostTag>)funcFac.DynamicInvoke(currentRoot, results); func(new object[] { tag1, post1, comment1, user1 }); func(new object[] { tag1, post1, comment2, user1 }); func(new object[] { tag1, post1, comment3, user2 }); func(new object[] { tag2, anotherPost1, comment1, user1 }); func(new object[] { tag2, anotherPost1, comment2, user1 }); func(new object[] { tag2, anotherPost1, comment3, user2 }); func(new object[] { tag3, post2, comment4, user3 }); func(new object[] { tag3, post2, comment5, user4 }); func(new object[] { tag3, post2, comment6, user5 }); Assert.False(((ITrackedEntity)results[0]).GetDirtyProperties().Any()); Assert.False(((ITrackedEntity)results[0].Post).GetDirtyProperties().Any()); Assert.False(((ITrackedEntity)results[0].Post.Comments[0]).GetDirtyProperties().Any()); Assert.False(((ITrackedEntity)results[0].Post.Comments[0].User).GetDirtyProperties().Any()); }
public void FetchManyNonRootWorks() { var config = new CustomConfig(); var selectQuery = new SelectQuery<PostTag>(new Mock<ISelectQueryExecutor>().Object).FetchMany(p => p.Post.Comments).ThenFetch(c => c.User) as SelectQuery<PostTag>; var writer = new SelectWriter(new SqlServer2012Dialect(), config); var result = writer.GenerateSql(selectQuery); var mapper = new SingleCollectionMapperGenerator(config); var funcFac = mapper.GenerateCollectionMapper<PostTag>(result.FetchTree).Item1; // setup the scenario var tag1 = new PostTag { PostTagId = 1 }; var tag2 = new PostTag { PostTagId = 2 }; var tag3 = new PostTag { PostTagId = 3 }; var post1 = new Post { PostId = 1, Title = "Foo" }; var anotherPost1 = new Post { PostId = 1, Title = "Foo" }; var post2 = new Post { PostId = 2, Title = "Foo" }; var post3 = new Post { PostId = 3, Title = "Foo" }; var post4 = new Post { PostId = 4, Title = "Foo" }; var comment1 = new Comment { CommentId = 1 }; var comment2 = new Comment { CommentId = 2 }; var comment3 = new Comment { CommentId = 3 }; var comment4 = new Comment { CommentId = 4 }; var comment5 = new Comment { CommentId = 5 }; var comment6 = new Comment { CommentId = 6 }; var user1 = new User { UserId = 1 }; var user2 = new User { UserId = 2 }; var user3 = new User { UserId = 3 }; var user4 = new User { UserId = 4 }; var user5 = new User { UserId = 5 }; PostTag currentRoot = null; IList<PostTag> results = new List<PostTag>(); var func = (Func<object[], PostTag>)funcFac.DynamicInvoke(currentRoot, results); func(new object[] { tag1, post1, comment1, user1 }); func(new object[] { tag1, post1, comment2, user1 }); func(new object[] { tag1, post1, comment3, user2 }); func(new object[] { tag2, anotherPost1, comment1, user1 }); func(new object[] { tag2, anotherPost1, comment2, user1 }); func(new object[] { tag2, anotherPost1, comment3, user2 }); func(new object[] { tag3, post2, comment4, user3 }); func(new object[] { tag3, post2, comment5, user4 }); func(new object[] { tag3, post2, comment6, user5 }); Assert.Equal(3, results.Count); Assert.Equal(3, results.First().Post.Comments.Count); Assert.Equal(1, results.First().Post.PostId); Assert.Equal(1, results.First().Post.Comments.First().User.UserId); Assert.Equal(1, results.First().Post.Comments.ElementAt(1).User.UserId); Assert.Equal(2, results.First().Post.Comments.ElementAt(2).User.UserId); Assert.Equal(3, results.ElementAt(1).Post.Comments.Count); Assert.Equal(1, results.ElementAt(1).Post.PostId); Assert.Equal(1, results.ElementAt(1).Post.Comments.First().User.UserId); Assert.Equal(1, results.ElementAt(1).Post.Comments.ElementAt(1).User.UserId); Assert.Equal(2, results.ElementAt(1).Post.Comments.ElementAt(2).User.UserId); Assert.Equal(3, results.ElementAt(2).Post.Comments.Count); Assert.Equal(2, results.ElementAt(2).Post.PostId); Assert.Equal(4, results.ElementAt(2).Post.Comments.First().CommentId); Assert.Equal(5, results.ElementAt(2).Post.Comments.ElementAt(1).CommentId); Assert.Equal(6, results.ElementAt(2).Post.Comments.ElementAt(2).CommentId); }
public void MultiCollectionWorks() { var funcFac = GenerateMultiMapper(); var post1 = new Post { PostId = 1 }; var post2 = new Post { PostId = 2 }; var comment1 = new Comment { CommentId = 1 }; var comment2 = new Comment { CommentId = 2 }; var comment3 = new Comment { CommentId = 3 }; var postTag1 = new PostTag { PostTagId = 1 }; var postTag2 = new PostTag { PostTagId = 2 }; var postTag3 = new PostTag { PostTagId = 3 }; Post currentRoot = null; IList<Post> results = new List<Post>(); IDictionary<int, Comment> dict0 = new Dictionary<int, Comment>(); var hashsetPair0 = new HashSet<Tuple<int, int>>(); IDictionary<int, PostTag> dict1 = new Dictionary<int, PostTag>(); var hashsetPair1 = new HashSet<Tuple<int, int>>(); var func = (Func<object[], Post>)funcFac.DynamicInvoke(currentRoot, results, dict0, hashsetPair0, dict1, hashsetPair1); func(new object[] { post1, comment1, postTag1 }); func(new object[] { post1, comment2, postTag1 }); func(new object[] { post2, comment3, postTag2 }); func(new object[] { post2, comment3, postTag3 }); Assert.Equal(1, results[0].Comments.First().CommentId); Assert.Equal(2, results[0].Comments.Last().CommentId); Assert.Equal(2, results[0].Comments.Count); Assert.Equal(3, results[1].Comments.First().CommentId); Assert.Equal(1, results[1].Comments.Count); Assert.Equal(1, results[0].Tags.First().PostTagId); Assert.Equal(1, results[0].Tags.Count); Assert.Equal(2, results[1].Tags.First().PostTagId); Assert.Equal(3, results[1].Tags.Last().PostTagId); Assert.Equal(2, results[1].Tags.Count); }
public void ThenFetchWorksTrackingEnabledLast() { var funcFac = GenerateThenFetchMapper(); var post1 = new Post { PostId = 1 }; var post2 = new Post { PostId = 2 }; var comment1 = new Comment { CommentId = 1 }; var comment2 = new Comment { CommentId = 2 }; var comment3 = new Comment { CommentId = 3 }; var user1 = new User { UserId = 1 }; var user2 = new User { UserId = 2 }; Post currentRoot = null; IList<Post> results = new List<Post>(); var func = (Func<object[], Post>)funcFac.DynamicInvoke(currentRoot, results); func(new object[] { post1, comment1, user1 }); func(new object[] { post1, comment2, user2 }); func(new object[] { post2, comment3, user1 }); Assert.False(((ITrackedEntity)results[0]).GetDirtyProperties().Any()); Assert.False(((ITrackedEntity)results[0].Comments.First()).GetDirtyProperties().Any()); Assert.False(((ITrackedEntity)results[0].Comments.First().User).GetDirtyProperties().Any()); }
public void ThenFetchWorks() { var funcFac = GenerateThenFetchMapper(); var post1 = new Post { PostId = 1 }; var post2 = new Post { PostId = 2 }; var comment1 = new Comment { CommentId = 1 }; var comment2 = new Comment { CommentId = 2 }; var comment3 = new Comment { CommentId = 3 }; var user1 = new User { UserId = 1 }; var user2 = new User { UserId = 2 }; Post currentRoot = null; IList<Post> results = new List<Post>(); var func = (Func<object[], Post>)funcFac.DynamicInvoke(currentRoot, results); func(new object[] { post1, comment1, user1 }); func(new object[] { post1, comment2, user2 }); func(new object[] { post2, comment3, user1 }); Assert.Equal(1, results[0].Comments.First().User.UserId); Assert.Equal(2, results[0].Comments.Last().User.UserId); Assert.Equal(1, results[1].Comments.First().User.UserId); }