From bd1b464caa0b565deb1a664b8e4d5eae9c5938b9 Mon Sep 17 00:00:00 2001 From: Mark Story Date: Tue, 13 Oct 2015 22:42:33 -0400 Subject: [PATCH] Fix 0 being converted into 1. empty() continues to be sharp and pointy. Refs #7529 --- src/Database/Expression/CaseExpression.php | 3 +-- .../Expression/CaseExpressionTest.php | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Database/Expression/CaseExpression.php b/src/Database/Expression/CaseExpression.php index 8344ccbf523..bc40409a7a0 100644 --- a/src/Database/Expression/CaseExpression.php +++ b/src/Database/Expression/CaseExpression.php @@ -119,13 +119,12 @@ protected function _addExpressions($conditions, $values, $types) if ($numericKey && empty($c)) { continue; } - if (!$c instanceof ExpressionInterface) { continue; } array_push($this->_conditions, $c); - $value = !empty($rawValues[$k]) ? $rawValues[$k] : 1; + $value = isset($rawValues[$k]) ? $rawValues[$k] : 1; if ($value === 'literal') { $value = $keyValues[$k]; diff --git a/tests/TestCase/Database/Expression/CaseExpressionTest.php b/tests/TestCase/Database/Expression/CaseExpressionTest.php index f10e4c4ac44..ed7cdcb8ede 100644 --- a/tests/TestCase/Database/Expression/CaseExpressionTest.php +++ b/tests/TestCase/Database/Expression/CaseExpressionTest.php @@ -53,6 +53,26 @@ public function testSqlOutput() $this->assertSame($expected, $caseExpression->sql(new ValueBinder())); } + /** + * Test sql generation with 0 case. + * + * @return void + */ + public function testSqlOutputZero() + { + $expression = new QueryExpression(); + $expression->add(['id' => 'test']); + $caseExpression = new CaseExpression([$expression], [0], ['integer']); + $expected = 'CASE WHEN id = :c0 THEN :c1 END'; + $binder = new ValueBinder(); + $this->assertSame($expected, $caseExpression->sql($binder)); + $expected = [ + ':c0' => ['value' => 'test', 'type' => null, 'placeholder' => 'c0'], + ':c1' => ['value' => 0, 'type' => 'integer', 'placeholder' => 'c1'], + ]; + $this->assertEquals($expected, $binder->bindings()); + } + /** * Tests that the expression is correctly traversed *