/Rhino.Etl.Tests/Joins/JoinFixture.cs

http://github.com/ayende/rhino-etl · C# · 208 lines · 176 code · 32 blank · 0 comment · 0 complexity · 12a12fe8abc8c188dffadd406db46bed MD5 · raw file

  1. namespace Rhino.Etl.Tests.Joins
  2. {
  3. using System.Collections.Generic;
  4. using Core;
  5. using Xunit;
  6. using Rhino.Etl.Core.Pipelines;
  7. public class JoinFixture : BaseJoinFixture
  8. {
  9. [Fact]
  10. public void InnerJoin()
  11. {
  12. using (InnerJoinUsersToPeopleByEmail join = new InnerJoinUsersToPeopleByEmail())
  13. {
  14. join.Left(new GenericEnumerableOperation(left))
  15. .Right(new GenericEnumerableOperation(right));
  16. join.PrepareForExecution(new SingleThreadedPipelineExecuter());
  17. IEnumerable<Row> result = join.Execute(null);
  18. List<Row> items = new List<Row>(result);
  19. Assert.Equal(1, items.Count);
  20. Assert.Equal(3, items[0]["person_id"]);
  21. }
  22. }
  23. [Fact]
  24. public void RightJoin()
  25. {
  26. using (RightJoinUsersToPeopleByEmail join = new RightJoinUsersToPeopleByEmail())
  27. {
  28. join.Left(new GenericEnumerableOperation(left))
  29. .Right(new GenericEnumerableOperation(right));
  30. join.PrepareForExecution(new SingleThreadedPipelineExecuter());
  31. IEnumerable<Row> result = join.Execute(null);
  32. List<Row> items = new List<Row>(result);
  33. Assert.Equal(2, items.Count);
  34. Assert.Equal(3, items[0]["person_id"]);
  35. Assert.Null(items[1]["name"]);
  36. Assert.Equal(5, items[1]["person_id"]);
  37. }
  38. }
  39. [Fact]
  40. public void LeftJoin()
  41. {
  42. using (LeftJoinUsersToPeopleByEmail join = new LeftJoinUsersToPeopleByEmail())
  43. {
  44. join.Left(new GenericEnumerableOperation(left))
  45. .Right(new GenericEnumerableOperation(right));
  46. join.PrepareForExecution(new SingleThreadedPipelineExecuter());
  47. IEnumerable<Row> result = join.Execute(null);
  48. List<Row> items = new List<Row>(result);
  49. Assert.Equal(2, items.Count);
  50. Assert.Equal(3, items[0]["person_id"]);
  51. Assert.Null(items[1]["person_id"]);
  52. Assert.Equal("bar", items[1]["name"]);
  53. }
  54. }
  55. [Fact]
  56. public void FullJoin()
  57. {
  58. using (FullJoinUsersToPeopleByEmail join = new FullJoinUsersToPeopleByEmail())
  59. {
  60. join.Left(new GenericEnumerableOperation(left))
  61. .Right(new GenericEnumerableOperation(right));
  62. join.PrepareForExecution(new SingleThreadedPipelineExecuter());
  63. IEnumerable<Row> result = join.Execute(null);
  64. List<Row> items = new List<Row>(result);
  65. Assert.Equal(3, items.Count);
  66. Assert.Equal(3, items[0]["person_id"]);
  67. Assert.Null(items[1]["person_id"]);
  68. Assert.Equal("bar", items[1]["name"]);
  69. Assert.Null(items[2]["name"]);
  70. Assert.Equal(5, items[2]["person_id"]);
  71. }
  72. }
  73. [Fact]
  74. public void SortMergeInnerJoin()
  75. {
  76. using (InnerMergeJoinUsersToPeopleByEmail join = new InnerMergeJoinUsersToPeopleByEmail())
  77. {
  78. join.Left(new GenericEnumerableOperation(left))
  79. .Right(new GenericEnumerableOperation(right));
  80. join.PrepareForExecution(new SingleThreadedPipelineExecuter());
  81. IEnumerable<Row> result = join.Execute(null);
  82. List<Row> items = new List<Row>(result);
  83. Assert.Equal(1, items.Count);
  84. Assert.Equal(3, items[0]["person_id"]);
  85. }
  86. }
  87. [Fact]
  88. public void SortMergeLeftJoin()
  89. {
  90. using (LeftMergeJoinUsersToPeopleByEmail join = new LeftMergeJoinUsersToPeopleByEmail())
  91. {
  92. join.Left(new GenericEnumerableOperation(left))
  93. .Right(new GenericEnumerableOperation(right));
  94. join.PrepareForExecution(new SingleThreadedPipelineExecuter());
  95. IEnumerable<Row> result = join.Execute(null);
  96. List<Row> items = new List<Row>(result);
  97. Assert.Equal(2, items.Count);
  98. Assert.Equal(3, items[0]["person_id"]);
  99. Assert.Null(items[1]["person_id"]);
  100. Assert.Equal("bar", items[1]["name"]);
  101. }
  102. }
  103. [Fact]
  104. public void SortMergeRightJoin()
  105. {
  106. using (RightMergeJoinUsersToPeopleByEmail join = new RightMergeJoinUsersToPeopleByEmail())
  107. {
  108. join.Left(new GenericEnumerableOperation(left))
  109. .Right(new GenericEnumerableOperation(right));
  110. join.PrepareForExecution(new SingleThreadedPipelineExecuter());
  111. IEnumerable<Row> result = join.Execute(null);
  112. List<Row> items = new List<Row>(result);
  113. Assert.Equal(2, items.Count);
  114. Assert.Equal(3, items[0]["person_id"]);
  115. Assert.Null(items[1]["name"]);
  116. Assert.Equal(5, items[1]["person_id"]);
  117. }
  118. }
  119. [Fact]
  120. public void SortMergeFullJoin()
  121. {
  122. using (FullMergeJoinUsersToPeopleByEmail join = new FullMergeJoinUsersToPeopleByEmail())
  123. {
  124. join.Left(new GenericEnumerableOperation(left))
  125. .Right(new GenericEnumerableOperation(right));
  126. join.PrepareForExecution(new SingleThreadedPipelineExecuter());
  127. IEnumerable<Row> result = join.Execute(null);
  128. List<Row> items = new List<Row>(result);
  129. Assert.Equal(3, items.Count);
  130. Assert.Equal(3, items[0]["person_id"]);
  131. Assert.Null(items[1]["person_id"]);
  132. Assert.Equal("bar", items[1]["name"]);
  133. Assert.Null(items[2]["name"]);
  134. Assert.Equal(5, items[2]["person_id"]);
  135. }
  136. }
  137. [Fact]
  138. public void SortMergeFullJoinMergesMultipleNonMatchingLeftRowsAtEnd()
  139. {
  140. AddUser("toby", "toby@test.org");
  141. AddUser("tom", "tom@test.org");
  142. using (FullMergeJoinUsersToPeopleByEmail join = new FullMergeJoinUsersToPeopleByEmail())
  143. {
  144. join.Left(new GenericEnumerableOperation(left))
  145. .Right(new GenericEnumerableOperation(right));
  146. join.PrepareForExecution(new SingleThreadedPipelineExecuter());
  147. IEnumerable<Row> result = join.Execute(null);
  148. List<Row> items = new List<Row>(result);
  149. Assert.Equal(5, items.Count);
  150. Assert.Null(items[3]["person_id"]);
  151. Assert.Equal("toby", items[3]["name"]);
  152. Assert.Null(items[4]["person_id"]);
  153. Assert.Equal("tom", items[4]["name"]);
  154. }
  155. }
  156. [Fact]
  157. public void SortMergeFullJoinMergesMultipleNonMatchingRightRowsAtEnd()
  158. {
  159. AddPerson(8, "toby@test.org");
  160. AddPerson(10, "tom@test.org");
  161. using (FullMergeJoinUsersToPeopleByEmail join = new FullMergeJoinUsersToPeopleByEmail())
  162. {
  163. join.Left(new GenericEnumerableOperation(left))
  164. .Right(new GenericEnumerableOperation(right));
  165. join.PrepareForExecution(new SingleThreadedPipelineExecuter());
  166. IEnumerable<Row> result = join.Execute(null);
  167. List<Row> items = new List<Row>(result);
  168. Assert.Equal(5, items.Count);
  169. Assert.Equal(8, items[3]["person_id"]);
  170. Assert.Null(items[3]["name"]);
  171. Assert.Equal(10, items[4]["person_id"]);
  172. Assert.Null(items[4]["name"]);
  173. }
  174. }
  175. }
  176. }