FilterNode优化

This commit is contained in:
redkale
2023-11-10 13:58:12 +08:00
parent 700ef231df
commit 25398327c7

View File

@@ -86,6 +86,79 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
this.value = val;
}
protected FilterNode any(FilterNode node, boolean isOr) {
if (this.readOnly) {
throw new SourceException("FilterNode(" + this + ") is ReadOnly");
}
Objects.requireNonNull(node);
if (this.column == null) {
this.column = node.column;
this.express = node.express;
this.value = node.value;
return this;
}
if (this.nodes == null) {
this.nodes = new FilterNode[]{node};
this.or = isOr;
return this;
}
if (or == isOr) {
this.nodes = Utility.append(this.nodes, node);
return this;
}
FilterNode newNode = new FilterNode(this.column, this.express, this.value);
newNode.or = this.or;
newNode.nodes = this.nodes;
this.nodes = new FilterNode[]{newNode, node};
this.column = null;
this.express = null;
this.or = isOr;
this.value = null;
return this;
}
//----------------------------------------------------------------------------------------------------
@Deprecated(since = "2.8.0")
public static FilterNode create(String column, Serializable value) {
return FilterNodes.create(column, null, value);
}
@Deprecated(since = "2.8.0")
public static FilterNode create(String column, FilterExpress express, Serializable value) {
return FilterNodes.create(column, express, value);
}
@Deprecated(since = "2.8.0")
public static <F extends Serializable> FilterNode create(LambdaSupplier<F> func) {
return FilterNodes.create(func);
}
@Deprecated(since = "2.8.0")
public static <F extends Serializable> FilterNode create(LambdaSupplier<F> func, FilterExpress express) {
return FilterNodes.create(func, express);
}
@Deprecated(since = "2.8.0")
public static <T, F extends Serializable> FilterNode create(LambdaFunction<T, F> func, F value) {
return FilterNodes.create(func, value);
}
@Deprecated(since = "2.8.0")
public static <T, F extends Serializable> FilterNode create(LambdaFunction<T, F> func, FilterExpress express, F value) {
return FilterNodes.create(func, express, value);
}
@Deprecated(since = "2.8.0")
public static FilterNode filter(String column, Serializable value) {
return FilterNodes.create(column, null, value);
}
@Deprecated(since = "2.8.0")
public static FilterNode filter(String column, FilterExpress express, Serializable value) {
return FilterNodes.create(column, express, value);
}
//----------------------------------------------------------------------------------------------------
public FilterNode copy() {
return copy(new FilterNode());
}
@@ -148,6 +221,34 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
return null;
}
public final FilterNode or(FilterNode node) {
return any(node, true);
}
public final FilterNode or(String column, Serializable value) {
return or(column, null, value);
}
public final FilterNode or(String column, FilterExpress express, Serializable value) {
return or(new FilterNode(column, express, value));
}
public final <F extends Serializable> FilterNode or(LambdaSupplier<F> func) {
return or(func, null);
}
public final <F extends Serializable> FilterNode or(LambdaSupplier<F> func, FilterExpress express) {
return or(new FilterNode(LambdaSupplier.readColumn(func), express, func.get()));
}
public final <T, F extends Serializable> FilterNode or(LambdaFunction<T, F> func, F value) {
return or(func, null, value);
}
public final <T, F extends Serializable> FilterNode or(LambdaFunction<T, F> func, FilterExpress express, F value) {
return or(new FilterNode(LambdaFunction.readColumn(func), express, value));
}
public final FilterNode and(FilterNode node) {
return any(node, false);
}
@@ -633,65 +734,6 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
}
//-----------------------------------------------------------------------
public final FilterNode or(FilterNode node) {
return any(node, true);
}
public final FilterNode or(String column, Serializable value) {
return or(column, null, value);
}
public final FilterNode or(String column, FilterExpress express, Serializable value) {
return or(new FilterNode(column, express, value));
}
public final <F extends Serializable> FilterNode or(LambdaSupplier<F> func) {
return or(func, null);
}
public final <F extends Serializable> FilterNode or(LambdaSupplier<F> func, FilterExpress express) {
return or(new FilterNode(LambdaSupplier.readColumn(func), express, func.get()));
}
public final <T, F extends Serializable> FilterNode or(LambdaFunction<T, F> func, F value) {
return or(func, null, value);
}
public final <T, F extends Serializable> FilterNode or(LambdaFunction<T, F> func, FilterExpress express, F value) {
return or(new FilterNode(LambdaFunction.readColumn(func), express, value));
}
protected FilterNode any(FilterNode node, boolean signor) {
if (this.readOnly) {
throw new SourceException("FilterNode(" + this + ") is ReadOnly");
}
Objects.requireNonNull(node);
if (this.column == null) {
this.column = node.column;
this.express = node.express;
this.value = node.value;
return this;
}
if (this.nodes == null) {
this.nodes = new FilterNode[]{node};
this.or = signor;
return this;
}
if (or == signor) {
this.nodes = Utility.append(this.nodes, node);
return this;
}
FilterNode newnode = new FilterNode(this.column, this.express, this.value);
newnode.or = this.or;
newnode.nodes = this.nodes;
this.nodes = new FilterNode[]{newnode, node};
this.column = null;
this.express = null;
this.or = signor;
this.value = null;
return this;
}
/**
* 该方法需要重载
*
@@ -817,64 +859,7 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
return rs;
}
// @Deprecated(since = "2.8.0")
// public static FilterNode create(String column, Serializable value) {
// return new FilterNode(column, null, value);
// }
//
// @Deprecated(since = "2.8.0")
// public static FilterNode create(String column, FilterExpress express, Serializable value) {
// return new FilterNode(column, express, value);
// }
//
// @Deprecated(since = "2.8.0")
// public static <F extends Serializable> FilterNode create(LambdaSupplier<F> func) {
// return new FilterNode(LambdaSupplier.readColumn(func), null, func.get());
// }
//
// @Deprecated(since = "2.8.0")
// public static <F extends Serializable> FilterNode create(LambdaSupplier<F> func, FilterExpress express) {
// return new FilterNode(LambdaSupplier.readColumn(func), express, func.get());
// }
//
// @Deprecated(since = "2.8.0")
// public static <T, F extends Serializable> FilterNode create(LambdaFunction<T, F> func, F value) {
// return new FilterNode(LambdaFunction.readColumn(func), null, value);
// }
//
// @Deprecated(since = "2.8.0")
// public static <T, F extends Serializable> FilterNode create(LambdaFunction<T, F> func, FilterExpress express, F value) {
// return new FilterNode(LambdaFunction.readColumn(func), express, value);
// }
/**
* @see org.redkale.source.FilterNodes
*
* @param column String
* @param value Serializable
*
* @return FilterNode
* @deprecated
*/
@Deprecated(since = "2.8.0")
public static FilterNode filter(String column, Serializable value) {
return new FilterNode(column, null, value);
}
/**
* @see org.redkale.source.FilterNodes
*
* @param column String
* @param express FilterExpress
* @param value Serializable
*
* @return FilterNode
* @deprecated
*/
@Deprecated(since = "2.8.0")
public static FilterNode filter(String column, FilterExpress express, Serializable value) {
return new FilterNode(column, express, value);
}
//----------------------------------------------------------------------------------------------------
private boolean needSplit(final Object val0) {
return needSplit(express, val0);
}