Browse Source

count(1) 变更为 count(*)

miemie 4 years ago
parent
commit
4ee64e348f

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/AbstractMethod.java

@@ -156,7 +156,7 @@ public abstract class AbstractMethod implements Constants {
      */
     protected String sqlCount() {
         return SqlScriptUtils.convertChoose(String.format("%s != null and %s != null", WRAPPER, Q_WRAPPER_SQL_SELECT),
-            SqlScriptUtils.unSafeParam(Q_WRAPPER_SQL_SELECT), ONE);
+            SqlScriptUtils.unSafeParam(Q_WRAPPER_SQL_SELECT), ASTERISK);
     }
 
     /**

+ 6 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/JSqlParserTest.java

@@ -51,17 +51,21 @@ class JSqlParserTest {
         assertThat(select.toString()).isEqualTo(targetSql);
     }
 
-
     @Test
     void updateWhereParser() throws Exception {
         Update update = (Update) CCJSqlParserUtil.parse("Update tableName t SET t.a=(select c from tn where tn.id=t.id),b=2,c=3 ");
         Assertions.assertNull(update.getWhere());
     }
 
-
     @Test
     void deleteWhereParser() throws Exception {
         Delete delete = (Delete) CCJSqlParserUtil.parse("delete from tableName t");
         Assertions.assertNull(delete.getWhere());
     }
+
+    @Test
+    void count() throws Exception {
+        Select select = (Select) CCJSqlParserUtil.parse("select count(*) from table");
+        Assertions.assertNull(select);
+    }
 }

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

@@ -31,8 +31,6 @@ import net.sf.jsqlparser.JSQLParserException;
 import net.sf.jsqlparser.expression.Alias;
 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.schema.Column;
 import net.sf.jsqlparser.schema.Table;
@@ -76,9 +74,8 @@ public class PaginationInnerInterceptor implements InnerInterceptor {
      */
     private static SelectItem defaultCountSelectItem() {
         Function function = new Function();
-        ExpressionList expressionList = new ExpressionList(Collections.singletonList(new LongValue(1)));
         function.setName("COUNT");
-        function.setParameters(expressionList);
+        function.setAllColumns(true);
         return new SelectExpressionItem(function);
     }
 

+ 1 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/SqlParserUtils.java

@@ -39,7 +39,7 @@ public class SqlParserUtils {
      * @return ignore
      */
     public static String getOriginalCountSql(String originalSql) {
-        return String.format("SELECT COUNT(1) FROM (%s) TOTAL", originalSql);
+        return String.format("SELECT COUNT(*) FROM (%s) TOTAL", originalSql);
     }
 
     /**

+ 12 - 12
mybatis-plus-extension/src/test/java/com/baomidou/mybatisplus/extension/plugins/inner/PaginationInnerInterceptorTest.java

@@ -19,47 +19,47 @@ class PaginationInnerInterceptorTest {
     void optimizeCount() {
         /* 能进行优化的 SQL */
         assertsCountSql("select * from user u LEFT JOIN role r ON r.id = u.role_id",
-            "SELECT COUNT(1) FROM user u");
+            "SELECT COUNT(*) FROM user u");
 
         assertsCountSql("select * from user u LEFT JOIN role r ON r.id = u.role_id WHERE u.xx = ?",
-            "SELECT COUNT(1) FROM user u WHERE u.xx = ?");
+            "SELECT COUNT(*) FROM user u WHERE u.xx = ?");
 
         assertsCountSql("select * from user u LEFT JOIN role r ON r.id = u.role_id LEFT JOIN permission p on p.id = u.per_id",
-            "SELECT COUNT(1) FROM user u");
+            "SELECT COUNT(*) FROM user u");
 
         assertsCountSql("select * from user u LEFT JOIN role r ON r.id = u.role_id LEFT JOIN permission p on p.id = u.per_id WHERE u.xx = ?",
-            "SELECT COUNT(1) FROM user u WHERE u.xx = ?");
+            "SELECT COUNT(*) FROM user u WHERE u.xx = ?");
     }
 
     @Test
     void notOptimizeCount() {
         /* 不能进行优化的 SQL */
         assertsCountSql("select * from user u LEFT JOIN role r ON r.id = u.role_id AND r.name = ? where u.xx = ?",
-            "SELECT COUNT(1) FROM user u LEFT JOIN role r ON r.id = u.role_id AND r.name = ? WHERE u.xx = ?");
+            "SELECT COUNT(*) FROM user u LEFT JOIN role r ON r.id = u.role_id AND r.name = ? WHERE u.xx = ?");
 
         /* join 表与 where 条件大小写不同的情况 */
         assertsCountSql("select * from user u LEFT JOIN role r ON r.id = u.role_id where R.NAME = ?",
-            "SELECT COUNT(1) FROM user u LEFT JOIN role r ON r.id = u.role_id WHERE R.NAME = ?");
+            "SELECT COUNT(*) FROM user u LEFT JOIN role r ON r.id = u.role_id WHERE R.NAME = ?");
 
         assertsCountSql("select * from user u LEFT JOIN role r ON r.id = u.role_id WHERE u.xax = ? AND r.cc = ? AND r.qq = ?",
-            "SELECT COUNT(1) FROM user u LEFT JOIN role r ON r.id = u.role_id WHERE u.xax = ? AND r.cc = ? AND r.qq = ?");
+            "SELECT COUNT(*) FROM user u LEFT JOIN role r ON r.id = u.role_id WHERE u.xax = ? AND r.cc = ? AND r.qq = ?");
     }
 
     @Test
     void optimizeCountOrderBy() {
         /* order by 里不带参数,去除order by */
         assertsCountSql("SELECT * FROM comment ORDER BY name",
-            "SELECT COUNT(1) FROM comment");
+            "SELECT COUNT(*) FROM comment");
 
         /* order by 里带参数,不去除order by */
         assertsCountSql("SELECT * FROM comment ORDER BY (CASE WHEN creator = ? THEN 0 ELSE 1 END)",
-            "SELECT COUNT(1) FROM comment ORDER BY (CASE WHEN creator = ? THEN 0 ELSE 1 END)");
+            "SELECT COUNT(*) FROM comment ORDER BY (CASE WHEN creator = ? THEN 0 ELSE 1 END)");
     }
 
     @Test
     void withAsCount() {
         assertsCountSql("with A as (select * from class) select * from A",
-            "WITH A AS (SELECT * FROM class) SELECT COUNT(1) FROM A");
+            "WITH A AS (SELECT * FROM class) SELECT COUNT(*) FROM A");
     }
 
     @Test
@@ -72,7 +72,7 @@ class PaginationInnerInterceptorTest {
     @Test
     void groupByCount() {
         assertsCountSql("SELECT * FROM record_1 WHERE id = ? GROUP BY date(date_time)",
-            "SELECT COUNT(1) FROM (SELECT * FROM record_1 WHERE id = ? GROUP BY date(date_time)) TOTAL");
+            "SELECT COUNT(*) FROM (SELECT * FROM record_1 WHERE id = ? GROUP BY date(date_time)) TOTAL");
     }
 
     @Test
@@ -82,7 +82,7 @@ class PaginationInnerInterceptorTest {
                 "from reseller_acquire_log ral " +
                 "group by ral.reseller_id) rlr on r.id = rlr.reseller_id " +
                 "order by r.created_at desc",
-            "SELECT COUNT(1) FROM reseller r");
+            "SELECT COUNT(*) FROM reseller r");
     }
 
     void assertsCountSql(String sql, String targetSql) {