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 Class joinClass;
private EntityInfo joinEntity; //在调用 createSQLJoinisCacheUseable 时会注入 private EntityInfo joinEntity; //在调用createSQLJoinisCacheUseable时会注入
private String[] joinColumns; private String[] joinColumns;
@@ -98,7 +98,8 @@ public class FilterJoinNode extends FilterNode {
protected FilterNode any(final FilterNode node0, boolean signor) { protected FilterNode any(final FilterNode node0, boolean signor) {
Objects.requireNonNull(node0); Objects.requireNonNull(node0);
if (!(node0 instanceof FilterJoinNode)) { 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; final FilterJoinNode node = (FilterJoinNode) node0;
if (this.nodes == null) { if (this.nodes == null) {

View File

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

View File

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