Skip to content

Commit

Permalink
Added attribute wrapping
Browse files Browse the repository at this point in the history
  • Loading branch information
LaravelFreelancerNL committed Apr 29, 2024
1 parent 2204c1f commit 4608520
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 12 deletions.
2 changes: 1 addition & 1 deletion src/Query/Concerns/CompilesColumns.php
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ protected function determineReturnValues(IlluminateQueryBuilder $query, $returnA
// Aggregate functions only return the aggregate, so we can clear out everything else.
if ($query->aggregate !== null) {
$returnDocs = [];
$returnAttributes = ['`aggregate`' => 'aggregateResult'];
$returnAttributes = ['aggregate' => 'aggregateResult'];
}

// Return a single value for certain subqueries
Expand Down
19 changes: 17 additions & 2 deletions src/Query/Concerns/HandlesAqlGrammar.php
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,21 @@ protected function wrapValue($value)
return '`' . str_replace('`', '``', $value) . '`' . $postfix;
}

/**
* Wrap a single string in keyword identifiers.
*
* @param string $value
* @return string
*/
protected function wrapAttribute($value)
{
if (!is_string($value)) {
return $value;
}
return '`' . str_replace('`', '``', $value) . '`';
}


/**
* Wrap a subquery single string in braces.
*/
Expand All @@ -196,7 +211,7 @@ public function wrapSubquery(string $subquery): string
public function generateAqlObject(array $data): string
{
$data = Arr::undot($data);

ray($this->generateAqlObjectString($data));
return $this->generateAqlObjectString($data);
}

Expand All @@ -207,7 +222,7 @@ public function generateAqlObject(array $data): string
protected function generateAqlObjectString(array $data): string
{
foreach($data as $key => $value) {
$prefix = $key . ': ';
$prefix = $this->wrapAttribute($key) . ': ';

if (is_numeric($key)) {
$prefix = '';
Expand Down
2 changes: 1 addition & 1 deletion tests/Query/GrammarTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
->from('users');

$this->assertSame(
'FOR userDoc IN users RETURN {id: `userDoc`.`_key`, _id: `userDoc`.`_id`, email: `userDoc`.`email`}',
'FOR userDoc IN users RETURN {`id`: `userDoc`.`_key`, `_id`: `userDoc`.`_id`, `email`: `userDoc`.`email`}',
$builder->toSql(),
);
});
Expand Down
2 changes: 1 addition & 1 deletion tests/Query/GroupingTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
$this->assertSame(
'FOR characterDoc IN characters COLLECT surname = `characterDoc`.`surname`'
. ' FILTER `surname` LIKE "Lannister"'
. ' RETURN {surname: `surname`}',
. ' RETURN {`surname`: `surname`}',
$query->toSql(),
);

Expand Down
10 changes: 5 additions & 5 deletions tests/Query/IdKeyConversionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
$builder = $builder->select('id')->from('users');

$this->assertSame(
'FOR userDoc IN users RETURN {id: `userDoc`.`_key`}',
'FOR userDoc IN users RETURN {`id`: `userDoc`.`_key`}',
$builder->toSql(),
);
});
Expand All @@ -39,7 +39,7 @@
$result = $query->first();

$this->assertSame(
'FOR characterDoc IN characters LIMIT 1 RETURN {id: `characterDoc`.`_key`, name: `characterDoc`.`name`}',
'FOR characterDoc IN characters LIMIT 1 RETURN {`id`: `characterDoc`.`_key`, `name`: `characterDoc`.`name`}',
$query->toSql(),
);

Expand All @@ -54,7 +54,7 @@
$result = $query->first();

$this->assertSame(
'FOR characterDoc IN characters LIMIT 1 RETURN {i: `characterDoc`.`_key`, name: `characterDoc`.`name`}',
'FOR characterDoc IN characters LIMIT 1 RETURN {`i`: `characterDoc`.`_key`, `name`: `characterDoc`.`name`}',
$query->toSql(),
);

Expand All @@ -69,7 +69,7 @@
$result = $query->first();

$this->assertSame(
'FOR characterDoc IN characters LIMIT 1 RETURN {id: `characterDoc`.`_key`, i: `characterDoc`.`_key`, name: `characterDoc`.`name`}',
'FOR characterDoc IN characters LIMIT 1 RETURN {`id`: `characterDoc`.`_key`, `i`: `characterDoc`.`_key`, `name`: `characterDoc`.`name`}',
$query->toSql(),
);

Expand All @@ -84,7 +84,7 @@
$result = $query->first();

$this->assertSame(
'FOR characterDoc IN characters LIMIT 1 RETURN {i: `characterDoc`.`_key`, i2: `characterDoc`.`_key`, name: `characterDoc`.`name`}',
'FOR characterDoc IN characters LIMIT 1 RETURN {`i`: `characterDoc`.`_key`, `i2`: `characterDoc`.`_key`, `name`: `characterDoc`.`name`}',
$query->toSql(),
);

Expand Down
2 changes: 1 addition & 1 deletion tests/Query/SelectTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@
expect($query->toSql())
->toBe(
"FOR houseDoc IN houses "
. "OPTIONS {indexHint: @{$queryId}_fromOptions_1, forceIndexHint: @{$queryId}_fromOptions_2} "
. "OPTIONS {`indexHint`: @{$queryId}_fromOptions_1, `forceIndexHint`: @{$queryId}_fromOptions_2} "
. "FILTER `houseDoc`.`en`.`description` LIKE @{$queryId}_where_1 RETURN houseDoc",
);

Expand Down
2 changes: 1 addition & 1 deletion tests/Query/SetTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
->set('y', [1,2,3,4,5], VariablePosition::postIterations);

$this->assertSame(
'FOR characterDoc IN characters LET y = @' . $query->getQueryId() . '_postIterationVariables_1 RETURN MERGE(characterDoc, {yColumn: `y`})',
'FOR characterDoc IN characters LET y = @' . $query->getQueryId() . '_postIterationVariables_1 RETURN MERGE(characterDoc, {`yColumn`: `y`})',
$query->toSql(),
);

Expand Down

0 comments on commit 4608520

Please sign in to comment.