Skip to content

Commit 051b6e1

Browse files
Added prune variable support
1 parent 3fe8feb commit 051b6e1

File tree

3 files changed

+53
-3
lines changed

3 files changed

+53
-3
lines changed

src/AQL/HasGraphClauses.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -143,14 +143,15 @@ public function prune(
143143
object|array|string|int|float|bool|null $leftOperand,
144144
string|QueryBuilder|Expression $comparisonOperator = null,
145145
object|array|string|int|float|bool|null $rightOperand = null,
146-
string|QueryBuilder|Expression $logicalOperator = null
146+
string|QueryBuilder|Expression $logicalOperator = null,
147+
string $pruneVariable = null
147148
): self {
148149
$predicates = $leftOperand;
149150
if (! is_array($predicates)) {
150151
$predicates = [[$leftOperand, $comparisonOperator, $rightOperand, $logicalOperator]];
151152
}
152153

153-
$this->addCommand(new PruneClause($predicates));
154+
$this->addCommand(new PruneClause($predicates, $pruneVariable));
154155

155156
return $this;
156157
}

src/Clauses/PruneClause.php

+26-1
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,41 @@
44

55
namespace LaravelFreelancerNL\FluentAQL\Clauses;
66

7+
use LaravelFreelancerNL\FluentAQL\Expressions\PredicateExpression;
78
use LaravelFreelancerNL\FluentAQL\QueryBuilder;
89

910
class PruneClause extends FilterClause
1011
{
12+
protected ?string $pruneVariable = null;
13+
14+
/**
15+
* Filter statement.
16+
*
17+
* @param array<mixed> $predicates
18+
*/
19+
public function __construct(
20+
array|PredicateExpression $predicates,
21+
string $pruneVariable = null
22+
) {
23+
parent::__construct($predicates);
24+
25+
$this->pruneVariable = $pruneVariable;
26+
}
27+
28+
1129
public function compile(QueryBuilder $queryBuilder): string
1230
{
31+
$aql = 'PRUNE ';
32+
33+
if (isset($this->pruneVariable)) {
34+
$pruneVariable = $queryBuilder->normalizeArgument($this->pruneVariable, 'Variable');
35+
$aql .= $pruneVariable->compile($queryBuilder) . ' = ';
36+
}
37+
1338
$this->predicates = $queryBuilder->normalizePredicates($this->predicates);
1439

1540
$compiledPredicates = $queryBuilder->compilePredicates($this->predicates);
1641

17-
return 'PRUNE ' . rtrim($compiledPredicates);
42+
return $aql . rtrim($compiledPredicates);
1843
}
1944
}

tests/Unit/AQL/GraphClausesTest.php

+24
Original file line numberDiff line numberDiff line change
@@ -158,4 +158,28 @@ public function testPruneClauseWithMultiplePredicates()
158158
->get();
159159
self::assertEquals('FOR u IN Users PRUNE u.active == true AND u.age > 18', $result->query);
160160
}
161+
162+
/**
163+
* @covers \LaravelFreelancerNL\FluentAQL\Clauses\PruneClause
164+
*/
165+
public function testPruneClauseWithVariable()
166+
{
167+
$result = (new QueryBuilder())
168+
->for('u', 'users')
169+
->prune('u.active', '==', 'true', null, 'pruneCondition')
170+
->get();
171+
self::assertEquals('FOR u IN users PRUNE pruneCondition = u.active == true', $result->query);
172+
173+
$result = (new QueryBuilder())
174+
->for('u', 'Users')
175+
->prune('u.active', '==', 'true', 'OR', 'pruneCondition')
176+
->get();
177+
self::assertEquals('FOR u IN Users PRUNE pruneCondition = u.active == true', $result->query);
178+
179+
$result = (new QueryBuilder())
180+
->for('u', 'Users')
181+
->prune(['u.active', '==', 'true'], pruneVariable: 'pruneCondition')
182+
->get();
183+
self::assertEquals('FOR u IN Users PRUNE pruneCondition = u.active == true', $result->query);
184+
}
161185
}

0 commit comments

Comments
 (0)