diff --git a/lib/Doctrine/ORM/Query/Expr.php b/lib/Doctrine/ORM/Query/Expr.php index 35130fd89..e071d325e 100644 --- a/lib/Doctrine/ORM/Query/Expr.php +++ b/lib/Doctrine/ORM/Query/Expr.php @@ -470,9 +470,13 @@ class Expr * @param integer $len Length of crop. May accept negative values. * @return Expr\Func */ - public function substring($x, $from, $len) + public function substring($x, $from, $len = null) { - return new Expr\Func('SUBSTRING', array($x, $from, $len)); + $args = array($x, $from); + if (null !== $len) { + $args[] = $len; + } + return new Expr\Func('SUBSTRING', $args); } /** diff --git a/tests/Doctrine/Tests/ORM/Query/ExprTest.php b/tests/Doctrine/Tests/ORM/Query/ExprTest.php index 60449e5b9..5bf5b06b5 100644 --- a/tests/Doctrine/Tests/ORM/Query/ExprTest.php +++ b/tests/Doctrine/Tests/ORM/Query/ExprTest.php @@ -185,6 +185,15 @@ class ExprTest extends \Doctrine\Tests\OrmTestCase $this->assertEquals('SUBSTRING(a.title, 0, 25)', (string) $this->_expr->substring('a.title', 0, 25)); } + /** + * @group regression + * @group DDC-612 + */ + public function testSubstringExprAcceptsTwoArguments() + { + $this->assertEquals('SUBSTRING(a.title, 0)', (string) $this->_expr->substring('a.title', 5)); + } + public function testLowerExpr() { $this->assertEquals('LOWER(u.first_name)', (string) $this->_expr->lower('u.first_name'));