!414 添加在不配置 genPath 时对增量编译的支持,并在 QueryColumnBehavior 中新增条件转换功能

Merge pull request !414 from CloudPlayer/main
This commit is contained in:
Michael Yang 2024-02-02 02:33:45 +00:00 committed by Gitee
commit bf3dcbc625
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
4 changed files with 241 additions and 108 deletions

View File

@ -142,7 +142,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.EQUALS, value);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value));
}
@Override
@ -150,7 +150,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.EQUALS, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value).when(isEffective));
}
@Override
@ -158,7 +158,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.EQUALS, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value).when(isEffective)));
}
@Override
@ -166,7 +166,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.EQUALS, value).when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value).when(isEffective.test(value)));
}
@Override
@ -174,7 +174,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value));
}
@Override
@ -182,7 +182,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value).when(isEffective));
}
@Override
@ -190,7 +190,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value).when(isEffective));
}
@Override
@ -198,7 +198,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value).when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value).when(isEffective.test(value)));
}
@Override
@ -206,7 +206,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.GT, value);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GT, value));
}
@Override
@ -214,7 +214,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.GT, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GT, value).when(isEffective));
}
@Override
@ -222,7 +222,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.GT, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GT, value).when(isEffective));
}
@Override
@ -230,7 +230,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.GT, value).when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GT, value).when(isEffective.test(value)));
}
@Override
@ -238,7 +238,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.GE, value);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GE, value));
}
@Override
@ -246,7 +246,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.GE, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GE, value).when(isEffective));
}
@Override
@ -254,7 +254,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.GE, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GE, value).when(isEffective));
}
@Override
@ -262,7 +262,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.GE, value).when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GE, value).when(isEffective.test(value)));
}
@Override
@ -270,7 +270,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LT, value);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LT, value));
}
@Override
@ -278,7 +278,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LT, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LT, value).when(isEffective));
}
@Override
@ -286,7 +286,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LT, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LT, value).when(isEffective));
}
@Override
@ -294,7 +294,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LT, value).when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LT, value).when(isEffective.test(value)));
}
@Override
@ -302,7 +302,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LE, value);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LE, value));
}
@Override
@ -310,7 +310,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LE, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LE, value).when(isEffective));
}
@Override
@ -318,7 +318,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LE, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LE, value).when(isEffective));
}
@Override
@ -326,7 +326,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LE, value).when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LE, value).when(isEffective.test(value)));
}
@Override
@ -340,10 +340,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
return QueryCondition.createEmpty();
}
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
return QueryCondition.create(this, SqlOperator.EQUALS, value[0]);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value[0]));
}
}
return QueryCondition.create(this, SqlConsts.IN, value);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.IN, value));
}
@Override
@ -357,10 +357,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
return QueryCondition.createEmpty();
}
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
return QueryCondition.create(this, SqlOperator.EQUALS, value[0]).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value[0]).when(isEffective));
}
}
return QueryCondition.create(this, SqlConsts.IN, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.IN, value).when(isEffective));
}
@Override
@ -374,10 +374,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
return QueryCondition.createEmpty();
}
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
return QueryCondition.create(this, SqlOperator.EQUALS, value[0]).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value[0]).when(isEffective));
}
}
return QueryCondition.create(this, SqlConsts.IN, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.IN, value).when(isEffective));
}
@Override
@ -391,10 +391,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
return QueryCondition.createEmpty();
}
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
return QueryCondition.create(this, SqlOperator.EQUALS, value[0]).when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value[0]).when(isEffective.test(value)));
}
}
return QueryCondition.create(this, SqlConsts.IN, value).when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.IN, value).when(isEffective.test(value)));
}
@Override
@ -434,7 +434,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (queryWrapper == null) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.IN, queryWrapper);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.IN, queryWrapper));
}
@Override
@ -442,7 +442,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (queryWrapper == null) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.IN, queryWrapper).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.IN, queryWrapper).when(isEffective));
}
@Override
@ -450,7 +450,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (queryWrapper == null) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.IN, queryWrapper).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.IN, queryWrapper).when(isEffective));
}
@Override
@ -464,10 +464,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
return QueryCondition.createEmpty();
}
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]));
}
}
return QueryCondition.create(this, SqlConsts.NOT_IN, value);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.NOT_IN, value));
}
@Override
@ -481,10 +481,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
return QueryCondition.createEmpty();
}
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]).when(isEffective));
}
}
return QueryCondition.create(this, SqlConsts.NOT_IN, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.NOT_IN, value).when(isEffective));
}
@Override
@ -498,10 +498,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
return QueryCondition.createEmpty();
}
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]).when(isEffective));
}
}
return QueryCondition.create(this, SqlConsts.NOT_IN, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.NOT_IN, value).when(isEffective));
}
@Override
@ -515,10 +515,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
return QueryCondition.createEmpty();
}
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]).when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]).when(isEffective.test(value)));
}
}
return QueryCondition.create(this, SqlConsts.NOT_IN, value).when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.NOT_IN, value).when(isEffective.test(value)));
}
@Override
@ -558,7 +558,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (queryWrapper == null) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_IN, queryWrapper);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_IN, queryWrapper));
}
@Override
@ -566,7 +566,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (queryWrapper == null) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_IN, queryWrapper).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_IN, queryWrapper).when(isEffective));
}
@Override
@ -574,7 +574,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (queryWrapper == null) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_IN, queryWrapper).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_IN, queryWrapper).when(isEffective));
}
@Override
@ -582,7 +582,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end});
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}));
}
@Override
@ -590,7 +590,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}).when(isEffective));
}
@Override
@ -598,7 +598,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}).when(isEffective));
}
@Override
@ -606,7 +606,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}).when(isEffective.test(start, end));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}).when(isEffective.test(start, end)));
}
@Override
@ -614,7 +614,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end});
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}));
}
@Override
@ -622,7 +622,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}).when(isEffective));
}
@Override
@ -630,7 +630,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}).when(isEffective));
}
@Override
@ -638,7 +638,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}).when(isEffective.test(start, end));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}).when(isEffective.test(start, end)));
}
@Override
@ -646,7 +646,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%");
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%"));
}
@Override
@ -654,7 +654,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%").when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%").when(isEffective));
}
@Override
@ -662,7 +662,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%").when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%").when(isEffective));
}
@Override
@ -670,7 +670,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%").when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%").when(isEffective.test(value)));
}
@Override
@ -678,7 +678,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LIKE, value + "%");
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, value + "%"));
}
@Override
@ -686,7 +686,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LIKE, value + "%").when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, value + "%").when(isEffective));
}
@Override
@ -694,7 +694,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LIKE, value + "%").when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, value + "%").when(isEffective));
}
@Override
@ -702,7 +702,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LIKE, value + "%").when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, value + "%").when(isEffective.test(value)));
}
@Override
@ -710,7 +710,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value));
}
@Override
@ -718,7 +718,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value).when(isEffective));
}
@Override
@ -726,7 +726,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value).when(isEffective));
}
@Override
@ -734,7 +734,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value).when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value).when(isEffective.test(value)));
}
/**
@ -754,7 +754,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.LIKE, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, value).when(isEffective));
}
/**
@ -782,7 +782,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%");
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%"));
}
@Override
@ -790,7 +790,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%").when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%").when(isEffective));
}
@Override
@ -798,7 +798,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%").when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%").when(isEffective));
}
@Override
@ -806,7 +806,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%").when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%").when(isEffective.test(value)));
}
@Override
@ -814,7 +814,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%");
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%"));
}
@Override
@ -822,7 +822,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%").when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%").when(isEffective));
}
@Override
@ -830,7 +830,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%").when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%").when(isEffective));
}
@Override
@ -838,7 +838,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%").when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%").when(isEffective.test(value)));
}
@Override
@ -846,7 +846,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value));
}
@Override
@ -854,7 +854,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value).when(isEffective));
}
@Override
@ -862,7 +862,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value).when(isEffective));
}
@Override
@ -870,7 +870,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value).when(isEffective.test(value));
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value).when(isEffective.test(value)));
}
/**
@ -890,7 +890,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
return QueryCondition.createEmpty();
}
return QueryCondition.create(this, SqlOperator.NOT_LIKE, value).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, value).when(isEffective));
}
/**
@ -915,12 +915,12 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
@Override
public QueryCondition isNull(boolean isEffective) {
return QueryCondition.create(this, SqlOperator.IS_NULL, null).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.IS_NULL, null).when(isEffective));
}
@Override
public QueryCondition isNotNull(boolean isEffective) {
return QueryCondition.create(this, SqlOperator.IS_NOT_NULL, null).when(isEffective);
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.IS_NOT_NULL, null).when(isEffective));
}

View File

@ -15,7 +15,12 @@
*/
package com.mybatisflex.core.query;
import com.mybatisflex.core.constant.SqlConsts;
import com.mybatisflex.core.constant.SqlOperator;
import java.util.Iterator;
import java.util.Objects;
import java.util.function.Function;
import java.util.function.Predicate;
/**
@ -23,6 +28,7 @@ import java.util.function.Predicate;
*
* @author michael
* @author 王帅
* @author CloudPlayer
*/
public class QueryColumnBehavior {
@ -36,11 +42,54 @@ public class QueryColumnBehavior {
public static final Predicate<Object> IGNORE_EMPTY = o -> o == null || "".equals(o);
public static final Predicate<Object> IGNORE_BLANK = o -> o == null || "".equals(o.toString().trim());
/**
* 在满足输入的数组或可迭代对象中的容量为 1 即只有一个元素自动将条件中的 in 转换为 =
*/
public static final Function<? super QueryCondition, ? extends QueryCondition> CONVERT_IN_TO_EQUALS = it -> {
Object value = it.value;
if (it.logic.equalsIgnoreCase(SqlConsts.IN) || it.logic.equalsIgnoreCase(SqlConsts.NOT_IN)) {
Object firstValue;
if (value instanceof Iterable<?>) {
Iterator<?> iter = ((Iterable<?>) value).iterator();
if (!iter.hasNext()) { // 没有元素直接返回原条件
return it;
}
firstValue = iter.next(); // 取第一个元素
if (iter.hasNext()) { // 如果有后续元素则直接返回原条件
return it;
}
} else if (value instanceof Object[]) {
Object[] array = (Object[]) value;
if (array.length != 1) { // 如果不是单元素的数组就直接返回
return it;
}
firstValue = array[0]; // 取第一个元素
} else {
return it;
}
SqlOperator operator = it.logic.equalsIgnoreCase(SqlConsts.IN) ? SqlOperator.EQUALS : SqlOperator.NOT_EQUALS;
return QueryCondition.create(it.column, operator, firstValue); // in 转换为 =
} else {
return it;
}
};
/**
* 如果使用了 = 来比较 null 则将其转为 is null
*/
public static final Function<? super QueryCondition, ? extends QueryCondition> CONVERT_EQUALS_TO_IS_NULL = it ->
it.value == null && it.logic.equalsIgnoreCase(SqlConsts.EQUALS) ? it.column.isNull() : it;
/**
* 自定义全局的自动忽略参数的方法
*/
private static Predicate<Object> ignoreFunction = IGNORE_NULL;
/**
* 自定义全局的自动转换条件的方法
*/
private static Function<? super QueryCondition, ? extends QueryCondition> conditionCaster = Function.identity();
/**
* {@code IN(...)} 条件只有 1 个参数时是否自动把的内容转换为相等
*/
@ -66,4 +115,15 @@ public class QueryColumnBehavior {
return ignoreFunction.test(value);
}
public static Function<? super QueryCondition, ? extends QueryCondition> getConditionCaster() {
return smartConvertInToEquals ? CONVERT_IN_TO_EQUALS.andThen(conditionCaster) : conditionCaster;
}
public static void setConditionCaster(Function<? super QueryCondition, ? extends QueryCondition> conditionCaster) {
QueryColumnBehavior.conditionCaster = conditionCaster;
}
public static QueryCondition castCondition(QueryCondition condition) {
return getConditionCaster().apply(condition);
}
}

View File

@ -17,14 +17,19 @@
package com.mybatisflex.coretest;
import com.mybatisflex.core.constant.SqlConnector;
import com.mybatisflex.core.constant.SqlOperator;
import com.mybatisflex.core.query.*;
import com.mybatisflex.core.util.StringUtil;
import org.junit.Assert;
import org.junit.Test;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import static com.mybatisflex.core.query.QueryColumnBehavior.CONVERT_EQUALS_TO_IS_NULL;
import static com.mybatisflex.core.query.QueryColumnBehavior.getConditionCaster;
import static com.mybatisflex.core.query.QueryMethods.bracket;
import static com.mybatisflex.core.query.QueryMethods.raw;
import static com.mybatisflex.coretest.table.AccountTableDef.ACCOUNT;
@ -227,4 +232,80 @@ public class DynamicConditionTest {
System.out.println(qw.toSQL());
}
private void assertConditionEquals(QueryCondition expect, QueryCondition actual) {
Assert.assertEquals(expect.getColumn(), actual.getColumn());
Assert.assertEquals(expect.getLogic(), actual.getLogic());
Assert.assertEquals(expect.getValue(), actual.getValue());
}
@Test
public void testCastFunction1() {
QueryCondition condition = QueryCondition.create(new QueryColumn("id"), SqlOperator.IN, new Object[] {null});
Assert.assertSame(condition, getConditionCaster().apply(condition));
}
@Test
public void testCastFunction2() {
QueryColumn column = new QueryColumn("id");
QueryColumnBehavior.setConditionCaster(CONVERT_EQUALS_TO_IS_NULL);
QueryCondition condition = QueryCondition.create(column, SqlOperator.EQUALS, null);
QueryCondition expect = column.isNull();
QueryCondition actual = getConditionCaster().apply(condition);
assertConditionEquals(expect, actual);
}
@Test
public void testCastFunction3() {
QueryColumn column = new QueryColumn("id");
QueryColumnBehavior.setConditionCaster(CONVERT_EQUALS_TO_IS_NULL);
QueryColumnBehavior.setSmartConvertInToEquals(true);
QueryCondition condition = QueryCondition.create(column, SqlOperator.EQUALS, null);
QueryCondition expect = column.isNull();
QueryCondition actual = getConditionCaster().apply(condition);
assertConditionEquals(expect, actual);
}
@Test
public void testCastFunction4() {
QueryColumn column = new QueryColumn("id");
QueryColumnBehavior.setConditionCaster(CONVERT_EQUALS_TO_IS_NULL);
QueryColumnBehavior.setSmartConvertInToEquals(true);
QueryCondition condition = QueryCondition.create(column, SqlOperator.IN, new Object[] { 1 });
QueryCondition expect = QueryCondition.create(column, SqlOperator.EQUALS, 1);
QueryCondition actual = getConditionCaster().apply(condition);
assertConditionEquals(expect, actual);
}
@Test
public void testCastFunction5() {
QueryColumn column = new QueryColumn("id");
QueryColumnBehavior.setConditionCaster(CONVERT_EQUALS_TO_IS_NULL);
QueryColumnBehavior.setSmartConvertInToEquals(true);
QueryCondition condition = QueryCondition.create(column, SqlOperator.IN, new Object[] { null });
QueryCondition expect = column.isNull();
QueryCondition actual = getConditionCaster().apply(condition);
assertConditionEquals(expect, actual);
}
@Test
public void testCastFunction6() {
QueryColumn column = new QueryColumn("id");
QueryColumnBehavior.setConditionCaster(CONVERT_EQUALS_TO_IS_NULL);
QueryColumnBehavior.setSmartConvertInToEquals(true);
QueryCondition condition = QueryCondition.create(column, SqlOperator.IN, Collections.singletonList(null));
QueryCondition expect = column.isNull();
QueryCondition actual = getConditionCaster().apply(condition);
assertConditionEquals(expect, actual);
}
}

