Skip to content

Commit

Permalink
Fix psalm tests, namespace and underscores (#3)
Browse files Browse the repository at this point in the history
  • Loading branch information
Gerych1984 committed Oct 2, 2021
1 parent da6649d commit 3201156
Show file tree
Hide file tree
Showing 11 changed files with 73 additions and 56 deletions.
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@
},
"autoload": {
"psr-4": {
"Yiisoft\\DataDb\\": "src"
"Yiisoft\\Data\\Db\\": "src"
}
},
"autoload-dev": {
"psr-4": {
"Yiisoft\\DataDb\\Tests\\": "tests"
"Yiisoft\\Data\\Db\\Tests\\": "tests"
}
},
"extra": {
Expand Down
2 changes: 1 addition & 1 deletion phpunit.xml.dist
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
</php>

<testsuites>
<testsuite name="DataDb">
<testsuite name="Data-Db">
<directory>./tests</directory>
</testsuite>
</testsuites>
Expand Down
2 changes: 1 addition & 1 deletion src/Filter/All.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace Yiisoft\DataDb\Filter;
namespace Yiisoft\Data\Db\Filter;

use Yiisoft\Data\Reader\Filter\All as FilterAll;

Expand Down
25 changes: 12 additions & 13 deletions src/Filter/CompareFilter.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,57 +2,56 @@

declare(strict_types=1);

namespace Yiisoft\DataDb\Filter;
namespace Yiisoft\Data\Db\Filter;

use Yiisoft\Data\Reader\Filter\FilterInterface;

abstract class CompareFilter implements FilterInterface
{
protected string $_column;
protected string $column;

/**
* @var array|bool|float|int|string|null
*/
protected $_value;
protected $value;

/**
* @var bool
*/
protected bool $_ignoreNull = false;
protected bool $ignoreNull = false;

/**
* @param mixed $value
*/
public function __construct(string $column, $value, ?string $table = null)
{
$this->_value = $value;
$this->value = $value;

if ($table) {
$this->_column = $table . '.' . $column;
$this->column = $table . '.' . $column;
} else {
$this->_column = $column;
$this->column = $column;
}
}

public function withIgnoreNull(bool $ignoreNull = false): self
{
$new = clone $this;
$new->_ignoreNull = $ignoreNull;

$new->ignoreNull = $ignoreNull;
return $new;
}

public function getIgnoreNull(): bool
{
return $this->_ignoreNull;
return $this->ignoreNull;
}

public function toArray(): array
{
if ($this->_value === null) {
return ['IS', $this->_column, null];
if ($this->value === null) {
return ['IS', $this->column, null];
}

return [static::getOperator(), $this->_column , $this->_value];
return [static::getOperator(), $this->column , $this->value];
}
}
4 changes: 2 additions & 2 deletions src/Filter/Equals.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace Yiisoft\DataDb\Filter;
namespace Yiisoft\Data\Db\Filter;

use Yiisoft\Data\Reader\Filter\Equals as FilterEquals;

Expand All @@ -15,7 +15,7 @@ public static function getOperator(): string

public function toArray(): array
{
if ($this->_value === null && $this->_ignoreNull) {
if ($this->value === null && $this->ignoreNull) {
return [];
}

Expand Down
8 changes: 4 additions & 4 deletions src/Filter/GroupFilter.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,24 @@

declare(strict_types=1);

namespace Yiisoft\DataDb\Filter;
namespace Yiisoft\Data\Db\Filter;

use Yiisoft\Data\Reader\Filter\FilterInterface;

abstract class GroupFilter implements FilterInterface
{
protected array $_filters;
protected array $filters;

public function __construct(FilterInterface ...$filters)
{
$this->_filters = $filters;
$this->filters = $filters;
}

public function toArray(): array
{
$array = [static::getOperator()];

foreach ($this->_filters as $filter) {
foreach ($this->filters as $filter) {
$arr = $filter->toArray();

if (count($arr)) {
Expand Down
2 changes: 1 addition & 1 deletion src/Processor/All.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace Yiisoft\DataDb\Processor;
namespace Yiisoft\Data\Db\Processor;

use Yiisoft\Data\Reader\Filter\All as FilterAll;
use Yiisoft\Data\Reader\Filter\FilterInterface;
Expand Down
2 changes: 1 addition & 1 deletion src/Processor/Equals.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace Yiisoft\DataDb\Processor;
namespace Yiisoft\Data\Db\Processor;

use Yiisoft\Data\Reader\Filter\Equals as FilterEquals;
use Yiisoft\Data\Reader\Filter\FilterInterface;
Expand Down
2 changes: 1 addition & 1 deletion src/Processor/QueryProcessorInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace Yiisoft\DataDb\Processor;
namespace Yiisoft\Data\Db\Processor;

use Yiisoft\Data\Reader\Filter\FilterInterface;
use Yiisoft\Data\Reader\Filter\FilterProcessorInterface;
Expand Down
66 changes: 42 additions & 24 deletions src/QueryDataReader.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace Yiisoft\DataDb;
namespace Yiisoft\Data\Db;

use Generator;
use InvalidArgumentException;
Expand All @@ -11,30 +11,36 @@
use Yiisoft\Data\Reader\Filter\FilterInterface;
use Yiisoft\Data\Reader\Filter\FilterProcessorInterface;
use Yiisoft\Data\Reader\Sort;
use Yiisoft\DataDb\Processor\All;
use Yiisoft\DataDb\Processor\Equals;
use Yiisoft\DataDb\Processor\QueryProcessorInterface;
use Yiisoft\Data\Db\Processor\All;
use Yiisoft\Data\Db\Processor\Equals;
use Yiisoft\Data\Db\Processor\QueryProcessorInterface;
use Yiisoft\Db\Query\Query;

/**
* @template TKey as array-key
* @template TValue
*
* @implements DataReaderInterface<TKey, TValue>
*/
class QueryDataReader implements DataReaderInterface
{
private Query $_query;
private Query $query;

private ?Sort $sort = null;
private ?FilterInterface $filter = null;

private int $limit = 0;
private int $offset = 0;

private ?int $_count = null;
private ?array $_data = null;
private ?int $count = null;
private ?array $data = null;

private array $filterProcessors = [];


public function __construct(Query $query)
{
$this->_query = $query;

$this->query = $query;
$this->filterProcessors = $this->withFilterProcessors(
new All(),
new Equals()
Expand All @@ -43,7 +49,7 @@ public function __construct(Query $query)

public function __clone()
{
$this->_data = null;
$this->data = null;
}

/**
Expand All @@ -60,21 +66,21 @@ public function getIterator(): Generator

public function count(): int
{
if ($this->_count === null) {
if ($this->count === null) {
$query = $this->prepareQuery();
$query->offset(null);
$query->limit(null);
$query->orderBy('');

$this->_count = $query->count();
$this->count = $query->count();
}

return $this->_count;
return $this->count;
}

private function prepareQuery(): Query
{
$query = $this->applyFilter(clone $this->_query);
$query = $this->applyFilter(clone $this->query);

if ($this->limit) {
$query->limit($this->limit);
Expand All @@ -84,9 +90,13 @@ private function prepareQuery(): Query
$query->offset($this->offset);
}

if ($this->sort && $order = $this->sort->getOrder()) {
foreach ($order as $name => $direction) {
$query->addOrderBy([$name => $direction === 'desc' ? SORT_DESC : SORT_ASC]);
if ($this->sort && $order = $this->sort->getOrder())
{
foreach ($order as $name => $direction)
{
$query->addOrderBy([
$name => $direction === 'desc' ? SORT_DESC : SORT_ASC
]);
}
}

Expand All @@ -103,7 +113,7 @@ protected function applyFilter(Query $query): Query
$processor = $this->filterProcessors[$operation] ?? null;

if (!isset($this->filterProcessors[$operation])) {
throw new RuntimeException('Operation "%s" is not supported', $operation);
throw new RuntimeException(sprintf('Operation "%s" is not supported', $operation));
}

return $this->filterProcessors[$operation]->apply($query, $this->filter);
Expand Down Expand Up @@ -152,18 +162,23 @@ public function withSort(?Sort $sort): self
public function withFilter(FilterInterface $filter): self
{
$new = clone $this;
$new->_count = null;
$new->count = null;
$new->filter = $filter;

return $new;
}

/**
* @psalm-mutation-free
*/
public function withFilterProcessors(FilterProcessorInterface ...$filterProcessors): self
{
$new = clone $this;

foreach ($filterProcessors as $filterProcessor) {
foreach ($filterProcessors as $filterProcessor)
{
if ($filterProcessor instanceof QueryProcessorInterface) {
/** @psalm-suppress ImpureMethodCall */
$new->filterProcessors[$filterProcessor->getOperator()] = $filterProcessor;
}
}
Expand All @@ -178,15 +193,18 @@ public function getSort(): ?Sort

public function read(): array
{
if ($this->_data === null) {
$this->_data = $this->prepareQuery()->all();
if ($this->data === null) {
$this->data = $this->prepareQuery()->all();
}

return $this->_data;
return $this->data;
}

/**
* @return mixed
*/
public function readOne()
{
return $this->withLimit(1)->prepareQuery()->findOne();
return $this->withLimit(1)->prepareQuery()->one();
}
}
12 changes: 6 additions & 6 deletions tests/DataReaderFilterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@

declare(strict_types=1);

namespace Yiisoft\DataDb\Tests;
namespace Yiisoft\Data\Db\Tests;

use PHPUnit\Framework\TestCase;
use Yiisoft\Data\Reader\Filter\FilterInterface;
use Yiisoft\DataDb\Filter\All as FilterAll;
use Yiisoft\DataDb\Filter\Equals as FilterEquals;
use Yiisoft\DataDb\Processor\All as ProcessorAll;
use Yiisoft\DataDb\Processor\Equals as ProcessorEquals;
use Yiisoft\DataDb\Processor\QueryProcessorInterface;
use Yiisoft\Data\Db\Filter\All as FilterAll;
use Yiisoft\Data\Db\Filter\Equals as FilterEquals;
use Yiisoft\Data\Db\Processor\All as ProcessorAll;
use Yiisoft\Data\Db\Processor\Equals as ProcessorEquals;
use Yiisoft\Data\Db\Processor\QueryProcessorInterface;

class DataReaderFilterTest extends TestCase
{
Expand Down

0 comments on commit 3201156

Please sign in to comment.