Require $platform in AbstractSchemaManager::__construct() #4146
+67
−35
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem Statement
The
Connection::getDatabasePlatform()
method called from withinAbstractSchemaManager::__construct()
can throw aDBALException
which is neither handled nor declared via@throws
.dbal/src/Schema/AbstractSchemaManager.php
Lines 47 to 54 in 23e8d5d
Not only the method throws a non-documented exception, the exception propagates undocumented to
Driver::getSchemaManager()
which instantiates a schema manager.Implementations of the
Driver
interface cannot throw aDBALException
because it doesn't belong to this level of abstraction.Solution
Instantiate the platform in the wrapper layer and avoid the potential exception. The wrapper connection remains as lazy as it was before.
Additional notes
$this->driver->getSchemaManager($this, $this->getDatabasePlatform())
may look awkward, this weirdness is not caused by this change. The reason is that the wrapper connection is quite a god object, and the very fact that other components depend on it (e.g. instead of a driver connection) is the real issue.