1- using Microsoft . EntityFrameworkCore . Query . SqlExpressions ;
1+ using EntityFrameworkCore . Jet . Storage . Internal ;
2+ using Microsoft . EntityFrameworkCore . Query . SqlExpressions ;
23
34namespace EntityFrameworkCore . Jet . Query . Internal ;
45
@@ -14,7 +15,7 @@ namespace EntityFrameworkCore.Jet.Query.Internal;
1415/// any release. You should only use it directly in your code with extreme caution and knowing that
1516/// doing so can result in application failures when updating to a new Entity Framework Core release.
1617/// </remarks>
17- public class SkipTakeCollapsingExpressionVisitor : ExpressionVisitor
18+ public class JetZeroLimitConverter : ExpressionVisitor
1819{
1920 private readonly ISqlExpressionFactory _sqlExpressionFactory ;
2021
@@ -26,7 +27,7 @@ public class SkipTakeCollapsingExpressionVisitor : ExpressionVisitor
2627 /// any release. You should only use it directly in your code with extreme caution and knowing that
2728 /// doing so can result in application failures when updating to a new Entity Framework Core release.
2829 /// </summary>
29- public SkipTakeCollapsingExpressionVisitor ( ISqlExpressionFactory sqlExpressionFactory )
30+ public JetZeroLimitConverter ( ISqlExpressionFactory sqlExpressionFactory )
3031 {
3132 _sqlExpressionFactory = sqlExpressionFactory ;
3233 _parametersDecorator = null ! ;
@@ -59,9 +60,9 @@ protected override Expression VisitExtension(Expression extensionExpression)
5960 {
6061 var result = selectExpression . Update (
6162 selectExpression . Tables ,
62- selectExpression . GroupBy . Count > 0 ? selectExpression . Predicate : _sqlExpressionFactory . Constant ( false ) ,
63+ selectExpression . GroupBy . Count > 0 ? selectExpression . Predicate : _sqlExpressionFactory . Constant ( false , JetBoolTypeMapping . Default ) ,
6364 selectExpression . GroupBy ,
64- selectExpression . GroupBy . Count > 0 ? _sqlExpressionFactory . Constant ( false ) : null ,
65+ selectExpression . GroupBy . Count > 0 ? _sqlExpressionFactory . Constant ( false , JetBoolTypeMapping . Default ) : null ,
6566 selectExpression . Projection ,
6667 [ ] ,
6768 limit : null ,
@@ -71,23 +72,16 @@ protected override Expression VisitExtension(Expression extensionExpression)
7172
7273 bool IsZero ( SqlExpression ? sqlExpression )
7374 {
74- switch ( sqlExpression )
75+ return sqlExpression switch
7576 {
76- case SqlConstantExpression { Value : int intValue } :
77- return intValue == 0 ;
78- case SqlParameterExpression parameter :
79- return _parametersDecorator . GetAndDisableCaching ( ) [ parameter . Name ] is 0 ;
80- case SqlBinaryExpression { Left : SqlConstantExpression left , Right : SqlConstantExpression right } :
81- return left . Value is int leftValue && right . Value is int rightValue && leftValue + rightValue == 0 ;
82- case SqlBinaryExpression { Left : SqlParameterExpression left , Right : SqlConstantExpression right } :
83- return _parametersDecorator . GetAndDisableCaching ( ) [ left . Name ] is 0 && right . Value is int and 0 ;
84- case SqlBinaryExpression { Left : SqlConstantExpression left , Right : SqlParameterExpression right } :
85- return _parametersDecorator . GetAndDisableCaching ( ) [ right . Name ] is 0 && left . Value is int and 0 ;
86- case SqlBinaryExpression { Left : SqlParameterExpression left , Right : SqlParameterExpression right } :
87- return _parametersDecorator . GetAndDisableCaching ( ) [ left . Name ] is 0 && _parametersDecorator . GetAndDisableCaching ( ) [ right . Name ] is 0 ;
88- default :
89- return false ;
90- }
77+ SqlConstantExpression { Value : int intValue } => intValue == 0 ,
78+ SqlParameterExpression parameter => _parametersDecorator . GetAndDisableCaching ( ) [ parameter . Name ] is 0 ,
79+ SqlBinaryExpression { Left : SqlConstantExpression left , Right : SqlConstantExpression right } => left . Value is int leftValue && right . Value is int rightValue && leftValue + rightValue == 0 ,
80+ SqlBinaryExpression { Left : SqlParameterExpression left , Right : SqlConstantExpression right } => _parametersDecorator . GetAndDisableCaching ( ) [ left . Name ] is 0 && right . Value is int and 0 ,
81+ SqlBinaryExpression { Left : SqlConstantExpression left , Right : SqlParameterExpression right } => _parametersDecorator . GetAndDisableCaching ( ) [ right . Name ] is 0 && left . Value is int and 0 ,
82+ SqlBinaryExpression { Left : SqlParameterExpression left , Right : SqlParameterExpression right } => _parametersDecorator . GetAndDisableCaching ( ) [ left . Name ] is 0 && _parametersDecorator . GetAndDisableCaching ( ) [ right . Name ] is 0 ,
83+ _ => false ,
84+ } ;
9185 }
9286 }
9387
0 commit comments