public void GroupJoinPhysicalRewriterFixture_SingleFieldKey() { // NOTE: some parameter names are hard coded into the optimizer TestDatabase db = new TestDatabase(); ITable <Group> groups = db.Groups; IIndex <Group, int> index = db.Groups.PrimaryKeyIndex as IIndex <Group, int>; Expression expression = CreateExpression(() => db.Members.GroupJoin( db.Groups, outer => outer.GroupId, inner => inner.Id, (m, g) => new { Member = m, Group = g })); Expression expectedExpression = CreateExpression(() => db.Members.GroupJoinIndexed( index, outer => outer.GroupId, x => x == null, x => (int)x, (m, g) => new { Member = m, Group = g }) .AsQueryable()); IExpressionRewriter rewriter = new GroupJoinPhysicalRewriter(); expression = rewriter.Rewrite(expression); Assert.AreEqual(expectedExpression.Type, expression.Type); Assert.AreEqual(expectedExpression.ToString(), expression.ToString()); }
public void GroupJoinPhysicalRewriterFixture_DoubleFieldKey() { // NOTE: some parameter names are hard coded into the optimizer TestDatabase db = new TestDatabase(); db.AddMemberGroupRelation(createMultiField: true, useTuple: true); ITable <Group> groups = db.Groups; IIndex <Group, Tuple <int, int> > index = db.Groups.Indexes.Last() as IIndex <Group, Tuple <int, int> >; Expression expression = CreateExpression(() => db.Members.GroupJoin( db.Groups, outer => new Tuple <int?, int>(outer.GroupId, outer.GroupId2), inner => new Tuple <int?, int>((int?)inner.Id, inner.Id2), (m, g) => new { Member = m, Group = g })); Expression expectedExpression = CreateExpression(() => db.Members.GroupJoinIndexed( index, outer => new Tuple <int?, int>(outer.GroupId, outer.GroupId2), x => x.Item1 == null, x => new Tuple <int, int>((int)x.Item1, x.Item2), (m, g) => new { Member = m, Group = g }) .AsQueryable()); IExpressionRewriter rewriter = new GroupJoinPhysicalRewriter(); expression = rewriter.Rewrite(expression); Assert.AreEqual(expectedExpression.Type, expression.Type); Assert.AreEqual(expectedExpression.ToString(), expression.ToString()); }