From 72d53b30d110cd2dd2bf3fd8b0f32835b7364339 Mon Sep 17 00:00:00 2001 From: Nathaniel Catchpole Date: Tue, 1 Mar 2016 09:53:16 +0900 Subject: [PATCH] Issue #2675000 by alexpott: SQLBase::mapjoinable does not support SQLite part 2 --- .../src/Plugin/migrate/source/SqlBase.php | 9 +++++++ .../migrate/tests/src/Unit/SqlBaseTest.php | 25 ++++++++++++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php b/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php index dcef9b3e3f2f..93569f4451b4 100644 --- a/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php +++ b/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php @@ -263,6 +263,15 @@ abstract class SqlBase extends SourcePluginBase implements ContainerFactoryPlugi } $id_map_database_options = $id_map->getDatabase()->getConnectionOptions(); $source_database_options = $this->getDatabase()->getConnectionOptions(); + + // Special handling for sqlite which deals with files. + if ($id_map_database_options['driver'] === 'sqlite' && + $source_database_options['driver'] === 'sqlite' && + $id_map_database_options['database'] != $source_database_options['database'] + ) { + return FALSE; + } + foreach (array('username', 'password', 'host', 'port', 'namespace', 'driver') as $key) { if (isset($source_database_options[$key])) { if ($id_map_database_options[$key] != $source_database_options[$key]) { diff --git a/core/modules/migrate/tests/src/Unit/SqlBaseTest.php b/core/modules/migrate/tests/src/Unit/SqlBaseTest.php index 829573cfdc4f..936d00f249ea 100644 --- a/core/modules/migrate/tests/src/Unit/SqlBaseTest.php +++ b/core/modules/migrate/tests/src/Unit/SqlBaseTest.php @@ -107,16 +107,33 @@ class SqlBaseTest extends UnitTestCase { FALSE, TRUE, TRUE, - ['username' => 'different_from_map', 'password' => 'different_from_map'], - ['username' => 'different_from_source', 'password' => 'different_from_source'], + ['driver' => 'mysql', 'username' => 'different_from_map', 'password' => 'different_from_map'], + ['driver' => 'mysql', 'username' => 'different_from_source', 'password' => 'different_from_source'], ], // Returns true because source and id map connection options are the same. [ TRUE, TRUE, TRUE, - ['username' => 'same_value', 'password' => 'same_value'], - ['username' => 'same_value', 'password' => 'same_value'], + ['driver' => 'pgsql', 'username' => 'same_value', 'password' => 'same_value'], + ['driver' => 'pgsql', 'username' => 'same_value', 'password' => 'same_value'], + ], + // Returns false because driver is sqlite and the databases are not the + // same. + [ + FALSE, + TRUE, + TRUE, + ['driver' => 'sqlite', 'database' => '1.sqlite', 'username' => '', 'password' => ''], + ['driver' => 'sqlite', 'database' => '2.sqlite', 'username' => '', 'password' => ''], + ], + // Returns false because driver is not the same. + [ + FALSE, + TRUE, + TRUE, + ['driver' => 'pgsql', 'username' => 'same_value', 'password' => 'same_value'], + ['driver' => 'mysql', 'username' => 'same_value', 'password' => 'same_value'], ], ]; }