Filter优化

This commit is contained in:
redkale
2023-07-29 20:20:23 +08:00
parent 8346df60ec
commit 07585a01ed
3 changed files with 53 additions and 47 deletions

View File

@@ -24,7 +24,7 @@ public class FilterJoinNode extends FilterNode {
private Class joinClass;
private EntityInfo joinEntity; //在调用 createSQLJoinisCacheUseable 时会注入
private EntityInfo joinEntity; //在调用createSQLJoinisCacheUseable时会注入
private String[] joinColumns;
@@ -98,7 +98,8 @@ public class FilterJoinNode extends FilterNode {
protected FilterNode any(final FilterNode node0, boolean signor) {
Objects.requireNonNull(node0);
if (!(node0 instanceof FilterJoinNode)) {
throw new IllegalArgumentException(this + (signor ? " or " : " and ") + " a node but " + String.valueOf(node0) + " is not a " + FilterJoinNode.class.getSimpleName());
throw new IllegalArgumentException(this + (signor ? " or " : " and ") + " a node but "
+ String.valueOf(node0) + " is not a " + FilterJoinNode.class.getSimpleName());
}
final FilterJoinNode node = (FilterJoinNode) node0;
if (this.nodes == null) {

View File

@@ -542,8 +542,8 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
}
if (express == FV_MOD || express == FV_DIV) {
FilterValue fv = (FilterValue) val0;
return new StringBuilder().append(info.getSQLColumn(talis, column)).append(' ').append(express.value()).append(' ').append(fv.getOptvalue())
.append(' ').append(fv.getExpress().value()).append(' ').append(fv.getDestvalue());
return new StringBuilder().append(info.getSQLColumn(talis, column)).append(' ').append(express.value()).append(' ').append(fv.getFirst())
.append(' ').append(fv.getExpress().value()).append(' ').append(fv.getSecond());
}
final boolean fk = (val0 instanceof FilterKey);
CharSequence val = fk ? info.getSQLColumn(talis, ((FilterKey) val0).getColumn()) : formatToString(express, info.getSQLValue(column, (Serializable) val0));
@@ -1201,12 +1201,12 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
@Override
public boolean test(T t) {
return (((Number) attr.get(t)).longValue() % fv0.getOptvalue().longValue()) == fv0.getDestvalue().longValue();
return (((Number) attr.get(t)).longValue() % fv0.getFirst().longValue()) == fv0.getSecond().longValue();
}
@Override
public String toString() {
return field + " " + express.value() + " " + fv0.getOptvalue() + " " + fv0.getExpress().value() + " " + fv0.getDestvalue();
return field + " " + express.value() + " " + fv0.getFirst() + " " + fv0.getExpress().value() + " " + fv0.getSecond();
}
};
case NOTEQUAL:
@@ -1214,12 +1214,12 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
@Override
public boolean test(T t) {
return (((Number) attr.get(t)).longValue() % fv0.getOptvalue().longValue()) != fv0.getDestvalue().longValue();
return (((Number) attr.get(t)).longValue() % fv0.getFirst().longValue()) != fv0.getSecond().longValue();
}
@Override
public String toString() {
return field + " " + express.value() + " " + fv0.getOptvalue() + " " + fv0.getExpress().value() + " " + fv0.getDestvalue();
return field + " " + express.value() + " " + fv0.getFirst() + " " + fv0.getExpress().value() + " " + fv0.getSecond();
}
};
case GREATERTHAN:
@@ -1227,12 +1227,12 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
@Override
public boolean test(T t) {
return (((Number) attr.get(t)).longValue() % fv0.getOptvalue().longValue()) > fv0.getDestvalue().longValue();
return (((Number) attr.get(t)).longValue() % fv0.getFirst().longValue()) > fv0.getSecond().longValue();
}
@Override
public String toString() {
return field + " " + express.value() + " " + fv0.getOptvalue() + " " + fv0.getExpress().value() + " " + fv0.getDestvalue();
return field + " " + express.value() + " " + fv0.getFirst() + " " + fv0.getExpress().value() + " " + fv0.getSecond();
}
};
case LESSTHAN:
@@ -1240,12 +1240,12 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
@Override
public boolean test(T t) {
return (((Number) attr.get(t)).longValue() % fv0.getOptvalue().longValue()) < fv0.getDestvalue().longValue();
return (((Number) attr.get(t)).longValue() % fv0.getFirst().longValue()) < fv0.getSecond().longValue();
}
@Override
public String toString() {
return field + " " + express.value() + " " + fv0.getOptvalue() + " " + fv0.getExpress().value() + " " + fv0.getDestvalue();
return field + " " + express.value() + " " + fv0.getFirst() + " " + fv0.getExpress().value() + " " + fv0.getSecond();
}
};
case GREATERTHANOREQUALTO:
@@ -1253,12 +1253,12 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
@Override
public boolean test(T t) {
return (((Number) attr.get(t)).longValue() % fv0.getOptvalue().longValue()) >= fv0.getDestvalue().longValue();
return (((Number) attr.get(t)).longValue() % fv0.getFirst().longValue()) >= fv0.getSecond().longValue();
}
@Override
public String toString() {
return field + " " + express.value() + " " + fv0.getOptvalue() + " " + fv0.getExpress().value() + " " + fv0.getDestvalue();
return field + " " + express.value() + " " + fv0.getFirst() + " " + fv0.getExpress().value() + " " + fv0.getSecond();
}
};
case LESSTHANOREQUALTO:
@@ -1266,12 +1266,12 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
@Override
public boolean test(T t) {
return (((Number) attr.get(t)).longValue() % fv0.getOptvalue().longValue()) <= fv0.getDestvalue().longValue();
return (((Number) attr.get(t)).longValue() % fv0.getFirst().longValue()) <= fv0.getSecond().longValue();
}
@Override
public String toString() {
return field + " " + express.value() + " " + fv0.getOptvalue() + " " + fv0.getExpress().value() + " " + fv0.getDestvalue();
return field + " " + express.value() + " " + fv0.getFirst() + " " + fv0.getExpress().value() + " " + fv0.getSecond();
}
};
default:
@@ -1285,12 +1285,12 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
@Override
public boolean test(T t) {
return (((Number) attr.get(t)).longValue() / fv1.getOptvalue().longValue()) == fv1.getDestvalue().longValue();
return (((Number) attr.get(t)).longValue() / fv1.getFirst().longValue()) == fv1.getSecond().longValue();
}
@Override
public String toString() {
return field + " " + express.value() + " " + fv1.getOptvalue() + " " + fv1.getExpress().value() + " " + fv1.getDestvalue();
return field + " " + express.value() + " " + fv1.getFirst() + " " + fv1.getExpress().value() + " " + fv1.getSecond();
}
};
case NOTEQUAL:
@@ -1298,12 +1298,12 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
@Override
public boolean test(T t) {
return (((Number) attr.get(t)).longValue() / fv1.getOptvalue().longValue()) != fv1.getDestvalue().longValue();
return (((Number) attr.get(t)).longValue() / fv1.getFirst().longValue()) != fv1.getSecond().longValue();
}
@Override
public String toString() {
return field + " " + express.value() + " " + fv1.getOptvalue() + " " + fv1.getExpress().value() + " " + fv1.getDestvalue();
return field + " " + express.value() + " " + fv1.getFirst() + " " + fv1.getExpress().value() + " " + fv1.getSecond();
}
};
case GREATERTHAN:
@@ -1311,12 +1311,12 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
@Override
public boolean test(T t) {
return (((Number) attr.get(t)).longValue() / fv1.getOptvalue().longValue()) > fv1.getDestvalue().longValue();
return (((Number) attr.get(t)).longValue() / fv1.getFirst().longValue()) > fv1.getSecond().longValue();
}
@Override
public String toString() {
return field + " " + express.value() + " " + fv1.getOptvalue() + " " + fv1.getExpress().value() + " " + fv1.getDestvalue();
return field + " " + express.value() + " " + fv1.getFirst() + " " + fv1.getExpress().value() + " " + fv1.getSecond();
}
};
case LESSTHAN:
@@ -1324,12 +1324,12 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
@Override
public boolean test(T t) {
return (((Number) attr.get(t)).longValue() / fv1.getOptvalue().longValue()) < fv1.getDestvalue().longValue();
return (((Number) attr.get(t)).longValue() / fv1.getFirst().longValue()) < fv1.getSecond().longValue();
}
@Override
public String toString() {
return field + " " + express.value() + " " + fv1.getOptvalue() + " " + fv1.getExpress().value() + " " + fv1.getDestvalue();
return field + " " + express.value() + " " + fv1.getFirst() + " " + fv1.getExpress().value() + " " + fv1.getSecond();
}
};
case GREATERTHANOREQUALTO:
@@ -1337,12 +1337,12 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
@Override
public boolean test(T t) {
return (((Number) attr.get(t)).longValue() / fv1.getOptvalue().longValue()) >= fv1.getDestvalue().longValue();
return (((Number) attr.get(t)).longValue() / fv1.getFirst().longValue()) >= fv1.getSecond().longValue();
}
@Override
public String toString() {
return field + " " + express.value() + " " + fv1.getOptvalue() + " " + fv1.getExpress().value() + " " + fv1.getDestvalue();
return field + " " + express.value() + " " + fv1.getFirst() + " " + fv1.getExpress().value() + " " + fv1.getSecond();
}
};
case LESSTHANOREQUALTO:
@@ -1350,12 +1350,12 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
@Override
public boolean test(T t) {
return (((Number) attr.get(t)).longValue() / fv1.getOptvalue().longValue()) <= fv1.getDestvalue().longValue();
return (((Number) attr.get(t)).longValue() / fv1.getFirst().longValue()) <= fv1.getSecond().longValue();
}
@Override
public String toString() {
return field + " " + express.value() + " " + fv1.getOptvalue() + " " + fv1.getExpress().value() + " " + fv1.getDestvalue();
return field + " " + express.value() + " " + fv1.getFirst() + " " + fv1.getExpress().value() + " " + fv1.getSecond();
}
};
default:

