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
22 changes: 10 additions & 12 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,16 @@
*.gif binary
*.ttf binary

# Ignore some meta files when creating an archive of this repository
/.github export-ignore
/.editorconfig export-ignore
/.gitattributes export-ignore
/.gitignore export-ignore
/.phpunit-watcher.yml export-ignore
/.styleci.yml export-ignore
/infection.json.dist export-ignore
/phpunit.xml.dist export-ignore
/psalm.xml export-ignore
/tests export-ignore
/docs export-ignore
# Exclude development and metadata files from distribution archive
* export-ignore
/src/ -export-ignore
/src/** -export-ignore
/tests/ -export-ignore
/tests/** -export-ignore
/composer.json -export-ignore
/README.md -export-ignore
/CHANGELOG.md -export-ignore
/LICENSE.md -export-ignore

# Avoid merge conflicts in CHANGELOG
# https://about.gitlab.com/2015/02/10/gitlab-reduced-merge-conflicts-by-90-percent-with-changelog-placeholders/
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/bc.yml_
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@ jobs:
os: >-
['ubuntu-latest']
php: >-
['8.3']
['8.4']
2 changes: 1 addition & 1 deletion .github/workflows/composer-require-checker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,4 @@ jobs:
os: >-
['ubuntu-latest']
php: >-
['8.1', '8.2', '8.3', '8.4']
['8.1', '8.2', '8.3', '8.4', '8.5']
1 change: 1 addition & 0 deletions .github/workflows/mssql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ jobs:
- 8.2
- 8.3
- 8.4
- 8.5

mssql:
- server: 2022-latest
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/mutation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
os: >-
['ubuntu-latest']
php: >-
['8.4']
['8.5']
min-covered-msi: 100
secrets:
STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }}
1 change: 1 addition & 0 deletions .github/workflows/mysql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ jobs:
- 8.2
- 8.3
- 8.4
- 8.5

mysql:
- 5.7
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/pgsql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ jobs:
- 8.2
- 8.3
- 8.4
- 8.5

pgsql:
- 9
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/sqlite.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ jobs:
- 8.2
- 8.3
- 8.4
- 8.5

steps:
- name: Checkout.
Expand Down
6 changes: 3 additions & 3 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,19 @@
"prefer-stable": true,
"minimum-stability": "dev",
"require": {
"php": "8.1 - 8.4",
"php": "8.1 - 8.5",
"ext-mbstring": "*",
"cycle/database": "^2.11",
"cycle/orm": "^2.9",
"yiisoft/data": "dev-master"
"yiisoft/data": "^2.0"
},
"require-dev": {
"maglnet/composer-require-checker": "^4.7",
"phpunit/phpunit": "^10.5",
"rector/rector": "^2.1.5",
"roave/infection-static-analysis-plugin": "^1.35",
"spatie/phpunit-watcher": "^1.24",
"vimeo/psalm": "^5.26.1 || ^6.10.3",
"vimeo/psalm": "^5.26.1 || ^6.14.1",
"vlucas/phpdotenv": "^5.6"
},
"autoload": {
Expand Down
33 changes: 9 additions & 24 deletions src/Reader/EntityReader.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
use Yiisoft\Data\Cycle\Reader\FilterHandler\LikeHandler\LikeHandlerFactory;
use Yiisoft\Data\Reader\DataReaderInterface;
use Yiisoft\Data\Reader\Filter\All;
use Yiisoft\Data\Reader\FilterHandlerInterface;
use Yiisoft\Data\Reader\FilterInterface;
use Yiisoft\Data\Reader\Sort;
use Yiisoft\Data\Cycle\Reader\Cache\CachedCollection;
Expand All @@ -40,11 +39,14 @@ final class EntityReader implements DataReaderInterface
private CachedCollection $itemsCache;
private CachedCollection $oneItemCache;
/**
* @psalm-var array<class-string, FilterHandlerInterface & QueryBuilderFilterHandler> $handlers
* @psalm-var array<class-string, QueryBuilderFilterHandler> $handlers
*/
private array $filterHandlers = [];

public function __construct(Select|SelectQuery $query)
/**
* @param QueryBuilderFilterHandler[] $extraFilterHandlers
**/
public function __construct(Select|SelectQuery $query, array $extraFilterHandlers = [])
{
$this->query = clone $query;
$this->countCache = new CachedCount($this->query);
Expand All @@ -70,6 +72,7 @@ public function __construct(Select|SelectQuery $query)
new FilterHandler\LessThanOrEqualHandler(),
$likeHandler,
new FilterHandler\NotHandler(),
...$extraFilterHandlers,
);

