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;
}