Filter优化
This commit is contained in:
@@ -24,7 +24,7 @@ public class FilterJoinNode extends FilterNode {
|
||||
|
||||
private Class joinClass;
|
||||
|
||||
private EntityInfo joinEntity; //在调用 createSQLJoin 和 isCacheUseable 时会注入
|
||||
private EntityInfo joinEntity; //在调用createSQLJoin和isCacheUseable时会注入
|
||||
|
||||
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) {
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -5,46 +5,51 @@
|
||||
*/
|
||||
package org.redkale.source;
|
||||
|
||||
import org.redkale.convert.ConvertColumn;
|
||||
|
||||
/**
|
||||
* FilterValue主要用于复杂的表达式。<br>
|
||||
* 例如: col / 10 = 3 、MOD(col, 8) > 0 这些都不是单独一个数值能表达的,因此需要FilterValue 才构建 8 、 > 、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() + "]";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user