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)); }
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); }
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); }
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]")); }
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); }
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]")); }
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)); }
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); } }
public void SetUp() { _innerExpression = Expression.Constant(1); _sqlConvertedBooleanExpression = new SqlConvertedBooleanExpression(_innerExpression); }