Browse Source

JSqlParser 升级后处理爆红

miemie 6 năm trước cách đây
mục cha
commit
098e6c4596

+ 28 - 35
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/optimize/JsqlParserCountOptimize.java

@@ -15,30 +15,23 @@
  */
 package com.baomidou.mybatisplus.extension.plugins.pagination.optimize;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.ibatis.logging.Log;
-import org.apache.ibatis.logging.LogFactory;
-import org.apache.ibatis.reflection.MetaObject;
-
 import com.baomidou.mybatisplus.core.parser.ISqlParser;
 import com.baomidou.mybatisplus.core.parser.SqlInfo;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.extension.toolkit.SqlParserUtils;
-
 import net.sf.jsqlparser.expression.Expression;
 import net.sf.jsqlparser.expression.Function;
 import net.sf.jsqlparser.expression.LongValue;
 import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
 import net.sf.jsqlparser.parser.CCJSqlParserUtil;
-import net.sf.jsqlparser.statement.select.Distinct;
-import net.sf.jsqlparser.statement.select.OrderByElement;
-import net.sf.jsqlparser.statement.select.PlainSelect;
-import net.sf.jsqlparser.statement.select.Select;
-import net.sf.jsqlparser.statement.select.SelectExpressionItem;
-import net.sf.jsqlparser.statement.select.SelectItem;
+import net.sf.jsqlparser.statement.select.*;
+import org.apache.ibatis.logging.Log;
+import org.apache.ibatis.logging.LogFactory;
+import org.apache.ibatis.reflection.MetaObject;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * JsqlParser Count Optimize
@@ -48,11 +41,29 @@ import net.sf.jsqlparser.statement.select.SelectItem;
  */
 public class JsqlParserCountOptimize implements ISqlParser {
 
+    private static final List<SelectItem> COUNT_SELECT_ITEM = countSelectItem();
     /**
      * 日志
      */
     private final Log logger = LogFactory.getLog(JsqlParserCountOptimize.class);
-    private static final List<SelectItem> COUNT_SELECT_ITEM = countSelectItem();
+
+    /**
+     * 获取jsqlparser中count的SelectItem
+     */
+    private static List<SelectItem> countSelectItem() {
+        Function function = new Function();
+        function.setName("COUNT");
+        List<Expression> expressions = new ArrayList<>();
+        LongValue longValue = new LongValue(1);
+        ExpressionList expressionList = new ExpressionList();
+        expressions.add(longValue);
+        expressionList.setExpressions(expressions);
+        function.setParameters(expressionList);
+        List<SelectItem> selectItems = new ArrayList<>();
+        SelectExpressionItem selectExpressionItem = new SelectExpressionItem(function);
+        selectItems.add(selectExpressionItem);
+        return selectItems;
+    }
 
     @Override
     public SqlInfo parser(MetaObject metaObject, String sql) {
@@ -64,7 +75,8 @@ public class JsqlParserCountOptimize implements ISqlParser {
             Select selectStatement = (Select) CCJSqlParserUtil.parse(sql);
             PlainSelect plainSelect = (PlainSelect) selectStatement.getSelectBody();
             Distinct distinct = plainSelect.getDistinct();
-            List<Expression> groupBy = plainSelect.getGroupByColumnReferences();
+            GroupByElement groupByElement = plainSelect.getGroupBy();
+            List<Expression> groupBy = groupByElement.getGroupByExpressions();
             List<OrderByElement> orderBy = plainSelect.getOrderByElements();
 
             // 添加包含groupBy 不去除orderBy
@@ -90,23 +102,4 @@ public class JsqlParserCountOptimize implements ISqlParser {
             return sqlInfo.setSql(SqlParserUtils.getOriginalCountSql(sql));
         }
     }
-
-
-    /**
-     * 获取jsqlparser中count的SelectItem
-     */
-    private static List<SelectItem> countSelectItem() {
-        Function function = new Function();
-        function.setName("COUNT");
-        List<Expression> expressions = new ArrayList<>();
-        LongValue longValue = new LongValue(1);
-        ExpressionList expressionList = new ExpressionList();
-        expressions.add(longValue);
-        expressionList.setExpressions(expressions);
-        function.setParameters(expressionList);
-        List<SelectItem> selectItems = new ArrayList<>();
-        SelectExpressionItem selectExpressionItem = new SelectExpressionItem(function);
-        selectItems.add(selectExpressionItem);
-        return selectItems;
-    }
 }