Skip to content

Commit 88bb8ee

Browse files
author
Wout Gevaert
committed
Allow for Assigment-objects in CREATE, MATCH, MERGE and OPTIONAL MATCH
To support queries of the form 'MATCH p = (n:Movie {name : 'Titanic'})-[*]-() RETURN endNode(p) LIMIT 25' etc.
1 parent 6945978 commit 88bb8ee

File tree

5 files changed

+45
-28
lines changed

5 files changed

+45
-28
lines changed

src/Clauses/CreateClause.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
namespace WikibaseSolutions\CypherDSL\Clauses;
2323

24+
use WikibaseSolutions\CypherDSL\ErrorHandling\ErrorHelper;
2425
use WikibaseSolutions\CypherDSL\Types\StructuralTypes\StructuralType;
2526

2627
/**
@@ -31,18 +32,20 @@
3132
class CreateClause extends Clause
3233
{
3334
/**
34-
* @var StructuralType[] The patterns to create
35+
* @var StructuralType[]|Assignment[] The patterns to create
3536
*/
3637
private array $patterns = [];
3738

3839
/**
3940
* Add a pattern to create.
4041
*
41-
* @param StructuralType $pattern The pattern to create
42+
* @param StructuralType|Assignment $pattern The pattern to create
4243
* @return CreateClause
4344
*/
44-
public function addPattern(StructuralType $pattern): self
45+
public function addPattern( $pattern ): self
4546
{
47+
ErrorHelper::assertClass('pattern', [StructuralType::class, Assignment::class], $pattern);
48+
4649
$this->patterns[] = $pattern;
4750

4851
return $this;
@@ -63,7 +66,7 @@ protected function getSubject(): string
6366
{
6467
return implode(
6568
", ",
66-
array_map(fn(StructuralType $pattern): string => $pattern->toQuery(), $this->patterns)
69+
array_map(fn($pattern): string => $pattern->toQuery(), $this->patterns)
6770
);
6871
}
69-
}
72+
}

src/Clauses/MatchClause.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
namespace WikibaseSolutions\CypherDSL\Clauses;
2323

24+
use WikibaseSolutions\CypherDSL\Assignment;
25+
use WikibaseSolutions\CypherDSL\ErrorHandling\ErrorHelper;
2426
use WikibaseSolutions\CypherDSL\Types\StructuralTypes\StructuralType;
2527

2628
/**
@@ -31,18 +33,20 @@
3133
class MatchClause extends Clause
3234
{
3335
/**
34-
* @var StructuralType[] List of patterns
36+
* @var StructuralType[]|Assignment[] List of patterns
3537
*/
3638
private array $patterns = [];
3739

3840
/**
3941
* Add a pattern to the match clause.
4042
*
41-
* @param StructuralType $pattern
43+
* @param StructuralType|Assignment $pattern
4244
* @return MatchClause
4345
*/
44-
public function addPattern(StructuralType $pattern): self
46+
public function addPattern( $pattern ): self
4547
{
48+
ErrorHelper::assertClass('pattern', [StructuralType::class, Assignment::class], $pattern);
49+
4650
$this->patterns[] = $pattern;
4751

4852
return $this;
@@ -63,7 +67,7 @@ protected function getSubject(): string
6367
{
6468
return implode(
6569
", ",
66-
array_map(fn(StructuralType $pattern): string => $pattern->toQuery(), $this->patterns)
70+
array_map(fn( $pattern ): string => $pattern->toQuery(), $this->patterns)
6771
);
6872
}
69-
}
73+
}

src/Clauses/MergeClause.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
namespace WikibaseSolutions\CypherDSL\Clauses;
2323

24+
use WikibaseSolutions\CypherDSL\ErrorHandling\ErrorHelper;
25+
use WikibaseSolutions\CypherDSL\Assignment;
2426
use WikibaseSolutions\CypherDSL\Types\StructuralTypes\StructuralType;
2527

2628
/**
@@ -31,9 +33,9 @@
3133
class MergeClause extends Clause
3234
{
3335
/**
34-
* @var StructuralType|null $pattern The pattern to merge
36+
* @var StructuralType|Assignment|null $pattern The pattern to merge
3537
*/
36-
private ?StructuralType $pattern;
38+
private $pattern;
3739

3840
/**
3941
* @var Clause|null $createClause The clause to execute when the pattern is created
@@ -48,11 +50,13 @@ class MergeClause extends Clause
4850
/**
4951
* Sets the pattern to merge.
5052
*
51-
* @param StructuralType $pattern The pattern to merge
53+
* @param StructuralType|Assignment $pattern The pattern to merge
5254
* @return MergeClause
5355
*/
54-
public function setPattern(StructuralType $pattern): self
56+
public function setPattern($pattern): self
5557
{
58+
ErrorHelper::assertClass('pattern', [StructuralType::class, Assignment::class], $pattern);
59+
5660
$this->pattern = $pattern;
5761

5862
return $this;
@@ -117,4 +121,4 @@ protected function getSubject(): string
117121

118122
return implode(" ", $queryParts);
119123
}
120-
}
124+
}

src/Clauses/OptionalMatchClause.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
namespace WikibaseSolutions\CypherDSL\Clauses;
2323

