Skip to content

Commit 4fff901

Browse files
committed
Add support for Row constructor
1 parent 74a39dd commit 4fff901

File tree

2 files changed

+62
-0
lines changed
  • src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions
  • tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions

2 files changed

+62
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
6+
7+
/**
8+
* Implementation of PostgreSql Row Constructor expression.
9+
*
10+
* @see https://www.postgresql.org/docs/14/sql-expressions.html#SQL-SYNTAX-ROW-CONSTRUCTORS
11+
*/
12+
class Row extends BaseVariadicFunction
13+
{
14+
protected function customiseFunction(): void
15+
{
16+
$this->setFunctionPrototype('ROW(%s)');
17+
$this->commonNodeMapping = 'InParameter';
18+
}
19+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
6+
7+
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates;
8+
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsIntegers;
9+
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
10+
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
11+
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Row;
12+
13+
class RowTest extends TestCase
14+
{
15+
protected function getStringFunctions(): array
16+
{
17+
return [
18+
'ROW' => Row::class,
19+
];
20+
}
21+
22+
protected function getExpectedSqlStatements(): array
23+
{
24+
return [
25+
'SELECT ROW(c0_.text1, c0_.text2) AS sclr_0 FROM ContainsTexts c0_',
26+
'SELECT ROW(c0_.date1, c0_.date2) AS sclr_0 FROM ContainsDates c0_',
27+
'SELECT ROW(c0_.object1, c0_.object2) AS sclr_0 FROM ContainsJsons c0_',
28+
"SELECT c0_.id AS id_0 FROM ContainsTexts c0_ WHERE ROW(c0_.text1, c0_.text2) > ROW('test', 'test')",
29+
"SELECT c0_.id AS id_0 FROM ContainsIntegers c0_ WHERE ROW(c0_.integer1, c0_.integer2, 'This is a test') > ROW(1, 2, 'This')",
30+
];
31+
}
32+
33+
protected function getDqlStatements(): array
34+
{
35+
return [
36+
\sprintf('SELECT ROW(e.text1, e.text2) FROM %s e', ContainsTexts::class),
37+
\sprintf('SELECT ROW(e.date1, e.date2) FROM %s e', ContainsDates::class),
38+
\sprintf('SELECT ROW(e.object1, e.object2) FROM %s e', ContainsJsons::class),
39+
\sprintf("SELECT e.id FROM %s e WHERE ROW(e.text1, e.text2) > ROW('test', 'test')", ContainsTexts::class),
40+
\sprintf("SELECT e.id FROM %s e WHERE ROW(e.integer1, e.integer2, 'This is a test') > ROW(1, 2, 'This')", ContainsIntegers::class),
41+
];
42+
}
43+
}

0 commit comments

Comments
 (0)