$this->filter = new All();
Expand Down Expand Up @@ -145,22 +148,6 @@ public function withFilter(FilterInterface $filter): static
return $new;
}

/**
* @psalm-mutation-free
*/
#[\Override]
public function withAddedFilterHandlers(FilterHandlerInterface ...$filterHandlers): static
{
$new = clone $this;
/** @psalm-suppress ImpureMethodCall */
$new->setFilterHandlers(...$filterHandlers);
/** @psalm-suppress ImpureMethodCall */
$new->resetCountCache();
$new->itemsCache = new CachedCollection();
$new->oneItemCache = new CachedCollection();
return $new;
}

#[\Override]
public function count(): int
{
Expand Down Expand Up @@ -207,13 +194,11 @@ public function getSql(): string
return (string)($query instanceof Select ? $query->buildQuery() : $query);
}

private function setFilterHandlers(FilterHandlerInterface ...$filterHandlers): void
private function setFilterHandlers(QueryBuilderFilterHandler ...$filterHandlers): void
{
$handlers = [];
foreach ($filterHandlers as $filterHandler) {
if ($filterHandler instanceof QueryBuilderFilterHandler) {
$handlers[$filterHandler->getFilterClass()] = $filterHandler;
}
$handlers[$filterHandler->getFilterClass()] = $filterHandler;
}
$this->filterHandlers = array_merge($this->filterHandlers, $handlers);
}
Expand All @@ -238,7 +223,7 @@ private function buildSelectQuery(): SelectQuery|Select

