Пример #1
0
        public void VisitConstantExpression()
        {
            var constantExpression = Expression.Constant(0);

            _stageMock.Replay();
            _resolverMock
            .Expect(mock => mock.ResolveConstantExpression(constantExpression))
            .Return(constantExpression);
            _resolverMock.Replay();

            var result = _visitor.VisitExpression(constantExpression);

            _stageMock.VerifyAllExpectations();
            _resolverMock.VerifyAllExpectations();
            Assert.That(result, Is.SameAs(constantExpression));
        }
        public void ResolveTableInfo_GroupReferenceTableInfo()
        {
            var sqlTable       = SqlStatementModelObjectMother.CreateSqlTable(typeof(Cook));
            var groupingSelect = new SqlGroupingSelectExpression(
                Expression.MakeMemberAccess(new SqlTableReferenceExpression(sqlTable), typeof(Cook).GetProperty("Name")),
                Expression.MakeMemberAccess(new SqlTableReferenceExpression(sqlTable), typeof(Cook).GetProperty("ID")));
            var dataInfo = new StreamedSequenceInfo(
                typeof(IEnumerable <>).MakeGenericType(groupingSelect.Type),
                Expression.Constant(null, groupingSelect.Type));
            var whereCondition       = Expression.Constant(false);
            var groupByExpression    = groupingSelect.KeyExpression;
            var groupingSubStatement = new SqlStatementBuilder
            {
                DataInfo          = dataInfo,
                SelectProjection  = groupingSelect,
                SqlTables         = { sqlTable },
                WhereCondition    = whereCondition,
                GroupByExpression = groupByExpression
            }.GetSqlStatement();
            var groupSource = SqlStatementModelObjectMother.CreateSqlTable(new ResolvedSubStatementTableInfo("q0", groupingSubStatement));
            var tableInfo   = new UnresolvedGroupReferenceTableInfo(groupSource);

            var expectedKeyViaElement     = Expression.MakeMemberAccess(new SqlTableReferenceExpression(sqlTable), typeof(Cook).GetProperty("Name"));
            var expectedKeyViaGroupSource = Expression.MakeMemberAccess(new SqlTableReferenceExpression(groupSource), groupSource.ItemType.GetProperty("Key"));

            var expectedResultWhereCondition =
                Expression.OrElse(
                    Expression.AndAlso(new SqlIsNullExpression(expectedKeyViaElement), new SqlIsNullExpression(expectedKeyViaGroupSource)),
                    Expression.AndAlso(
                        Expression.AndAlso(new SqlIsNotNullExpression(expectedKeyViaElement), new SqlIsNotNullExpression(expectedKeyViaGroupSource)),
                        Expression.Equal(expectedKeyViaElement, expectedKeyViaGroupSource)));

            var fakeWhereCondition = Expression.Constant(false);

            _stageMock
            .Expect(mock => mock.ResolveWhereExpression(Arg <Expression> .Is.Anything, Arg.Is(_mappingResolutionContext)))
            .WhenCalled(mi => SqlExpressionTreeComparer.CheckAreEqualTrees(expectedResultWhereCondition, (Expression)mi.Arguments[0]))
            .Return(fakeWhereCondition);
            _stageMock.Replay();

            var result = ResolvingTableInfoVisitor.ResolveTableInfo(tableInfo, _resolverMock, _generator, _stageMock, _mappingResolutionContext);

            _stageMock.VerifyAllExpectations();

            Assert.That(result, Is.TypeOf(typeof(ResolvedJoinedGroupingTableInfo)));

            var castResult = ((ResolvedJoinedGroupingTableInfo)result);

            var resultGroupingSelector = castResult.AssociatedGroupingSelectExpression;

            Assert.That(resultGroupingSelector, Is.SameAs(groupingSelect));

            Assert.That(castResult.GroupSourceTableAlias, Is.EqualTo("q0"));

            var resultSqlStatement = castResult.SqlStatement;

            Assert.That(resultSqlStatement.SqlTables, Is.EqualTo(groupingSubStatement.SqlTables));
            Assert.That(resultSqlStatement.Orderings, Is.Empty);
            Assert.That(resultSqlStatement.GroupByExpression, Is.Null);

            SqlExpressionTreeComparer.CheckAreEqualTrees(
                Expression.AndAlso(groupingSubStatement.WhereCondition, fakeWhereCondition),
                resultSqlStatement.WhereCondition);

            var expectedResultSelectProjection =
                Expression.MakeMemberAccess(new SqlTableReferenceExpression(resultSqlStatement.SqlTables[0]), typeof(Cook).GetProperty("ID"));

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedResultSelectProjection, resultSqlStatement.SelectProjection);

            Assert.That(resultSqlStatement.DataInfo, Is.TypeOf(typeof(StreamedSequenceInfo)));
            Assert.That(resultSqlStatement.DataInfo.DataType, Is.SameAs(typeof(IQueryable <int>)));

            var expectedItemExpression = resultSqlStatement.SelectProjection;

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedItemExpression, ((StreamedSequenceInfo)resultSqlStatement.DataInfo).ItemExpression);
        }
Пример #3
0
        public void ResolveSqlTable_ResolvesTableInfo()
        {
            _stageMock
            .Expect(mock => mock.ResolveTableInfo(_unresolvedTableInfo, _mappingResolutionContext))
            .Return(_fakeResolvedSimpleTableInfo);
            _stageMock.Replay();

            _visitor.ResolveSqlTable(_sqlTable);

            _stageMock.VerifyAllExpectations();
            Assert.That(_sqlTable.TableInfo, Is.SameAs(_fakeResolvedSimpleTableInfo));
        }