Skip to content

Commit

Permalink
- Fixed improper passing of collection registration from a subquery t…
Browse files Browse the repository at this point in the history
…o its parent.

- Correct tests namespacing
  • Loading branch information
LaravelFreelancerNL committed Sep 4, 2021
1 parent 5be1f57 commit 5a2c4b6
Show file tree
Hide file tree
Showing 22 changed files with 81 additions and 35 deletions.
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@
},
"autoload": {
"psr-4": {
"LaravelFreelancerNL\\FluentAQL\\": "src"
"LaravelFreelancerNL\\FluentAQL\\": "src",
"Tests\\": "tests"
}
},
"autoload-dev": {
Expand Down
12 changes: 6 additions & 6 deletions src/Expressions/QueryExpression.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,18 @@ public function __construct(QueryBuilder $expression)
parent::__construct($expression);
}

public function compile(QueryBuilder $parentQueryBuilder): string
public function compile(QueryBuilder $queryBuilder): string
{
$this->expression->registerVariable($parentQueryBuilder->getVariables());
$this->expression->registerVariable($queryBuilder->getVariables());

$this->expression = $this->expression->compile($parentQueryBuilder);
$this->expression = $this->expression->compile($queryBuilder);

$parentQueryBuilder->binds = array_unique(array_merge($parentQueryBuilder->binds, $this->expression->binds));
$queryBuilder->binds = array_unique(array_merge($queryBuilder->binds, $this->expression->binds));

// Extract collections
if (isset($this->expression->collections)) {
foreach ($this->expression->collections as $collection => $mode) {
$parentQueryBuilder->registerCollections($this->expression->collections[$collection], $mode);
foreach ($this->expression->collections as $mode => $collections) {
$queryBuilder->registerCollections($this->expression->collections[$mode], $mode);
}
}

Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/AQL/ArrayFunctionsTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Functions;
namespace Tests\Unit\AQL;

use LaravelFreelancerNL\FluentAQL\QueryBuilder;
use LaravelFreelancerNL\FluentAQL\Tests\TestCase;
Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/AQL/DateFunctionsTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Functions;
namespace Tests\Unit\AQL;

use LaravelFreelancerNL\FluentAQL\QueryBuilder;
use LaravelFreelancerNL\FluentAQL\Tests\TestCase;
Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/AQL/DocumentFunctionsTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Functions;
namespace Tests\Unit\AQL;

use LaravelFreelancerNL\FluentAQL\QueryBuilder;
use LaravelFreelancerNL\FluentAQL\Tests\TestCase;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Expressions;
namespace Tests\Unit\AQL;

use LaravelFreelancerNL\FluentAQL\Expressions\NullExpression;
use LaravelFreelancerNL\FluentAQL\QueryBuilder;
use LaravelFreelancerNL\FluentAQL\Tests\TestCase;

Expand All @@ -15,7 +14,6 @@ class FilterClauseTest extends TestCase
{
public function testGetPredicates()
{
$qb = new QueryBuilder();
$result = (new QueryBuilder())
->for('u', 'Users')
->filter('u.active', '==', 'true')
Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/AQL/GeoFunctionsTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Functions;
namespace Tests\Unit\AQL;

use LaravelFreelancerNL\FluentAQL\QueryBuilder;
use LaravelFreelancerNL\FluentAQL\Tests\TestCase;
Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/AQL/GraphClausesTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Clauses;
namespace Tests\Unit\AQL;

use LaravelFreelancerNL\FluentAQL\QueryBuilder;
use LaravelFreelancerNL\FluentAQL\Tests\TestCase;
Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/AQL/MiscellaneousFunctionsTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Functions;
namespace Tests\Unit\AQL;

use LaravelFreelancerNL\FluentAQL\QueryBuilder;
use LaravelFreelancerNL\FluentAQL\Tests\TestCase;
Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/AQL/NumericFunctionsTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Functions;
namespace Tests\Unit\AQL;

use LaravelFreelancerNL\FluentAQL\QueryBuilder;
use LaravelFreelancerNL\FluentAQL\Tests\TestCase;
Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/AQL/OperatorExpressionsTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Functions;
namespace Tests\Unit\AQL;

use LaravelFreelancerNL\FluentAQL\QueryBuilder;
use LaravelFreelancerNL\FluentAQL\Tests\TestCase;
Expand Down
5 changes: 3 additions & 2 deletions tests/Unit/AQL/QueryClausesTest.php
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Clauses;
namespace Tests\Unit\AQL;

use LaravelFreelancerNL\FluentAQL\QueryBuilder;
use LaravelFreelancerNL\FluentAQL\Tests\TestCase;
use stdClass;

/**
* Class StructureTest.
Expand Down Expand Up @@ -373,7 +374,7 @@ public function testReturnClause()

public function testOptionsClause()
{
$options = new \stdClass();
$options = new stdClass();
$options->method = 'sorted';
$result = (new QueryBuilder())
->options($options)
Expand Down
7 changes: 4 additions & 3 deletions tests/Unit/AQL/StatementClausesTest.php
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Clauses;
namespace Tests\Unit\AQL;

use LaravelFreelancerNL\FluentAQL\QueryBuilder;
use LaravelFreelancerNL\FluentAQL\Tests\TestCase;
use stdClass;

/**
* Class StructureTest.
Expand Down Expand Up @@ -35,7 +36,7 @@ public function testLetStatement()
self::assertEquals('LET x = @' . $result->getQueryId() . '_1', $result->query);

$qb = new QueryBuilder();
$object = new \stdClass();
$object = new stdClass();
$object->name = 'Catelyn';
$object->surname = 'Stark';
$object->alive = false;
Expand Down Expand Up @@ -89,7 +90,7 @@ public function testUpdateClause()

public function testUpdateMaintainsNullValue()
{
$data = new \stdClass();
$data = new stdClass();
$data->name['first_name'] = null;
$data->name['last_name'] = null;
$result = (new QueryBuilder())
Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/AQL/StringFunctionsTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Functions;
namespace Tests\Unit\AQL;

use LaravelFreelancerNL\FluentAQL\QueryBuilder;
use LaravelFreelancerNL\FluentAQL\Tests\TestCase;
Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/AQL/SupportCommandsTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit;
namespace Tests\Unit\AQL;

use LaravelFreelancerNL\FluentAQL\QueryBuilder;
use LaravelFreelancerNL\FluentAQL\Tests\TestCase;
Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/Expressions/LiteralExpressionTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Expressions;
namespace Tests\Unit\Expressions;

use LaravelFreelancerNL\FluentAQL\Expressions\AttributeExpression;
use LaravelFreelancerNL\FluentAQL\Expressions\BindExpression;
Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/Expressions/NullExpressionTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Expressions;
namespace Tests\Unit\Expressions;

use LaravelFreelancerNL\FluentAQL\Expressions\NullExpression;
use LaravelFreelancerNL\FluentAQL\QueryBuilder;
Expand Down
6 changes: 3 additions & 3 deletions tests/Unit/Expressions/PredicateExpressionTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Expressions;
namespace Tests\Unit\Expressions;

use LaravelFreelancerNL\FluentAQL\Expressions\LiteralExpression;
use LaravelFreelancerNL\FluentAQL\Expressions\PredicateExpression;
Expand All @@ -27,7 +27,7 @@ public function testPredicateExpressionWithLogicalOperatorAnd()
{
$qb = new QueryBuilder();
$expression = new PredicateExpression((new LiteralExpression('x')), '==', (new LiteralExpression(10)), "AND");
$result = $expression->compile($qb);
$expression->compile($qb);

self::assertEquals('AND', $expression->logicalOperator);
}
Expand All @@ -36,7 +36,7 @@ public function testPredicateExpressionWithLogicalOperatorOr()
{
$qb = new QueryBuilder();
$expression = new PredicateExpression((new LiteralExpression('x')), '==', (new LiteralExpression(10)), "OR");
$result = $expression->compile($qb);
$expression->compile($qb);

self::assertEquals('OR', $expression->logicalOperator);
}
Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/Expressions/QueryExpressionTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit\Expressions;
namespace Tests\Unit\Expressions;

use LaravelFreelancerNL\FluentAQL\Expressions\QueryExpression;
use LaravelFreelancerNL\FluentAQL\QueryBuilder;
Expand Down
5 changes: 3 additions & 2 deletions tests/Unit/GrammarTest.php
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit;
namespace Tests\Unit;

use LaravelFreelancerNL\FluentAQL\Grammar;
use LaravelFreelancerNL\FluentAQL\QueryBuilder;
use LaravelFreelancerNL\FluentAQL\Tests\TestCase;
use stdClass;

/**
* Class StructureTest.
Expand Down Expand Up @@ -255,7 +256,7 @@ public function testIsReference()

public function testIsDocument()
{
$doc = new \stdClass();
$doc = new stdClass();
$doc->attribute1 = 'test';
$result = $this->grammar->isObject($doc);
self::assertTrue($result);
Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/QueryBuilderTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit;
namespace Tests\Unit;

use LaravelFreelancerNL\FluentAQL\Clauses\ForClause;
use LaravelFreelancerNL\FluentAQL\Expressions\BindExpression;
Expand Down
46 changes: 45 additions & 1 deletion tests/Unit/SubqueryTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace LaravelFreelancerNL\FluentAQL\Tests\Unit;
namespace Tests\Unit;

use LaravelFreelancerNL\FluentAQL\QueryBuilder;
use LaravelFreelancerNL\FluentAQL\Tests\TestCase;
Expand All @@ -14,6 +14,7 @@ public function testSimpleSubQuery()
->filter('u.active', '==', 'true')
->return('u._key')
->get();

self::assertEquals(
'FOR u IN users FILTER u.active == true RETURN u._key',
$subQuery->query
Expand Down Expand Up @@ -107,4 +108,47 @@ public function testSubQueryWithFunction()
$result->query
);
}

public function testSubqueryWithLet()
{
$vertexGetQuery = (new QueryBuilder())
->for('v', '0..99')
->traverse('persons/123')
->edgeCollections('relations')
->return('v._key');

$vertexRemovalQuery = (new QueryBuilder())
->for('vertexKey', 'verteces')
->remove('vertexKey', 'persons')
->get();

$edgeGetQuery = (new QueryBuilder())
->for(['v', 'e'], '1..99')
->traverse('persons/123')
->edgeCollections('relations')
->return('e._key');

$edgeRemovalQuery = (new QueryBuilder())
->for('edgeKey', 'edges')
->remove('edgeKey', 'relations');

$deleteQuery = (new QueryBuilder())
->with('persons')
->let('verteces', $vertexGetQuery)
->let('edges', $edgeGetQuery)
->let('vertexRemovals', $vertexRemovalQuery)
->let('edgeRemovals', $edgeRemovalQuery)
->return(['vertexRemovals', 'edgeRemovals'])
->get();

self::assertEquals(
'WITH persons'
. ' LET verteces = (FOR v IN 0..99 OUTBOUND "persons/123" relations RETURN v._key)'
. ' LET edges = (FOR v, e IN 1..99 OUTBOUND "persons/123" relations RETURN e._key)'
. ' LET vertexRemovals = (FOR vertexKey IN verteces REMOVE vertexKey IN persons)'
. ' LET edgeRemovals = (FOR edgeKey IN edges REMOVE edgeKey IN relations)'
. ' RETURN [vertexRemovals,edgeRemovals]',
$deleteQuery->query
);
}
}

0 comments on commit 5a2c4b6

Please sign in to comment.