Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions rector.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector;
use Rector\Config\RectorConfig;
use Rector\Php74\Rector\Closure\ClosureToArrowFunctionRector;
use Rector\Php81\Rector\Property\ReadOnlyPropertyRector;
use Rector\Php81\Rector\FuncCall\NullToStrictStringFuncCallArgRector;
use Rector\Php81\Rector\Property\ReadOnlyPropertyRector;

return RectorConfig::configure()
->withPaths([
__DIR__ . '/src',
__DIR__ . '/tests',
__DIR__.'/src',
__DIR__.'/tests',
])
->withPhpSets(php81: true)
->withRules([
Expand Down
7 changes: 6 additions & 1 deletion src/Reader/Cache/CachedCount.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@ final class CachedCount
*/
private ?int $count = null;

public function __construct(private ?Countable $collection) {}
public function __construct(private ?Countable $collection)
{
}

/**
* @psalm-internal Yiisoft\Data\Cycle\Reader
*
* @psalm-return non-negative-int
*/
public function getCount(): int
Expand All @@ -31,10 +34,12 @@ private function cacheCount(): int
{
/**
* @psalm-suppress PossiblyNullReference
*
* @psalm-var non-negative-int
*/
$this->count = $this->collection->count();
$this->collection = null;

return $this->count;
}
}
16 changes: 11 additions & 5 deletions src/Reader/EntityReader.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@
use Cycle\ORM\Select\QueryBuilder;
use Generator;
use InvalidArgumentException;
use Override;
use Yiisoft\Data\Cycle\Exception\NotSupportedFilterException;
use Yiisoft\Data\Cycle\Reader\Cache\CachedCollection;
use Yiisoft\Data\Cycle\Reader\Cache\CachedCount;
use Yiisoft\Data\Cycle\Reader\FilterHandler\LikeHandler\LikeHandlerFactory;
use Yiisoft\Data\Reader\DataReaderInterface;
use Yiisoft\Data\Reader\Filter\All;
use Yiisoft\Data\Reader\FilterInterface;
use Yiisoft\Data\Reader\Sort;
use Yiisoft\Data\Cycle\Reader\Cache\CachedCollection;
use Yiisoft\Data\Cycle\Reader\Cache\CachedCount;
use Override;

use function array_key_exists;
use function is_int;
Expand Down Expand Up @@ -105,6 +105,7 @@ public function withLimit(?int $limit): static
$new->limit = $limit;
$new->itemsCache = new CachedCollection();
}

return $new;
}

Expand All @@ -119,6 +120,7 @@ public function withOffset(int $offset): static
$new->offset = $offset;
$new->itemsCache = new CachedCollection();
}

return $new;
}

Expand All @@ -134,6 +136,7 @@ public function withSort(?Sort $sort): static
$new->itemsCache = new CachedCollection();
$new->oneItemCache = new CachedCollection();
}

return $new;
}

Expand All @@ -151,6 +154,7 @@ public function withFilter(FilterInterface $filter): static
/** @psalm-suppress ImpureMethodCall */
$new->resetCountCache();
}

return $new;
}

Expand All @@ -167,6 +171,7 @@ public function read(): iterable
$query = $this->buildSelectQuery();
$this->itemsCache->setCollection($query->fetchAll());
}

return $this->itemsCache->getCollection();
}

Expand All @@ -186,7 +191,7 @@ public function readOne(): array|object|null
}

/**
* Get Iterator without caching
* Get Iterator without caching.
*/
#[Override]
public function getIterator(): Generator
Expand All @@ -197,6 +202,7 @@ public function getIterator(): Generator
public function getSql(): string
{
$query = $this->buildSelectQuery();

return (string) ($query instanceof Select ? $query->buildQuery() : $query);
}

Expand Down Expand Up @@ -270,7 +276,7 @@ private function normalizeSortingCriteria(array $criteria): array
if (is_int($direction)) {
$direction = match ($direction) {
SORT_DESC => 'DESC',
default => 'ASC',
default => 'ASC',
};
}
$criteria[$field] = $direction;
Expand Down
2 changes: 1 addition & 1 deletion src/Reader/FilterHandler/AllHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
use Cycle\Database\Injection\Expression;
use Cycle\Database\Query\SelectQuery;
use Cycle\ORM\Select\QueryBuilder;
use Override;
use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;
use Yiisoft\Data\Reader\Filter\All;
use Yiisoft\Data\Reader\FilterInterface;
use Override;

