Пример #1
0
        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());
        }
Пример #2
0
        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());
        }