fix: github fix and close #181

This commit is contained in:
开源海哥 2023-10-09 17:29:57 +08:00
parent f12af070e2
commit 0e83e5f860
7 changed files with 228 additions and 109 deletions

View File

@ -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 {

View File

@ -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();
}

View File

@ -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)

View File

@ -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)

View File

@ -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;

View File

@ -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);
}

View File

@ -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());
}
}