View File

@@ -5,46 +5,51 @@
*/
package org.redkale.source;
import org.redkale.convert.ConvertColumn;
/**
* FilterValue主要用于复杂的表达式。<br>
* 例如: col / 10 = 3 、MOD(col, 8) &gt; 0 这些都不是单独一个数值能表达的因此需要FilterValue 才构建 8 、 &gt; 、0 组合值。
*
* <p>
* 详情见: https://redkale.org
*
*
* @author zhangjx
*/
public class FilterValue implements java.io.Serializable {
private Number optvalue;
@ConvertColumn(index = 1)
private Number first;
@ConvertColumn(index = 2)
private FilterExpress express;
private Number destvalue;
@ConvertColumn(index = 3)
private Number second;
public FilterValue() {
}
public FilterValue(Number optvalue, Number destvalue) {
this(optvalue, FilterExpress.EQUAL, destvalue);
public FilterValue(Number first, Number second) {
this(first, FilterExpress.EQUAL, second);
}
public FilterValue(Number optvalue, FilterExpress express) {
this(optvalue, express, 0);
public FilterValue(Number first, FilterExpress express) {
this(first, express, 0);
}
public FilterValue(Number optvalue, FilterExpress express, Number destvalue) {
this.optvalue = optvalue;
public FilterValue(Number first, FilterExpress express, Number second) {
this.first = first;
this.express = express;
this.destvalue = destvalue;
this.second = second;
}
public Number getOptvalue() {
return optvalue == null ? 0 : optvalue;
public Number getFirst() {
return first == null ? 0 : first;
}
public void setOptvalue(Number optvalue) {
this.optvalue = optvalue;
public void setFirst(Number first) {
this.first = first;
}
public FilterExpress getExpress() {
@@ -55,16 +60,16 @@ public class FilterValue implements java.io.Serializable {
this.express = express;
}
public Number getDestvalue() {
return destvalue == null ? 0 : destvalue;
public Number getSecond() {
return second == null ? 0 : second;
}
public void setDestvalue(Number destvalue) {
this.destvalue = destvalue;
public void setSecond(Number second) {
this.second = second;
}
@Override
public String toString() {
return FilterValue.class.getSimpleName() + "[optvalue=" + getOptvalue() + ", express=" + getExpress() + ", destvalue=" + getDestvalue() + "]";
return FilterValue.class.getSimpleName() + "[first=" + getFirst() + ", express=" + getExpress() + ", second=" + getSecond() + "]";
}
}