mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
fix: github fix and close #181
This commit is contained in:
parent
f12af070e2
commit
0e83e5f860
@ -16,6 +16,7 @@
|
||||
package com.mybatisflex.core.query;
|
||||
|
||||
import com.mybatisflex.core.constant.SqlConnector;
|
||||
import com.mybatisflex.core.constant.SqlConsts;
|
||||
import com.mybatisflex.core.dialect.IDialect;
|
||||
import com.mybatisflex.core.util.ObjectUtil;
|
||||
import com.mybatisflex.core.util.StringUtil;
|
||||
@ -114,10 +115,10 @@ public class Brackets extends QueryCondition {
|
||||
String childSql = childCondition.toSql(queryTables, dialect);
|
||||
if (StringUtil.isNotBlank(childSql)) {
|
||||
QueryCondition prevEffectiveCondition = getPrevEffectiveCondition();
|
||||
if (prevEffectiveCondition != null) {
|
||||
childSql = prevEffectiveCondition.connector + "(" + childSql + ")";
|
||||
if (prevEffectiveCondition != null && this.connector != null) {
|
||||
childSql = this.connector + SqlConsts.BRACKET_LEFT + childSql + SqlConsts.BRACKET_RIGHT;
|
||||
} else if (StringUtil.isNotBlank(sqlNext)) {
|
||||
childSql = "(" + childSql + ")";
|
||||
childSql = SqlConsts.BRACKET_LEFT + childSql + SqlConsts.BRACKET_RIGHT;
|
||||
}
|
||||
sql.append(childSql);
|
||||
} else {
|
||||
|
||||
@ -134,7 +134,7 @@ public class CPI {
|
||||
queryWrapper.addJoin(join);
|
||||
}
|
||||
|
||||
public static QueryCondition getPrevCondition(QueryCondition queryCondition) {
|
||||
public static QueryCondition getPrevEffectiveCondition(QueryCondition queryCondition) {
|
||||
return queryCondition.getPrevEffectiveCondition();
|
||||
}
|
||||
|
||||
|
||||
@ -49,8 +49,8 @@ public class OperatorQueryCondition extends QueryCondition {
|
||||
String childSql = childCondition.toSql(queryTables, dialect);
|
||||
if (StringUtil.isNotBlank(childSql)) {
|
||||
QueryCondition prevEffectiveCondition = getPrevEffectiveCondition();
|
||||
if (prevEffectiveCondition != null) {
|
||||
sql.append(prevEffectiveCondition.connector);
|
||||
if (prevEffectiveCondition != null && this.connector != null) {
|
||||
sql.append(this.connector);
|
||||
}
|
||||
sql.append(operator)
|
||||
.append(SqlConsts.BRACKET_LEFT)
|
||||
|
||||
@ -50,10 +50,9 @@ public class OperatorSelectCondition extends QueryCondition {
|
||||
if (checkEffective()) {
|
||||
String childSql = dialect.buildSelectSql(queryWrapper);
|
||||
if (StringUtil.isNotBlank(childSql)) {
|
||||
|
||||
QueryCondition prevEffectiveCondition = getPrevEffectiveCondition();
|
||||
if (prevEffectiveCondition != null) {
|
||||
sql.append(prevEffectiveCondition.connector);
|
||||
if (prevEffectiveCondition != null && this.connector != null) {
|
||||
sql.append(this.connector);
|
||||
}
|
||||
sql.append(operator)
|
||||
.append(SqlConsts.BRACKET_LEFT)
|
||||
|
||||
@ -157,11 +157,12 @@ public class QueryCondition implements CloneSupport<QueryCondition> {
|
||||
}
|
||||
|
||||
protected void connect(QueryCondition nextCondition, SqlConnector connector) {
|
||||
|
||||
if (this.next != null) {
|
||||
this.next.connect(nextCondition, connector);
|
||||
} else {
|
||||
nextCondition.connector = connector;
|
||||
this.next = nextCondition;
|
||||
this.connector = connector;
|
||||
nextCondition.prev = this;
|
||||
}
|
||||
}
|
||||
@ -171,8 +172,8 @@ public class QueryCondition implements CloneSupport<QueryCondition> {
|
||||
//检测是否生效
|
||||
if (checkEffective()) {
|
||||
QueryCondition prevEffectiveCondition = getPrevEffectiveCondition();
|
||||
if (prevEffectiveCondition != null) {
|
||||
sql.append(prevEffectiveCondition.connector);
|
||||
if (prevEffectiveCondition != null && this.connector != null) {
|
||||
sql.append(this.connector);
|
||||
}
|
||||
//列
|
||||
sql.append(getColumn().toConditionSql(queryTables, dialect));
|
||||
@ -208,6 +209,11 @@ public class QueryCondition implements CloneSupport<QueryCondition> {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取上一个 “有效” 的条件
|
||||
*
|
||||
* @return QueryCondition
|
||||
*/
|
||||
protected QueryCondition getPrevEffectiveCondition() {
|
||||
if (prev == null) {
|
||||
return null;
|
||||
|
||||
@ -58,8 +58,8 @@ public class RawFragment extends QueryCondition {
|
||||
//检测是否生效
|
||||
if (checkEffective()) {
|
||||
QueryCondition prevEffectiveCondition = getPrevEffectiveCondition();
|
||||
if (prevEffectiveCondition != null) {
|
||||
sql.append(prevEffectiveCondition.connector);
|
||||
if (prevEffectiveCondition != null && this.connector != null) {
|
||||
sql.append(this.connector);
|
||||
}
|
||||
sql.append(SqlConsts.BLANK).append(content).append(SqlConsts.BLANK);
|
||||
}
|
||||
|
||||
@ -21,17 +21,16 @@ import com.mybatisflex.core.dialect.IDialect;
|
||||
import com.mybatisflex.core.dialect.KeywordWrap;
|
||||
import com.mybatisflex.core.dialect.LimitOffsetProcessor;
|
||||
import com.mybatisflex.core.dialect.impl.CommonsDialectImpl;
|
||||
import com.mybatisflex.core.dialect.impl.DmDialect;
|
||||
import com.mybatisflex.core.dialect.impl.OracleDialect;
|
||||
import com.mybatisflex.core.query.*;
|
||||
import com.mybatisflex.core.table.DynamicTableProcessor;
|
||||
import com.mybatisflex.core.query.DistinctQueryColumn;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.core.query.RawQueryColumn;
|
||||
import com.mybatisflex.core.query.SqlOperators;
|
||||
import com.mybatisflex.core.table.TableInfo;
|
||||
import com.mybatisflex.core.table.TableInfoFactory;
|
||||
import com.mybatisflex.core.table.TableManager;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import static com.mybatisflex.core.query.QueryMethods.*;
|
||||
import static com.mybatisflex.coretest.table.Account01TableDef.ACCOUNT01;
|
||||
import static com.mybatisflex.coretest.table.AccountTableDef.ACCOUNT;
|
||||
@ -46,9 +45,7 @@ public class AccountSqlTester {
|
||||
.select()
|
||||
.from(ACCOUNT);
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(query);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT * FROM `tb_account`",query.toSQL());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -57,21 +54,24 @@ public class AccountSqlTester {
|
||||
.select()
|
||||
.from(ACCOUNT01);
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(query);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT * FROM `flex`.`tb_a01`",query.toSQL());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSelectWithSchemaSql01() {
|
||||
QueryWrapper query = new QueryWrapper()
|
||||
.select()
|
||||
.from(ACCOUNT01).leftJoin(ACCOUNT).on(ACCOUNT01.ID.eq(ACCOUNT.ID))
|
||||
.from(ACCOUNT01)
|
||||
.leftJoin(ACCOUNT).on(ACCOUNT01.ID.eq(ACCOUNT.ID))
|
||||
.where(ACCOUNT01.ID.ge(100))
|
||||
.and(ACCOUNT.SEX.eq(1));
|
||||
|
||||
TableManager.setDynamicTableProcessor(tableName -> tableName + "_01");
|
||||
TableManager.setDynamicTableProcessor(original -> original + "_01");
|
||||
|
||||
Assert.assertEquals("SELECT * FROM `flex`.`tb_a01_01` " +
|
||||
"LEFT JOIN `tb_account_01` ON `flex`.`tb_a01_01`.`id` = `tb_account_01`.`id` " +
|
||||
"WHERE `flex`.`tb_a01_01`.`id` >= 100 AND `tb_account_01`.`sex` = 1"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
@ -86,7 +86,11 @@ public class AccountSqlTester {
|
||||
.and(ACCOUNT.SEX.eq(1));
|
||||
|
||||
TableManager.setDynamicTableProcessor(original -> original + "_01");
|
||||
TableManager.setDynamicTableProcessor(original -> original + "_01");
|
||||
|
||||
Assert.assertEquals("SELECT * FROM `flex`.`tb_a01_01` AS `a1` " +
|
||||
"LEFT JOIN `tb_account_01` ON `a1`.`id` = `tb_account_01`.`id` " +
|
||||
"WHERE `a1`.`id` >= 100 AND `tb_account_01`.`sex` = 1"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
@ -98,9 +102,10 @@ public class AccountSqlTester {
|
||||
.select(ACCOUNT.ID, ACCOUNT.USER_NAME)
|
||||
.from(ACCOUNT);
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(query);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT `id`, `user_name` FROM `tb_account`"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -112,9 +117,13 @@ public class AccountSqlTester {
|
||||
.from(ACCOUNT.as("a"), ARTICLE.as("b"))
|
||||
.where(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID));
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl(KeywordWrap.NONE, LimitOffsetProcessor.MYSQL);
|
||||
String sql = dialect.forSelectByQuery(query);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT `a`.`id`, `a`.`user_name`, `b`.`id` AS `articleId`, `b`.`title`, " +
|
||||
"MAX(`a`.`age`) AS `ageMax` " +
|
||||
"FROM `tb_account` AS `a`, `tb_article` AS `b` " +
|
||||
"WHERE `a`.`id` = `b`.`account_id`"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -123,9 +132,13 @@ public class AccountSqlTester {
|
||||
.select(ACCOUNT.ID, ACCOUNT.USER_NAME, ACCOUNT.AGE.as("aGe"), max(ACCOUNT.BIRTHDAY).as("Max_BirthDay"), avg(ACCOUNT.SEX).as("sex_avg"))
|
||||
.from(ACCOUNT.as("tableAlias"));
|
||||
|
||||
IDialect dialect = new OracleDialect();
|
||||
String sql = dialect.forSelectByQuery(query);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT `id`, `user_name`, `age` AS `aGe`, " +
|
||||
"MAX(`birthday`) AS `Max_BirthDay`, " +
|
||||
"AVG(`sex`) AS `sex_avg` " +
|
||||
"FROM `tb_account` AS `tableAlias`"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -134,24 +147,29 @@ public class AccountSqlTester {
|
||||
.select(ACCOUNT.ID, ACCOUNT.USER_NAME, ACCOUNT.AGE.as("aGe"), max(ACCOUNT.BIRTHDAY).as("Max_BirthDay"), avg(ACCOUNT.SEX).as("sex_avg"))
|
||||
.from(ACCOUNT.as("tableAlias"));
|
||||
|
||||
IDialect dialect = new DmDialect();
|
||||
String sql = dialect.forSelectByQuery(query);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT `id`, `user_name`, `age` AS `aGe`, " +
|
||||
"MAX(`birthday`) AS `Max_BirthDay`, " +
|
||||
"AVG(`sex`) AS `sex_avg` " +
|
||||
"FROM `tb_account` AS `tableAlias`"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDistinctColumnAlias() {
|
||||
QueryWrapper queryWrapper = new QueryWrapper()
|
||||
QueryWrapper query = new QueryWrapper()
|
||||
.select(
|
||||
new DistinctQueryColumn(ACCOUNT.SEX).as("sexDis"))
|
||||
.select( ACCOUNT.USER_NAME.add(ACCOUNT.AGE).as("addAlias"))
|
||||
.select(new RawQueryColumn("abc").as("aBc"))
|
||||
.from(ACCOUNT);
|
||||
// IDialect dialect = new CommonsDialectImpl();
|
||||
IDialect dialect = new OracleDialect();
|
||||
// IDialect dialect = new DmDialect();
|
||||
String sql = dialect.forSelectByQuery(queryWrapper);
|
||||
System.out.println("sql = " + sql);
|
||||
|
||||
Assert.assertEquals("SELECT DISTINCT `sex` AS `sexDis`, (`user_name` + `age`) AS `addAlias`, abc AS `aBc` " +
|
||||
"FROM `tb_account`"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println("sql = " + query.toSQL());
|
||||
|
||||
}
|
||||
|
||||
@ -162,9 +180,10 @@ public class AccountSqlTester {
|
||||
.select(ACCOUNT.ALL_COLUMNS)
|
||||
.from(ACCOUNT);
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(query);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT * FROM `tb_account`"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
|
||||
@ -177,88 +196,115 @@ public class AccountSqlTester {
|
||||
.union(select(ARTICLE.ID).from(ARTICLE))
|
||||
.unionAll(select(ARTICLE.ID).from(ARTICLE));
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(query);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("(SELECT `id` FROM `tb_account` ORDER BY `id` DESC) " +
|
||||
"UNION (SELECT `id` FROM `tb_article`) " +
|
||||
"UNION ALL (SELECT `id` FROM `tb_article`)"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testWhereSql() {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.select()
|
||||
.from(ACCOUNT)
|
||||
.where(ACCOUNT.ID.ge(100))
|
||||
.and(ACCOUNT.USER_NAME.like("michael"));
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(queryWrapper);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT * FROM `tb_account` " +
|
||||
"WHERE `id` >= 100 AND `user_name` LIKE '%michael%'"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWhere2Sql() {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.select(column("A.*"), column("b.x"))
|
||||
.from(ACCOUNT)
|
||||
.where(ACCOUNT.ID.ge(100))
|
||||
.and(column("aaa").in("michael", "aaa"));
|
||||
|
||||
System.out.println(queryWrapper.toSQL());
|
||||
Assert.assertEquals("SELECT A.*, b.x FROM `tb_account` " +
|
||||
"WHERE `id` >= 100 AND aaa IN ('michael', 'aaa')"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testWhereIssues181() {
|
||||
int id = 100;
|
||||
String name = null;
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.from(ACCOUNT)
|
||||
.where(ACCOUNT.ID.ge(100))
|
||||
.and(ACCOUNT.USER_NAME.eq(name))
|
||||
.or(ACCOUNT.SEX.eq(null).and(ACCOUNT.BIRTHDAY.eq(1)))
|
||||
.or(ACCOUNT.SEX.eq(1).and(ACCOUNT.BIRTHDAY.eq(2)));
|
||||
|
||||
String sql = "SELECT * FROM `tb_account` WHERE `id` >= 100 OR (`birthday` = 1) OR (`sex` = 1 AND `birthday` = 2)";
|
||||
Assert.assertEquals(sql,query.toSQL());
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testWhereCond1Sql() {
|
||||
boolean flag = false;
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.select()
|
||||
.from(ACCOUNT)
|
||||
.where(ACCOUNT.ID.ge(100).when(flag))
|
||||
.and(ACCOUNT.USER_NAME.like("michael"));
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(queryWrapper);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT * FROM `tb_account` WHERE `user_name` LIKE '%michael%'"
|
||||
,query.toSQL());
|
||||
|
||||
Object[] valueArray = CPI.getValueArray(queryWrapper);
|
||||
System.out.println(Arrays.toString(valueArray));
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testWhereSql3() {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.select()
|
||||
.from(ACCOUNT)
|
||||
.where(ACCOUNT.ID.ge(100))
|
||||
.and(ACCOUNT.USER_NAME.notLike("michael"));
|
||||
|
||||
System.out.println(queryWrapper.toSQL());
|
||||
Assert.assertEquals("SELECT * FROM `tb_account` WHERE `id` >= 100 AND `user_name` NOT LIKE '%michael%'"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testWhereCond2Sql() {
|
||||
boolean flag = false;
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.select()
|
||||
.from(ACCOUNT)
|
||||
.where(flag ? ACCOUNT.ID.ge(100) : noCondition())
|
||||
.and(ACCOUNT.USER_NAME.like("michael"));
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(queryWrapper);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT * FROM `tb_account` WHERE `user_name` LIKE '%michael%'"
|
||||
,query.toSQL());
|
||||
|
||||
Object[] valueArray = CPI.getValueArray(queryWrapper);
|
||||
System.out.println(Arrays.toString(valueArray));
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testWhereExistSql() {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.select()
|
||||
.from(ACCOUNT)
|
||||
.where(ACCOUNT.ID.ge(100))
|
||||
@ -268,50 +314,61 @@ public class AccountSqlTester {
|
||||
)
|
||||
);
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(queryWrapper);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT * FROM `tb_account` " +
|
||||
"WHERE `id` >= 100 " +
|
||||
"AND EXISTS (SELECT 1 FROM `tb_article` AS `a` WHERE `id` >= 100)"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testWhereAndOrSql() {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.select()
|
||||
.from(ACCOUNT)
|
||||
.where(ACCOUNT.ID.ge(100))
|
||||
.and(ACCOUNT.SEX.eq(1).or(ACCOUNT.SEX.eq(2)))
|
||||
.or(ACCOUNT.AGE.in(18, 19, 20).or(ACCOUNT.USER_NAME.like("michael")));
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(queryWrapper);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT * FROM `tb_account` " +
|
||||
"WHERE `id` >= 100 " +
|
||||
"AND (`sex` = 1 OR `sex` = 2) " +
|
||||
"OR (`age` IN (18, 19, 20) OR `user_name` LIKE '%michael%')"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWhereSelectSql() {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.select()
|
||||
.from(ACCOUNT)
|
||||
.where(ACCOUNT.ID.ge(
|
||||
select(ARTICLE.ACCOUNT_ID).from(ARTICLE).where(ARTICLE.ID.ge(100))
|
||||
));
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(queryWrapper);
|
||||
System.out.println(sql);
|
||||
|
||||
Assert.assertEquals("SELECT * FROM `tb_account`" +
|
||||
" WHERE `id` >= (SELECT `account_id` FROM `tb_article` WHERE `id` >= 100)"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGroupSql() {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.select()
|
||||
.from(ACCOUNT)
|
||||
.groupBy(ACCOUNT.USER_NAME);
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(queryWrapper);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT * FROM `tb_account` GROUP BY `user_name`"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
|
||||
@ -322,38 +379,50 @@ public class AccountSqlTester {
|
||||
.from(ACCOUNT).as("a")
|
||||
.from(ACCOUNT01).as("b")
|
||||
.groupBy(year(ACCOUNT.BIRTHDAY));
|
||||
|
||||
Assert.assertEquals("SELECT * FROM `tb_account` AS `a`, `flex`.`tb_a01` AS `b` " +
|
||||
"GROUP BY YEAR(`a`.`birthday`)"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHavingSql() {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.select()
|
||||
.from(ACCOUNT)
|
||||
.groupBy(ACCOUNT.USER_NAME)
|
||||
.having(ACCOUNT.AGE.between(18, 25));
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(queryWrapper);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT * FROM `tb_account` " +
|
||||
"GROUP BY `user_name` " +
|
||||
"HAVING `age` BETWEEN 18 AND 25 "
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJoinSql() {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.select()
|
||||
.from(ACCOUNT)
|
||||
.leftJoin(ARTICLE).on(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID))
|
||||
.where(ACCOUNT.AGE.ge(10));
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(queryWrapper);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT * FROM `tb_account` " +
|
||||
"LEFT JOIN `tb_article` " +
|
||||
"ON `tb_account`.`id` = `tb_article`.`account_id` " +
|
||||
"WHERE `tb_account`.`age` >= 10"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJoin2Sql() {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.select()
|
||||
.from(ACCOUNT)
|
||||
.leftJoin(ARTICLE).on(
|
||||
@ -361,14 +430,18 @@ public class AccountSqlTester {
|
||||
)
|
||||
.where(ACCOUNT.AGE.ge(10));
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(queryWrapper);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT * FROM `tb_account` " +
|
||||
"LEFT JOIN `tb_article` " +
|
||||
"ON `tb_account`.`id` = `tb_article`.`account_id` AND `tb_account`.`age` = 18 " +
|
||||
"WHERE `tb_account`.`age` >= 10"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJoin3Sql() {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.select()
|
||||
.from(ACCOUNT)
|
||||
.leftJoin(
|
||||
@ -378,9 +451,13 @@ public class AccountSqlTester {
|
||||
)
|
||||
.where(ACCOUNT.AGE.ge(10));
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(queryWrapper);
|
||||
System.out.println(sql);
|
||||
Assert.assertEquals("SELECT * FROM `tb_account` " +
|
||||
"LEFT JOIN (SELECT * FROM `tb_article` WHERE `id` >= 100) AS `a` " +
|
||||
"ON `tb_account`.`id` = a.id " +
|
||||
"WHERE `tb_account`.`age` >= 10"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
|
||||
@ -395,6 +472,16 @@ public class AccountSqlTester {
|
||||
.leftJoin("base_admin_user_info").as("bui").on("bui.user_id = burm.user_id")
|
||||
.leftJoin("base_admin_user_info").as("burmc").on("burmc.user_id = burm.created_by")
|
||||
.where("bui.is_valid = ?", 3);
|
||||
|
||||
Assert.assertEquals("SELECT `burm`.*, bui.user_code, bui.user_name, burmc.user_name as created_by_name " +
|
||||
"FROM `tb_account` AS `burm` " +
|
||||
"LEFT JOIN `base_admin_user_info` AS `bui` " +
|
||||
"ON bui.user_id = burm.user_id " +
|
||||
"LEFT JOIN `base_admin_user_info` AS `burmc` " +
|
||||
"ON burmc.user_id = burm.created_by " +
|
||||
"WHERE bui.is_valid = 3 "
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
@ -421,14 +508,17 @@ public class AccountSqlTester {
|
||||
|
||||
@Test
|
||||
public void testOrderBySql() {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.select()
|
||||
.from(ACCOUNT)
|
||||
.orderBy(ACCOUNT.AGE.asc(), ACCOUNT.USER_NAME.desc().nullsLast());
|
||||
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
String sql = dialect.forSelectByQuery(queryWrapper);
|
||||
System.out.println(sql);
|
||||
|
||||
Assert.assertEquals("SELECT * FROM `tb_account` " +
|
||||
"ORDER BY `age` ASC, `user_name` DESC NULLS LAST"
|
||||
,query.toSQL());
|
||||
|
||||
System.out.println(query.toSQL());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -436,6 +526,10 @@ public class AccountSqlTester {
|
||||
IDialect dialect = new CommonsDialectImpl();
|
||||
TableInfo tableInfo = TableInfoFactory.ofEntityClass(Account.class);
|
||||
String sql = dialect.forDeleteEntityById(tableInfo);
|
||||
|
||||
Assert.assertEquals("UPDATE `tb_account` SET `is_delete` = 1 WHERE `id` = ? AND `is_delete` = 0"
|
||||
,sql);
|
||||
|
||||
System.out.println(sql);
|
||||
}
|
||||
|
||||
@ -450,6 +544,10 @@ public class AccountSqlTester {
|
||||
.forUpdate();
|
||||
|
||||
String sql = dialect.forSelectByQuery(queryWrapper);
|
||||
|
||||
Assert.assertEquals("SELECT * FROM `tb_account` WHERE `user_name` LIKE ? FOR UPDATE"
|
||||
,sql);
|
||||
|
||||
System.out.println(sql);
|
||||
}
|
||||
|
||||
@ -607,6 +705,15 @@ public class AccountSqlTester {
|
||||
account.setUserName("michael");
|
||||
|
||||
QueryWrapper qw = QueryWrapper.create(account);
|
||||
|
||||
Assert.assertEquals("SELECT `id`, `user_name`, `birthday`, `sex`, `age`, `is_normal`, `is_delete` " +
|
||||
"FROM `tb_account` " +
|
||||
"WHERE `user_name` = 'michael' " +
|
||||
"AND `sex` = 0 " +
|
||||
"AND `age` = 18 " +
|
||||
"AND `is_normal` = false"
|
||||
,qw.toSQL());
|
||||
|
||||
System.out.println(qw.toSQL());
|
||||
}
|
||||
|
||||
@ -623,6 +730,12 @@ public class AccountSqlTester {
|
||||
|
||||
QueryWrapper qw = QueryWrapper.create(account, operators);
|
||||
|
||||
Assert.assertEquals("SELECT `id`, `user_name`, `birthday`, `sex`, `age`, `is_normal`, `is_delete` FROM `tb_account` " +
|
||||
"WHERE `user_name` LIKE '%michael%' A" +
|
||||
"ND `sex` = 0 " +
|
||||
"AND `age` >= 18 " +
|
||||
"AND `is_normal` = false"
|
||||
,qw.toSQL());
|
||||
System.out.println(qw.toSQL());
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user