Deprecation: #97244 - Direct instantiation of CompositeExpression

See forge#97244

Description

doctrine/dbal deprecated direct instantiation of CompositeExpression in favour of moving forward to an immutable class implementation. Therefore, this has also been deprecated in the Core facade class (\TYPO3\CMS\Core\Database\Query\Expression\CompositeExpression), to avoid shifting too far away.

Impact

Instantiating directly with new CompositeExpression(...) will trigger a PHP E_USER_DEPRECATED error.

The extension scanner cannot detect direct instantiation of this class.

Affected Installations

In general, instances with extensions that directly instantiate a composite expression with new CompositeExpression(...).

The extension scanner will not find and report direct instantiating.

Migration

Instead of directly instantiating a composite expression with the type as the first argument and an array of expressions as the second argument, the new static methods and(...) and or(...) have to be used.

For example, following code:

use TYPO3\CMS\Core\Database\Query\Expression\CompositeExpression;

$compositeExpressionAND = new CompositeExpression(
    CompositeExpression::TYPE_AND,
    [
        // expressions ...
    ]
);

$compositeExpressionOR = new CompositeExpression(
    CompositeExpression::TYPE_OR,
    [
        // expressions ...
    ]
);
Copied!

should be replaced with:

use TYPO3\CMS\Core\Database\Query\Expression\CompositeExpression;

// Note the spread operator
$compositeExpressionAND = CompositeExpression::and(
    ...[
        // expressions ...
    ]
);

$compositeExpressionOR = CompositeExpression::or(
    ...[
        // expressions ...
    ]
);
Copied!