From 21828e1a5d8834b8286fe37424accd5a46c9b208 Mon Sep 17 00:00:00 2001 From: Walther Lalk Date: Fri, 8 Aug 2014 16:17:17 +0200 Subject: [PATCH] Only add 'day' once with SqlServer DATEDIFF If a single instance of a DATEDIFF Expression was used more than once, 'day' would be added multiple times (Once be usage). This threw an SQLServer error. --- src/Database/Dialect/SqlserverDialectTrait.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Database/Dialect/SqlserverDialectTrait.php b/src/Database/Dialect/SqlserverDialectTrait.php index e2e2aedd745..a8916970d73 100644 --- a/src/Database/Dialect/SqlserverDialectTrait.php +++ b/src/Database/Dialect/SqlserverDialectTrait.php @@ -155,7 +155,18 @@ protected function _transformFunctionExpression(FunctionExpression $expression) $expression->name('')->type(' +'); break; case 'DATEDIFF': - $expression->add(['day' => 'literal'], [], true); + $hasDay = false; + $visitor = function($value) use (&$hasDay){ + if ($value === 'day') { + $hasDay = true; + } + return $value; + }; + $expression->iterateParts($visitor); + + if (!$hasDay) { + $expression->add(['day' => 'literal'], [], true); + } break; case 'CURRENT_DATE': $time = new FunctionExpression('GETUTCDATE');