FilterNode优化

This commit is contained in:
redkale
2024-01-06 18:53:02 +08:00
parent 81340be2e1
commit 267a17858f
2 changed files with 40 additions and 2 deletions

View File

@@ -9,6 +9,7 @@ import java.io.Serializable;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.*;
import java.util.stream.Stream;
import org.redkale.convert.ConvertColumn;
import static org.redkale.source.FilterExpress.*;
import org.redkale.util.*;
@@ -79,6 +80,9 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
} else {
exp = FilterExpress.IN;
}
} else if (val instanceof Stream) {
val = ((Stream) val).toArray();
exp = FilterExpress.IN;
}
}
this.column = col;
@@ -605,6 +609,14 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
return and(new FilterNode(column, IN, value));
}
public FilterNode in(String column, Stream stream) {
return and(new FilterNode(column, IN, stream == null ? null : (Serializable) stream.toArray()));
}
public FilterNode in(String column, Collection collection) {
return and(new FilterNode(column, IN, (Serializable) collection));
}
public <F extends Serializable> FilterNode in(LambdaSupplier<F> func) {
return and(new FilterNode(LambdaSupplier.readColumn(func), IN, func.get()));
}
@@ -617,6 +629,14 @@ public class FilterNode { //FilterNode 不能实现Serializable接口 否则
return and(new FilterNode(column, NOT_IN, value));
}
public FilterNode notIn(String column, Stream stream) {
return and(new FilterNode(column, NOT_IN, stream == null ? null : (Serializable) stream.toArray()));
}
public FilterNode notIn(String column, Collection collection) {
return and(new FilterNode(column, NOT_IN, (Serializable) collection));
}
public <F extends Serializable> FilterNode notIn(LambdaSupplier<F> func) {
return and(new FilterNode(LambdaSupplier.readColumn(func), NOT_IN, func.get()));
}

View File

@@ -4,6 +4,8 @@
package org.redkale.source;
import java.io.Serializable;
import java.util.Collection;
import java.util.stream.Stream;
import static org.redkale.source.FilterExpress.*;
import org.redkale.util.LambdaFunction;
import org.redkale.util.LambdaSupplier;
@@ -375,6 +377,14 @@ public final class FilterNodes {
return new FilterNode(column, IN, value);
}
public static FilterNode in(String column, Stream stream) {
return new FilterNode(column, IN, stream == null ? null : (Serializable) stream.toArray());
}
public static FilterNode in(String column, Collection collection) {
return new FilterNode(column, IN, (Serializable) collection);
}
public static <F extends Serializable> FilterNode in(LambdaSupplier<F> func) {
return new FilterNode(LambdaSupplier.readColumn(func), IN, func.get());
}
@@ -387,6 +397,14 @@ public final class FilterNodes {
return new FilterNode(column, NOT_IN, value);
}
public static FilterNode notIn(String column, Stream stream) {
return new FilterNode(column, NOT_IN, stream == null ? null : (Serializable) stream.toArray());
}
public static FilterNode notIn(String column, Collection collection) {
return new FilterNode(column, NOT_IN, (Serializable) collection);
}
public static <F extends Serializable> FilterNode notIn(LambdaSupplier<F> func) {
return new FilterNode(LambdaSupplier.readColumn(func), NOT_IN, func.get());
}
@@ -502,7 +520,7 @@ public final class FilterNodes {
public static <T, F extends FilterExpValue> FilterNode fvdiv(LambdaFunction<T, F> func, F value) {
return new FilterNode(LambdaFunction.readColumn(func), FV_DIV, value);
}
//----------------------------------------------------------------------------------------------------
public static FilterJoinNode joinInner(Class joinClass, String joinColumn, String column, Serializable value) {
return joinInner(joinClass, new String[]{joinColumn}, column, value);
@@ -519,7 +537,7 @@ public final class FilterNodes {
public static FilterJoinNode joinInner(Class joinClass, String[] joinColumns, String column, FilterExpress express, Serializable value) {
return new FilterJoinNode(FilterJoinType.INNER, joinClass, joinColumns, column, express, value);
}
//----------------------------------------------------------------------------------------------------
static FilterExpress oldExpress(FilterExpress express) {
switch (express) {