Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
2 changes: 1 addition & 1 deletion .scrutinizer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ build:
tests:
override:
- php-scrutinizer-run
- command: composer run-tests-with-clover
- command: composer run-unit-tests-with-clover
coverage:
file: var/logs/test-coverage/clover.xml
format: clover
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

declare(strict_types=1);

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

use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayAgg;

class ArrayAggTest extends ArrayTestCase
{
protected function getStringFunctions(): array
{
return ['ARRAY_AGG' => ArrayAgg::class];
}

public function test_array_agg_with_text_array(): void
{
$dql = 'SELECT ARRAY_AGG(t.textArray) as result
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
WHERE t.id = 1';
$result = $this->executeDqlQuery($dql);
$this->assertSame('{{apple,banana,orange}}', $result[0]['result']);
}

public function test_array_agg_with_integer_array(): void
{
$dql = 'SELECT ARRAY_AGG(t.integerArray) as result
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
WHERE t.id = 1';
$result = $this->executeDqlQuery($dql);
$this->assertSame('{{1,2,3}}', $result[0]['result']);
}

public function test_array_agg_with_boolean_array(): void
{
$dql = 'SELECT ARRAY_AGG(t.boolArray) as result
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
WHERE t.id = 1';
$result = $this->executeDqlQuery($dql);
$this->assertSame('{{t,f,t}}', $result[0]['result']);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

declare(strict_types=1);

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

use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonObjectAgg;

class JsonObjectAggTest extends JsonTestCase
{
protected function getStringFunctions(): array
{
return [
'JSON_OBJECT_AGG' => JsonObjectAgg::class,
];
}

public function test_json_object_agg_simple(): void
{
$dql = "SELECT JSON_OBJECT_AGG('key', t.object1) as result
FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t
WHERE t.id = 3";
$result = $this->executeDqlQuery($dql);
$this->assertIsString($result[0]['result']);
$decoded = \json_decode($result[0]['result'], true);
$this->assertIsArray($decoded);
$this->assertSame([
'key' => [
'age' => 30,
'name' => 'Micky',
'tags' => [],
'address' => ['city' => 'New York'],
],
], $decoded);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php

declare(strict_types=1);

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

use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\StringAgg;

class StringAggTest extends TextTestCase
{
protected function getStringFunctions(): array
{
return ['STRING_AGG' => StringAgg::class];
}

public function test_string_agg_with_for_all_rows(): void
{
$dql = "SELECT STRING_AGG(t.text1, ',') as result
FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t";
$result = $this->executeDqlQuery($dql);
$this->assertSame('this is a test string,lorem ipsum dolor,foo,special,chars;test', $result[0]['result']);
}

public function test_string_agg_with_for_all_rows_and_semicolon_delimiter(): void
{
$dql = "SELECT STRING_AGG(t.text2, ';') as result
FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t";
$result = $this->executeDqlQuery($dql);
$this->assertSame('another test string;sit amet;bar;multi;delimiter,case', $result[0]['result']);
}

public function test_string_agg_with_for_all_rows_and_space_delimiter(): void
{
$dql = "SELECT STRING_AGG(t.text1, ' ') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t";
$result = $this->executeDqlQuery($dql);
$this->assertSame('this is a test string lorem ipsum dolor foo special,chars;test', $result[0]['result']);
}

public function test_string_agg_with_where_clause(): void
{
$dql = "SELECT STRING_AGG(t.text1, ',') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id in (1, 4)";
$result = $this->executeDqlQuery($dql);
$this->assertSame('this is a test string,special,chars;test', $result[0]['result']);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,10 @@ protected function insertTestDataForTextFixture(): void
{
$sql = \sprintf('
INSERT INTO %s.containstexts (text1, text2) VALUES
(\'this is a test string\', \'another test string\')
(\'this is a test string\', \'another test string\'),
(\'lorem ipsum dolor\', \'sit amet\'),
(\'foo\', \'bar\'),
(\'special,chars;test\', \'multi;delimiter,case\')
', self::DATABASE_SCHEMA);
$this->connection->executeStatement($sql);
}
Expand Down
Loading