Skip to content

Commit b847ff3

Browse files
authored
Case sensitive option in LikeCondition (#383)
1 parent 8870399 commit b847ff3

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
- New #379: Add parameters `$ifExists` and `$cascade` to `CommandInterface::dropTable()` and
3333
`DDLQueryBuilderInterface::dropTable()` methods (@vjik)
3434
- Chg #382: Remove `yiisoft/json` dependency (@Tigrov)
35+
- New #383: Add `caseSensitive` option to like condition (@vjik)
3536

3637
## 1.2.0 March 21, 2024
3738

rector.php

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector;
66
use Rector\Config\RectorConfig;
7+
use Rector\DeadCode\Rector\StaticCall\RemoveParentCallWithoutParentRector;
78
use Rector\Php81\Rector\FuncCall\NullToStrictStringFuncCallArgRector;
89
use Rector\Php81\Rector\Property\ReadOnlyPropertyRector;
910
use Rector\Set\ValueObject\LevelSetList;
@@ -30,5 +31,6 @@
3031
$rectorConfig->skip([
3132
NullToStrictStringFuncCallArgRector::class,
3233
ReadOnlyPropertyRector::class,
34+
RemoveParentCallWithoutParentRector::class,
3335
]);
3436
};

src/Builder/LikeConditionBuilder.php

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Yiisoft\Db\Mysql\Builder;
6+
7+
use Yiisoft\Db\QueryBuilder\Condition\Interface\LikeConditionInterface;
8+
9+
/**
10+
* Build an object of {@see LikeConditionInterface} into SQL expressions for MySQL Server.
11+
*/
12+
final class LikeConditionBuilder extends \Yiisoft\Db\QueryBuilder\Condition\Builder\LikeConditionBuilder
13+
{
14+
protected function prepareColumn(LikeConditionInterface $expression, array &$params): string
15+
{
16+
$column = parent::prepareColumn($expression, $params);
17+
18+
if ($expression->getCaseSensitive() === true) {
19+
$column = 'BINARY ' . $column;
20+
}
21+
22+
return $column;
23+
}
24+
}

src/DQLQueryBuilder.php

+4
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@
88
use Yiisoft\Db\Expression\ExpressionInterface;
99
use Yiisoft\Db\Mysql\Builder\ExpressionBuilder;
1010
use Yiisoft\Db\Mysql\Builder\JsonOverlapsConditionBuilder;
11+
use Yiisoft\Db\Mysql\Builder\LikeConditionBuilder;
1112
use Yiisoft\Db\QueryBuilder\AbstractDQLQueryBuilder;
1213
use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition;
1314

15+
use Yiisoft\Db\QueryBuilder\Condition\LikeCondition;
16+
1417
use function ctype_digit;
1518

1619
/**
@@ -83,6 +86,7 @@ protected function defaultExpressionBuilders(): array
8386
...parent::defaultExpressionBuilders(),
8487
JsonOverlapsCondition::class => JsonOverlapsConditionBuilder::class,
8588
Expression::class => ExpressionBuilder::class,
89+
LikeCondition::class => LikeConditionBuilder::class,
8690
];
8791
}
8892
}

0 commit comments

Comments
 (0)