فهرست منبع

PaginationInnerInterceptor: join 条件判断应不区分大小写

autoCountSql 中使用了 where 条件与 join 的表的字段进行比较,但字符串比较默认是区分大小写的,而 sql 查询多数情况下不区分大小写。
myfreeer 4 سال پیش
والد
کامیت
87bcd69ced

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

@@ -295,6 +295,8 @@ public class PaginationInnerInterceptor implements InnerInterceptor {
             if (CollectionUtils.isNotEmpty(joins)) {
                 boolean canRemoveJoin = true;
                 String whereS = Optional.ofNullable(plainSelect.getWhere()).map(Expression::toString).orElse(StringPool.EMPTY);
+                // 不区分大小写
+                whereS = whereS.toLowerCase();
                 for (Join join : joins) {
                     if (!join.isLeft()) {
                         canRemoveJoin = false;
@@ -302,6 +304,8 @@ public class PaginationInnerInterceptor implements InnerInterceptor {
                     }
                     Table table = (Table) join.getRightItem();
                     String str = Optional.ofNullable(table.getAlias()).map(Alias::getName).orElse(table.getName()) + StringPool.DOT;
+                    // 不区分大小写
+                    str = str.toLowerCase();
                     String onExpressionS = join.getOnExpression().toString();
                     /* 如果 join 里包含 ?(代表有入参) 或者 where 条件里包含使用 join 的表的字段作条件,就不移除 join */
                     if (onExpressionS.contains(StringPool.QUESTION_MARK) || whereS.contains(str)) {