protected function MigrateSqlSourceTestBase::getDatabase in Drupal 8
Same name and namespace in other branches
- 9 core/modules/migrate/tests/src/Kernel/MigrateSqlSourceTestBase.php \Drupal\Tests\migrate\Kernel\MigrateSqlSourceTestBase::getDatabase()
Builds an in-memory SQLite database from a set of source data.
Parameters
array $source_data: The source data, keyed by table name. Each table is an array containing the rows in that table.
Return value
\Drupal\Core\Database\Driver\sqlite\Connection The SQLite database connection.
1 call to MigrateSqlSourceTestBase::getDatabase()
- MigrateSqlSourceTestBase::testSource in core/
modules/ migrate/ tests/ src/ Kernel/ MigrateSqlSourceTestBase.php - Tests the source plugin against a particular data set.
File
- core/
modules/ migrate/ tests/ src/ Kernel/ MigrateSqlSourceTestBase.php, line 22
Class
- MigrateSqlSourceTestBase
- Base class for tests of Migrate source plugins that use a database.
Namespace
Drupal\Tests\migrate\KernelCode
protected function getDatabase(array $source_data) {
// Create an in-memory SQLite database. Plugins can interact with it like
// any other database, and it will cease to exist when the connection is
// closed.
$connection_options = [
'database' => ':memory:',
];
$pdo = Connection::open($connection_options);
$connection = new Connection($pdo, $connection_options);
// Create the tables and fill them with data.
foreach ($source_data as $table => $rows) {
// Use the biggest row to build the table schema.
$counts = array_map('count', $rows);
asort($counts);
end($counts);
$pilot = $rows[key($counts)];
$connection
->schema()
->createTable($table, [
// SQLite uses loose affinity typing, so it's OK for every field to
// be a text field.
'fields' => array_map(function () {
return [
'type' => 'text',
];
}, $pilot),
]);
$fields = array_keys($pilot);
$insert = $connection
->insert($table)
->fields($fields);
array_walk($rows, [
$insert,
'values',
]);
$insert
->execute();
}
return $connection;
}