Example #1
0
        public void ResolveJoinInfo_ResolvesCollectionJoinInfo()
        {
            var memberInfo = typeof(Cook).GetProperty("IllnessDays");
            var unresolvedCollectionJoinInfo = new UnresolvedCollectionJoinInfo(Expression.Constant(new Cook()), memberInfo);

            var sqlEntityExpression = SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression(typeof(Cook));

            var fakeResolvedJoinInfo = SqlStatementModelObjectMother.CreateResolvedJoinInfo();

            _stageMock
            .Expect(mock => mock.ResolveCollectionSourceExpression(unresolvedCollectionJoinInfo.SourceExpression, _mappingResolutionContext))
            .Return(sqlEntityExpression);

            _resolverMock
            .Expect(
                mock =>
                mock.ResolveJoinInfo(
                    Arg <UnresolvedJoinInfo> .Matches(a => a.MemberInfo == memberInfo && a.OriginatingEntity.Type == typeof(Cook)),
                    Arg.Is(_generator)))
            .Return(fakeResolvedJoinInfo);

            _stageMock
            .Expect(mock => mock.ResolveTableInfo(fakeResolvedJoinInfo.ForeignTableInfo, _mappingResolutionContext))
            .Return(fakeResolvedJoinInfo.ForeignTableInfo);
            _stageMock
            .Expect(mock => mock.ResolveJoinCondition(fakeResolvedJoinInfo.JoinCondition, _mappingResolutionContext))
            .Return(fakeResolvedJoinInfo.JoinCondition);

            var resolvedJoinInfo = ResolvingJoinInfoVisitor.ResolveJoinInfo(unresolvedCollectionJoinInfo, _resolverMock, _generator, _stageMock, _mappingResolutionContext);

            Assert.That(resolvedJoinInfo, Is.SameAs(fakeResolvedJoinInfo));

            _stageMock.VerifyAllExpectations();
            _resolverMock.VerifyAllExpectations();
        }
Example #2
0
        public IJoinInfo VisitUnresolvedCollectionJoinInfo(UnresolvedCollectionJoinInfo joinInfo)
        {
            ArgumentUtility.CheckNotNull("joinInfo", joinInfo);

            var resolvedExpression = _stage.ResolveCollectionSourceExpression(joinInfo.SourceExpression, _context);

            while (resolvedExpression is UnaryExpression)
            {
                resolvedExpression = _stage.ResolveCollectionSourceExpression(((UnaryExpression)resolvedExpression).Operand, _context);
            }

            var resolvedExpressionAsEntity = resolvedExpression as SqlEntityExpression;

            if (resolvedExpressionAsEntity != null)
            {
                var unresolvedJoinInfo = new UnresolvedJoinInfo(resolvedExpressionAsEntity, joinInfo.MemberInfo, JoinCardinality.Many);
                return(unresolvedJoinInfo.Accept(this));
            }

            var message = string.Format(
                "Only entities can be used as the collection source in from expressions, '{0}' cannot. Member: '{1}'",
                resolvedExpression,
                joinInfo.MemberInfo);

            throw new NotSupportedException(message);
        }
        public void ApplyContext_VisitUnresolvedCollectionJoinInfo()
        {
            var unresolvedJoinInfo = new UnresolvedCollectionJoinInfo(Expression.Constant(new Cook()), typeof(Cook).GetProperty("IllnessDays"));

            var result = SqlContextJoinInfoVisitor.ApplyContext(unresolvedJoinInfo, SqlExpressionContext.ValueRequired, _stageMock, _mappingResolutionContext);

            Assert.That(result, Is.SameAs(unresolvedJoinInfo));
        }
        public void GenerateSql_WithUnresolvedCollectionJoinInfo()
        {
            var originalTable      = new SqlTable(new ResolvedSimpleTableInfo(typeof(Cook), "CookTable", "c"), JoinSemantics.Inner);
            var memberInfo         = typeof(Restaurant).GetProperty("Cooks");
            var collectionJoinInfo = new UnresolvedCollectionJoinInfo(Expression.Constant(new Cook[] { }), memberInfo);

            originalTable.GetOrAddLeftJoin(collectionJoinInfo, memberInfo);

            Assert.That(
                () => SqlTableAndJoinTextGenerator.GenerateSql(originalTable, _commandBuilder, _stageMock, false),
                Throws.TypeOf <InvalidOperationException>().With.Message.EqualTo("UnresolvedCollectionJoinInfo is not valid at this point."));
        }
Example #5
0
        public void ResolveJoinInfo_ResolvesCollectionJoinInfo_NoEntity()
        {
            var memberInfo = typeof(Cook).GetProperty("IllnessDays");
            var unresolvedCollectionJoinInfo = new UnresolvedCollectionJoinInfo(Expression.Constant(new Cook()), memberInfo);
            var fakeExpression = Expression.Constant(1);

            _stageMock
            .Expect(mock => mock.ResolveCollectionSourceExpression(unresolvedCollectionJoinInfo.SourceExpression, _mappingResolutionContext))
            .Return(fakeExpression);

            ResolvingJoinInfoVisitor.ResolveJoinInfo(unresolvedCollectionJoinInfo, _resolverMock, _generator, _stageMock, _mappingResolutionContext);
        }
        protected override Expression VisitMemberExpression(MemberExpression expression)
        {
            ArgumentUtility.CheckNotNull("expression", expression);

            var preparedMemberExpression = (MemberExpression)TranslateExpression(expression, Context, Stage, MethodCallTransformerProvider);

            var joinInfo                    = new UnresolvedCollectionJoinInfo(preparedMemberExpression.Expression, preparedMemberExpression.Member);
            var joinedTable                 = new SqlJoinedTable(joinInfo, JoinSemantics.Inner);
            var oldStyleJoinedTable         = _tableGenerator(joinedTable);
            var sqlTableReferenceExpression = new SqlTableReferenceExpression(oldStyleJoinedTable);

            FromExpressionInfo = new FromExpressionInfo(
                oldStyleJoinedTable, new Ordering[0], sqlTableReferenceExpression, new JoinConditionExpression(joinedTable));

            return(sqlTableReferenceExpression);
        }
 public void SetUp()
 {
     _joinInfo = SqlStatementModelObjectMother.CreateUnresolvedCollectionJoinInfo_RestaurantCooks();
 }
        public IJoinInfo VisitUnresolvedCollectionJoinInfo(UnresolvedCollectionJoinInfo joinInfo)
        {
            ArgumentUtility.CheckNotNull("joinInfo", joinInfo);

            return(joinInfo);
        }
Example #9
0
 IJoinInfo IJoinInfoVisitor.VisitUnresolvedCollectionJoinInfo(UnresolvedCollectionJoinInfo joinInfo)
 {
     throw new InvalidOperationException("UnresolvedCollectionJoinInfo is not valid at this point.");
 }