|
|
@@ -16,6 +16,7 @@ declare(strict_types=1);
|
|
|
*/
|
|
|
namespace Cake\Test\TestCase\Database\Expression;
|
|
|
|
|
|
+use Cake\Database\Expression\IdentifierExpression;
|
|
|
use Cake\Database\Expression\QueryExpression;
|
|
|
use Cake\Database\ValueBinder;
|
|
|
use Cake\TestSuite\TestCase;
|
|
|
@@ -211,4 +212,54 @@ class QueryExpressionTest extends TestCase
|
|
|
|
|
|
(new QueryExpression())->addCase([]);
|
|
|
}
|
|
|
+
|
|
|
+ public function testCaseWithoutValue(): void
|
|
|
+ {
|
|
|
+ $expression = (new QueryExpression())
|
|
|
+ ->case()
|
|
|
+ ->when(1)
|
|
|
+ ->then(2);
|
|
|
+
|
|
|
+ $this->assertEqualsSql(
|
|
|
+ 'CASE WHEN :c0 THEN :c1 ELSE NULL END',
|
|
|
+ $expression->sql(new ValueBinder())
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ public function testCaseWithValue(): void
|
|
|
+ {
|
|
|
+ $expression = (new QueryExpression())
|
|
|
+ ->case(new IdentifierExpression('Table.column'))
|
|
|
+ ->when(1)
|
|
|
+ ->then('Yes');
|
|
|
+
|
|
|
+ $this->assertEqualsSql(
|
|
|
+ 'CASE Table.column WHEN :c0 THEN :c1 ELSE NULL END',
|
|
|
+ $expression->sql(new ValueBinder())
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ public function testCaseWithValueAndType(): void
|
|
|
+ {
|
|
|
+ $expression = (new QueryExpression())
|
|
|
+ ->case('1', 'integer')
|
|
|
+ ->when(1)
|
|
|
+ ->then('Yes');
|
|
|
+
|
|
|
+ $valueBinder = new ValueBinder();
|
|
|
+
|
|
|
+ $this->assertEqualsSql(
|
|
|
+ 'CASE :c0 WHEN :c1 THEN :c2 ELSE NULL END',
|
|
|
+ $expression->sql($valueBinder)
|
|
|
+ );
|
|
|
+
|
|
|
+ $this->assertSame(
|
|
|
+ [
|
|
|
+ 'value' => '1',
|
|
|
+ 'type' => 'integer',
|
|
|
+ 'placeholder' => 'c0',
|
|
|
+ ],
|
|
|
+ $valueBinder->bindings()[':c0']
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|