Skip to content
Snippets Groups Projects
Unverified Commit d67a1b25 authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3256687 by mondrake, murilohp, daffie, alexpott, catch: Deprecate db_installer_object()

parent a9f20f76
No related branches found
No related tags found
38 merge requests!7471uncessary 5 files are moved from media-library folder to misc folder,!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!4868Issue #1428520: Improve menu parent link selection,!4289Issue #1344552 by marcingy, Niklas Fiekas, Ravi.J, aleevas, Eduardo Morales...,!4114Issue #2707291: Disable body-level scrolling when a dialog is open as a modal,!3630Issue #2815301 by Chi, DanielVeza, kostyashupenko, smustgrave: Allow to create...,!3291Issue #3336463: Rewrite rules for gzipped CSS and JavaScript aggregates never match,!3143Issue #3313342: [PHP 8.1] Deprecated function: strpos(): Passing null to parameter #1 LayoutBuilderUiCacheContext.php on line 28,!3102Issue #3164428 by DonAtt, longwave, sahil.goyal, Anchal_gupta, alexpott: Use...,!2853#3274419 Makes BaseFieldOverride inherit the internal property from the base field.,!2719Issue #3110137: Remove Classy from core.,!2437Issue #3238257 by hooroomoo, Wim Leers: Fragment link pointing to <textarea>...,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2074Issue #2707689: NodeForm::actions() checks for delete access on new entities,!2062Issue #3246454: Add weekly granularity to views date sort,!1974Issue #3036862 demonstration,!1591Issue #3199697: Add JSON:API Translation experimental module,!1484Exposed filters get values from URL when Ajax is on,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1254Issue #3238915: Refactor (if feasible) uses of the jQuery ready function to use VanillaJS,!1162Issue #3100350: Unable to save '/' root path alias,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!957Added throwing of InvalidPluginDefinitionException from getDefinition().,!925Issue #2339235: Remove taxonomy hard dependency on node module,!877Issue #2708101: Default value for link text is not saved,!873Issue #2875228: Site install not using batch API service,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links,!844Resolve #3036010 "Updaters",!712Issue #2909128: Autocomplete intermittent on Chrome Android,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.,!30Issue #3182188: Updates composer usage to point at ./vendor/bin/composer
This commit is part of merge request !1254. Comments created here will be created in the context of that merge request.
...@@ -1209,8 +1209,8 @@ function install_database_errors($database, $settings_file) { ...@@ -1209,8 +1209,8 @@ function install_database_errors($database, $settings_file) {
// Run tasks associated with the database type. Any errors are caught in the // Run tasks associated with the database type. Any errors are caught in the
// calling function. // calling function.
Database::addConnectionInfo('default', 'default', $database); Database::addConnectionInfo('default', 'default', $database);
$installer_class = $database['namespace'] . "\\Install\\Tasks";
$errors = db_installer_object($driver, $database['namespace'] ?? NULL)->runTasks(); $errors = (new $installer_class())->runTasks();
} }
return $errors; return $errors;
} }
......
...@@ -202,8 +202,7 @@ function drupal_get_database_types() { ...@@ -202,8 +202,7 @@ function drupal_get_database_types() {
if (file_exists($tasks_file)) { if (file_exists($tasks_file)) {
$namespace = 'Drupal\\' . $module->getName() . '\\Driver\\Database\\' . $driver_file->filename; $namespace = 'Drupal\\' . $module->getName() . '\\Driver\\Database\\' . $driver_file->filename;
// The namespace needs to be added for db_installer_object() to find // Add the driver with its own classes' namespace.
// it.
$drivers[$driver_file->filename] = $namespace; $drivers[$driver_file->filename] = $namespace;
// The directory needs to be added to the autoloader, because this is // The directory needs to be added to the autoloader, because this is
...@@ -217,7 +216,8 @@ function drupal_get_database_types() { ...@@ -217,7 +216,8 @@ function drupal_get_database_types() {
} }
foreach ($drivers as $driver => $namespace) { foreach ($drivers as $driver => $namespace) {
$installer = db_installer_object($driver, $namespace); $installer_class = $namespace . "\\Install\\Tasks";
$installer = new $installer_class();
if ($installer->installable()) { if ($installer->installable()) {
$databases[$driver] = $installer; $databases[$driver] = $installer;
} }
...@@ -1167,10 +1167,16 @@ function install_profile_info($profile, $langcode = 'en') { ...@@ -1167,10 +1167,16 @@ function install_profile_info($profile, $langcode = 'en') {
* @return \Drupal\Core\Database\Install\Tasks * @return \Drupal\Core\Database\Install\Tasks
* A class defining the requirements and tasks for installing the database. * A class defining the requirements and tasks for installing the database.
* *
* @deprecated in drupal:10.0.0 and is removed from drupal:11.0.0. There is no
* replacement.
*
* @see https://www.drupal.org/node/3256641
* @see drupal_get_database_types() * @see drupal_get_database_types()
* @see \Drupal\Core\Site\Settings::initialize() * @see \Drupal\Core\Site\Settings::initialize()
*/ */
function db_installer_object($driver, $namespace = NULL) { function db_installer_object($driver, $namespace = NULL) {
@trigger_error('db_installer_object() is deprecated in drupal:10.0.0 and is removed from drupal:11.0.0. There is no replacement. See https://www.drupal.org/node/3256641', E_USER_DEPRECATED);
// We cannot use Database::getConnection->getDriverClass() here, because // We cannot use Database::getConnection->getDriverClass() here, because
// the connection object is not yet functional. // the connection object is not yet functional.
if ($namespace) { if ($namespace) {
......
...@@ -30,6 +30,9 @@ public function testDependenciesResolution() { ...@@ -30,6 +30,9 @@ public function testDependenciesResolution() {
assert($profile_list instanceof ProfileExtensionList); assert($profile_list instanceof ProfileExtensionList);
$profile_list->setPathname('testing_missing_dependencies', 'core/profiles/testing_missing_dependencies/testing_missing_dependencies.info.yml'); $profile_list->setPathname('testing_missing_dependencies', 'core/profiles/testing_missing_dependencies/testing_missing_dependencies.info.yml');
// Requires install.inc to be able to use drupal_verify_profile.
require_once dirname(__FILE__, 7) . '/includes/install.inc';
$info = drupal_verify_profile([ $info = drupal_verify_profile([
'parameters' => ['profile' => 'testing_missing_dependencies'], 'parameters' => ['profile' => 'testing_missing_dependencies'],
'profile_info' => install_profile_info('testing_missing_dependencies'), 'profile_info' => install_profile_info('testing_missing_dependencies'),
......
...@@ -286,11 +286,9 @@ protected function runDbTasks() { ...@@ -286,11 +286,9 @@ protected function runDbTasks() {
->addArgument(new Reference('language.default')); ->addArgument(new Reference('language.default'));
\Drupal::setContainer($container); \Drupal::setContainer($container);
require_once __DIR__ . '/../../../../includes/install.inc'; // Run database tasks and check for errors.
$connection_info = Database::getConnectionInfo(); $installer_class = Database::getConnectionInfo()['default']['namespace'] . "\\Install\\Tasks";
$driver = $connection_info['default']['driver']; $errors = (new $installer_class())->runTasks();
$namespace = $connection_info['default']['namespace'] ?? NULL;
$errors = db_installer_object($driver, $namespace)->runTasks();
if (!empty($errors)) { if (!empty($errors)) {
$this->fail('Failed to run installer database tasks: ' . implode(', ', $errors)); $this->fail('Failed to run installer database tasks: ' . implode(', ', $errors));
} }
......
...@@ -378,9 +378,9 @@ private function bootKernel() { ...@@ -378,9 +378,9 @@ private function bootKernel() {
$this->container = $kernel->getContainer(); $this->container = $kernel->getContainer();
// Ensure database tasks have been run. // Run database tasks and check for errors.
require_once __DIR__ . '/../../../includes/install.inc'; $installer_class = $namespace . "\\Install\\Tasks";
$errors = db_installer_object($driver, $namespace)->runTasks(); $errors = (new $installer_class())->runTasks();
if (!empty($errors)) { if (!empty($errors)) {
$this->fail('Failed to run installer database tasks: ' . implode(', ', $errors)); $this->fail('Failed to run installer database tasks: ' . implode(', ', $errors));
} }
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
* @preserveGlobalState disabled * @preserveGlobalState disabled
* *
* @group Database * @group Database
* @group legacy
*/ */
class InstallerObjectTest extends UnitTestCase { class InstallerObjectTest extends UnitTestCase {
...@@ -42,6 +43,7 @@ protected function setUp(): void { ...@@ -42,6 +43,7 @@ protected function setUp(): void {
* @dataProvider providerDbInstallerObject * @dataProvider providerDbInstallerObject
*/ */
public function testDbInstallerObject($driver, $namespace, $expected_class_name) { public function testDbInstallerObject($driver, $namespace, $expected_class_name) {
$this->expectDeprecation('db_installer_object() is deprecated in drupal:10.0.0 and is removed from drupal:11.0.0. There is no replacement. See https://www.drupal.org/node/3256641');
$object = db_installer_object($driver, $namespace); $object = db_installer_object($driver, $namespace);
$this->assertEquals(get_class($object), $expected_class_name); $this->assertEquals(get_class($object), $expected_class_name);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment