public void VisitSqlIsNullExpression_RevisitingTerminatesAfterInnerChanges_WithoutOuterChanges()
        {
            var inner            = Expression.Constant(0);
            var isNullExpression = new SqlIsNullExpression(inner);

            var fakeResolvedInner = new SqlLiteralExpression(1);

            _resolverMock.Expect(mock => mock.ResolveConstantExpression(inner)).Return(fakeResolvedInner);

            _entityIdentityResolverMock
            .Expect(mock => mock.ResolvePotentialEntityComparison(Arg <SqlIsNullExpression> .Is.Anything))
            .Return(null)
            .WhenCalled(mi => mi.ReturnValue = mi.Arguments[0]);
            _compoundComparisonSplitterMock
            .Expect(mock => mock.SplitPotentialCompoundComparison(Arg <SqlIsNullExpression> .Is.Anything))
            .Return(null)
            .WhenCalled(mi => mi.ReturnValue = mi.Arguments[0]);

            // No revisiting

            var result = _visitor.Visit(isNullExpression);

            _resolverMock.VerifyAllExpectations();
            _entityIdentityResolverMock.VerifyAllExpectations();
            _compoundComparisonSplitterMock.VerifyAllExpectations();

            Assert.That(result, Is.TypeOf <SqlIsNullExpression> ());
            Assert.That(((SqlIsNullExpression)result).Expression, Is.SameAs(fakeResolvedInner));
        }
        public void ResolvePotentialEntityComparison_SqlIsNullExpression_NonEntities_ReturnsSameExpression()
        {
            var sqlIsNullExpression = new SqlIsNullExpression(Expression.Constant(0));

            var result = _entityIdentityResolver.ResolvePotentialEntityComparison(sqlIsNullExpression);

            Assert.That(result, Is.SameAs(sqlIsNullExpression));
        }
        public void SplitPotentialCompoundComparison_SqlIsNullExpression_ReturnsNonNewExpression_Unchanged()
        {
            var expression          = Expression.Constant(1);
            var sqlIsNullExpression = new SqlIsNullExpression(expression);

            var result = _compoundExpressionComparisonSplitter.SplitPotentialCompoundComparison(sqlIsNullExpression);

            Assert.That(result, Is.SameAs(sqlIsNullExpression));
        }
        public void ResolvePotentialEntityComparison_SqlIsNullExpression_ResolvesEntitiesToIdentity()
        {
            var sqlIsNullExpression = new SqlIsNullExpression(_entityExpression);

            var result = _entityIdentityResolver.ResolvePotentialEntityComparison(sqlIsNullExpression);

            var expected = new SqlIsNullExpression(_entityExpression.GetIdentityExpression());

            SqlExpressionTreeComparer.CheckAreEqualTrees(expected, result);
        }
예제 #5
0
        public void VisitSqlIsNullExpression()
        {
            var expression          = Expression.Constant("test");
            var sqlIsNullExpression = new SqlIsNullExpression(expression);

            SqlGeneratingExpressionVisitor.GenerateSql(
                sqlIsNullExpression, _commandBuilder, _stageMock);

            Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo("(@1 IS NULL)"));
        }
        public void SplitPotentialCompoundComparison_SqlIsNullExpression_ExpandsNewExpression_ByCheckingAllArguments_ZeroArguments()
        {
            var newExpression       = Expression.New(TypeForNewExpression.GetConstructor());
            var sqlIsNullExpression = new SqlIsNullExpression(newExpression);

            var result = _compoundExpressionComparisonSplitter.SplitPotentialCompoundComparison(sqlIsNullExpression);

            var expected = Expression.Constant(false);

            SqlExpressionTreeComparer.CheckAreEqualTrees(expected, result);
        }
예제 #7
0
        public virtual Expression VisitSqlIsNullExpression(SqlIsNullExpression expression)
        {
            ArgumentUtility.CheckNotNull("expression", expression);

            _commandBuilder.Append("(");
            VisitExpression(expression.Expression);
            _commandBuilder.Append(" IS NULL");
            _commandBuilder.Append(")");

            return(expression);
        }
예제 #8
0
        public SqlIsNullExpression ResolvePotentialEntityComparison(SqlIsNullExpression isNullExpression)
        {
            var newExpression = ResolvePotentialEntity(isNullExpression.Expression);

            if (newExpression != isNullExpression.Expression)
            {
                return(new SqlIsNullExpression(newExpression));
            }

            return(isNullExpression);
        }
        public Expression VisitSqlIsNull(SqlIsNullExpression expression)
        {
            ArgumentUtility.CheckNotNull("expression", expression);

            var newExpression = ApplySingleValueContext(expression.Expression);

            if (newExpression != expression.Expression)
            {
                return(new SqlIsNullExpression(newExpression));
            }
            return(expression);
        }
        public void SplitPotentialCompoundComparison_SqlIsNullExpression_ExpandsNewExpression_ByCheckingAllArguments_OnlyOneArgument()
        {
            var arg1                = Expression.Constant(1);
            var newExpression       = Expression.New(TypeForNewExpression.GetConstructor(typeof(int)), new[] { arg1 });
            var sqlIsNullExpression = new SqlIsNullExpression(newExpression);

            var result = _compoundExpressionComparisonSplitter.SplitPotentialCompoundComparison(sqlIsNullExpression);

            var expected = new SqlIsNullExpression(arg1);

            SqlExpressionTreeComparer.CheckAreEqualTrees(expected, result);
        }
