Browse Source

Merge pull request #4201 from dakota/3.0-nested-sql-server-datediff

Only add 'day' once with SqlServer DATEDIFF
José Lorenzo Rodríguez 11 years ago
parent
commit
0a2ff83156
1 changed files with 12 additions and 1 deletions
  1. 12 1
      src/Database/Dialect/SqlserverDialectTrait.php

+ 12 - 1
src/Database/Dialect/SqlserverDialectTrait.php

@@ -155,7 +155,18 @@ trait SqlserverDialectTrait {
 				$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');