Browse Source

Better return type inference for sum()

Jose Lorenzo Rodriguez 10 years ago
parent
commit
ed0901f18b

+ 5 - 1
src/Database/FunctionsBuilder.php

@@ -68,7 +68,11 @@ class FunctionsBuilder
      */
     public function sum($expression, $types = [])
     {
-        return $this->_literalArgumentFunction('SUM', $expression, $types, 'float');
+        $returnType = 'float';
+        if (current($types) === 'integer') {
+            $returnType = 'integer';
+        }
+        return $this->_literalArgumentFunction('SUM', $expression, $types, $returnType);
     }
 
     /**

+ 5 - 0
tests/TestCase/Database/FunctionsBuilderTest.php

@@ -62,6 +62,11 @@ class FunctionsBuilderTest extends TestCase
         $this->assertInstanceOf('Cake\Database\Expression\FunctionExpression', $function);
         $this->assertEquals('SUM(total)', $function->sql(new ValueBinder));
         $this->assertEquals('float', $function->returnType());
+
+        $function = $this->functions->sum('total', ['integer']);
+        $this->assertInstanceOf('Cake\Database\Expression\FunctionExpression', $function);
+        $this->assertEquals('SUM(total)', $function->sql(new ValueBinder));
+        $this->assertEquals('integer', $function->returnType());
     }
 
     /**