fixed optimize left join error; close #I796OG

This commit is contained in:
开源海哥 2023-05-29 17:12:48 +08:00
parent 36afd8c29f
commit 79a1ebe54d
2 changed files with 41 additions and 37 deletions

View File

@ -269,16 +269,23 @@ public class QueryCondition implements Serializable {
} }
boolean containsTable(String... tables){ boolean containsTable(String... tables) {
if (column == null){ if (column == null || !checkEffective()) {
return false; return nextContainsTable(tables);
} }
for (String table : tables) { for (String table : tables) {
if (column.table != null && table.equals(column.table.name)){ if (column.table != null && table.equals(column.table.name)) {
return true; return true;
} }
} }
return false; return nextContainsTable(tables);
}
private boolean nextContainsTable(String... tables) {
if (next == null) {
return false;
}
return next.containsTable(tables);
} }
@Override @Override

View File

@ -21,16 +21,12 @@ import com.mybatisflex.core.audit.ConsoleMessageCollector;
import com.mybatisflex.core.audit.MessageCollector; import com.mybatisflex.core.audit.MessageCollector;
import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.row.Db;
import com.mybatisflex.core.row.Row;
import com.mybatisflex.core.row.RowUtil;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.util.List; import java.util.List;
import static com.mybatisflex.core.query.QueryMethods.case_;
import static com.mybatisflex.core.query.QueryMethods.select; import static com.mybatisflex.core.query.QueryMethods.select;
import static com.mybatisflex.test.table.AccountTableDef.ACCOUNT; import static com.mybatisflex.test.table.AccountTableDef.ACCOUNT;
import static com.mybatisflex.test.table.ArticleTableDef.ARTICLE; import static com.mybatisflex.test.table.ArticleTableDef.ARTICLE;
@ -60,33 +56,33 @@ public class EntityTestStarter {
AccountMapper accountMapper = bootstrap.getMapper(AccountMapper.class); AccountMapper accountMapper = bootstrap.getMapper(AccountMapper.class);
QueryWrapper wrapper = QueryWrapper.create().select(ACCOUNT.ID // QueryWrapper wrapper = QueryWrapper.create().select(ACCOUNT.ID
, case_().when(ACCOUNT.ID.ge(2)).then("x2") // , case_().when(ACCOUNT.ID.ge(2)).then("x2")
.when(ACCOUNT.ID.ge(1)).then("x1") // .when(ACCOUNT.ID.ge(1)).then("x1")
.else_("x100") // .else_("x100")
.end().as("xName") // .end().as("xName")
).from(ACCOUNT); // ).from(ACCOUNT);
//
List<Row> rowList = Db.selectListByQuery(wrapper); // List<Row> rowList = Db.selectListByQuery(wrapper);
RowUtil.printPretty(rowList); // RowUtil.printPretty(rowList);
//
//
accountMapper.updateNumberAddByQuery("age", 100, QueryWrapper.create().where(ACCOUNT.ID.eq(1))); // accountMapper.updateNumberAddByQuery("age", 100, QueryWrapper.create().where(ACCOUNT.ID.eq(1)));
accountMapper.updateNumberAddByQuery(Account::getAge, -50, QueryWrapper.create().where(ACCOUNT.ID.eq(1))); // accountMapper.updateNumberAddByQuery(Account::getAge, -50, QueryWrapper.create().where(ACCOUNT.ID.eq(1)));
//
//
Db.updateNumberAddByQuery("tb_account", "age", 30, QueryWrapper.create().where(ACCOUNT.ID.eq(1))); // Db.updateNumberAddByQuery("tb_account", "age", 30, QueryWrapper.create().where(ACCOUNT.ID.eq(1)));
Db.updateNumberAddByQuery("tb_account", "age", -20, QueryWrapper.create().where(ACCOUNT.ID.eq(1))); // Db.updateNumberAddByQuery("tb_account", "age", -20, QueryWrapper.create().where(ACCOUNT.ID.eq(1)));
//
//
List<Account> accounts1 = accountMapper.selectListByQuery(QueryWrapper.create() // List<Account> accounts1 = accountMapper.selectListByQuery(QueryWrapper.create()
, accountFieldQueryBuilder -> accountFieldQueryBuilder // , accountFieldQueryBuilder -> accountFieldQueryBuilder
.field(Account::getArticles) // .field(Account::getArticles)
.queryWrapper(entity -> // .queryWrapper(entity ->
select().from(ARTICLE).where(ARTICLE.ACCOUNT_ID.eq(entity.getId())) // select().from(ARTICLE).where(ARTICLE.ACCOUNT_ID.eq(entity.getId()))
) // )
); // );
System.out.println(accounts1); // System.out.println(accounts1);
// MyAccountMapper myAccountMapper = bootstrap.getMapper(MyAccountMapper.class); // MyAccountMapper myAccountMapper = bootstrap.getMapper(MyAccountMapper.class);
@ -124,7 +120,8 @@ public class EntityTestStarter {
) )
.from(ARTICLE) .from(ARTICLE)
.leftJoin(ACCOUNT).on(ARTICLE.ACCOUNT_ID.eq(ACCOUNT.ID)) .leftJoin(ACCOUNT).on(ARTICLE.ACCOUNT_ID.eq(ACCOUNT.ID))
.where(ACCOUNT.ID.ge(0)); // .where(ACCOUNT.ID.ge(0));
.where(ARTICLE.ID.ge(0).or(ACCOUNT.ID.ge(0)));
// //
// List<ArticleDTO> articleDTOS = accountMapper.selectListByQueryAs(asWrapper, ArticleDTO.class); // List<ArticleDTO> articleDTOS = accountMapper.selectListByQueryAs(asWrapper, ArticleDTO.class);
// System.out.println(articleDTOS); // System.out.println(articleDTOS);