|
2 | 2 |
|
3 | 3 | import static io.github.perplexhub.rsql.RSQLOperators.*; |
4 | 4 |
|
| 5 | +import cz.jirutka.rsql.parser.ast.LogicalNode; |
5 | 6 | import java.util.*; |
| 7 | +import java.util.function.BiFunction; |
6 | 8 | import java.util.function.Function; |
7 | 9 | import java.util.stream.Collectors; |
8 | 10 |
|
@@ -429,14 +431,24 @@ private Predicate equalPredicate(Expression expr, Class type, Object argument) { |
429 | 431 | @Override |
430 | 432 | public Predicate visit(AndNode node, From root) { |
431 | 433 | log.debug("visit(node:{},root:{})", node, root); |
432 | | - |
433 | | - return node.getChildren().stream().map(n -> n.accept(this, root)).collect(Collectors.reducing(builder::and)).get(); |
| 434 | + return visitChildren(node, root, builder::and); |
434 | 435 | } |
435 | 436 |
|
436 | 437 | @Override |
437 | 438 | public Predicate visit(OrNode node, From root) { |
438 | 439 | log.debug("visit(node:{},root:{})", node, root); |
| 440 | + return visitChildren(node, root, builder::or); |
| 441 | + } |
| 442 | + |
| 443 | + private Predicate visitChildren(LogicalNode node, From root, BiFunction<Predicate, Predicate, Predicate> reducer) { |
| 444 | + Predicate result = null; |
| 445 | + |
| 446 | + for (var child : node) { |
| 447 | + result = result != null |
| 448 | + ? reducer.apply(result, child.accept(this, root)) |
| 449 | + : child.accept(this, root); |
| 450 | + } |
439 | 451 |
|
440 | | - return node.getChildren().stream().map(n -> n.accept(this, root)).collect(Collectors.reducing(builder::or)).get(); |
| 452 | + return result; |
441 | 453 | } |
442 | 454 | } |
0 commit comments