Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 16 additions & 6 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,23 +60,33 @@
},

"scripts": {
"php-cs-fixer": [
"PHP_CS_FIXER_IGNORE_ENV=1 php-cs-fixer fix --config='./ci/php-cs-fixer/config.php' --show-progress=none --no-interaction --diff -v"
],
"phpunit": [
"phpunit --configuration='./ci/phpunit/config.xml'"
],
"rector": [
"rector --config='./ci/rector/config.php' --ansi --no-progress-bar"
],

"check-code-style": [
"php-cs-fixer fix --config='./ci/php-cs-fixer/config.php' --show-progress=none --dry-run --no-interaction --diff -v",
"rector --config='./ci/rector/config.php' --ansi --no-progress-bar --dry-run"
"@php-cs-fixer --dry-run",
"@rector --dry-run"
],
"fix-code-style": [
"rector --config='./ci/rector/config.php' --ansi --no-progress-bar",
"php-cs-fixer fix --config='./ci/php-cs-fixer/config.php' --show-progress=none --no-interaction --diff -v"
"@rector",
"@php-cs-fixer"
],
"run-static-analysis": [
"phpstan analyse --configuration='./ci/phpstan/config.neon'",
"deptrac analyze --config-file='./ci/deptrac/config.yml' --cache-file='./ci/deptrac/.cache' --no-interaction --no-progress"
],
"run-tests": [
"phpunit --configuration='./ci/phpunit/config.xml'"
"@phpunit"
],
"run-tests-with-clover": [
"phpunit --configuration='./ci/phpunit/config.xml' --coverage-clover './build/logs/clover.xml'"
"@phpunit --coverage-clover './build/logs/clover.xml'"
]
},

Expand Down
15 changes: 13 additions & 2 deletions src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Arr.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

namespace MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;

use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Exception\InvalidArgumentForVariadicFunctionException;

/**
* Implementation of PostgreSQL ARRAY[].
*
Expand All @@ -12,11 +14,20 @@
*
* @author Martin Georgiev <martin.georgiev@gmail.com>
*/
class Arr extends BaseFunction
class Arr extends BaseVariadicFunction
{
protected string $commonNodeMapping = 'StringPrimary';

protected function customizeFunction(): void
{
$this->setFunctionPrototype('ARRAY[%s]');
$this->addNodeMapping('StringPrimary');
}

protected function validateArguments(array $arguments): void
{
$argumentCount = \count($arguments);
if ($argumentCount === 0) {
throw InvalidArgumentForVariadicFunctionException::atLeast('ARRAY', 1);
}
}
}
42 changes: 42 additions & 0 deletions tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

declare(strict_types=1);

namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;

use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Arr;

class ArrTest extends TestCase
{
protected function getStringFunctions(): array
{
return [
'ARRAY' => Arr::class,
];
}

protected function getExpectedSqlStatements(): array
{
return [
// Multiple literal values
"SELECT ARRAY['foo', 'bar', 'baz'] AS sclr_0 FROM ContainsArrays c0_",
// Column references
'SELECT ARRAY[c0_.array1] AS sclr_0 FROM ContainsArrays c0_',
// Mix of column references and literals
"SELECT ARRAY[c0_.array1, 'test-value', c0_.array2] AS sclr_0 FROM ContainsArrays c0_",
];
}

protected function getDqlStatements(): array
{
return [
// Multiple literal values
\sprintf("SELECT ARRAY('foo', 'bar', 'baz') FROM %s e", ContainsArrays::class),
// Column references
\sprintf('SELECT ARRAY(e.array1) FROM %s e', ContainsArrays::class),
// Mix of column references and literals
\sprintf("SELECT ARRAY(e.array1, 'test-value', e.array2) FROM %s e", ContainsArrays::class),
];
}
}
Loading