コード例 #1
0
        public void Initialization_NullableBoolean()
        {
            var innerExpression     = Expression.Constant(1, typeof(int?));
            var convertedExpression = new SqlConvertedBooleanExpression(innerExpression);

            Assert.That(convertedExpression.Type, Is.SameAs(typeof(bool?)));
            Assert.That(convertedExpression.Expression, Is.SameAs(innerExpression));
        }
        public void VisitSqlConvertedBooleanExpression_WithADifferentExpression_VisitsInnerExpressionAndReturnsInputExpression()
        {
            var sqlConvertedBooleanExpression = new SqlConvertedBooleanExpression(new SqlLiteralExpression(0));

            var result = _visitor.VisitSqlConvertedBooleanExpression(sqlConvertedBooleanExpression);

            Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo("0"));
            Assert.That(result, Is.SameAs(sqlConvertedBooleanExpression));
        }
コード例 #3
0
        public void VisitSqlConvertedBooleanExpression()
        {
            var expression = new SqlConvertedBooleanExpression(Expression.Constant(1));

            SqlGeneratingExpressionVisitor.GenerateSql(expression, _commandBuilder, _stageMock);

            Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo("@1"));
            Assert.That(_commandBuilder.GetCommandParameters()[0].Value, Is.EqualTo(1));
        }
        public void VisitSqlConvertedBooleanExpression_WithAnInnerNamedExpression_ReturnsAdaptedNamedExpressionOfCorrectType()
        {
            var sqlConvertedBooleanExpression = new SqlConvertedBooleanExpression(_namedIntExpression);

            var result = _visitor.VisitSqlConvertedBooleanExpression(sqlConvertedBooleanExpression);

            var expectedResult = new NamedExpression(_namedIntExpression.Name, new SqlConvertExpression(typeof(bool), _namedIntExpression.Expression));

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedResult, result);
        }
コード例 #5
0
        public void Reduce_NonNullable()
        {
            var innerExpression     = Expression.Constant(1);
            var convertedExpression = new SqlConvertedBooleanExpression(innerExpression);

            var result = convertedExpression.Reduce();

            var expectedResult = Expression.Convert(innerExpression, typeof(bool), typeof(Convert).GetMethod("ToBoolean", new[] { typeof(int) }));

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedResult, result);
        }
コード例 #6
0
        public void Reduce_Nullable()
        {
            var innerExpression     = Expression.Constant(1, typeof(int?));
            var convertedExpression = new SqlConvertedBooleanExpression(innerExpression);

            var result = convertedExpression.Reduce();

            var expectedResult = Expression.Convert(
                innerExpression, typeof(bool?), typeof(BooleanUtility).GetMethod("ConvertNullableIntToNullableBool", new[] { typeof(int?) }));

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedResult, result);
        }
        public void VisitSqlConvertedBooleanExpression_WithAnInnerNamedExpression_NullableBool_ReturnsAdaptedNamedExpressionOfCorrectType()
        {
            var namedNullableIntExpression    = new NamedExpression("test", Expression.Constant(0, typeof(int?)));
            var sqlConvertedBooleanExpression = new SqlConvertedBooleanExpression(namedNullableIntExpression);

            var result = _visitor.VisitSqlConvertedBooleanExpression(sqlConvertedBooleanExpression);

            var expectedResult = new NamedExpression(
                namedNullableIntExpression.Name, new SqlConvertExpression(typeof(bool?), namedNullableIntExpression.Expression));

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedResult, result);
        }
        public void VisitSqlConvertedBooleanExpression_WithAnInnerNamedExpression_NullableBool_EmitsBitConversion_AndUsesNullableBoolInProjection()
        {
            var namedNullableIntExpression    = new NamedExpression("test", Expression.Constant(0, typeof(int?)));
            var sqlConvertedBooleanExpression = new SqlConvertedBooleanExpression(namedNullableIntExpression);

            _visitor.VisitSqlConvertedBooleanExpression(sqlConvertedBooleanExpression);

            var expectedProjection = GetExpectedProjectionForNamedExpression(_commandBuilder.InMemoryProjectionRowParameter, "test", 0, typeof(bool?));

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedProjection, _commandBuilder.GetInMemoryProjectionBody());

            Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo("CONVERT(BIT, @1) AS [test]"));
        }
