Browse Source

fix github issue 4998

peachyy 2 years ago
parent
commit
f5663acaeb

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

@@ -129,11 +129,18 @@ public class TenantLineInnerInterceptor extends BaseMultiTableInnerInterceptor i
             Expression tenantId = tenantLineHandler.getTenantId();
             Expression tenantId = tenantLineHandler.getTenantId();
             if (itemsList instanceof MultiExpressionList) {
             if (itemsList instanceof MultiExpressionList) {
                 ((MultiExpressionList) itemsList).getExpressionLists().forEach(el -> el.getExpressions().add(tenantId));
                 ((MultiExpressionList) itemsList).getExpressionLists().forEach(el -> el.getExpressions().add(tenantId));
-            }else if(itemsList instanceof ExpressionList){//fix github issue 4998
+            }else {
                 List<Expression> expressions = ((ExpressionList) itemsList).getExpressions();
                 List<Expression> expressions = ((ExpressionList) itemsList).getExpressions();
-                expressions.forEach(it-> ((RowConstructor)it).getExprList().addExpressions(tenantId));
-            } else {
-                ((ExpressionList) itemsList).getExpressions().add(tenantId);
+                if(CollectionUtils.isNotEmpty(expressions)){//fix github issue 4998 jsqlparse 4.5 批量insert ItemsList不是MultiExpressionList 了,需要特殊处理
+                    Expression expression = expressions.get(0);
+                    if( expression instanceof RowConstructor){
+                        expressions.forEach(it->((RowConstructor)it).getExprList().getExpressions().add(tenantId));
+                    }else{
+                        expressions.add(tenantId);
+                    }
+                }else{
+                    expressions.add(tenantId);
+                }
             }
             }
         } else {
         } else {
             throw ExceptionUtils.mpe("Failed to process multiple-table update, please exclude the tableName or statementId");
             throw ExceptionUtils.mpe("Failed to process multiple-table update, please exclude the tableName or statementId");