Ensure forward compatibility with ipl-orm by adding return types (#1340)

Add explicit return types to `ipl-orm`-derived methods to prepare for strict
typing. These additions are safe, as they only annotate existing methods that
previously lacked return type declarations.

(cherry picked from commit f8d4f92566)
This commit is contained in:
Bastian Lederer 2026-03-23 16:17:52 +01:00 committed by Johannes Meyer
parent 6897a56c1b
commit fb9c2b65fa
9 changed files with 32 additions and 20 deletions

View file

@ -53,17 +53,17 @@ class Bitmask extends PropertyBehavior implements RewriteFilterBehavior
return $bits;
}
public function rewriteCondition(Condition $condition, $relation = null)
public function rewriteCondition(Condition $condition, $relation = null): null
{
$column = $condition->metaData()->get('columnName');
if (! isset($this->properties[$column])) {
return;
if ($column === null || ! isset($this->properties[$column])) {
return null;
}
$values = $condition->getValue();
if (! is_array($values)) {
if (is_int($values) || ctype_digit($values)) {
return;
return null;
}
$values = [$values];
@ -79,5 +79,7 @@ class Bitmask extends PropertyBehavior implements RewriteFilterBehavior
}
$condition->setColumn(sprintf('%s & %s', $condition->getColumn(), $bits));
return null;
}
}

View file

@ -26,14 +26,14 @@ class FlattenedObjectVars implements RewriteColumnBehavior, QueryAwareBehavior
/** @var Query */
protected $query;
public function setQuery(Query $query)
public function setQuery(Query $query): static
{
$this->query = $query;
return $this;
}
public function rewriteCondition(Filter\Condition $condition, $relation = null)
public function rewriteCondition(Filter\Condition $condition, $relation = null): ?Filter\Condition
{
$column = $condition->metaData()->get('columnName');
if ($column !== null) {
@ -71,9 +71,11 @@ class FlattenedObjectVars implements RewriteColumnBehavior, QueryAwareBehavior
return $condition;
}
return null;
}
public function rewriteColumn($column, $relation = null)
public function rewriteColumn($column, ?string $relation = null): AliasedExpression
{
$subQuery = $this->query->createSubQuery(new CustomvarFlat(), $relation)
->limit(1)

View file

@ -22,7 +22,7 @@ class HasProblematicParent implements RewriteColumnBehavior, QueryAwareBehavior
/** @var Query */
protected $query;
public function setQuery(Query $query): self
public function setQuery(Query $query): static
{
$this->query = $query;
@ -83,12 +83,14 @@ class HasProblematicParent implements RewriteColumnBehavior, QueryAwareBehavior
{
}
public function rewriteCondition(Filter\Condition $condition, $relation = null)
public function rewriteCondition(Filter\Condition $condition, $relation = null): null
{
$column = substr($condition->getColumn(), strlen($relation ?? ''));
if ($this->isSelectableColumn($column)) {
throw new InvalidColumnException($column, $this->query->getModel());
}
return null;
}
}

View file

@ -29,11 +29,11 @@ class ReRoute implements RewriteFilterBehavior, RewritePathBehavior
return $this->routes;
}
public function rewriteCondition(Filter\Condition $condition, $relation = null)
public function rewriteCondition(Filter\Condition $condition, $relation = null): ?Filter\Rule
{
$remainingPath = $condition->metaData()->get('columnName', '');
if (strpos($remainingPath, '.') === false) {
return;
return null;
}
if (($path = $this->rewritePath($remainingPath, $relation)) !== null) {
@ -63,6 +63,8 @@ class ReRoute implements RewriteFilterBehavior, RewritePathBehavior
return $filter;
}
return null;
}
public function rewritePath(string $path, ?string $relation = null): ?string

View file

@ -54,7 +54,7 @@ class CustomvarFlat extends Model
'flatname_checksum'
]));
$behaviors->add(new class implements RewriteFilterBehavior {
public function rewriteCondition(Condition $condition, $relation = null)
public function rewriteCondition(Condition $condition, $relation = null): ?Filter\Chain
{
if ($condition->metaData()->has('requiresTransformation')) {
/** @var string $columnName */
@ -65,6 +65,8 @@ class CustomvarFlat extends Model
return Filter::all($nameFilter, $valueFilter);
}
return null;
}
});
}

View file

@ -10,6 +10,7 @@ use ipl\Orm\Behaviors;
use ipl\Orm\Query;
use ipl\Orm\Relations;
use ipl\Orm\UnionModel;
use ipl\Orm\UnionQuery;
use ipl\Sql\Adapter\Pgsql;
use ipl\Sql\Connection;
use ipl\Sql\Expression;
@ -38,7 +39,7 @@ use ipl\Sql\Select;
*/
class Hostgroupsummary extends UnionModel
{
public static function on(Connection $db)
public static function on(Connection $db): UnionQuery
{
$q = parent::on($db);
@ -156,7 +157,7 @@ class Hostgroupsummary extends UnionModel
return 'display_name';
}
public function getUnions()
public function getUnions(): array
{
$unions = [
[

View file

@ -10,6 +10,7 @@ use ipl\Orm\Behaviors;
use ipl\Orm\Query;
use ipl\Orm\Relations;
use ipl\Orm\UnionModel;
use ipl\Orm\UnionQuery;
use ipl\Sql\Adapter\Pgsql;
use ipl\Sql\Connection;
use ipl\Sql\Expression;
@ -33,7 +34,7 @@ use ipl\Sql\Select;
*/
class ServicegroupSummary extends UnionModel
{
public static function on(Connection $db)
public static function on(Connection $db): UnionQuery
{
$q = parent::on($db);
@ -134,7 +135,7 @@ class ServicegroupSummary extends UnionModel
return 'display_name';
}
public function getUnions()
public function getUnions(): array
{
$unions = [
[

View file

@ -2,12 +2,13 @@
namespace Icinga\Module\Icingadb\Model\UnreachableParent;
use Generator;
use Icinga\Module\Icingadb\Redis\VolatileStateResults;
use Traversable;
class ResultSet extends VolatileStateResults
{
protected function yieldTraversable(Traversable $traversable)
protected function yieldTraversable(Traversable $traversable): Generator
{
$knownIds = [];
foreach ($traversable as $value) {

View file

@ -42,7 +42,7 @@ class VolatileStateResults extends ResultSet
/** @var bool Whether the model's ID should be contained in the results */
protected bool $includeModelID = true;
public static function fromQuery(Query $query)
public static function fromQuery(Query $query): static
{
$self = parent::fromQuery($query);
$self->resolver = $query->getResolver();
@ -76,8 +76,7 @@ class VolatileStateResults extends ResultSet
return $this->redisUnavailable;
}
#[\ReturnTypeWillChange]
public function current()
public function current(): mixed
{
if (! $this->redisUnavailable && ! $this->updatesApplied && ! $this->isCacheDisabled) {
$this->rewind();