final class AllHandler implements QueryBuilderFilterHandler
{
Expand Down
2 changes: 1 addition & 1 deletion src/Reader/FilterHandler/AndXHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@

use Cycle\Database\Query\SelectQuery;
use Cycle\ORM\Select\QueryBuilder;
use Override;
use Yiisoft\Data\Cycle\Exception\NotSupportedFilterException;
use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;
use Yiisoft\Data\Reader\Filter\AndX;
use Yiisoft\Data\Reader\FilterInterface;
use Override;

final class AndXHandler implements QueryBuilderFilterHandler
{
Expand Down
4 changes: 2 additions & 2 deletions src/Reader/FilterHandler/BetweenHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

namespace Yiisoft\Data\Cycle\Reader\FilterHandler;

use Override;
use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;
use Yiisoft\Data\Reader\Filter\Between;
use Yiisoft\Data\Reader\FilterInterface;
use Override;

final class BetweenHandler implements QueryBuilderFilterHandler
{
Expand All @@ -20,7 +20,7 @@ public function getFilterClass(): string
#[Override]
public function getAsWhereArguments(FilterInterface $filter, array $handlers): array
{
/** @var Between $filter */
/** @var Between $filter */

return [$filter->field, 'between', $filter->minValue, $filter->maxValue];
}
Expand Down
2 changes: 1 addition & 1 deletion src/Reader/FilterHandler/EqualsHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

namespace Yiisoft\Data\Cycle\Reader\FilterHandler;

use Override;
use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;
use Yiisoft\Data\Reader\Filter\Equals;
use Yiisoft\Data\Reader\FilterInterface;
use Override;

final class EqualsHandler implements QueryBuilderFilterHandler
{
Expand Down
2 changes: 1 addition & 1 deletion src/Reader/FilterHandler/EqualsNullHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

namespace Yiisoft\Data\Cycle\Reader\FilterHandler;

use Override;
use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;
use Yiisoft\Data\Reader\Filter\EqualsNull;
use Yiisoft\Data\Reader\FilterInterface;
use Override;

final class EqualsNullHandler implements QueryBuilderFilterHandler
{
Expand Down
2 changes: 1 addition & 1 deletion src/Reader/FilterHandler/GreaterThanHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

namespace Yiisoft\Data\Cycle\Reader\FilterHandler;

use Override;
use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;
use Yiisoft\Data\Reader\Filter\GreaterThan;
use Yiisoft\Data\Reader\FilterInterface;
use Override;

final class GreaterThanHandler implements QueryBuilderFilterHandler
{
Expand Down
2 changes: 1 addition & 1 deletion src/Reader/FilterHandler/GreaterThanOrEqualHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

namespace Yiisoft\Data\Cycle\Reader\FilterHandler;

use Override;
use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;
use Yiisoft\Data\Reader\Filter\GreaterThanOrEqual;
use Yiisoft\Data\Reader\FilterInterface;
use Override;

final class GreaterThanOrEqualHandler implements QueryBuilderFilterHandler
{
Expand Down
2 changes: 1 addition & 1 deletion src/Reader/FilterHandler/InHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
namespace Yiisoft\Data\Cycle\Reader\FilterHandler;

use Cycle\Database\Injection\Parameter;
use Override;
use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;
use Yiisoft\Data\Reader\Filter\In;
use Yiisoft\Data\Reader\FilterInterface;
use Override;

final class InHandler implements QueryBuilderFilterHandler
{
Expand Down
2 changes: 1 addition & 1 deletion src/Reader/FilterHandler/LessThanHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

namespace Yiisoft\Data\Cycle\Reader\FilterHandler;

use Override;
use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;
use Yiisoft\Data\Reader\Filter\LessThan;
use Yiisoft\Data\Reader\FilterInterface;
use Override;

final class LessThanHandler implements QueryBuilderFilterHandler
{
Expand Down
2 changes: 1 addition & 1 deletion src/Reader/FilterHandler/LessThanOrEqualHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

namespace Yiisoft\Data\Cycle\Reader\FilterHandler;

use Override;
use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;
use Yiisoft\Data\Reader\Filter\LessThanOrEqual;
use Yiisoft\Data\Reader\FilterInterface;
use Override;

final class LessThanOrEqualHandler implements QueryBuilderFilterHandler
{
Expand Down
13 changes: 7 additions & 6 deletions src/Reader/FilterHandler/LikeHandler/BaseLikeHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@

namespace Yiisoft\Data\Cycle\Reader\FilterHandler\LikeHandler;

use Override;
use Stringable;
use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;
use Yiisoft\Data\Reader\Filter\Like;
use Yiisoft\Data\Reader\Filter\LikeMode;
use Override;

abstract class BaseLikeHandler implements QueryBuilderFilterHandler
{
protected array $escapingReplacements = [
'%' => '\%',
'_' => '\_',
'%' => '\%',
'_' => '\_',
'\\' => '\\\\',
];

Expand All @@ -27,10 +27,11 @@ public function getFilterClass(): string
protected function prepareValue(string|Stringable $value, LikeMode $mode): string
{
$value = strtr((string) $value, $this->escapingReplacements);

return match ($mode) {
LikeMode::Contains => '%' . $value . '%',
LikeMode::StartsWith => $value . '%',
LikeMode::EndsWith => '%' . $value,
LikeMode::Contains => '%'.$value.'%',
LikeMode::StartsWith => $value.'%',
LikeMode::EndsWith => '%'.$value,
};
}
}
8 changes: 4 additions & 4 deletions src/Reader/FilterHandler/LikeHandler/LikeHandlerFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ public static function getLikeHandler(string $driverType): QueryBuilderFilterHan
// default - ignored due to the complexity of testing and preventing splitting of databaseDriver argument.
// @codeCoverageIgnoreStart
return match ($driverType) {
'SQLite' => new SqliteLikeHandler(),
'MySQL' => new MysqlLikeHandler(),
'Postgres' => new PostgresLikeHandler(),
'SQLite' => new SqliteLikeHandler(),
'MySQL' => new MysqlLikeHandler(),
'Postgres' => new PostgresLikeHandler(),
'SQLServer' => new SqlServerLikeHandler(),
default => throw new RuntimeException("$driverType database driver is not supported."),
default => throw new RuntimeException("$driverType database driver is not supported."),
};
// @codeCoverageIgnoreEnd
}
Expand Down
3 changes: 1 addition & 2 deletions src/Reader/FilterHandler/LikeHandler/MysqlLikeHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,16 @@

namespace Yiisoft\Data\Cycle\Reader\FilterHandler\LikeHandler;

use Override;
use Yiisoft\Data\Reader\Filter\Like;
use Yiisoft\Data\Reader\FilterInterface;
use Override;

final class MysqlLikeHandler extends BaseLikeHandler
{
#[Override]
public function getAsWhereArguments(FilterInterface $filter, array $handlers): array
{
/** @var Like $filter */

if ($filter->caseSensitive !== true) {
return [$filter->field, 'like', $this->prepareValue($filter->value, $filter->mode)];
}
Expand Down
3 changes: 1 addition & 2 deletions src/Reader/FilterHandler/LikeHandler/PostgresLikeHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,16 @@

namespace Yiisoft\Data\Cycle\Reader\FilterHandler\LikeHandler;

use Override;
use Yiisoft\Data\Reader\Filter\Like;
use Yiisoft\Data\Reader\FilterInterface;
use Override;

final class PostgresLikeHandler extends BaseLikeHandler
{
#[Override]
public function getAsWhereArguments(FilterInterface $filter, array $handlers): array
{
/** @var Like $filter */

if ($filter->caseSensitive !== true) {
return [$filter->field, 'ilike', $this->prepareValue($filter->value, $filter->mode)];
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

namespace Yiisoft\Data\Cycle\Reader\FilterHandler\LikeHandler;

use Override;
use Yiisoft\Data\Cycle\Exception\NotSupportedFilterOptionException;
use Yiisoft\Data\Reader\Filter\Like;
use Yiisoft\Data\Reader\FilterInterface;
use Override;

final class SqlServerLikeHandler extends BaseLikeHandler
{
Expand All @@ -20,7 +20,6 @@ public function __construct()
public function getAsWhereArguments(FilterInterface $filter, array $handlers): array
{
/** @var Like $filter */

if ($filter->caseSensitive === true) {
throw new NotSupportedFilterOptionException(optionName: 'caseSensitive', driverType: 'SQLServer');
}
Expand Down
3 changes: 1 addition & 2 deletions src/Reader/FilterHandler/LikeHandler/SqliteLikeHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

namespace Yiisoft\Data\Cycle\Reader\FilterHandler\LikeHandler;

use Override;
use Yiisoft\Data\Cycle\Exception\NotSupportedFilterOptionException;
use Yiisoft\Data\Reader\Filter\Like;
use Yiisoft\Data\Reader\FilterInterface;
use Override;

final class SqliteLikeHandler extends BaseLikeHandler
{
Expand All @@ -20,7 +20,6 @@ public function __construct()
public function getAsWhereArguments(FilterInterface $filter, array $handlers): array
{
/** @var Like $filter */

if ($filter->caseSensitive === true) {
throw new NotSupportedFilterOptionException(optionName: 'caseSensitive', driverType: 'SQLite');
}
Expand Down
Loading