View File

@ -39,10 +39,7 @@ import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;
import javax.tools.JavaFileObject;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.io.*;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Time;
@ -50,12 +47,11 @@ import java.sql.Timestamp;
import java.time.*;
import java.time.chrono.JapaneseDate;
import java.util.*;
import java.util.function.BiConsumer;
/**
* MyBatis Flex Processor.
*
* @author 王帅
* @author 王帅, CloudPlayer
* @since 2023-06-22
*/
public class MybatisFlexProcessor extends AbstractProcessor {
@ -140,13 +136,8 @@ public class MybatisFlexProcessor extends AbstractProcessor {
// 获取需要生成的类开始构建文件
Set<? extends Element> elementsAnnotatedWith = roundEnv.getElementsAnnotatedWith(Table.class);
int size = elementsAnnotatedWith.size();
int index = 0;
for (Element entityClassElement : elementsAnnotatedWith) {
index++;
// 获取 Table 注解
Table table = entityClassElement.getAnnotation(Table.class);
@ -189,7 +180,8 @@ public class MybatisFlexProcessor extends AbstractProcessor {
String tableDefClassName = entityClassName.concat(tableDefClassSuffix);
String tableDefContent = ContentBuilder.buildTableDef(tableInfo, allInTablesEnable, tableDefPackage, tableDefClassName
, tableDefPropertiesNameStyle, tableDefInstanceSuffix, columnInfos, defaultColumns);
processGenClass(genPath, tableDefPackage, tableDefClassName, tableDefContent);
// 将文件所依赖的 Element 传入 Filer 表示此 TableDef 依赖这个类以保证增量编译时不丢失内容
processGenClass(genPath, tableDefPackage, tableDefClassName, tableDefContent, entityClassElement);
if (allInTablesEnable) {
// 标记 entity 如果没有配置 Tables 生成位置 entity 位置为准
@ -204,18 +196,18 @@ public class MybatisFlexProcessor extends AbstractProcessor {
String mapperClassName = entityClassName.concat("Mapper");
boolean mapperAnnotationEnable = "true".equalsIgnoreCase(mapperAnnotation);
String mapperClassContent = ContentBuilder.buildMapper(tableInfo, realMapperPackage, mapperClassName, mapperBaseClass, mapperAnnotationEnable);
processGenClass(genPath, realMapperPackage, mapperClassName, mapperClassContent);
}
// handle NPE, ensure TableDef already generate.
if (index == size && allInTablesEnable) {
// 生成 Tables 文件
String realTablesPackage = StrUtil.isBlank(allInTablesPackage) ? StrUtil.buildTableDefPackage(entityClassReference) : allInTablesPackage;
String realTablesClassName = StrUtil.isBlank(allInTablesClassName) ? "Tables" : allInTablesClassName;
String tablesContent = ContentBuilder.buildTables(importBuilder, fieldBuilder, realTablesPackage, allInTablesClassName);
processGenClass(genPath, realTablesPackage, realTablesClassName, tablesContent);
// 生成的 Mapper 依赖于此 Element
processGenClass(genPath, realMapperPackage, mapperClassName, mapperClassContent, entityClassElement);
}
}
// 确定了要生成 Tables 且拥有至少一个被 Table 注解的类时再生成 Tables
if (allInTablesEnable && entityClassReference != null) {
// 生成 Tables 文件
String realTablesPackage = StrUtil.isBlank(allInTablesPackage) ? StrUtil.buildTableDefPackage(entityClassReference) : allInTablesPackage;
String realTablesClassName = StrUtil.isBlank(allInTablesClassName) ? "Tables" : allInTablesClassName;
String tablesContent = ContentBuilder.buildTables(importBuilder, fieldBuilder, realTablesPackage, allInTablesClassName);
processGenClass(genPath, realTablesPackage, realTablesClassName, tablesContent, elementsAnnotatedWith.toArray(new Element[0]));
}
}
return false;
}
@ -259,7 +251,7 @@ public class MybatisFlexProcessor extends AbstractProcessor {
final String[] typeHandlerClass = {""};
List<? extends AnnotationMirror> annotationMirrors = fieldElement.getAnnotationMirrors();
for (AnnotationMirror annotationMirror : annotationMirrors) {
annotationMirror.getElementValues().forEach((BiConsumer<ExecutableElement, AnnotationValue>) (executableElement, annotationValue) -> {
annotationMirror.getElementValues().forEach((executableElement, annotationValue) -> {
if ("typeHandler".contentEquals(executableElement.getSimpleName())) {
typeHandlerClass[0] = annotationValue.toString();
}
@ -346,12 +338,12 @@ public class MybatisFlexProcessor extends AbstractProcessor {
}
private void processGenClass(String genBasePath, String genPackageName, String className, String genContent) {
private void processGenClass(String genBasePath, String genPackageName, String className, String genContent, Element... elements) {
Writer writer = null;
try {
JavaFileObject sourceFile = filer.createSourceFile(genPackageName + "." + className);
JavaFileObject sourceFile = filer.createSourceFile(genPackageName + "." + className, elements);
if (genBasePath == null || genBasePath.trim().length() == 0) {
writer = sourceFile.openWriter();
writer = new OutputStreamWriter(sourceFile.openOutputStream(), configuration.get(ConfigurationKey.CHARSET));
writer.write(genContent);
writer.flush();
return;