|
@@ -3,8 +3,10 @@ package com.baomidou.mybatisplus.test;
|
|
import org.junit.Assert;
|
|
import org.junit.Assert;
|
|
import org.junit.Test;
|
|
import org.junit.Test;
|
|
|
|
|
|
-import com.baomidou.mybatisplus.entity.CountOptimize;
|
|
|
|
-import com.baomidou.mybatisplus.toolkit.SqlUtils;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.plugins.pagination.optimize.AliDruidCountOptimize;
|
|
|
|
+import com.baomidou.mybatisplus.plugins.pagination.optimize.DefaultCountOptimize;
|
|
|
|
+import com.baomidou.mybatisplus.plugins.pagination.optimize.JsqlParserCountOptimize;
|
|
|
|
+import com.baomidou.mybatisplus.plugins.parser.SqlInfo;
|
|
|
|
|
|
/**
|
|
/**
|
|
* <p>
|
|
* <p>
|
|
@@ -16,18 +18,19 @@ import com.baomidou.mybatisplus.toolkit.SqlUtils;
|
|
*/
|
|
*/
|
|
public class SqlUtilsTest {
|
|
public class SqlUtilsTest {
|
|
|
|
|
|
|
|
+ public SqlInfo jsqlParserCountSqlInfo(String sql) {
|
|
|
|
+ return new JsqlParserCountOptimize(sql, "mysql").optimizeSql();
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 测试jsqlparser方式
|
|
* 测试jsqlparser方式
|
|
*/
|
|
*/
|
|
@Test
|
|
@Test
|
|
public void sqlCountOptimize1() {
|
|
public void sqlCountOptimize1() {
|
|
-
|
|
|
|
- CountOptimize countOptimize = SqlUtils
|
|
|
|
- .getCountOptimize(
|
|
|
|
- "select * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 order by (select 1 from dual)",
|
|
|
|
- "jsqlparser", "mysql", true);
|
|
|
|
- String countsql = countOptimize.getCountSQL();
|
|
|
|
- boolean orderBy = countOptimize.isOrderBy();
|
|
|
|
|
|
+ SqlInfo sqlInfo = jsqlParserCountSqlInfo(
|
|
|
|
+ "select * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 order by (select 1 from dual)");
|
|
|
|
+ String countsql = sqlInfo.getSql();
|
|
|
|
+ boolean orderBy = sqlInfo.isOrderBy();
|
|
System.out.println(countsql);
|
|
System.out.println(countsql);
|
|
System.out.println(orderBy);
|
|
System.out.println(orderBy);
|
|
Assert.assertFalse(orderBy);
|
|
Assert.assertFalse(orderBy);
|
|
@@ -41,12 +44,11 @@ public class SqlUtilsTest {
|
|
*/
|
|
*/
|
|
@Test
|
|
@Test
|
|
public void sqlCountOptimize2() {
|
|
public void sqlCountOptimize2() {
|
|
- CountOptimize countOptimize = SqlUtils
|
|
|
|
- .getCountOptimize(
|
|
|
|
- "select distinct * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 order by (select 1 from dual)",
|
|
|
|
- "jsqlparser", "mysql", true);
|
|
|
|
- String countsql = countOptimize.getCountSQL();
|
|
|
|
- boolean orderBy = countOptimize.isOrderBy();
|
|
|
|
|
|
+ SqlInfo sqlInfo = jsqlParserCountSqlInfo(
|
|
|
|
+ "select distinct * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 order by (select 1 from dual)"
|
|
|
|
+ );
|
|
|
|
+ String countsql = sqlInfo.getSql();
|
|
|
|
+ boolean orderBy = sqlInfo.isOrderBy();
|
|
System.out.println(countsql);
|
|
System.out.println(countsql);
|
|
System.out.println(orderBy);
|
|
System.out.println(orderBy);
|
|
Assert.assertFalse(orderBy);
|
|
Assert.assertFalse(orderBy);
|
|
@@ -60,31 +62,33 @@ public class SqlUtilsTest {
|
|
*/
|
|
*/
|
|
@Test
|
|
@Test
|
|
public void sqlCountOptimize3() {
|
|
public void sqlCountOptimize3() {
|
|
- CountOptimize countOptimize = SqlUtils
|
|
|
|
- .getCountOptimize(
|
|
|
|
- "select * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 group by a.id order by (select 1 from dual)",
|
|
|
|
- "jsqlparser", "mysql", true);
|
|
|
|
- String countsql = countOptimize.getCountSQL();
|
|
|
|
- boolean orderBy = countOptimize.isOrderBy();
|
|
|
|
|
|
+ SqlInfo sqlInfo = jsqlParserCountSqlInfo(
|
|
|
|
+ "select * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 group by a.id order by (select 1 from dual)"
|
|
|
|
+ );
|
|
|
|
+ String countsql = sqlInfo.getSql();
|
|
|
|
+ boolean orderBy = sqlInfo.isOrderBy();
|
|
System.out.println(countsql);
|
|
System.out.println(countsql);
|
|
System.out.println(orderBy);
|
|
System.out.println(orderBy);
|
|
- Assert.assertFalse(orderBy);
|
|
|
|
|
|
+ Assert.assertTrue(orderBy);
|
|
Assert.assertEquals(
|
|
Assert.assertEquals(
|
|
"SELECT COUNT(1) FROM ( SELECT * FROM user a LEFT JOIN (SELECT uuid FROM user2) b ON b.id = a.aid WHERE a = 1 GROUP BY a.id ORDER BY (SELECT 1 FROM dual) ) TOTAL",
|
|
"SELECT COUNT(1) FROM ( SELECT * FROM user a LEFT JOIN (SELECT uuid FROM user2) b ON b.id = a.aid WHERE a = 1 GROUP BY a.id ORDER BY (SELECT 1 FROM dual) ) TOTAL",
|
|
countsql);
|
|
countsql);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+ public SqlInfo defaultCountSqlInfo(String sql) {
|
|
|
|
+ return new DefaultCountOptimize(sql, "mysql").optimizeSql();
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 测试default方式
|
|
* 测试default方式
|
|
*/
|
|
*/
|
|
@Test
|
|
@Test
|
|
public void sqlCountOptimize4() {
|
|
public void sqlCountOptimize4() {
|
|
- CountOptimize countOptimize = SqlUtils
|
|
|
|
- .getCountOptimize(
|
|
|
|
- "select * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 group by a.id order by (select 1 from dual)",
|
|
|
|
- "default", "mysql", false);
|
|
|
|
- String countsql = countOptimize.getCountSQL();
|
|
|
|
- boolean orderBy = countOptimize.isOrderBy();
|
|
|
|
|
|
+ SqlInfo sqlInfo = defaultCountSqlInfo(
|
|
|
|
+ "select * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 group by a.id order by (select 1 from dual)");
|
|
|
|
+ String countsql = sqlInfo.getSql();
|
|
|
|
+ boolean orderBy = sqlInfo.isOrderBy();
|
|
System.out.println(countsql);
|
|
System.out.println(countsql);
|
|
System.out.println(orderBy);
|
|
System.out.println(orderBy);
|
|
Assert.assertFalse(orderBy);
|
|
Assert.assertFalse(orderBy);
|
|
@@ -98,43 +102,32 @@ public class SqlUtilsTest {
|
|
*/
|
|
*/
|
|
@Test
|
|
@Test
|
|
public void sqlCountOptimize5() {
|
|
public void sqlCountOptimize5() {
|
|
- CountOptimize countOptimize = SqlUtils.getCountOptimize("select * from test where 1= 1 order by id ", "default", "mysql",
|
|
|
|
- true);
|
|
|
|
- String countsql = countOptimize.getCountSQL();
|
|
|
|
- boolean orderBy = countOptimize.isOrderBy();
|
|
|
|
|
|
+ SqlInfo sqlInfo = defaultCountSqlInfo("select * from test where 1= 1 order by id ");
|
|
|
|
+ String countsql = sqlInfo.getSql();
|
|
|
|
+ boolean orderBy = sqlInfo.isOrderBy();
|
|
System.out.println(countsql);
|
|
System.out.println(countsql);
|
|
System.out.println(orderBy);
|
|
System.out.println(orderBy);
|
|
Assert.assertFalse(orderBy);
|
|
Assert.assertFalse(orderBy);
|
|
Assert.assertEquals("SELECT COUNT(1) from test where 1= 1 ", countsql);
|
|
Assert.assertEquals("SELECT COUNT(1) from test where 1= 1 ", countsql);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 测试default方式
|
|
|
|
- */
|
|
|
|
- @Test
|
|
|
|
- public void sqlCountOptimize6() {
|
|
|
|
- CountOptimize countOptimize = SqlUtils.getCountOptimize("select * from test where 1= 1 order by id ", "default", "mysql",
|
|
|
|
- false);
|
|
|
|
- String countsql = countOptimize.getCountSQL();
|
|
|
|
- boolean orderBy = countOptimize.isOrderBy();
|
|
|
|
- System.out.println(countsql);
|
|
|
|
- System.out.println(orderBy);
|
|
|
|
- Assert.assertFalse(orderBy);
|
|
|
|
- Assert.assertEquals("SELECT COUNT(1) FROM ( select * from test where 1= 1 order by id ) TOTAL", countsql);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* 测试default方式
|
|
* 测试default方式
|
|
*/
|
|
*/
|
|
@Test
|
|
@Test
|
|
public void sqlCountOptimize7() {
|
|
public void sqlCountOptimize7() {
|
|
- CountOptimize countOptimize = SqlUtils.getCountOptimize("select * from test where 1= 1 ", "default", "mysql", false);
|
|
|
|
- String countsql = countOptimize.getCountSQL();
|
|
|
|
- boolean orderBy = countOptimize.isOrderBy();
|
|
|
|
|
|
+ SqlInfo sqlInfo = defaultCountSqlInfo("select * from test where 1= 1 ");
|
|
|
|
+ String countsql = sqlInfo.getSql();
|
|
|
|
+ boolean orderBy = sqlInfo.isOrderBy();
|
|
System.out.println(countsql);
|
|
System.out.println(countsql);
|
|
System.out.println(orderBy);
|
|
System.out.println(orderBy);
|
|
Assert.assertTrue(orderBy);
|
|
Assert.assertTrue(orderBy);
|
|
- Assert.assertEquals("SELECT COUNT(1) FROM ( select * from test where 1= 1 ) TOTAL", countsql);
|
|
|
|
|
|
+ Assert.assertEquals("SELECT COUNT(1) from test where 1= 1 ", countsql);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public SqlInfo aliDruidCountSqlInfo(String sql) {
|
|
|
|
+ return new AliDruidCountOptimize(sql, "mysql").optimizeSql();
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -142,13 +135,12 @@ public class SqlUtilsTest {
|
|
*/
|
|
*/
|
|
@Test
|
|
@Test
|
|
public void sqlCountOptimize8() {
|
|
public void sqlCountOptimize8() {
|
|
- CountOptimize countOptimize = SqlUtils.getCountOptimize("select * from test where 1= 1 order by id ", "aliDruid",
|
|
|
|
- "mysql", false);
|
|
|
|
- String countsql = countOptimize.getCountSQL();
|
|
|
|
- boolean orderBy = countOptimize.isOrderBy();
|
|
|
|
|
|
+ SqlInfo sqlInfo = aliDruidCountSqlInfo("select * from test where 1= 1 order by id ");
|
|
|
|
+ String countsql = sqlInfo.getSql();
|
|
|
|
+ boolean orderBy = sqlInfo.isOrderBy();
|
|
System.out.println(countsql);
|
|
System.out.println(countsql);
|
|
System.out.println(orderBy);
|
|
System.out.println(orderBy);
|
|
- Assert.assertFalse(orderBy);
|
|
|
|
|
|
+ Assert.assertTrue(orderBy);
|
|
Assert.assertEquals("SELECT COUNT(*)\n" + "FROM test\n" + "WHERE 1 = 1", countsql);
|
|
Assert.assertEquals("SELECT COUNT(*)\n" + "FROM test\n" + "WHERE 1 = 1", countsql);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -157,12 +149,12 @@ public class SqlUtilsTest {
|
|
*/
|
|
*/
|
|
@Test
|
|
@Test
|
|
public void sqlCountOptimize9() {
|
|
public void sqlCountOptimize9() {
|
|
- CountOptimize countOptimize = SqlUtils.getCountOptimize("select * from test where 1= 1 ", "aliDruid", "mysql", false);
|
|
|
|
- String countsql = countOptimize.getCountSQL();
|
|
|
|
- boolean orderBy = countOptimize.isOrderBy();
|
|
|
|
|
|
+ SqlInfo sqlInfo = aliDruidCountSqlInfo("select * from test where 1= 1 ");
|
|
|
|
+ String countsql = sqlInfo.getSql();
|
|
|
|
+ boolean orderBy = sqlInfo.isOrderBy();
|
|
System.out.println(countsql);
|
|
System.out.println(countsql);
|
|
System.out.println(orderBy);
|
|
System.out.println(orderBy);
|
|
- Assert.assertTrue(orderBy);
|
|
|
|
|
|
+ Assert.assertFalse(orderBy);
|
|
Assert.assertEquals("SELECT COUNT(*)\n" + "FROM test\n" + "WHERE 1 = 1", countsql);
|
|
Assert.assertEquals("SELECT COUNT(*)\n" + "FROM test\n" + "WHERE 1 = 1", countsql);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -171,16 +163,13 @@ public class SqlUtilsTest {
|
|
*/
|
|
*/
|
|
@Test
|
|
@Test
|
|
public void sqlCountOptimize10() {
|
|
public void sqlCountOptimize10() {
|
|
|
|
+ SqlInfo sqlInfo = aliDruidCountSqlInfo("select * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 order by (select 1 from dual)");
|
|
|
|
|
|
- CountOptimize countOptimize = SqlUtils
|
|
|
|
- .getCountOptimize(
|
|
|
|
- "select * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 order by (select 1 from dual)",
|
|
|
|
- "aliDruid", "mysql", true);
|
|
|
|
- String countsql = countOptimize.getCountSQL();
|
|
|
|
- boolean orderBy = countOptimize.isOrderBy();
|
|
|
|
|
|
+ String countsql = sqlInfo.getSql();
|
|
|
|
+ boolean orderBy = sqlInfo.isOrderBy();
|
|
System.out.println(countsql);
|
|
System.out.println(countsql);
|
|
System.out.println(orderBy);
|
|
System.out.println(orderBy);
|
|
- Assert.assertFalse(orderBy);
|
|
|
|
|
|
+ Assert.assertTrue(orderBy);
|
|
Assert.assertEquals("SELECT COUNT(*)\n" + "FROM user a\n" + "\tLEFT JOIN (SELECT uuid\n" + "\t\tFROM user2\n"
|
|
Assert.assertEquals("SELECT COUNT(*)\n" + "FROM user a\n" + "\tLEFT JOIN (SELECT uuid\n" + "\t\tFROM user2\n"
|
|
+ "\t\t) b ON b.id = a.aid\n" + "WHERE a = 1", countsql);
|
|
+ "\t\t) b ON b.id = a.aid\n" + "WHERE a = 1", countsql);
|
|
|
|
|
|
@@ -191,15 +180,12 @@ public class SqlUtilsTest {
|
|
*/
|
|
*/
|
|
@Test
|
|
@Test
|
|
public void sqlCountOptimize11() {
|
|
public void sqlCountOptimize11() {
|
|
- CountOptimize countOptimize = SqlUtils
|
|
|
|
- .getCountOptimize(
|
|
|
|
- "select distinct * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 order by (select 1 from dual)",
|
|
|
|
- "aliDruid", "mysql", true);
|
|
|
|
- String countsql = countOptimize.getCountSQL();
|
|
|
|
- boolean orderBy = countOptimize.isOrderBy();
|
|
|
|
|
|
+ SqlInfo sqlInfo = aliDruidCountSqlInfo("select distinct * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 order by (select 1 from dual)");
|
|
|
|
+ String countsql = sqlInfo.getSql();
|
|
|
|
+ boolean orderBy = sqlInfo.isOrderBy();
|
|
System.out.println(countsql);
|
|
System.out.println(countsql);
|
|
System.out.println(orderBy);
|
|
System.out.println(orderBy);
|
|
- Assert.assertFalse(orderBy);
|
|
|
|
|
|
+ Assert.assertTrue(orderBy);
|
|
Assert.assertEquals("SELECT COUNT(DISTINCT *)\n" + "FROM user a\n" + "\tLEFT JOIN (SELECT uuid\n" + "\t\tFROM user2\n"
|
|
Assert.assertEquals("SELECT COUNT(DISTINCT *)\n" + "FROM user a\n" + "\tLEFT JOIN (SELECT uuid\n" + "\t\tFROM user2\n"
|
|
+ "\t\t) b ON b.id = a.aid\n" + "WHERE a = 1", countsql);
|
|
+ "\t\t) b ON b.id = a.aid\n" + "WHERE a = 1", countsql);
|
|
}
|
|
}
|
|
@@ -209,34 +195,12 @@ public class SqlUtilsTest {
|
|
*/
|
|
*/
|
|
@Test
|
|
@Test
|
|
public void sqlCountOptimize12() {
|
|
public void sqlCountOptimize12() {
|
|
- CountOptimize countOptimize = SqlUtils
|
|
|
|
- .getCountOptimize(
|
|
|
|
- "select * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 group by a.id order by (select 1 from dual)",
|
|
|
|
- "aliDruid", "mysql", true);
|
|
|
|
- String countsql = countOptimize.getCountSQL();
|
|
|
|
- boolean orderBy = countOptimize.isOrderBy();
|
|
|
|
|
|
+ SqlInfo sqlInfo = aliDruidCountSqlInfo("select * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 group by a.id order by (select 1 from dual)");
|
|
|
|
+ String countsql = sqlInfo.getSql();
|
|
|
|
+ boolean orderBy = sqlInfo.isOrderBy();
|
|
System.out.println(countsql);
|
|
System.out.println(countsql);
|
|
System.out.println(orderBy);
|
|
System.out.println(orderBy);
|
|
- Assert.assertFalse(orderBy);
|
|
|
|
- Assert.assertEquals("SELECT COUNT(*)\n" + "FROM (SELECT *\n" + "\tFROM user a\n" + "\t\tLEFT JOIN (SELECT uuid\n"
|
|
|
|
- + "\t\t\tFROM user2\n" + "\t\t\t) b ON b.id = a.aid\n" + "\tWHERE a = 1\n" + "\tGROUP BY a.id\n"
|
|
|
|
- + "\t) ALIAS_COUNT", countsql);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 测试aliDruid方式
|
|
|
|
- */
|
|
|
|
- @Test
|
|
|
|
- public void sqlCountOptimize13() {
|
|
|
|
- CountOptimize countOptimize = SqlUtils
|
|
|
|
- .getCountOptimize(
|
|
|
|
- "select * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 group by a.id order by (select 1 from dual)",
|
|
|
|
- "aliDruid", "mysql", false);
|
|
|
|
- String countsql = countOptimize.getCountSQL();
|
|
|
|
- boolean orderBy = countOptimize.isOrderBy();
|
|
|
|
- System.out.println(countsql);
|
|
|
|
- System.out.println(orderBy);
|
|
|
|
- Assert.assertFalse(orderBy);
|
|
|
|
|
|
+ Assert.assertTrue(orderBy);
|
|
Assert.assertEquals("SELECT COUNT(*)\n" + "FROM (SELECT *\n" + "\tFROM user a\n" + "\t\tLEFT JOIN (SELECT uuid\n"
|
|
Assert.assertEquals("SELECT COUNT(*)\n" + "FROM (SELECT *\n" + "\tFROM user a\n" + "\t\tLEFT JOIN (SELECT uuid\n"
|
|
+ "\t\t\tFROM user2\n" + "\t\t\t) b ON b.id = a.aid\n" + "\tWHERE a = 1\n" + "\tGROUP BY a.id\n"
|
|
+ "\t\t\tFROM user2\n" + "\t\t\t) b ON b.id = a.aid\n" + "\tWHERE a = 1\n" + "\tGROUP BY a.id\n"
|
|
+ "\t) ALIAS_COUNT", countsql);
|
|
+ "\t) ALIAS_COUNT", countsql);
|