Ver Fonte

Merge pull request #3932 from nancheung97/3.0

fix: 当逻辑删除字段默认值为null时,阻止全表更新插件失效
miemieYaho há 3 anos atrás
pai
commit
af3eabf0db

+ 14 - 4
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/BlockAttackInnerInterceptor.java

@@ -28,6 +28,7 @@ import net.sf.jsqlparser.expression.Parenthesis;
 import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
 import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
 import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
+import net.sf.jsqlparser.expression.operators.relational.IsNullExpression;
 import net.sf.jsqlparser.expression.operators.relational.NotEqualsTo;
 import net.sf.jsqlparser.statement.delete.Delete;
 import net.sf.jsqlparser.statement.update.Update;
@@ -76,11 +77,20 @@ public class BlockAttackInnerInterceptor extends JsqlParserSupport implements In
         if (where == null) {
             return true;
         }
-        if (StringUtils.isNotBlank(logicField) && (where instanceof BinaryExpression)) {
+        if (StringUtils.isNotBlank(logicField)) {
 
-            BinaryExpression binaryExpression = (BinaryExpression) where;
-            if (StringUtils.equals(binaryExpression.getLeftExpression().toString(), logicField) || StringUtils.equals(binaryExpression.getRightExpression().toString(), logicField)) {
-                return true;
+            if (where instanceof BinaryExpression) {
+                BinaryExpression binaryExpression = (BinaryExpression) where;
+                if (StringUtils.equals(binaryExpression.getLeftExpression().toString(), logicField) || StringUtils.equals(binaryExpression.getRightExpression().toString(), logicField)) {
+                    return true;
+                }
+            }
+
+            if (where instanceof IsNullExpression) {
+                IsNullExpression binaryExpression = (IsNullExpression) where;
+                if (StringUtils.equals(binaryExpression.getLeftExpression().toString(), logicField)) {
+                    return true;
+                }
             }
         }