Spaces:
No application file
No application file
| declare(strict_types=1); | |
| namespace Mautic\CoreBundle\Doctrine\Provider; | |
| use Mautic\CoreBundle\CoreEvents; | |
| use Mautic\CoreBundle\Doctrine\GeneratedColumn\GeneratedColumns; | |
| use Mautic\CoreBundle\Event\GeneratedColumnsEvent; | |
| use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
| final class GeneratedColumnsProvider implements GeneratedColumnsProviderInterface | |
| { | |
| /** | |
| * @var string | |
| * | |
| * @see https://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html#innodb-foreign-key-generated-columns | |
| */ | |
| public const MYSQL_MINIMUM_VERSION = '5.7.14'; | |
| /** | |
| * @var string | |
| * | |
| * @see https://mariadb.com/kb/en/library/generated-columns | |
| */ | |
| public const MARIADB_MINIMUM_VERSION = '10.2.6'; | |
| private GeneratedColumns $generatedColumns; | |
| public function __construct( | |
| private VersionProviderInterface $versionProvider, | |
| private EventDispatcherInterface $dispatcher | |
| ) { | |
| $this->generatedColumns = new GeneratedColumns(); | |
| } | |
| public function getGeneratedColumns(): GeneratedColumns | |
| { | |
| if ($this->generatedColumnsAreSupported() | |
| && 0 === $this->generatedColumns->count() | |
| && $this->dispatcher->hasListeners(CoreEvents::ON_GENERATED_COLUMNS_BUILD) | |
| ) { | |
| $event = $this->dispatcher->dispatch(new GeneratedColumnsEvent(), CoreEvents::ON_GENERATED_COLUMNS_BUILD); | |
| $this->generatedColumns = $event->getGeneratedColumns(); | |
| } | |
| return $this->generatedColumns; | |
| } | |
| public function generatedColumnsAreSupported(): bool | |
| { | |
| return 1 !== version_compare($this->getMinimalSupportedVersion(), $this->versionProvider->getVersion()); | |
| } | |
| public function getMinimalSupportedVersion(): string | |
| { | |
| if ($this->versionProvider->isMariaDb()) { | |
| return self::MARIADB_MINIMUM_VERSION; | |
| } | |
| return self::MYSQL_MINIMUM_VERSION; | |
| } | |
| } | |