From 778c9bd54c7b6092cc440b89e2d51f7c14c1399f Mon Sep 17 00:00:00 2001 From: Dave Long <dave@longwaveconsulting.com> Date: Mon, 27 Jan 2025 23:03:52 +0000 Subject: [PATCH] Issue #3493595 by alexpott, amateescu: The mysql.views.cast_sql service depends on the views module and exists when views is not installed --- core/modules/mysql/mysql.services.yml | 4 --- .../mysql/src/MysqlServiceProvider.php | 25 +++++++++++++ .../tests/src/Kernel/mysql/ViewsTest.php | 36 +++++++++++++++++++ core/modules/views/views.services.yml | 1 + 4 files changed, 62 insertions(+), 4 deletions(-) delete mode 100644 core/modules/mysql/mysql.services.yml create mode 100644 core/modules/mysql/src/MysqlServiceProvider.php create mode 100644 core/modules/mysql/tests/src/Kernel/mysql/ViewsTest.php diff --git a/core/modules/mysql/mysql.services.yml b/core/modules/mysql/mysql.services.yml deleted file mode 100644 index c20d7f1833c4..000000000000 --- a/core/modules/mysql/mysql.services.yml +++ /dev/null @@ -1,4 +0,0 @@ -services: - mysql.views.cast_sql: - class: Drupal\mysql\Plugin\views\query\MysqlCastSql - public: false diff --git a/core/modules/mysql/src/MysqlServiceProvider.php b/core/modules/mysql/src/MysqlServiceProvider.php new file mode 100644 index 000000000000..8c1578e25827 --- /dev/null +++ b/core/modules/mysql/src/MysqlServiceProvider.php @@ -0,0 +1,25 @@ +<?php + +namespace Drupal\mysql; + +use Drupal\Core\DependencyInjection\ContainerBuilder; +use Drupal\Core\DependencyInjection\ServiceProviderBase; +use Drupal\mysql\Plugin\views\query\MysqlCastSql; + +/** + * Registers the 'mysql.views.cast_sql' service when views is installed. + */ +class MysqlServiceProvider extends ServiceProviderBase { + + /** + * {@inheritdoc} + */ + public function register(ContainerBuilder $container): void { + if (isset($container->getParameter('container.modules')['views'])) { + $container + ->register('mysql.views.cast_sql', MysqlCastSql::class) + ->setPublic(FALSE); + } + } + +} diff --git a/core/modules/mysql/tests/src/Kernel/mysql/ViewsTest.php b/core/modules/mysql/tests/src/Kernel/mysql/ViewsTest.php new file mode 100644 index 000000000000..d2914692ce78 --- /dev/null +++ b/core/modules/mysql/tests/src/Kernel/mysql/ViewsTest.php @@ -0,0 +1,36 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\Tests\mysql\Kernel\mysql; + +use Drupal\Core\DependencyInjection\ContainerBuilder; +use Drupal\KernelTests\Core\Database\DriverSpecificDatabaseTestBase; +use Drupal\mysql\Plugin\views\query\MysqlCastSql; + +/** + * Tests views service. + * + * @group Database + */ +class ViewsTest extends DriverSpecificDatabaseTestBase { + + /** + * Tests views service. + */ + public function testViewsService(): void { + $this->assertFalse($this->container->has('views.cast_sql')); + $this->enableModules(['views']); + $this->assertInstanceOf(MysqlCastSql::class, $this->container->get('views.cast_sql')); + $this->assertFalse($this->container->has('mysql.views.cast_sql')); + } + + /** + * {@inheritdoc} + */ + public function register(ContainerBuilder $container): void { + parent::register($container); + $this->assertSame($container->hasDefinition('mysql.views.cast_sql'), isset($container->getParameter('container.modules')['views'])); + } + +} diff --git a/core/modules/views/views.services.yml b/core/modules/views/views.services.yml index eb07ae249760..2a3aa1a16fad 100644 --- a/core/modules/views/views.services.yml +++ b/core/modules/views/views.services.yml @@ -106,3 +106,4 @@ services: class: Drupal\views\Plugin\views\query\CastSql tags: - { name: backend_overridable } + Drupal\views\Plugin\views\query\CastSqlInterface: '@views.cast_sql' -- GitLab