From 2f4f9ef488969ca6c576b5c8d625151e5d2c35b1 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Tue, 11 Mar 2025 12:32:59 +0300 Subject: [PATCH 1/9] Adapt to Yii DB 2 --- composer.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.json b/composer.json index 5f2ba16..0c756c5 100644 --- a/composer.json +++ b/composer.json @@ -32,7 +32,7 @@ "require": { "php": "^8.1", "yiisoft/data": "dev-master", - "yiisoft/db": "^1.3" + "yiisoft/db": "dev-master" }, "require-dev": { "maglnet/composer-require-checker": "^4.2", @@ -43,11 +43,11 @@ "vimeo/psalm": "^5.21", "vlucas/phpdotenv": "^5.6", "yiisoft/cache": "^3.0", - "yiisoft/db-mssql": "^1.2", - "yiisoft/db-mysql": "^1.2", - "yiisoft/db-oracle": "^1.3", - "yiisoft/db-pgsql": "^1.3", - "yiisoft/db-sqlite": "^1.2" + "yiisoft/db-mssql": "dev-master", + "yiisoft/db-mysql": "dev-master", + "yiisoft/db-oracle": "dev-master", + "yiisoft/db-pgsql": "dev-master", + "yiisoft/db-sqlite": "dev-master" }, "autoload": { "psr-4": { From 48393990fb7ec073bbb5cad52c731d76c695b7bb Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Tue, 11 Mar 2025 15:53:42 +0300 Subject: [PATCH 2/9] fix tests --- tests/Base/BaseQueryDataReaderTestCase.php | 10 +++++----- tests/TestHelper.php | 14 +++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/Base/BaseQueryDataReaderTestCase.php b/tests/Base/BaseQueryDataReaderTestCase.php index b3f9c9b..819a33c 100644 --- a/tests/Base/BaseQueryDataReaderTestCase.php +++ b/tests/Base/BaseQueryDataReaderTestCase.php @@ -212,11 +212,11 @@ public static function dataFilterSql(): array ], 'greater than or equal' => [ new GreaterThanOrEqual('column', 3.5), - '[[column]] >= \'3.5\'', + '[[column]] >= 3.5', ], 'less than' => [ new LessThan('column', 10.7), - '[[column]] < \'10.7\'', + '[[column]] < 10.7', ], 'less-than-or-equal' => [ new LessThanOrEqual('column', 100), @@ -224,7 +224,7 @@ public static function dataFilterSql(): array ], 'in' => [ new In('column', [10, 20.5, 30]), - '[[column]] IN (10, \'20.5\', 30)', + '[[column]] IN (10, 20.5, 30)', ], 'like' => [ new Like('column', 'foo'), @@ -245,11 +245,11 @@ public static function dataFilterSql(): array ], 'not greater than or equal' => [ new Not(new GreaterThanOrEqual('column', 3.5)), - '[[column]] < \'3.5\'', + '[[column]] < 3.5', ], 'not less than' => [ new Not(new LessThan('column', 10.7)), - '[[column]] >= \'10.7\'', + '[[column]] >= 10.7', ], 'not less than or equal' => [ new Not(new LessThanOrEqual('column', 100)), diff --git a/tests/TestHelper.php b/tests/TestHelper.php index 43ee2be..985408b 100644 --- a/tests/TestHelper.php +++ b/tests/TestHelper.php @@ -6,7 +6,7 @@ use Yiisoft\Db\Connection\ConnectionInterface; use Yiisoft\Db\Exception\Exception; -use Yiisoft\Db\Schema\SchemaInterface; +use Yiisoft\Db\Schema\Column\ColumnBuilder; final class TestHelper { @@ -19,12 +19,12 @@ public static function loadFixtures(ConnectionInterface $db): void $db->createCommand()->createTable( 'customer', [ - 'id' => $db->getSchema()->createColumn(SchemaInterface::TYPE_INTEGER)->notNull(), - 'name' => $db->getSchema()->createColumn(SchemaInterface::TYPE_STRING, 128)->notNull(), - 'email' => $db->getSchema()->createColumn(SchemaInterface::TYPE_STRING, 128), - 'address' => $db->getSchema()->createColumn(SchemaInterface::TYPE_TEXT), - 'status' => $db->getSchema()->createColumn(SchemaInterface::TYPE_INTEGER)->defaultValue(0), - 'profile_id' => $db->getSchema()->createColumn(SchemaInterface::TYPE_INTEGER), + 'id' => ColumnBuilder::integer()->notNull(), + 'name' => ColumnBuilder::string(128)->notNull(), + 'email' => ColumnBuilder::string(128), + 'address' => ColumnBuilder::text(), + 'status' => ColumnBuilder::integer()->defaultValue(0), + 'profile_id' => ColumnBuilder::integer(), ] )->execute(); $db->createCommand()->batchInsert( From 44abce059f45046a5ab4bfafb9cf220345e8686a Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Mon, 17 Mar 2025 09:51:43 +0300 Subject: [PATCH 3/9] Adapt `LikeFilterHandler` --- src/FilterHandler/LikeFilterHandler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FilterHandler/LikeFilterHandler.php b/src/FilterHandler/LikeFilterHandler.php index e7ba61c..c2e732e 100644 --- a/src/FilterHandler/LikeFilterHandler.php +++ b/src/FilterHandler/LikeFilterHandler.php @@ -18,6 +18,6 @@ public function getCriteria(FilterInterface $filter, Context $context): ?Criteri { /** @var Like $filter */ - return new Criteria(['LIKE', $filter->getField(), $filter->getValue()]); + return new Criteria(['LIKE', $filter->getField(), $filter->getValue(), 'caseSensitive' => $filter->isCaseSensitive()]); } } From 365c07b77ea59660943bd8d7ec7b901c501354f5 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Mon, 17 Mar 2025 14:51:23 +0300 Subject: [PATCH 4/9] Fix `LikeFilterHandler` --- src/FilterHandler/LikeFilterHandler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FilterHandler/LikeFilterHandler.php b/src/FilterHandler/LikeFilterHandler.php index c2e732e..2cf03c7 100644 --- a/src/FilterHandler/LikeFilterHandler.php +++ b/src/FilterHandler/LikeFilterHandler.php @@ -18,6 +18,6 @@ public function getCriteria(FilterInterface $filter, Context $context): ?Criteri { /** @var Like $filter */ - return new Criteria(['LIKE', $filter->getField(), $filter->getValue(), 'caseSensitive' => $filter->isCaseSensitive()]); + return new Criteria(['LIKE', $filter->getField(), $filter->getValue(), 'caseSensitive' => $filter->getCaseSensitive()]); } } From e4051fbe2de65e50a63223973e3c6d9636bbcfdf Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Wed, 6 Aug 2025 11:03:14 +0300 Subject: [PATCH 5/9] fix --- src/FilterHandler/LikeFilterHandler.php | 3 +-- tests/Sqlite/QueryDataReaderTest.php | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/FilterHandler/LikeFilterHandler.php b/src/FilterHandler/LikeFilterHandler.php index da2b43f..1fe11a4 100644 --- a/src/FilterHandler/LikeFilterHandler.php +++ b/src/FilterHandler/LikeFilterHandler.php @@ -18,7 +18,6 @@ public function getCriteria(FilterInterface $filter, Context $context): ?Criteri { /** @var Like $filter */ - return new Criteria(['LIKE', $filter->getField(), $filter->getValue(), 'caseSensitive' => $filter->getCaseSensitive()]); - return new Criteria(['LIKE', $filter->field, $filter->value]); + return new Criteria(['LIKE', $filter->field, $filter->value, 'caseSensitive' => $filter->caseSensitive]); } } diff --git a/tests/Sqlite/QueryDataReaderTest.php b/tests/Sqlite/QueryDataReaderTest.php index cc7319c..286393c 100644 --- a/tests/Sqlite/QueryDataReaderTest.php +++ b/tests/Sqlite/QueryDataReaderTest.php @@ -14,7 +14,7 @@ public static function dataOffset(): array { return [ [ - 'SELECT * FROM `customer` LIMIT 9223372036854775807 OFFSET 2', + 'SELECT * FROM "customer" LIMIT 9223372036854775807 OFFSET 2', ], ]; } From b695325a7b4759ee1c67c25a5cb49f99053a48e8 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Wed, 6 Aug 2025 11:05:00 +0300 Subject: [PATCH 6/9] fix --- src/QueryDataReader.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/QueryDataReader.php b/src/QueryDataReader.php index d014c0f..a117a79 100644 --- a/src/QueryDataReader.php +++ b/src/QueryDataReader.php @@ -68,7 +68,7 @@ final public function getIterator(): Generator } elseif ($this->batchSize === null) { yield from $this->read(); } else { - $iterator = $this->getPreparedQuery()->each($this->batchSize); + $iterator = $this->getPreparedQuery()->batch($this->batchSize); /** @var array|object $row */ foreach ($iterator as $index => $row) { From 164dd380259b2fe97e484ebf016038093ddf2b4f Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Wed, 6 Aug 2025 11:20:00 +0300 Subject: [PATCH 7/9] fix --- tests/Base/DataTrait.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/Base/DataTrait.php b/tests/Base/DataTrait.php index 146aeb8..3372639 100644 --- a/tests/Base/DataTrait.php +++ b/tests/Base/DataTrait.php @@ -13,6 +13,8 @@ use Yiisoft\Db\Expression\Expression; use Yiisoft\Db\Query\Query; +use function is_object; + trait DataTrait { use FixtureTrait; @@ -60,10 +62,6 @@ protected function assertFixtures(array $expectedFixtureIndexes, array $actualFi $fixture['number'] = (int) $fixture['number']; $fixture['balance'] = (float) $fixture['balance']; - if ($fixture['born_at'] !== null && $this->getConnection()->getDriverName() === 'oci') { - $fixture['born_at'] = DateTime::createFromFormat('d-M-y', $fixture['born_at'])->format('Y-m-d'); - } - $processedActualFixtures[$fixture['number'] - 1] = $fixture; } From 69136fec14324fd0a7b114515f1817a087ef9fe0 Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Wed, 6 Aug 2025 08:20:18 +0000 Subject: [PATCH 8/9] Apply fixes from StyleCI --- tests/Base/DataTrait.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Base/DataTrait.php b/tests/Base/DataTrait.php index 3372639..6cfe970 100644 --- a/tests/Base/DataTrait.php +++ b/tests/Base/DataTrait.php @@ -4,7 +4,6 @@ namespace Yiisoft\Data\Db\Tests\Base; -use DateTime; use Yiisoft\Data\Db\QueryDataReader; use Yiisoft\Data\Reader\DataReaderInterface; use Yiisoft\Data\Tests\Common\FixtureTrait; From ab65576a4880a83853e42db219d2ac0de8af734a Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Wed, 6 Aug 2025 11:30:27 +0300 Subject: [PATCH 9/9] fix --- src/FilterHandler/LikeFilterHandler.php | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/FilterHandler/LikeFilterHandler.php b/src/FilterHandler/LikeFilterHandler.php index 1fe11a4..a0eb814 100644 --- a/src/FilterHandler/LikeFilterHandler.php +++ b/src/FilterHandler/LikeFilterHandler.php @@ -5,7 +5,9 @@ namespace Yiisoft\Data\Db\FilterHandler; use Yiisoft\Data\Reader\Filter\Like; +use Yiisoft\Data\Reader\Filter\LikeMode as DataLikeMode; use Yiisoft\Data\Reader\FilterInterface; +use Yiisoft\Db\QueryBuilder\Condition\LikeMode as DbLikeMode; final class LikeFilterHandler implements QueryFilterHandlerInterface { @@ -18,6 +20,21 @@ public function getCriteria(FilterInterface $filter, Context $context): ?Criteri { /** @var Like $filter */ - return new Criteria(['LIKE', $filter->field, $filter->value, 'caseSensitive' => $filter->caseSensitive]); + return new Criteria([ + 'LIKE', + $filter->field, + $filter->value, + 'caseSensitive' => $filter->caseSensitive, + 'mode' => $this->mapMode($filter->mode), + ]); + } + + public function mapMode(DataLikeMode $dataMode): DbLikeMode + { + return match ($dataMode) { + DataLikeMode::Contains => DbLikeMode::Contains, + DataLikeMode::StartsWith => DbLikeMode::StartsWith, + DataLikeMode::EndsWith => DbLikeMode::EndsWith, + }; } }