diff --git a/docs/AVAILABLE-FUNCTIONS-AND-OPERATORS.md b/docs/AVAILABLE-FUNCTIONS-AND-OPERATORS.md index 7a71c267..e4dd410d 100644 --- a/docs/AVAILABLE-FUNCTIONS-AND-OPERATORS.md +++ b/docs/AVAILABLE-FUNCTIONS-AND-OPERATORS.md @@ -75,6 +75,7 @@ | regexp_match (with no flags) | REGEXP_MATCH | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\RegexpMatch` | | regexp_replace (with flags) | FLAGGED_REGEXP_REPLACE | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\FlaggedRegexpReplace` | | regexp_replace (with no flags) | REGEXP_REPLACE | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\RegexpReplace` | +| row | ROW | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Row` | | row_to_json | ROW_TO_JSON | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\RowToJson` | | split_part | SPLIT_PART | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\SplitPart` | | starts_with | STARTS_WITH | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\StartsWith` | diff --git a/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Row.php b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Row.php new file mode 100644 index 00000000..0ede13fd --- /dev/null +++ b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Row.php @@ -0,0 +1,20 @@ +setFunctionPrototype('ROW(%s)'); + } +} diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowTest.php b/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowTest.php new file mode 100644 index 00000000..6b75d9d2 --- /dev/null +++ b/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowTest.php @@ -0,0 +1,43 @@ + Row::class, + ]; + } + + protected function getExpectedSqlStatements(): array + { + return [ + 'SELECT ROW(c0_.text1, c0_.text2) AS sclr_0 FROM ContainsTexts c0_', + 'SELECT ROW(c0_.date1, c0_.date2) AS sclr_0 FROM ContainsDates c0_', + 'SELECT ROW(c0_.object1, c0_.object2) AS sclr_0 FROM ContainsJsons c0_', + "SELECT c0_.id AS id_0 FROM ContainsTexts c0_ WHERE ROW(c0_.text1, c0_.text2) > ROW('test', 'test')", + "SELECT c0_.id AS id_0 FROM ContainsIntegers c0_ WHERE ROW(c0_.integer1, c0_.integer2, 'This is a test') > ROW(1, 2, 'This')", + ]; + } + + protected function getDqlStatements(): array + { + return [ + \sprintf('SELECT ROW(e.text1, e.text2) FROM %s e', ContainsTexts::class), + \sprintf('SELECT ROW(e.date1, e.date2) FROM %s e', ContainsDates::class), + \sprintf('SELECT ROW(e.object1, e.object2) FROM %s e', ContainsJsons::class), + \sprintf("SELECT e.id FROM %s e WHERE ROW(e.text1, e.text2) > ROW('test', 'test')", ContainsTexts::class), + \sprintf("SELECT e.id FROM %s e WHERE ROW(e.integer1, e.integer2, 'This is a test') > ROW(1, 2, 'This')", ContainsIntegers::class), + ]; + } +}