diff --git a/tests/Provider/QueryBuilderProvider.php b/tests/Provider/QueryBuilderProvider.php index 4944e41..f557bf3 100644 --- a/tests/Provider/QueryBuilderProvider.php +++ b/tests/Provider/QueryBuilderProvider.php @@ -412,4 +412,22 @@ public static function prepareValue(): array return $values; } + + public static function caseExpressionBuilder(): array + { + $data = parent::caseExpressionBuilder(); + + $data['with case expression'] = [ + $data['with case expression'][0]->else( + new Expression('to_number(:qp0)', [':qp0' => $param = new Param(4, DataType::INTEGER)]) + ), + 'CASE (1 + 2) WHEN 1 THEN 1 WHEN 2 THEN 2 WHEN 3 THEN (2 + 1) ELSE to_number(:qp0) END', + [':qp0' => $param], + 3, + ]; + $data['without case expression'][1] = 'CASE WHEN "column_name" = :qp0 THEN :qp1' + . ' WHEN "column_name" = 2 THEN (SELECT :pv2 FROM DUAL) END'; + + return $data; + } } diff --git a/tests/QueryBuilderTest.php b/tests/QueryBuilderTest.php index 5baf7d4..238b6a0 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/QueryBuilderTest.php @@ -9,6 +9,7 @@ use Yiisoft\Db\Exception\Exception; use InvalidArgumentException; use Yiisoft\Db\Exception\NotSupportedException; +use Yiisoft\Db\Expression\CaseExpression; use Yiisoft\Db\Expression\ExpressionInterface; use Yiisoft\Db\Oracle\Tests\Provider\QueryBuilderProvider; use Yiisoft\Db\Oracle\Tests\Support\TestTrait; @@ -568,4 +569,14 @@ public function testDropTable(string $expected, ?bool $ifExists, ?bool $cascade) parent::testDropTable($expected, $ifExists, $cascade); } + + #[DataProviderExternal(QueryBuilderProvider::class, 'caseExpressionBuilder')] + public function testCaseExpressionBuilder( + CaseExpression $case, + string $expectedSql, + array $expectedParams, + string|int $expectedResult, + ): void { + parent::testCaseExpressionBuilder($case, $expectedSql, $expectedParams, $expectedResult); + } } diff --git a/tests/Support/TestTrait.php b/tests/Support/TestTrait.php index 4715ef3..7e3ff72 100644 --- a/tests/Support/TestTrait.php +++ b/tests/Support/TestTrait.php @@ -61,7 +61,7 @@ protected function getDsn(): string return $this->dsn; } - protected function getDriverName(): string + protected static function getDriverName(): string { return 'oci'; }