From 5119680aa4bf90c441fc377cc3407022fea08029 Mon Sep 17 00:00:00 2001 From: albertor24 Date: Fri, 5 Jul 2019 20:12:16 -0500 Subject: [PATCH] Fixes 381 - Allows any scalar or array in the expression constructor for params --- src/Sql/Expression.php | 2 +- test/unit/Sql/ExpressionTest.php | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/Sql/Expression.php b/src/Sql/Expression.php index 496cda92a8..2b4f21597e 100644 --- a/src/Sql/Expression.php +++ b/src/Sql/Expression.php @@ -56,7 +56,7 @@ public function __construct($expression = '', $parameters = null, array $types = } } - if ($parameters) { + if ($parameters !== null) { $this->setParameters($parameters); } } diff --git a/test/unit/Sql/ExpressionTest.php b/test/unit/Sql/ExpressionTest.php index 25c12d4f10..dc46246f81 100644 --- a/test/unit/Sql/ExpressionTest.php +++ b/test/unit/Sql/ExpressionTest.php @@ -10,6 +10,7 @@ namespace ZendTest\Db\Sql; use PHPUnit\Framework\TestCase; +use Zend\Db\Sql\Exception\InvalidArgumentException; use Zend\Db\Sql\Expression; /** @@ -179,4 +180,34 @@ public function testNumberOfReplacemensConsidersWhenSameVariableIsUsedManyTimes( $expression = new Expression('uf.user_id = :user_id OR uf.friend_id = :user_id', ['user_id' => 1]); $expression->getExpressionData(); } + + + /** + * @param mixed $falsyParameter + * @dataProvider falsyExpressionParametersProvider + */ + public function testConstructorWithFalsyValidParameters($falsyParameter) + { + $expression = new Expression('?', $falsyParameter); + self::assertSame($falsyParameter, $expression->getParameters()); + } + + public function testConstructorWithInvalidParameter() + { + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Expression parameters must be a scalar or array.'); + new Expression('?', (object)[]); + } + + public function falsyExpressionParametersProvider() + { + return [ + [''], + ['0'], + [0], + [0.0], + [false], + [[]], + ]; + } }