Skip to content

Commit d28bbf2

Browse files
committed
added union method on Query
1 parent c544202 commit d28bbf2

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

src/Query.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
use WikibaseSolutions\CypherDSL\Clauses\ReturnClause;
3636
use WikibaseSolutions\CypherDSL\Clauses\SetClause;
3737
use WikibaseSolutions\CypherDSL\Clauses\SkipClause;
38+
use WikibaseSolutions\CypherDSL\Clauses\UnionClause;
3839
use WikibaseSolutions\CypherDSL\Clauses\WhereClause;
3940
use WikibaseSolutions\CypherDSL\Clauses\WithClause;
4041
use WikibaseSolutions\CypherDSL\Traits\ErrorTrait;
@@ -55,6 +56,7 @@
5556
use WikibaseSolutions\CypherDSL\Types\StructuralTypes\NodeType;
5657
use WikibaseSolutions\CypherDSL\Types\StructuralTypes\PathType;
5758
use WikibaseSolutions\CypherDSL\Types\StructuralTypes\StructuralType;
59+
use function is_callable;
5860

5961
/**
6062
* Builder class for building complex Cypher queries.
@@ -635,6 +637,35 @@ public function callProcedure(string $procedure, array $arguments = [], array $y
635637
return $this;
636638
}
637639

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+
638669
/**
639670
* Add a clause to the query.
640671
*

0 commit comments

Comments
 (0)