0

I am in the last stages of an update from drupal 8 to 9 using composer and drush. I am at the stage of running the database update. However:

vendor/bin/drush updatedb:status

fails with

Error: Class 'Drupal\mysql\Driver\Database\mysql\Connection' not found

(full stack below)

But in my settings.php, I have the database namespace set to 'Drupal\Core\Database\Driver\mysql'. Somewhere the extra 'mysql' is getting inserted into this namespace string. Edit: If I comment out the namespace specification in settings.php, it is still resulting in the same error.

If I corrupt my settings.php to list something like 'Drupdddddal\Core\Database\Driver\mysql' I get

Class 'Drupdddddal\Core\Database\Driver\mysql\Connection' not found

Which proves that drush is parsing settings.php. Why is it messing with the namespace string I am providing, and more to the point, how do I get around this?

Stack below; some strings masked for privacy.

Error: Class 'Drupal\mysql\Driver\Database\mysql\Connection' not found in /home/XXXXXX/YYYYYYY/vendor/drupal/core/lib/Drupal/Core/Database/Database.php on line 413 #0 /home/XXXXXX/YYYYYYY/vendor/drupal/core/lib/Drupal/Core/Database/Database.\
php(189): Drupal\Core\Database\Database::openConnection('default', 'default')
#1 /home/XXXXXX/YYYYYYY/vendor/drush/drush/src/Boot/DrupalBoot8.php(194): Drupal\Core\Database\Database::getConnection()
#2 /home/XXXXXX/YYYYYYY/vendor/drush/drush/src/Boot/BootstrapManager.php(352): Drush\Boot\DrupalBoot8->bootstrapDrupalDatabaseValidate(Object(Drush\Boot\BootstrapManager))
#3 /home/XXXXXX/YYYYYYY/vendor/drush/drush/src/Boot/BootstrapManager.php(429): Drush\Boot\BootstrapManager->bootstrapValidate(4)
#4 /home/XXXXXX/YYYYYYY/vendor/drush/drush/src/Boot/BootstrapManager.php(384): Drush\Boot\BootstrapManager->bootstrapToPhaseIndex(5, Object(Consolidation\AnnotatedCommand\AnnotationData))
#5 /home/XXXXXX/YYYYYYY/vendor/drush/drush/src/Boot/BootstrapHook.php(32): Drush\Boot\BootstrapManager->bootstrapToPhase('full', Object(Consolidation\AnnotatedCommand\AnnotationData))
#6 /home/XXXXXX/YYYYYYY/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php(44): Drush\Boot\BootstrapHook->initialize(Object(Symfony\Component\Console\Input\ArgvInput), Object(Consolidation\AnnotatedCommand\AnnotationData)\
)
#7 /home/XXXXXX/YYYYYYY/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php(36): Consolidation\AnnotatedCommand\Hooks\Dispatchers\InitializeHookDispatcher->doInitializeHook(Object(Drush\Boot\BootstrapHook), Object(Symfony\\
Component\Console\Input\ArgvInput), Object(Consolidation\AnnotatedCommand\AnnotationData))
#8 /home/XXXXXX/YYYYYYY/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php(29): Consolidation\AnnotatedCommand\Hooks\Dispatchers\InitializeHookDispatcher->callInitializeHook(Object(Drush\Boot\BootstrapHook), Object(Symfon\
y\Component\Console\Input\ArgvInput), Object(Consolidation\AnnotatedCommand\AnnotationData))
#9 /home/XXXXXX/YYYYYYY/vendor/consolidation/annotated-command/src/CommandProcessor.php(145): Consolidation\AnnotatedCommand\Hooks\Dispatchers\InitializeHookDispatcher->initialize(Object(Symfony\Component\Console\Input\ArgvInput), Object(Consolidation\Annotate\
dCommand\AnnotationData))
#10 /home/XXXXXX/YYYYYYY/vendor/consolidation/annotated-command/src/AnnotatedCommand.php(335): Consolidation\AnnotatedCommand\CommandProcessor->initializeHook(Object(Symfony\Component\Console\Input\ArgvInput), Array, Object(Consolidation\AnnotatedCommand\Annot\
ationData))
#11 /home/XXXXXX/YYYYYYY/vendor/symfony/console/Command/Command.php(221): Consolidation\AnnotatedCommand\AnnotatedCommand->initialize(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#12 /home/XXXXXX/YYYYYYY/vendor/symfony/console/Application.php(1027): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#13 /home/XXXXXX/YYYYYYY/vendor/symfony/console/Application.php(273): Symfony\Component\Console\Application->doRunCommand(Object(Consolidation\AnnotatedCommand\AnnotatedCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Conso\
le\Output\ConsoleOutput))
#14 /home/XXXXXX/YYYYYYY/vendor/symfony/console/Application.php(149): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#15 /home/XXXXXX/YYYYYYY/vendor/drush/drush/src/Runtime/Runtime.php(124): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#16 /home/XXXXXX/YYYYYYY/vendor/drush/drush/src/Runtime/Runtime.php(51): Drush\Runtime\Runtime->doRun(Array, Object(Symfony\Component\Console\Output\ConsoleOutput))
#17 /home/XXXXXX/YYYYYYY/vendor/drush/drush/drush.php(72): Drush\Runtime\Runtime->run(Array)
#18 /home/XXXXXX/YYYYYYY/vendor/drush/drush/drush(3): require('/home/XXXXXX/...')
#19 /home/XXXXXX/YYYYYYY/vendor/bin/drush(115): include('/home/XXXXXX/...')
#20 {main}
Paul P
  • 1
  • 3
  • https://www.drupal.org/project/drupal/issues/3064787. Set it to `Drupal\\Core\\Database\\Driver\\mysql`. – leymannx Jul 18 '22 at 08:01
  • Is your database namespace string double-quoted ? Normally you only need to escape the namespace separator in double-quoted strings, but single-quoted strings are generally preferred. Also, if the driver's namespace is not in Composer's autoloader, you need to set the "autoload" property to the PSR-4 base directory of the driver's namespace. – EricLavault Jul 18 '22 at 11:00
  • @leymannx yes it is already set to that value, it is apparently ignored or overwritten. – Paul P Jul 18 '22 at 16:27
  • @EricLavault it is single-quoted. As described in the issue, if I put a nonsense value it causes an error. If I put in the correct value, it gets replaced by Drupal\mysql\Driver\Database\mysql\Connection – Paul P Jul 18 '22 at 16:27
  • Did you try the double backslashes? Maybe also try composer install again. Maybe some files corrupted. – leymannx Jul 18 '22 at 16:46
  • @leymannx sorry I wasn't clear, but my settings.php has double backslashes and single quotes for the database namespace string. I was hoping someone might have experienced a similar problem in the upgrade from 8 to 9, it's not as trivial as fixing the format of my settings.php.Somewhere something sneaky is happening and a different value is being substituted. – Paul P Jul 19 '22 at 17:31

2 Answers2

0

I was unable to find a cause and I can only imagine that some conflicting files must be present. I was able to do the upgrade by hand by copying config and site-specific files to a fresh install of drupal9, and drush updatedb worked as expected.

Paul P
  • 1
  • 3
0

9.4.5 fixes an issue that sounds suspiciously related to what I'm reporting https://www.drupal.org/project/drupal/releases/9.4.5

Paul P
  • 1
  • 3