From 317c056209fafbc59e4df5acb4d77326c72e2f4c Mon Sep 17 00:00:00 2001 From: Sergei Morozov Date: Sat, 30 Oct 2021 10:54:40 -0700 Subject: [PATCH] Use CONCAT() with SQL Server to concatenate strings --- src/Platforms/SQLServer2012Platform.php | 4 +-- .../Platform/ConcatExpressionTest.php | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 tests/Functional/Platform/ConcatExpressionTest.php diff --git a/src/Platforms/SQLServer2012Platform.php b/src/Platforms/SQLServer2012Platform.php index d94784d6c9c..fc72a402789 100644 --- a/src/Platforms/SQLServer2012Platform.php +++ b/src/Platforms/SQLServer2012Platform.php @@ -1146,9 +1146,7 @@ public function getTrimExpression($str, $mode = TrimMode::UNSPECIFIED, $char = f */ public function getConcatExpression() { - $args = func_get_args(); - - return '(' . implode(' + ', $args) . ')'; + return sprintf('CONCAT(%s)', implode(', ', func_get_args())); } /** diff --git a/tests/Functional/Platform/ConcatExpressionTest.php b/tests/Functional/Platform/ConcatExpressionTest.php new file mode 100644 index 00000000000..87f158bebfb --- /dev/null +++ b/tests/Functional/Platform/ConcatExpressionTest.php @@ -0,0 +1,32 @@ + $arguments + * + * @dataProvider expressionProvider + */ + public function testConcatExpression(array $arguments, string $expected): void + { + $platform = $this->connection->getDatabasePlatform(); + $query = $platform->getDummySelectSQL($platform->getConcatExpression(...$arguments)); + + self::assertEquals($expected, $this->connection->fetchOne($query)); + } + + /** + * @return iterable,string}> + */ + public static function expressionProvider(): iterable + { + yield 'strings' => [["'foo'", "'bar'"], 'foobar']; + yield 'numbers and a hyphen' => [['2010', "'-'", '2019'], '2010-2019']; + } +}