|
35 | 35 | use WikibaseSolutions\CypherDSL\Clauses\ReturnClause;
|
36 | 36 | use WikibaseSolutions\CypherDSL\Clauses\SetClause;
|
37 | 37 | use WikibaseSolutions\CypherDSL\Clauses\SkipClause;
|
| 38 | +use WikibaseSolutions\CypherDSL\Clauses\UnionClause; |
38 | 39 | use WikibaseSolutions\CypherDSL\Clauses\WhereClause;
|
39 | 40 | use WikibaseSolutions\CypherDSL\Clauses\WithClause;
|
40 | 41 | use WikibaseSolutions\CypherDSL\Traits\ErrorTrait;
|
|
55 | 56 | use WikibaseSolutions\CypherDSL\Types\StructuralTypes\NodeType;
|
56 | 57 | use WikibaseSolutions\CypherDSL\Types\StructuralTypes\PathType;
|
57 | 58 | use WikibaseSolutions\CypherDSL\Types\StructuralTypes\StructuralType;
|
| 59 | +use function is_callable; |
58 | 60 |
|
59 | 61 | /**
|
60 | 62 | * Builder class for building complex Cypher queries.
|
@@ -635,6 +637,35 @@ public function callProcedure(string $procedure, array $arguments = [], array $y
|
635 | 637 | return $this;
|
636 | 638 | }
|
637 | 639 |
|
| 640 | + |
| 641 | + /** |
| 642 | + * Combines the result of this query with another one via a UNION clause. |
| 643 | + * |
| 644 | + * @param callable(Query):void|Query $queryOrCallable The callable decorating a fresh query instance or the query instance to be attached after the union clause. |
| 645 | + * @param bool $all Whether the union should include all results or remove the duplicates instead. |
| 646 | + * |
| 647 | + * @return Query |
| 648 | + * |
| 649 | + * @see https://neo4j.com/docs/cypher-manual/current/clauses/union/ |
| 650 | + */ |
| 651 | + public function union($queryOrCallable, bool $all = false): self |
| 652 | + { |
| 653 | + $this->clauses[] = new UnionClause($all); |
| 654 | + |
| 655 | + if (is_callable($queryOrCallable)) { |
| 656 | + $query = Query::new(); |
| 657 | + $queryOrCallable($query); |
| 658 | + } else { |
| 659 | + $query = $queryOrCallable; |
| 660 | + } |
| 661 | + |
| 662 | + foreach ($query->getClauses() as $clause) { |
| 663 | + $this->clauses[] = $clause; |
| 664 | + } |
| 665 | + |
| 666 | + return $this; |
| 667 | + } |
| 668 | + |
638 | 669 | /**
|
639 | 670 | * Add a clause to the query.
|
640 | 671 | *
|
|
0 commit comments