diff --git a/src/Behavior/Binary.php b/src/Behavior/Binary.php index 43e3e11..b42ef64 100644 --- a/src/Behavior/Binary.php +++ b/src/Behavior/Binary.php @@ -9,6 +9,7 @@ use ipl\Orm\Query; use ipl\Sql\Adapter\Pgsql; use ipl\Stdlib\Filter\Condition; +use ipl\Stdlib\Filter\Rule; use UnexpectedValueException; use function ipl\Stdlib\get_php_type; @@ -65,14 +66,14 @@ public function toDb($value, $key, $_) return sprintf('\\x%s', bin2hex($value)); } - public function setQuery(Query $query) + public function setQuery(Query $query): static { $this->isPostgres = $query->getDb()->getAdapter() instanceof Pgsql; return $this; } - public function rewriteCondition(Condition $condition, $relation = null) + public function rewriteCondition(Condition $condition, ?string $relation = null): null { /** * TODO(lippserd): Duplicate code because {@see RewriteFilterBehavior}s come after {@see PropertyBehavior}s. @@ -100,5 +101,7 @@ public function rewriteCondition(Condition $condition, $relation = null) } } } + + return null; } } diff --git a/src/Behavior/MillisecondTimestamp.php b/src/Behavior/MillisecondTimestamp.php index 65d8033..70aa94b 100644 --- a/src/Behavior/MillisecondTimestamp.php +++ b/src/Behavior/MillisecondTimestamp.php @@ -31,7 +31,7 @@ public function toDb($value, $key, $context) if (! $value instanceof DateTime) { try { $value = new DateTime($value); - } catch (Exception $err) { + } catch (Exception) { throw new ValueConversionException(sprintf('Invalid date time format provided: %s', $value)); } } diff --git a/src/Contract/QueryAwareBehavior.php b/src/Contract/QueryAwareBehavior.php index b67bf51..b1b7b11 100644 --- a/src/Contract/QueryAwareBehavior.php +++ b/src/Contract/QueryAwareBehavior.php @@ -14,5 +14,5 @@ interface QueryAwareBehavior extends Behavior * * @return $this */ - public function setQuery(Query $query); + public function setQuery(Query $query): static; } diff --git a/src/Contract/RewriteColumnBehavior.php b/src/Contract/RewriteColumnBehavior.php index b6f545b..ad2fa4e 100644 --- a/src/Contract/RewriteColumnBehavior.php +++ b/src/Contract/RewriteColumnBehavior.php @@ -16,7 +16,7 @@ interface RewriteColumnBehavior extends RewriteFilterBehavior * * @return mixed */ - public function rewriteColumn($column, ?string $relation = null); + public function rewriteColumn(mixed $column, ?string $relation = null): mixed; /** * Get whether {@see rewriteColumn} might return an otherwise unknown column or expression diff --git a/src/Contract/RewriteFilterBehavior.php b/src/Contract/RewriteFilterBehavior.php index af6de5b..01cf5a0 100644 --- a/src/Contract/RewriteFilterBehavior.php +++ b/src/Contract/RewriteFilterBehavior.php @@ -17,9 +17,9 @@ interface RewriteFilterBehavior extends Behavior * Processing of the condition will be restarted, hence the column has to be an absolute path again. * * @param Filter\Condition $condition - * @param string $relation The absolute path (with a trailing dot) of the model + * @param ?string $relation The absolute path (with a trailing dot) of the model * - * @return Filter\Rule|null + * @return ?Filter\Rule */ - public function rewriteCondition(Filter\Condition $condition, $relation = null); + public function rewriteCondition(Filter\Condition $condition, ?string $relation = null): ?Filter\Rule; } diff --git a/src/ResultSet.php b/src/ResultSet.php index d4a1123..6121826 100644 --- a/src/ResultSet.php +++ b/src/ResultSet.php @@ -3,23 +3,24 @@ namespace ipl\Orm; use ArrayIterator; +use Generator; use Iterator; use Traversable; class ResultSet implements Iterator { - protected $cache; + protected ArrayIterator $cache; /** @var bool Whether cache is disabled */ - protected $isCacheDisabled = false; + protected bool $isCacheDisabled = false; - protected $generator; + protected Generator $generator; - protected $limit; + protected ?int $limit; - protected $position; + protected ?int $position = null; - public function __construct(Traversable $traversable, $limit = null) + public function __construct(Traversable $traversable, ?int $limit = null) { $this->cache = new ArrayIterator(); $this->generator = $this->yieldTraversable($traversable); @@ -33,7 +34,7 @@ public function __construct(Traversable $traversable, $limit = null) * * @return static */ - public static function fromQuery(Query $query) + public static function fromQuery(Query $query): static { return new static($query->yieldResults(), $query->getLimit()); } @@ -45,25 +46,24 @@ public static function fromQuery(Query $query) * * @return $this */ - public function disableCache() + public function disableCache(): static { $this->isCacheDisabled = true; return $this; } - public function hasMore() + public function hasMore(): bool { return $this->generator->valid(); } - public function hasResult() + public function hasResult(): bool { return $this->generator->valid(); } - #[\ReturnTypeWillChange] - public function current() + public function current(): mixed { if ($this->position === null) { $this->advance(); @@ -117,7 +117,7 @@ public function rewind(): void } } - protected function advance() + protected function advance(): void { if (! $this->generator->valid()) { return; @@ -134,7 +134,7 @@ protected function advance() } } - protected function yieldTraversable(Traversable $traversable) + protected function yieldTraversable(Traversable $traversable): Generator { foreach ($traversable as $key => $value) { yield $key => $value; diff --git a/src/UnionModel.php b/src/UnionModel.php index 5373bb9..d70c982 100644 --- a/src/UnionModel.php +++ b/src/UnionModel.php @@ -13,7 +13,7 @@ abstract class UnionModel extends Model * * @return UnionQuery */ - public static function on(Connection $db) + public static function on(Connection $db): UnionQuery { return (new UnionQuery()) ->setDb($db) @@ -25,5 +25,5 @@ public static function on(Connection $db) * * @return array */ - abstract public function getUnions(); + abstract public function getUnions(): array; } diff --git a/tests/ApiIdentity.php b/tests/ApiIdentity.php index 99626e1..d9fe1f0 100644 --- a/tests/ApiIdentity.php +++ b/tests/ApiIdentity.php @@ -9,6 +9,7 @@ use ipl\Orm\Model; use ipl\Orm\Relations; use ipl\Stdlib\Filter\Condition; +use ipl\Stdlib\Filter\Rule; class ApiIdentity extends Model { @@ -33,12 +34,14 @@ public function getColumns() public function createBehaviors(Behaviors $behaviors) { $rewriteBehavior = new class () implements RewriteColumnBehavior { - public function rewriteColumn($column, $relation = null) + public function rewriteColumn(mixed $column, ?string $relation = null): ?AliasedExpression { if ($column === 'api_token') { $relation = str_replace('.', '_', $relation); return new AliasedExpression("{$relation}_api_token", '"api_token retrieval not permitted"'); } + + return null; } public function rewriteColumnDefinition(ColumnDefinition $def, string $relation): void @@ -50,8 +53,9 @@ public function isSelectableColumn(string $name): bool return $name === 'api_token'; } - public function rewriteCondition(Condition $condition, $relation = null) + public function rewriteCondition(Condition $condition, ?string $relation = null): ?Rule { + return null; } };