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 8269957..13cc9eb 100644 --- a/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php +++ b/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php @@ -34,6 +34,11 @@ class Sql extends PluginBase implements MigrateIdMapInterface, ContainerFactoryP const SOURCE_IDS_HASH = 'source_ids_hash'; /** + * Source id suffix to ensure source id names are not SQL reserved words. + */ + const SOURCE_ID_SUFFIX = '_x'; + + /** * An event dispatcher instance to use for map events. * * @var \Symfony\Component\EventDispatcher\EventDispatcherInterface @@ -461,9 +466,15 @@ protected function getFieldSchema(array $id_definition) { * {@inheritdoc} */ public function getRowBySource(array $source_id_values) { - $query = $this->getDatabase()->select($this->mapTableName(), 'map') - ->fields('map'); + $query = $this->getDatabase()->select($this->mapTableName(), 'map'); $query->condition(static::SOURCE_IDS_HASH, $this->getSourceIDsHash($source_id_values)); + foreach ($this->sourceIdFields() as $field_name => $source_id) { + $query->addField('map', $source_id, $field_name . static::SOURCE_ID_SUFFIX); + $query->condition("map.$source_id", $source_id_values[$field_name]); + } + foreach ($this->destinationIdFields() as $field_name => $destination_id) { + $query->addField('map', $destination_id, $field_name . static::SOURCE_ID_SUFFIX); + } $result = $query->execute(); return $result->fetchAssoc(); } @@ -472,10 +483,13 @@ public function getRowBySource(array $source_id_values) { * {@inheritdoc} */ public function getRowByDestination(array $destination_id_values) { - $query = $this->getDatabase()->select($this->mapTableName(), 'map') - ->fields('map'); + $query = $this->getDatabase()->select($this->mapTableName(), 'map'); + foreach ($this->sourceIdFields() as $field_name => $source_id) { + $query->addField('map', $source_id, $field_name); + } foreach ($this->destinationIdFields() as $field_name => $destination_id) { - $query->condition("map.$destination_id", $destination_id_values[$field_name], '='); + $query->addField('map', $destination_id, $field_name); + $query->condition("map.$destination_id", $destination_id_values[$field_name]); } $result = $query->execute(); return $result->fetchAssoc();