private function makeFilterClosure(FilterInterface $filter): Closure
{
return function (QueryBuilder $select) use ($filter) {
return function (QueryBuilder|SelectQuery $select) use ($filter) {
if (!array_key_exists($filter::class, $this->filterHandlers)) {
throw new NotSupportedFilterException($filter::class);
}
Expand Down
6 changes: 3 additions & 3 deletions src/Reader/FilterHandler/AllHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
namespace Yiisoft\Data\Cycle\Reader\FilterHandler;

use Cycle\Database\Injection\Expression;
use Cycle\Database\Query\SelectQuery;
use Cycle\ORM\Select\QueryBuilder;
use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;
use Yiisoft\Data\Reader\Filter\All;
use Yiisoft\Data\Reader\FilterHandlerInterface;
use Yiisoft\Data\Reader\FilterInterface;

final class AllHandler implements QueryBuilderFilterHandler, FilterHandlerInterface
final class AllHandler implements QueryBuilderFilterHandler
{
#[\Override]
public function getFilterClass(): string
Expand All @@ -24,7 +24,7 @@ public function getAsWhereArguments(FilterInterface $filter, array $handlers): a
{
/** @var All $filter */
return [
static function (QueryBuilder $select) {
static function (QueryBuilder|SelectQuery $select) {
$select->where(new Expression('1 = 1'));
},
];
Expand Down
6 changes: 3 additions & 3 deletions src/Reader/FilterHandler/AndXHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@

namespace Yiisoft\Data\Cycle\Reader\FilterHandler;

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

final class AndXHandler implements QueryBuilderFilterHandler, FilterHandlerInterface
final class AndXHandler implements QueryBuilderFilterHandler
{
#[\Override]
public function getFilterClass(): string
Expand All @@ -24,7 +24,7 @@ public function getAsWhereArguments(FilterInterface $filter, array $handlers): a
{
/** @var AndX $filter */
return [
static function (QueryBuilder $select) use ($filter, $handlers) {
static function (QueryBuilder|SelectQuery $select) use ($filter, $handlers) {
foreach ($filter->filters as $subFilter) {
$handler = $handlers[$subFilter::class] ?? null;
if ($handler === null) {
Expand Down
3 changes: 1 addition & 2 deletions src/Reader/FilterHandler/BetweenHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@

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

final class BetweenHandler implements QueryBuilderFilterHandler, FilterHandlerInterface
final class BetweenHandler implements QueryBuilderFilterHandler
{
#[\Override]
public function getFilterClass(): string
Expand Down
3 changes: 1 addition & 2 deletions src/Reader/FilterHandler/EqualsHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@

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

final class EqualsHandler implements QueryBuilderFilterHandler, FilterHandlerInterface
final class EqualsHandler implements QueryBuilderFilterHandler
{
#[\Override]
public function getFilterClass(): string
Expand Down
3 changes: 1 addition & 2 deletions src/Reader/FilterHandler/EqualsNullHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@

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

final class EqualsNullHandler implements QueryBuilderFilterHandler, FilterHandlerInterface
final class EqualsNullHandler implements QueryBuilderFilterHandler
{
#[\Override]
public function getFilterClass(): string
Expand Down
3 changes: 1 addition & 2 deletions src/Reader/FilterHandler/GreaterThanHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@

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

final class GreaterThanHandler implements QueryBuilderFilterHandler, FilterHandlerInterface
final class GreaterThanHandler implements QueryBuilderFilterHandler
{
#[\Override]
public function getFilterClass(): string
Expand Down
3 changes: 1 addition & 2 deletions src/Reader/FilterHandler/GreaterThanOrEqualHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@

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

final class GreaterThanOrEqualHandler implements QueryBuilderFilterHandler, FilterHandlerInterface
final class GreaterThanOrEqualHandler implements QueryBuilderFilterHandler
{
#[\Override]
public function getFilterClass(): string
Expand Down
3 changes: 1 addition & 2 deletions src/Reader/FilterHandler/InHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,9 @@
use Cycle\Database\Injection\Parameter;
use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;
use Yiisoft\Data\Reader\Filter\In;
use Yiisoft\Data\Reader\FilterHandlerInterface;
use Yiisoft\Data\Reader\FilterInterface;

final class InHandler implements QueryBuilderFilterHandler, FilterHandlerInterface
final class InHandler implements QueryBuilderFilterHandler
{
#[\Override]
public function getFilterClass(): string
Expand Down
3 changes: 1 addition & 2 deletions src/Reader/FilterHandler/LessThanHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@

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

final class LessThanHandler implements QueryBuilderFilterHandler, FilterHandlerInterface
final class LessThanHandler implements QueryBuilderFilterHandler
{
#[\Override]
public function getFilterClass(): string
Expand Down
3 changes: 1 addition & 2 deletions src/Reader/FilterHandler/LessThanOrEqualHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@

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

final class LessThanOrEqualHandler implements QueryBuilderFilterHandler, FilterHandlerInterface
final class LessThanOrEqualHandler implements QueryBuilderFilterHandler
{
#[\Override]
public function getFilterClass(): string
Expand Down
4 changes: 2 additions & 2 deletions src/Reader/FilterHandler/LikeHandler/BaseLikeHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
namespace Yiisoft\Data\Cycle\Reader\FilterHandler\LikeHandler;

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

abstract class BaseLikeHandler implements FilterHandlerInterface
abstract class BaseLikeHandler implements QueryBuilderFilterHandler
{
protected array $escapingReplacements = [
'%' => '\%',
Expand Down
4 changes: 2 additions & 2 deletions src/Reader/FilterHandler/LikeHandler/LikeHandlerFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
namespace Yiisoft\Data\Cycle\Reader\FilterHandler\LikeHandler;

use RuntimeException;
use Yiisoft\Data\Reader\FilterHandlerInterface;
use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;

/**
* @internal
*/
final class LikeHandlerFactory
{
public static function getLikeHandler(string $driverType): FilterHandlerInterface
public static function getLikeHandler(string $driverType): QueryBuilderFilterHandler
{
// default - ignored due to the complexity of testing and preventing splitting of databaseDriver argument.
// @codeCoverageIgnoreStart
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,11 +4,10 @@

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

use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;
use Yiisoft\Data\Reader\Filter\Like;
use Yiisoft\Data\Reader\FilterInterface;

final class MysqlLikeHandler extends BaseLikeHandler implements QueryBuilderFilterHandler
final class MysqlLikeHandler extends BaseLikeHandler
{
#[\Override]
public function getAsWhereArguments(FilterInterface $filter, array $handlers): array
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,11 +4,10 @@

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

use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler;
use Yiisoft\Data\Reader\Filter\Like;
use Yiisoft\Data\Reader\FilterInterface;

final class PostgresLikeHandler extends BaseLikeHandler implements QueryBuilderFilterHandler
final class PostgresLikeHandler extends BaseLikeHandler
{
#[\Override]
public function getAsWhereArguments(FilterInterface $filter, array $handlers): array
Expand Down
Loading
Loading