From 6f8bc7b1cf0711b2f9261fa3c3ff3dcaf5dacdae Mon Sep 17 00:00:00 2001 From: Alex Pott Date: Fri, 26 Jan 2018 16:06:26 +0000 Subject: [PATCH] Revert "Issue #2817833 by Jo Fitzgerald, ckaotik, svendecabooter: Delay sql map table creation" This reverts commit dc222737681fb341e34de050cc07c4e378659f67. --- .../migrate/src/Plugin/migrate/id_map/Sql.php | 59 +++++++++---------- .../tests/src/Unit/MigrateSqlIdMapTest.php | 19 ------ 2 files changed, 27 insertions(+), 51 deletions(-) diff --git a/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php b/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php index 3b6aac5840a..8bc17f19f50 100644 --- a/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php +++ b/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php @@ -3,7 +3,6 @@ namespace Drupal\migrate\Plugin\migrate\id_map; use Drupal\Component\Utility\Unicode; -use Drupal\Core\Database\DatabaseException; use Drupal\Core\Field\BaseFieldDefinition; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\Core\Plugin\PluginBase; @@ -162,18 +161,6 @@ class Sql extends PluginBase implements MigrateIdMapInterface, ContainerFactoryP $this->migration = $migration; $this->eventDispatcher = $event_dispatcher; $this->message = new MigrateMessage(); - - if (!isset($this->database)) { - $this->database = \Drupal::database(); - } - - // Default generated table names, limited to 63 characters. - $machine_name = str_replace(':', '__', $this->migration->id()); - $prefix_length = strlen($this->database->tablePrefix()); - $this->mapTableName = 'migrate_map_' . Unicode::strtolower($machine_name); - $this->mapTableName = Unicode::substr($this->mapTableName, 0, 63 - $prefix_length); - $this->messageTableName = 'migrate_message_' . Unicode::strtolower($machine_name); - $this->messageTableName = Unicode::substr($this->messageTableName, 0, 63 - $prefix_length); } /** @@ -259,6 +246,7 @@ class Sql extends PluginBase implements MigrateIdMapInterface, ContainerFactoryP * The map table name. */ public function mapTableName() { + $this->init(); return $this->mapTableName; } @@ -269,6 +257,7 @@ class Sql extends PluginBase implements MigrateIdMapInterface, ContainerFactoryP * The message table name. */ public function messageTableName() { + $this->init(); return $this->messageTableName; } @@ -289,6 +278,9 @@ class Sql extends PluginBase implements MigrateIdMapInterface, ContainerFactoryP * The database connection object. */ public function getDatabase() { + if (!isset($this->database)) { + $this->database = \Drupal::database(); + } $this->init(); return $this->database; } @@ -299,6 +291,13 @@ class Sql extends PluginBase implements MigrateIdMapInterface, ContainerFactoryP protected function init() { if (!$this->initialized) { $this->initialized = TRUE; + // Default generated table names, limited to 63 characters. + $machine_name = str_replace(':', '__', $this->migration->id()); + $prefix_length = strlen($this->getDatabase()->tablePrefix()); + $this->mapTableName = 'migrate_map_' . Unicode::strtolower($machine_name); + $this->mapTableName = Unicode::substr($this->mapTableName, 0, 63 - $prefix_length); + $this->messageTableName = 'migrate_message_' . Unicode::strtolower($machine_name); + $this->messageTableName = Unicode::substr($this->messageTableName, 0, 63 - $prefix_length); $this->ensureTables(); } } @@ -697,17 +696,21 @@ class Sql extends PluginBase implements MigrateIdMapInterface, ContainerFactoryP * {@inheritdoc} */ public function processedCount() { - return $this->countHelper(NULL, $this->mapTableName()); + return $this->getDatabase()->select($this->mapTableName()) + ->countQuery() + ->execute() + ->fetchField(); } /** * {@inheritdoc} */ public function importedCount() { - return $this->countHelper([ - MigrateIdMapInterface::STATUS_IMPORTED, - MigrateIdMapInterface::STATUS_NEEDS_UPDATE, - ]); + return $this->getDatabase()->select($this->mapTableName()) + ->condition('source_row_status', [MigrateIdMapInterface::STATUS_IMPORTED, MigrateIdMapInterface::STATUS_NEEDS_UPDATE], 'IN') + ->countQuery() + ->execute() + ->fetchField(); } /** @@ -734,28 +737,20 @@ class Sql extends PluginBase implements MigrateIdMapInterface, ContainerFactoryP /** * Counts records in a table. * - * @param int|array $status - * (optional) Status code(s) to filter the source_row_status column. + * @param int $status + * An integer for the source_row_status column. * @param string $table * (optional) The table to work. Defaults to NULL. * * @return int * The number of records. */ - protected function countHelper($status = NULL, $table = NULL) { - // Use database directly to avoid creating tables. - $query = $this->database->select($table ?: $this->mapTableName()); + protected function countHelper($status, $table = NULL) { + $query = $this->getDatabase()->select($table ?: $this->mapTableName()); if (isset($status)) { - $query->condition('source_row_status', $status, is_array($status) ? 'IN' : '='); + $query->condition('source_row_status', $status); } - try { - $count = $query->countQuery()->execute()->fetchField(); - } - catch (DatabaseException $e) { - // The table does not exist, therefore there are no records. - $count = 0; - } - return $count; + return $query->countQuery()->execute()->fetchField(); } /** diff --git a/core/modules/migrate/tests/src/Unit/MigrateSqlIdMapTest.php b/core/modules/migrate/tests/src/Unit/MigrateSqlIdMapTest.php index 63649c0cc33..2ad2b3dc518 100644 --- a/core/modules/migrate/tests/src/Unit/MigrateSqlIdMapTest.php +++ b/core/modules/migrate/tests/src/Unit/MigrateSqlIdMapTest.php @@ -1010,23 +1010,4 @@ class MigrateSqlIdMapTest extends MigrateTestCase { return $contents; } - public function testMapTableCreation() { - $id_map = $this->getIdMap(); - - $map_table_name = $id_map->mapTableName(); - $message_table_name = $id_map->messageTableName(); - $this->assertEquals('migrate_map_sql_idmap_test', $map_table_name); - $this->assertEquals('migrate_message_sql_idmap_test', $message_table_name); - - // Check that tables don't exist. - $this->assertFalse($this->database->schema()->tableExists($map_table_name)); - $this->assertFalse($this->database->schema()->tableExists($message_table_name)); - - $id_map->getDatabase(); - - // Check that tables do exist. - $this->assertTrue($this->database->schema()->tableExists($map_table_name)); - $this->assertTrue($this->database->schema()->tableExists($message_table_name)); - } - }