24+
use WikibaseSolutions\CypherDSL\Assignment;
25+
use WikibaseSolutions\CypherDSL\ErrorHandling\ErrorHelper;
2426
use WikibaseSolutions\CypherDSL\Types\StructuralTypes\StructuralType;
2527

2628
/**
@@ -31,18 +33,20 @@
3133
class OptionalMatchClause extends Clause
3234
{
3335
/**
34-
* @var StructuralType[] List of patterns
36+
* @var StructuralType[]|Assignment[] List of patterns
3537
*/
3638
private array $patterns = [];
3739

3840
/**
3941
* Add a pattern to the optional match clause.
4042
*
41-
* @param StructuralType $pattern
43+
* @param StructuralType|Assignment $pattern
4244
* @return OptionalMatchClause
4345
*/
44-
public function addPattern(StructuralType $pattern): self
46+
public function addPattern( $pattern ): self
4547
{
48+
ErrorHelper::assertClass('pattern', [StructuralType::class, Assignment::class], $pattern);
49+
4650
$this->patterns[] = $pattern;
4751

4852
return $this;
@@ -63,7 +67,7 @@ protected function getSubject(): string
6367
{
6468
return implode(
6569
", ",
66-
array_map(fn(StructuralType $pattern): string => $pattern->toQuery(), $this->patterns)
70+
array_map(fn( $pattern ): string => $pattern->toQuery(), $this->patterns)
6771
);
6872
}
69-
}
73+
}

src/Query.php

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ public static function rawExpression(string $expression): AnyType
219219
/**
220220
* Creates the MATCH clause.
221221
*
222-
* @param StructuralType|StructuralType[] $patterns A single pattern or a list of patterns
222+
* @param StructuralType|StructuralType[]|Assignment|Assignment[] $patterns A single pattern or a list of patterns
223223
*
224224
* @return $this
225225
* @see https://neo4j.com/docs/cypher-manual/current/clauses/match/
@@ -234,7 +234,7 @@ public function match($patterns): self
234234
}
235235

236236
foreach ($patterns as $pattern) {
237-
ErrorHelper::assertClass('pattern', StructuralType::class, $pattern);
237+
ErrorHelper::assertClass('pattern', [StructuralType::class, Assignment::class], $pattern);
238238

239239
$matchClause->addPattern($pattern);
240240
}
@@ -285,7 +285,7 @@ public function returning($expressions, bool $distinct = false): self
285285
/**
286286
* Creates the CREATE clause.
287287
*
288-
* @param StructuralType|StructuralType[] $patterns A single pattern or a list of patterns
288+
* @param StructuralType|StructuralType[]|Assignment|Assignment[] $patterns A single pattern or a list of patterns
289289
*
290290
* @return $this
291291
* @see https://neo4j.com/docs/cypher-manual/current/clauses/create/
@@ -300,7 +300,7 @@ public function create($patterns): self
300300
}
301301

302302
foreach ($patterns as $pattern) {
303-
ErrorHelper::assertClass('pattern', StructuralType::class, $pattern);
303+
ErrorHelper::assertClass('pattern', [StructuralType::class, Assignment::class], $pattern);
304304

305305
$createClause->addPattern($pattern);
306306
}
@@ -389,16 +389,18 @@ public function limit(NumeralType $limit): self
389389
/**
390390
* Creates the MERGE clause.
391391
*
392-
* @param StructuralType $pattern The pattern to merge
392+
* @param StructuralType|Assignment $pattern The pattern to merge
393393
* @param Clause|null $createClause The clause to execute when the pattern is created
394394
* @param Clause|null $matchClause The clause to execute when the pattern is matched
395395
*
396396
* @return $this
397397
* @see https://neo4j.com/docs/cypher-manual/current/clauses/merge/
398398
*
399399
*/
400-
public function merge(StructuralType $pattern, Clause $createClause = null, Clause $matchClause = null): self
400+
public function merge($pattern, Clause $createClause = null, Clause $matchClause = null): self
401401
{
402+
ErrorHelper::assertClass('pattern', [StructuralType::class, Assignment::class], $pattern);
403+
402404
$mergeClause = new MergeClause();
403405
$mergeClause->setPattern($pattern);
404406

@@ -418,7 +420,7 @@ public function merge(StructuralType $pattern, Clause $createClause = null, Clau
418420
/**
419421
* Creates the OPTIONAL MATCH clause.
420422
*
421-
* @param StructuralType|StructuralType[] $patterns A single pattern or a list of patterns
423+
* @param StructuralType|StructuralType[]|Assignment|Assignment[] $patterns A single pattern or a list of patterns
422424
*
423425
* @return $this
424426
* @see https://neo4j.com/docs/cypher-manual/current/clauses/optional-match/
@@ -433,7 +435,7 @@ public function optionalMatch($patterns): self
433435
}
434436

435437
foreach ($patterns as $pattern) {
436-
ErrorHelper::assertClass('pattern', StructuralType::class, $pattern);
438+
ErrorHelper::assertClass('pattern', [StructuralType::class, Assignment::class], $pattern);
437439

438440
$optionalMatchClause->addPattern($pattern);
439441
}

0 commit comments

Comments
 (0)