コード例 #9
0
        public void ResolveSubStatementReferenceExpression_ResolvesChildren_ForUnknownExpression()
        {
            var referencedExpression = new SqlConvertedBooleanExpression(new NamedExpression("test", Expression.Constant(0)));
            var sqlStatement         = SqlStatementModelObjectMother.CreateSqlStatement(referencedExpression);

            var tableInfo = new ResolvedSubStatementTableInfo("q0", sqlStatement);
            var sqlTable  = new SqlTable(tableInfo, JoinSemantics.Inner);

            var result = SubStatementReferenceResolver.ResolveSubStatementReferenceExpression(
                referencedExpression, tableInfo, sqlTable, _context);

            var expectedResult = new SqlConvertedBooleanExpression(new SqlColumnDefinitionExpression(typeof(int), "q0", "test", false));

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedResult, result);
        }
コード例 #10
0
        public Expression VisitSqlConvertedBoolean(SqlConvertedBooleanExpression expression)
        {
            ArgumentUtility.CheckNotNull("expression", expression);

            var newInner = ApplyValueContext(expression.Expression);

            Assertion.DebugAssert(
                newInner == expression.Expression,
                "There is currently no visit method that would change an int-typed expression with ValueRequired.");

            // This condition cannot be true at the moment because there currently is no int-typed expression that would be changed by ValueRequired.
            //if (newInner != expression.Expression)
            //  return new ConvertedBooleanExpression (newInner);

            return(expression);
        }
        public void VisitSqlConvertedBooleanExpression_WithAnInnerNamedExpression_OmitsSqlConversion_ForColumns()
        {
            var namedIntColumnExpression      = new NamedExpression("col", SqlStatementModelObjectMother.CreateSqlColumn(typeof(int)));
            var sqlConvertedBooleanExpression = new SqlConvertedBooleanExpression(namedIntColumnExpression);

            Assert.That(_visitor.ColumnPosition, Is.EqualTo(0));

            _visitor.VisitSqlConvertedBooleanExpression(sqlConvertedBooleanExpression);

            Assert.That(_visitor.ColumnPosition, Is.EqualTo(1));

            var expectedProjection = GetExpectedProjectionForNamedExpression(_commandBuilder.InMemoryProjectionRowParameter, "col", 0, typeof(bool));

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedProjection, _commandBuilder.GetInMemoryProjectionBody());

            Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo("[t0].[column] AS [col]"));
        }
コード例 #12
0
        public void ResolveWhereExpression()
        {
            var expression = Expression.Constant(true);
            var fakeResult = new SqlConvertedBooleanExpression(Expression.Constant(0));

            _resolverMock
            .Expect(mock => mock.ResolveConstantExpression(expression))
            .Return(fakeResult);
            _resolverMock
            .Expect(mock => mock.ResolveConstantExpression((ConstantExpression)fakeResult.Expression))
            .Return(fakeResult.Expression);
            _resolverMock.Replay();

            var result = _stage.ResolveWhereExpression(expression, _mappingResolutionContext);

            _resolverMock.VerifyAllExpectations();

            Assert.That(((BinaryExpression)result).Left, Is.SameAs(fakeResult.Expression));
            Assert.That(((SqlLiteralExpression)((BinaryExpression)result).Right).Value, Is.EqualTo(1));
        }
コード例 #13
0
        public virtual Expression VisitSqlConvertedBoolean(SqlConvertedBooleanExpression expression)
        {
            ArgumentUtility.CheckNotNull("expression", expression);

            var namedExpression = expression.Expression as NamedExpression;

            if (namedExpression != null)
            {
                // Since ADO.NET returns bit columns as actual boolean values (not as integer values), we need to convert the NamedExpression back to be
                // of type bool/bool? instead of int/int?.
                var conversionToBool = GetBitConversionExpression(
                    sourceType: namedExpression.Type, targetType: expression.Type, convertedExpression: namedExpression.Expression);

                var newNamedExpression = new NamedExpression(namedExpression.Name, conversionToBool);
                return(Visit(newNamedExpression));
            }
            else
            {
                Visit(expression.Expression);
                return(expression);
            }
        }
コード例 #14
0
 public void SetUp()
 {
     _innerExpression = Expression.Constant(1);
     _sqlConvertedBooleanExpression = new SqlConvertedBooleanExpression(_innerExpression);
 }