Pārlūkot izejas kodu

fixed gitee pulls/141

hubin 4 gadi atpakaļ
vecāks
revīzija
830eb3020c

+ 31 - 8
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/TenantLineInnerInterceptor.java

@@ -124,6 +124,16 @@ public class TenantLineInnerInterceptor extends JsqlParserSupport implements Inn
             return;
             return;
         }
         }
         columns.add(new Column(tenantLineHandler.getTenantIdColumn()));
         columns.add(new Column(tenantLineHandler.getTenantIdColumn()));
+
+        // fixed gitee pulls/141 duplicate update
+        List<Expression> duplicateUpdateColumns = insert.getDuplicateUpdateExpressionList();
+        if (CollectionUtils.isNotEmpty(duplicateUpdateColumns)) {
+            EqualsTo equalsTo = new EqualsTo();
+            equalsTo.setLeftExpression(new StringValue(tenantLineHandler.getTenantIdColumn()));
+            equalsTo.setRightExpression(tenantLineHandler.getTenantId());
+            duplicateUpdateColumns.add(equalsTo);
+        }
+
         Select select = insert.getSelect();
         Select select = insert.getSelect();
         if (select != null) {
         if (select != null) {
             this.processInsertSelect(select.getSelectBody());
             this.processInsertSelect(select.getSelectBody());
@@ -312,18 +322,31 @@ public class TenantLineInnerInterceptor extends JsqlParserSupport implements Inn
             if (selectExpressionItem.getExpression() instanceof SubSelect) {
             if (selectExpressionItem.getExpression() instanceof SubSelect) {
                 processSelectBody(((SubSelect) selectExpressionItem.getExpression()).getSelectBody());
                 processSelectBody(((SubSelect) selectExpressionItem.getExpression()).getSelectBody());
             } else if (selectExpressionItem.getExpression() instanceof Function) {
             } else if (selectExpressionItem.getExpression() instanceof Function) {
-                ExpressionList parameters = ((Function) selectExpressionItem.getExpression()).getParameters();
-                if (parameters != null) {
-                    parameters.getExpressions().forEach(expression -> {
-                        if (expression instanceof SubSelect) {
-                            processSelectBody(((SubSelect) expression).getSelectBody());
-                        }
-                    });
-                }
+                processFunction((Function)selectExpressionItem.getExpression());
             }
             }
         }
         }
     }
     }
 
 
+    /**
+     * 处理函数
+     * <p>支持: 1. select fun(args..) 2. select fun1(fun2(args..),args..)<p>
+     * <p> fixed gitee pulls/141</p>
+     *
+     * @param function
+     */
+    protected void processFunction(Function function) {
+        ExpressionList parameters = function.getParameters();
+        if (parameters != null) {
+            parameters.getExpressions().forEach(expression -> {
+                if (expression instanceof SubSelect) {
+                    processSelectBody(((SubSelect)expression).getSelectBody());
+                } else if (expression instanceof Function) {
+                    processFunction((Function)expression);
+                }
+            });
+        }
+    }
+
     /**
     /**
      * 处理子查询等
      * 处理子查询等
      */
      */