예제 #11
0
        public Expression Transform(MethodCallExpression methodCallExpression)
        {
            ArgumentUtility.CheckNotNull("methodCallExpression", methodCallExpression);

            MethodCallTransformerUtility.CheckArgumentCount(methodCallExpression, 1);
            MethodCallTransformerUtility.CheckStaticMethod(methodCallExpression);

            var isNullExpression    = new SqlIsNullExpression(methodCallExpression.Arguments[0]);
            var lenExpression       = new SqlLengthExpression(methodCallExpression.Arguments[0]);
            var lenIsZeroExpression = Expression.Equal(lenExpression, new SqlLiteralExpression(0));

            return(Expression.OrElse(isNullExpression, lenIsZeroExpression));
        }
        public void Transform()
        {
            var method           = typeof(string).GetMethod("IsNullOrEmpty", new[] { typeof(string) });
            var objectExpression = Expression.Constant("Test");
            var expression       = Expression.Call(method, objectExpression);
            var transformer      = new IsNullOrEmptyMethodCallTransformer();

            var result = transformer.Transform(expression);

            var expectedIsNullExpression = new SqlIsNullExpression(objectExpression);
            var expectedLenExpression    = new SqlLengthExpression(objectExpression);
            var expectedResult           = Expression.OrElse(expectedIsNullExpression, Expression.Equal(expectedLenExpression, new SqlLiteralExpression(0)));

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedResult, result);
        }
        public Expression VisitSqlIsNull(SqlIsNullExpression expression)
        {
            ArgumentUtility.CheckNotNull("expression", expression);

            var baseVisitedExpression = (SqlIsNullExpression)VisitExtension(expression);

            var expressionWithEntityComparisonResolved = _entityIdentityResolver.ResolvePotentialEntityComparison(baseVisitedExpression);
            var result = _compoundComparisonSplitter.SplitPotentialCompoundComparison(expressionWithEntityComparisonResolved);

            if (baseVisitedExpression != result)
            {
                return(Visit(result));
            }

            return(baseVisitedExpression);
        }
        public Expression SplitPotentialCompoundComparison(SqlIsNullExpression potentialCompoundComparison)
        {
            ArgumentUtility.CheckNotNull("potentialCompoundComparison", potentialCompoundComparison);

            var innerExpressionAsNewExpression = potentialCompoundComparison.Expression as NewExpression;

            if (innerExpressionAsNewExpression != null)
            {
                if (innerExpressionAsNewExpression.Arguments.Count == 0)
                {
                    return(Expression.Constant(false));
                }

                return(innerExpressionAsNewExpression.Arguments
                       .Select(arg => (Expression) new SqlIsNullExpression(arg))
                       .Aggregate(Expression.AndAlso));
            }

            return(potentialCompoundComparison);
        }
        public void VisitSqlIsNullExpression()
        {
            var inner            = Expression.Constant(0);
            var isNullExpression = new SqlIsNullExpression(inner);

            var fakeResolvedInner = new SqlLiteralExpression(1);

            _resolverMock.Expect(mock => mock.ResolveConstantExpression(inner)).Return(fakeResolvedInner);

            var fakeResolvedEntityComparison = new SqlIsNullExpression(Expression.Constant(2));

            _entityIdentityResolverMock
            .Expect(mock => mock.ResolvePotentialEntityComparison(Arg <SqlIsNullExpression> .Matches(e => e.Expression == fakeResolvedInner)))
            .Return(fakeResolvedEntityComparison);

            var fakeSplitCompoundComparison = new SqlIsNullExpression(Expression.Constant(3));

            _compoundComparisonSplitterMock
            .Expect(mock => mock.SplitPotentialCompoundComparison(fakeResolvedEntityComparison))
            .Return(fakeSplitCompoundComparison);

            // Result is revisited
            _resolverMock
            .Expect(mock => mock.ResolveConstantExpression((ConstantExpression)fakeSplitCompoundComparison.Expression))
            .Return(fakeSplitCompoundComparison.Expression);
            _entityIdentityResolverMock
            .Expect(mock => mock.ResolvePotentialEntityComparison(fakeSplitCompoundComparison))
            .Return(fakeSplitCompoundComparison);
            _compoundComparisonSplitterMock
            .Expect(mock => mock.SplitPotentialCompoundComparison(fakeSplitCompoundComparison))
            .Return(fakeSplitCompoundComparison);

            var result = _visitor.Visit(isNullExpression);

            _resolverMock.VerifyAllExpectations();
            _entityIdentityResolverMock.VerifyAllExpectations();
            _compoundComparisonSplitterMock.VerifyAllExpectations();

            Assert.That(result, Is.SameAs(fakeSplitCompoundComparison));
        }
 public void SetUp()
 {
     _sqlIsNullExpression = new SqlIsNullExpression(Expression.Constant(2));
 }