diff -u b/core/modules/migrate/src/Plugin/MigrateIdMapInterface.php b/core/modules/migrate/src/Plugin/MigrateIdMapInterface.php --- b/core/modules/migrate/src/Plugin/MigrateIdMapInterface.php +++ b/core/modules/migrate/src/Plugin/MigrateIdMapInterface.php @@ -69,13 +69,15 @@ * Retrieves an iterator over messages relate to source records. * * @param array $source_id_values - * The source identifier values of a specific record to retrieve. If empty, - * all messages are retrieved. + * (optional) The source identifier values of a specific record to retrieve. + * If empty, all messages are retrieved. + * @param int $level + * (optional) Message severity. If NULL, retrieve messages of all severities. * - * @return object[] - * Retrieves a list of message rows. + * @return \Iterator + * Retrieves an iterator over the message rows. */ - public function getMessageIterator(array $source_id_values = []); + public function getMessageIterator(array $source_id_values = [], $level = NULL); /** * Prepares to run a full update. diff -u b/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php b/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php --- b/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php +++ b/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php @@ -562,13 +562,16 @@ /** * {@inheritdoc} */ - public function getMessageIterator(array $source_id_values = []) { + public function getMessageIterator(array $source_id_values = [], $level = NULL) { $query = $this->getDatabase()->select($this->messageTableName(), 'msg') ->fields('msg'); $count = 1; foreach ($source_id_values as $id_value) { $query->condition('sourceid' . $count++, $id_value); } + if ($level) { + $query->condition('level', $level); + } return $query->execute(); } diff -u b/core/modules/migrate/tests/src/Unit/MigrateSqlIdMapTest.php b/core/modules/migrate/tests/src/Unit/MigrateSqlIdMapTest.php --- b/core/modules/migrate/tests/src/Unit/MigrateSqlIdMapTest.php +++ b/core/modules/migrate/tests/src/Unit/MigrateSqlIdMapTest.php @@ -306,6 +306,15 @@ $this->assertEquals(MigrationInterface::MESSAGE_ERROR, $message_row->level); } $this->assertEquals($count, 1); + + // Retrieve messages with a specific level. + $messages = $id_map->getMessageIterator([], MigrationInterface::MESSAGE_WARNING); + $count = 0; + foreach ($messages as $key => $message_row) { + $count = 1; + $this->assertEquals(MigrationInterface::MESSAGE_WARNING, $message_row->level); + } + $this->assertEquals($count, 1); } /**