From 48bc49d3a4450c18af85c1a944d8af0bddd8d716 Mon Sep 17 00:00:00 2001 From: Lau Date: Sat, 18 Apr 2020 01:46:38 +0200 Subject: [PATCH] Fix bool value mapping. --- .../SearchConditionConvertingExpressionVisitor.cs | 10 +++++----- .../Query/Sql/Internal/JetQuerySqlGenerator.cs | 6 ++---- src/EFCore.Jet/Storage/Internal/JetBoolTypeMapping.cs | 4 ++-- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/EFCore.Jet/Query/Internal/SearchConditionConvertingExpressionVisitor.cs b/src/EFCore.Jet/Query/Internal/SearchConditionConvertingExpressionVisitor.cs index 5d3e66e..5e4392c 100644 --- a/src/EFCore.Jet/Query/Internal/SearchConditionConvertingExpressionVisitor.cs +++ b/src/EFCore.Jet/Query/Internal/SearchConditionConvertingExpressionVisitor.cs @@ -37,9 +37,9 @@ namespace EntityFrameworkCore.Jet.Query.Internal { new CaseWhenClause( sqlExpression, - _sqlExpressionFactory.ApplyDefaultTypeMapping(_sqlExpressionFactory.Constant(/*true*/ 1))) + _sqlExpressionFactory.ApplyDefaultTypeMapping(_sqlExpressionFactory.Constant(true))) }, - _sqlExpressionFactory.Constant(/*false*/ 0)) + _sqlExpressionFactory.Constant(false)) : sqlExpression; } @@ -268,10 +268,10 @@ namespace EntityFrameworkCore.Jet.Query.Internal _isSearchCondition = parentSearchCondition; var newFunction = sqlFunctionExpression.Update(instance, arguments); - var condition = string.Equals(sqlFunctionExpression.Name, "FREETEXT") - || string.Equals(sqlFunctionExpression.Name, "CONTAINS"); + // var condition = string.Equals(sqlFunctionExpression.Name, "FREETEXT") + // || string.Equals(sqlFunctionExpression.Name, "CONTAINS"); - return ApplyConversion(newFunction, condition); + return ApplyConversion(newFunction, /* condition */ false); } protected override Expression VisitSqlParameter(SqlParameterExpression sqlParameterExpression) diff --git a/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs b/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs index 66c96b1..75b5268 100644 --- a/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs +++ b/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs @@ -224,18 +224,16 @@ namespace EntityFrameworkCore.Jet.Query.Sql.Internal protected override Expression VisitOrdering(OrderingExpression orderingExpression) { - // Instead of the following, we are using SearchConditionConvertingExpressionVisitor. - // Jet uses the value -1 as True, so ordering by a boolean expression will first list the True values // before the False values, which is the opposite of what .NET and other DBMS do, which are using 1 as True. - /* + if (orderingExpression.Expression.TypeMapping == _boolTypeMapping) { orderingExpression = new OrderingExpression( orderingExpression.Expression, !orderingExpression.IsAscending); } - */ + return base.VisitOrdering(orderingExpression); } diff --git a/src/EFCore.Jet/Storage/Internal/JetBoolTypeMapping.cs b/src/EFCore.Jet/Storage/Internal/JetBoolTypeMapping.cs index 3022378..52b8c4b 100644 --- a/src/EFCore.Jet/Storage/Internal/JetBoolTypeMapping.cs +++ b/src/EFCore.Jet/Storage/Internal/JetBoolTypeMapping.cs @@ -23,7 +23,7 @@ namespace EntityFrameworkCore.Jet.Storage.Internal protected override string GenerateNonNullSqlLiteral(object value) => (bool) value - ? "True" - : "False"; + ? "TRUE" + : "FALSE"; } } \ No newline at end of file