diff --git a/composer.json b/composer.json
index 7e647d5..c023421 100644
--- a/composer.json
+++ b/composer.json
@@ -31,8 +31,7 @@
   "autoload": {
     "psr-4": {
       "Drupal\\Core\\": "core/lib/Drupal/Core",
-      "Drupal\\Component\\": "core/lib/Drupal/Component",
-      "Drupal\\Driver\\": "drivers/lib/Drupal/Driver"
+      "Drupal\\Component\\": "core/lib/Drupal/Component"
     },
     "files": [
       "core/lib/Drupal.php"
diff --git a/core/drivers/fake/fake.info.yml b/core/drivers/fake/fake.info.yml
new file mode 100644
index 0000000..0c4fbd6
--- /dev/null
+++ b/core/drivers/fake/fake.info.yml
@@ -0,0 +1,5 @@
+# @todo Rename this driver from 'fake' to e.g. 'test_db_driver'.
+#   (\Drupal\fake\* lacks context.)
+type: driver
+core: 8.x
+name: Fake database driver for use in unit tests
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/ConditionResolver.php b/core/drivers/fake/src/ConditionResolver.php
similarity index 92%
rename from core/lib/Drupal/Core/Database/Driver/fake/ConditionResolver.php
rename to core/drivers/fake/src/ConditionResolver.php
index ea69504..016d42d 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/ConditionResolver.php
+++ b/core/drivers/fake/src/ConditionResolver.php
@@ -2,11 +2,11 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\ConditionResolver.
+ * Contains Drupal\fake\ConditionResolver.
  */
 
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Core\Database\Query\Condition;
 
@@ -15,7 +15,7 @@ class ConditionResolver {
   /**
    * Match a row against a group of conditions.
    *
-   * @param \Drupal\Core\Database\Driver\fake\DatabaseRowInterface $row
+   * @param \Drupal\fake\DatabaseRowInterface $row
    *   The database row object.
    * @param \Drupal\Core\Database\Query\Condition $condition_group
    *   The condition group object.
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/DatabaseRow.php b/core/drivers/fake/src/DatabaseRow.php
similarity index 77%
rename from core/lib/Drupal/Core/Database/Driver/fake/DatabaseRow.php
rename to core/drivers/fake/src/DatabaseRow.php
index ca98582..0bf7bfc 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/DatabaseRow.php
+++ b/core/drivers/fake/src/DatabaseRow.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\DatabaseRow.
+ * Contains Drupal\fake\DatabaseRow.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 class DatabaseRow implements DatabaseRowInterface {
 
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/DatabaseRowInterface.php b/core/drivers/fake/src/DatabaseRowInterface.php
similarity index 71%
rename from core/lib/Drupal/Core/Database/Driver/fake/DatabaseRowInterface.php
rename to core/drivers/fake/src/DatabaseRowInterface.php
index 9aa3965..444a578 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/DatabaseRowInterface.php
+++ b/core/drivers/fake/src/DatabaseRowInterface.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\DatabaseRowInterface.
+ * Contains Drupal\fake\DatabaseRowInterface.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 interface DatabaseRowInterface {
 
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/DatabaseRowSelect.php b/core/drivers/fake/src/DatabaseRowSelect.php
similarity index 89%
rename from core/lib/Drupal/Core/Database/Driver/fake/DatabaseRowSelect.php
rename to core/drivers/fake/src/DatabaseRowSelect.php
index 41bbf55..c7479c6 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/DatabaseRowSelect.php
+++ b/core/drivers/fake/src/DatabaseRowSelect.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\DatabaseRowSelect.
+ * Contains Drupal\fake\DatabaseRowSelect.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 class DatabaseRowSelect extends DatabaseRow {
 
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeConnection.php b/core/drivers/fake/src/FakeConnection.php
similarity index 96%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeConnection.php
rename to core/drivers/fake/src/FakeConnection.php
index 5738ab3..c97f67e 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeConnection.php
+++ b/core/drivers/fake/src/FakeConnection.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeConnection.
+ * Contains Drupal\fake\FakeConnection.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Core\Database\Connection;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeDatabaseSchema.php b/core/drivers/fake/src/FakeDatabaseSchema.php
similarity index 98%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeDatabaseSchema.php
rename to core/drivers/fake/src/FakeDatabaseSchema.php
index 20e9da6..c287f04 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeDatabaseSchema.php
+++ b/core/drivers/fake/src/FakeDatabaseSchema.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeDatabaseSchema.
+ * Contains Drupal\fake\FakeDatabaseSchema.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Core\Database\Schema;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeInsert.php b/core/drivers/fake/src/FakeInsert.php
similarity index 93%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeInsert.php
rename to core/drivers/fake/src/FakeInsert.php
index 9d7012b..9756983 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeInsert.php
+++ b/core/drivers/fake/src/FakeInsert.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeInsert.
+ * Contains Drupal\fake\FakeInsert.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Core\Database\Query\Insert;
 use Drupal\Core\Database\Query\SelectInterface;
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeMerge.php b/core/drivers/fake/src/FakeMerge.php
similarity index 94%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeMerge.php
rename to core/drivers/fake/src/FakeMerge.php
index dd3117e..550243c 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeMerge.php
+++ b/core/drivers/fake/src/FakeMerge.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeMerge.
+ * Contains Drupal\fake\FakeMerge.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Core\Database\Query\Condition;
 use Drupal\Core\Database\Query\InvalidMergeQueryException;
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeSelect.php b/core/drivers/fake/src/FakeSelect.php
similarity index 98%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeSelect.php
rename to core/drivers/fake/src/FakeSelect.php
index 629bf1a..c6bd19b 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeSelect.php
+++ b/core/drivers/fake/src/FakeSelect.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeSelect.
+ * Contains Drupal\fake\FakeSelect.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Component\Utility\String;
 use Drupal\Core\Database\Connection;
@@ -302,7 +302,7 @@ protected function sortCallback($a, $b) {
    * @param array $rows
    *   An array of rows excluding non-matching rows.
    *
-   * @return \Drupal\Core\Database\Driver\fake\ConditionResolver
+   * @return \Drupal\fake\ConditionResolver
    *   The condition resolver object.
    */
   protected function resolveConditions(Condition $condition_group, array &$rows) {
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeStatement.php b/core/drivers/fake/src/FakeStatement.php
similarity index 95%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeStatement.php
rename to core/drivers/fake/src/FakeStatement.php
index 4f00eeb..a8aafea 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeStatement.php
+++ b/core/drivers/fake/src/FakeStatement.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeStatement.
+ * Contains Drupal\fake\FakeStatement.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Core\Database\RowCountException;
 use Drupal\Core\Database\StatementInterface;
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeTruncate.php b/core/drivers/fake/src/FakeTruncate.php
similarity index 86%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeTruncate.php
rename to core/drivers/fake/src/FakeTruncate.php
index d0be873..358e638 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeTruncate.php
+++ b/core/drivers/fake/src/FakeTruncate.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeTruncate.
+ * Contains Drupal\fake\FakeTruncate.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 /**
  * Defines FakeTruncate for use in database tests.
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeUpdate.php b/core/drivers/fake/src/FakeUpdate.php
similarity index 95%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeUpdate.php
rename to core/drivers/fake/src/FakeUpdate.php
index 0505c22..c817309 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeUpdate.php
+++ b/core/drivers/fake/src/FakeUpdate.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeUpdate.
+ * Contains Drupal\fake\FakeUpdate.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Core\Database\Query\Condition;
 use Drupal\Core\Database\Query\SelectInterface;
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/Install/Tasks.php b/core/drivers/fake/src/Install/Tasks.php
similarity index 72%
rename from core/lib/Drupal/Core/Database/Driver/fake/Install/Tasks.php
rename to core/drivers/fake/src/Install/Tasks.php
index 4ac7487..709a205 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/Install/Tasks.php
+++ b/core/drivers/fake/src/Install/Tasks.php
@@ -2,15 +2,12 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\fake\Install\Tasks
+ * Definition of Drupal\fake\Install\Tasks
  */
 
-namespace Drupal\Core\Database\Driver\fake\Install;
+namespace Drupal\fake\Install;
 
 use Drupal\Core\Database\Install\Tasks as InstallTasks;
-use Drupal\Core\Database\Database;
-use Drupal\Core\Database\Driver\mysql\Connection;
-use Drupal\Core\Database\DatabaseNotFoundException;
 
 /**
  * Usually used to specify installation tasks but here we're only interested
diff --git a/core/drivers/mysql/mysql.info.yml b/core/drivers/mysql/mysql.info.yml
new file mode 100644
index 0000000..b6939d9
--- /dev/null
+++ b/core/drivers/mysql/mysql.info.yml
@@ -0,0 +1,3 @@
+type: driver
+core: 8.x
+name: MySQL, MariaDB, Percona Server, or equivalent
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php b/core/drivers/mysql/src/Connection.php
similarity index 98%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Connection.php
rename to core/drivers/mysql/src/Connection.php
index 66cd34f..4c7d07f 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php
+++ b/core/drivers/mysql/src/Connection.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Connection
+ * Definition of Drupal\mysql\Connection
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\DatabaseExceptionWrapper;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Delete.php b/core/drivers/mysql/src/Delete.php
similarity index 53%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Delete.php
rename to core/drivers/mysql/src/Delete.php
index de0db11..61694b0 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Delete.php
+++ b/core/drivers/mysql/src/Delete.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Delete
+ * Definition of Drupal\mysql\Delete
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\Query\Delete as QueryDelete;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Insert.php b/core/drivers/mysql/src/Insert.php
similarity index 96%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Insert.php
rename to core/drivers/mysql/src/Insert.php
index c41fdf3..64e01bb 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Insert.php
+++ b/core/drivers/mysql/src/Insert.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Insert
+ * Definition of Drupal\mysql\Insert
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\Query\Insert as QueryInsert;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Install/Tasks.php b/core/drivers/mysql/src/Install/Tasks.php
similarity index 94%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Install/Tasks.php
rename to core/drivers/mysql/src/Install/Tasks.php
index 32c217b..ece391f 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Install/Tasks.php
+++ b/core/drivers/mysql/src/Install/Tasks.php
@@ -2,14 +2,14 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Install\Tasks
+ * Definition of Drupal\mysql\Install\Tasks
  */
 
-namespace Drupal\Core\Database\Driver\mysql\Install;
+namespace Drupal\mysql\Install;
 
 use Drupal\Core\Database\Install\Tasks as InstallTasks;
 use Drupal\Core\Database\Database;
-use Drupal\Core\Database\Driver\mysql\Connection;
+use Drupal\mysql\Connection;
 use Drupal\Core\Database\DatabaseNotFoundException;
 
 /**
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Merge.php b/core/drivers/mysql/src/Merge.php
similarity index 52%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Merge.php
rename to core/drivers/mysql/src/Merge.php
index c3a2ae0..9b24307 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Merge.php
+++ b/core/drivers/mysql/src/Merge.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Merge
+ * Definition of Drupal\mysql\Merge
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\Query\Merge as QueryMerge;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php b/core/drivers/mysql/src/Schema.php
similarity index 99%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
rename to core/drivers/mysql/src/Schema.php
index e033bd5..5e35b83 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
+++ b/core/drivers/mysql/src/Schema.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Schema
+ * Definition of Drupal\mysql\Schema
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\mysql;
 
 use Drupal\Component\Utility\String;
 use Drupal\Core\Database\Database;
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Select.php b/core/drivers/mysql/src/Select.php
similarity index 53%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Select.php
rename to core/drivers/mysql/src/Select.php
index aecae55..3a462ca 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Select.php
+++ b/core/drivers/mysql/src/Select.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Select
+ * Definition of Drupal\mysql\Select
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\Query\Select as QuerySelect;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Transaction.php b/core/drivers/mysql/src/Transaction.php
similarity index 56%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Transaction.php
rename to core/drivers/mysql/src/Transaction.php
index 8c3f701..9d2d87e 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Transaction.php
+++ b/core/drivers/mysql/src/Transaction.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Transaction
+ * Definition of Drupal\mysql\Transaction
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\Transaction as DatabaseTransaction;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Truncate.php b/core/drivers/mysql/src/Truncate.php
similarity index 54%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Truncate.php
rename to core/drivers/mysql/src/Truncate.php
index e2fa83d..e3bf29f 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Truncate.php
+++ b/core/drivers/mysql/src/Truncate.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Truncate
+ * Definition of Drupal\mysql\Truncate
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\Query\Truncate as QueryTruncate;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Update.php b/core/drivers/mysql/src/Update.php
similarity index 53%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Update.php
rename to core/drivers/mysql/src/Update.php
index 5b3bda6..48bfeaf 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Update.php
+++ b/core/drivers/mysql/src/Update.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Update
+ * Definition of Drupal\mysql\Update
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\Query\Update as QueryUpdate;
 
diff --git a/core/drivers/pgsql/pgsql.info.yml b/core/drivers/pgsql/pgsql.info.yml
new file mode 100644
index 0000000..1e994c4
--- /dev/null
+++ b/core/drivers/pgsql/pgsql.info.yml
@@ -0,0 +1,3 @@
+type: driver
+core: 8.x
+name: PostgreSQL
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php b/core/drivers/pgsql/src/Connection.php
similarity index 98%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php
rename to core/drivers/pgsql/src/Connection.php
index 7048e88..30f45a4 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php
+++ b/core/drivers/pgsql/src/Connection.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Connection
+ * Definition of Drupal\pgsql\Connection
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Database;
 use Drupal\Core\Database\Connection as DatabaseConnection;
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Delete.php b/core/drivers/pgsql/src/Delete.php
similarity index 53%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Delete.php
rename to core/drivers/pgsql/src/Delete.php
index e9914ca..0c75c70 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Delete.php
+++ b/core/drivers/pgsql/src/Delete.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Delete
+ * Definition of Drupal\pgsql\Delete
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Query\Delete as QueryDelete;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php b/core/drivers/pgsql/src/Insert.php
similarity index 98%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php
rename to core/drivers/pgsql/src/Insert.php
index fba74da..d7f6dc3 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php
+++ b/core/drivers/pgsql/src/Insert.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Insert
+ * Definition of Drupal\pgsql\Insert
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Database;
 use Drupal\Core\Database\Query\Insert as QueryInsert;
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Install/Tasks.php b/core/drivers/pgsql/src/Install/Tasks.php
similarity index 97%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Install/Tasks.php
rename to core/drivers/pgsql/src/Install/Tasks.php
index a5f0acd..b369555 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Install/Tasks.php
+++ b/core/drivers/pgsql/src/Install/Tasks.php
@@ -2,14 +2,14 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Install\Tasks
+ * Definition of Drupal\pgsql\Install\Tasks
  */
 
-namespace Drupal\Core\Database\Driver\pgsql\Install;
+namespace Drupal\pgsql\Install;
 
 use Drupal\Core\Database\Database;
 use Drupal\Core\Database\Install\Tasks as InstallTasks;
-use Drupal\Core\Database\Driver\pgsql\Connection;
+use Drupal\pgsql\Connection;
 use Drupal\Core\Database\DatabaseNotFoundException;
 
 /**
@@ -23,7 +23,7 @@ class Tasks extends InstallTasks {
   protected $pdoDriver = 'pgsql';
 
   /**
-   * Constructs a \Drupal\Core\Database\Driver\pgsql\Install\Tasks object.
+   * Constructs a \Drupal\pgsql\Install\Tasks object.
    */
   public function __construct() {
     $this->tasks[] = array(
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Merge.php b/core/drivers/pgsql/src/Merge.php
similarity index 52%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Merge.php
rename to core/drivers/pgsql/src/Merge.php
index c48b830..20f8d8f 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Merge.php
+++ b/core/drivers/pgsql/src/Merge.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Merge
+ * Definition of Drupal\pgsql\Merge
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Query\Merge as QueryMerge;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php b/core/drivers/pgsql/src/Schema.php
similarity index 99%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
rename to core/drivers/pgsql/src/Schema.php
index 63349ad..158c0c3 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
+++ b/core/drivers/pgsql/src/Schema.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Schema
+ * Definition of Drupal\pgsql\Schema
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\pgsql;
 
 use Drupal\Component\Utility\String;
 use Drupal\Core\Database\Database;
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Select.php b/core/drivers/pgsql/src/Select.php
similarity index 97%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Select.php
rename to core/drivers/pgsql/src/Select.php
index 2a931ec..5c488dd 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Select.php
+++ b/core/drivers/pgsql/src/Select.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Select
+ * Definition of Drupal\pgsql\Select
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Query\Select as QuerySelect;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Transaction.php b/core/drivers/pgsql/src/Transaction.php
similarity index 56%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Transaction.php
rename to core/drivers/pgsql/src/Transaction.php
index 570a130..8e8eea2 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Transaction.php
+++ b/core/drivers/pgsql/src/Transaction.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Transaction
+ * Definition of Drupal\pgsql\Transaction
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Transaction as DatabaseTransaction;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Truncate.php b/core/drivers/pgsql/src/Truncate.php
similarity index 54%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Truncate.php
rename to core/drivers/pgsql/src/Truncate.php
index c7d7a36..3db4599 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Truncate.php
+++ b/core/drivers/pgsql/src/Truncate.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Truncate
+ * Definition of Drupal\pgsql\Truncate
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Query\Truncate as QueryTruncate;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Update.php b/core/drivers/pgsql/src/Update.php
similarity index 95%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Update.php
rename to core/drivers/pgsql/src/Update.php
index f424dfe..ce6ad3a 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Update.php
+++ b/core/drivers/pgsql/src/Update.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Update
+ * Definition of Drupal\pgsql\Update
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Database;
 use Drupal\Core\Database\Query\Update as QueryUpdate;
diff --git a/core/drivers/sqlite/sqlite.info.yml b/core/drivers/sqlite/sqlite.info.yml
new file mode 100644
index 0000000..288dfa4
--- /dev/null
+++ b/core/drivers/sqlite/sqlite.info.yml
@@ -0,0 +1,3 @@
+type: driver
+core: 8.x
+name: SQLite
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php b/core/drivers/sqlite/src/Connection.php
similarity index 98%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php
rename to core/drivers/sqlite/src/Connection.php
index 6cacf4e..ac3e0eb 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php
+++ b/core/drivers/sqlite/src/Connection.php
@@ -2,17 +2,17 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Connection
+ * Definition of Drupal\sqlite\Connection
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Database;
 use Drupal\Core\Database\DatabaseNotFoundException;
 use Drupal\Core\Database\TransactionNoActiveException;
 use Drupal\Core\Database\TransactionNameNonUniqueException;
 use Drupal\Core\Database\TransactionCommitFailedException;
-use Drupal\Core\Database\Driver\sqlite\Statement;
+use Drupal\sqlite\Statement;
 use Drupal\Core\Database\Connection as DatabaseConnection;
 
 /**
@@ -63,7 +63,7 @@ class Connection extends DatabaseConnection {
   var $tableDropped = FALSE;
 
   /**
-   * Constructs a \Drupal\Core\Database\Driver\sqlite\Connection object.
+   * Constructs a \Drupal\sqlite\Connection object.
    */
   public function __construct(\PDO $connection, array $connection_options) {
     parent::__construct($connection, $connection_options);
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Delete.php b/core/drivers/sqlite/src/Delete.php
similarity index 89%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Delete.php
rename to core/drivers/sqlite/src/Delete.php
index c0056cb..278597a 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Delete.php
+++ b/core/drivers/sqlite/src/Delete.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Delete
+ * Definition of Drupal\sqlite\Delete
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Query\Delete as QueryDelete;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Insert.php b/core/drivers/sqlite/src/Insert.php
similarity index 93%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Insert.php
rename to core/drivers/sqlite/src/Insert.php
index 3a0bcaa..752462d 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Insert.php
+++ b/core/drivers/sqlite/src/Insert.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Insert
+ * Definition of Drupal\sqlite\Insert
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Query\Insert as QueryInsert;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Install/Tasks.php b/core/drivers/sqlite/src/Install/Tasks.php
similarity index 95%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Install/Tasks.php
rename to core/drivers/sqlite/src/Install/Tasks.php
index 97eab54..ad749b4 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Install/Tasks.php
+++ b/core/drivers/sqlite/src/Install/Tasks.php
@@ -2,13 +2,13 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Install\Tasks
+ * Definition of Drupal\sqlite\Install\Tasks
  */
 
-namespace Drupal\Core\Database\Driver\sqlite\Install;
+namespace Drupal\sqlite\Install;
 
 use Drupal\Core\Database\Database;
-use Drupal\Core\Database\Driver\sqlite\Connection;
+use Drupal\sqlite\Connection;
 use Drupal\Core\Database\DatabaseNotFoundException;
 use Drupal\Core\Database\Install\Tasks as InstallTasks;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Merge.php b/core/drivers/sqlite/src/Merge.php
similarity index 52%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Merge.php
rename to core/drivers/sqlite/src/Merge.php
index 3bbc3de..28be123 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Merge.php
+++ b/core/drivers/sqlite/src/Merge.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Merge
+ * Definition of Drupal\sqlite\Merge
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Query\Merge as QueryMerge;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php b/core/drivers/sqlite/src/Schema.php
similarity index 99%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php
rename to core/drivers/sqlite/src/Schema.php
index dc09d86..5854b5f 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php
+++ b/core/drivers/sqlite/src/Schema.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Schema
+ * Definition of Drupal\sqlite\Schema
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Component\Utility\String;
 use Drupal\Core\Database\SchemaObjectExistsException;
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Select.php b/core/drivers/sqlite/src/Select.php
similarity index 69%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Select.php
rename to core/drivers/sqlite/src/Select.php
index 5403611..a5a8020 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Select.php
+++ b/core/drivers/sqlite/src/Select.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Select
+ * Definition of Drupal\sqlite\Select
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Query\Select as QuerySelect;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Statement.php b/core/drivers/sqlite/src/Statement.php
similarity index 97%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Statement.php
rename to core/drivers/sqlite/src/Statement.php
index 0be036d..8d7a725 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Statement.php
+++ b/core/drivers/sqlite/src/Statement.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Statement
+ * Definition of Drupal\sqlite\Statement
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\StatementPrefetch;
 use Drupal\Core\Database\StatementInterface;
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Transaction.php b/core/drivers/sqlite/src/Transaction.php
similarity index 55%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Transaction.php
rename to core/drivers/sqlite/src/Transaction.php
index ae73ed8..002f38c 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Transaction.php
+++ b/core/drivers/sqlite/src/Transaction.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Transaction
+ * Definition of Drupal\sqlite\Transaction
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Transaction as DatabaseTransaction;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Truncate.php b/core/drivers/sqlite/src/Truncate.php
similarity index 84%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Truncate.php
rename to core/drivers/sqlite/src/Truncate.php
index d06d27e..cf74e54 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Truncate.php
+++ b/core/drivers/sqlite/src/Truncate.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Truncate
+ * Definition of Drupal\sqlite\Truncate
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Query\Truncate as QueryTruncate;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Update.php b/core/drivers/sqlite/src/Update.php
similarity index 52%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Update.php
rename to core/drivers/sqlite/src/Update.php
index fa7d54b..47f99b5 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Update.php
+++ b/core/drivers/sqlite/src/Update.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Update
+ * Definition of Drupal\sqlite\Update
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Query\Update as QueryUpdate;
 
diff --git a/core/includes/install.inc b/core/includes/install.inc
index d1c1596..2b82f0b 100644
--- a/core/includes/install.inc
+++ b/core/includes/install.inc
@@ -134,23 +134,15 @@ function drupal_detect_database_types() {
  */
 function drupal_get_database_types() {
   $databases = array();
-  $drivers = array();
+  $discovery = new ExtensionDiscovery();
+  $discovery->setProfileDirectories(array());
 
-  // The internal database driver name is any valid PHP identifier.
-  $mask = '/^' . DRUPAL_PHP_FUNCTION_PATTERN . '$/';
-  $files = file_scan_directory(DRUPAL_ROOT . '/core/lib/Drupal/Core/Database/Driver', $mask, array('recurse' => FALSE));
-  if (is_dir(DRUPAL_ROOT . '/drivers/lib/Drupal/Driver/Database')) {
-    $files += file_scan_directory(DRUPAL_ROOT . '/drivers/lib/Drupal/Driver/Database/', $mask, array('recurse' => FALSE));
-  }
-  foreach ($files as $file) {
-    if (file_exists($file->uri . '/Install/Tasks.php')) {
-      $drivers[$file->filename] = $file->uri;
-    }
-  }
-  foreach ($drivers as $driver => $file) {
-    $installer = db_installer_object($driver);
+  foreach ($discovery->scan('driver') as $driver_name => $driver) {
+    drupal_classloader_register($driver_name, $driver->getPath());
+
+    $installer = db_installer_object($driver_name);
     if ($installer->installable()) {
-      $databases[$driver] = $installer;
+      $databases[$driver_name] = $installer;
     }
   }
 
@@ -1132,12 +1124,6 @@ function db_run_tasks($driver) {
 function db_installer_object($driver) {
   // We cannot use Database::getConnection->getDriverClass() here, because
   // the connection object is not yet functional.
-  $task_class = "Drupal\\Core\\Database\\Driver\\{$driver}\\Install\\Tasks";
-  if (class_exists($task_class)) {
-    return new $task_class();
-  }
-  else {
-    $task_class = "Drupal\\Driver\\Database\\{$driver}\\Install\\Tasks";
-    return new $task_class();
-  }
+  $task_class = "Drupal\\{$driver}\\Install\\Tasks";
+  return new $task_class();
 }
diff --git a/core/lib/Drupal/Core/Database/Connection.php b/core/lib/Drupal/Core/Database/Connection.php
index 7cbe167..ed323e5 100644
--- a/core/lib/Drupal/Core/Database/Connection.php
+++ b/core/lib/Drupal/Core/Database/Connection.php
@@ -635,13 +635,7 @@ protected function expandArguments(&$query, &$args) {
   public function getDriverClass($class) {
     if (empty($this->driverClasses[$class])) {
       $driver = $this->driver();
-      if (!empty($this->connectionOptions['namespace'])) {
-        $driver_class  = $this->connectionOptions['namespace'] . '\\' . $class;
-      }
-      else {
-        // Fallback for Drupal 7 settings.php.
-        $driver_class = "Drupal\\Core\\Database\\Driver\\{$driver}\\{$class}";
-      }
+      $driver_class = "Drupal\\{$driver}\\{$class}";
       $this->driverClasses[$class] = class_exists($driver_class) ? $driver_class : $class;
     }
     return $this->driverClasses[$class];
diff --git a/core/lib/Drupal/Core/Database/Database.php b/core/lib/Drupal/Core/Database/Database.php
index a799926..7113254 100644
--- a/core/lib/Drupal/Core/Database/Database.php
+++ b/core/lib/Drupal/Core/Database/Database.php
@@ -255,7 +255,13 @@
    */
   final public static function addConnectionInfo($key, $target, array $info) {
     if (empty(self::$databaseInfo[$key][$target])) {
-      self::$databaseInfo[$key][$target] = self::parseConnectionInfo($info);
+      $info = self::parseConnectionInfo($info);
+      self::$databaseInfo[$key][$target] = $info;
+
+      // @todo Hard-wired dependency on Composer's ClassLoader.
+      \ComposerAutoloaderInitDrupal8::getLoader()
+        // Ensure to set (replace), not add (cumulative) for each connection.
+        ->setPsr4('Drupal\\' . $info['driver'] . '\\', $info['path']);
     }
   }
 
@@ -370,13 +376,7 @@
       throw new DriverNotSpecifiedException('Driver not specified for this database connection: ' . $key);
     }
 
-    if (!empty(self::$databaseInfo[$key][$target]['namespace'])) {
-      $driver_class = self::$databaseInfo[$key][$target]['namespace'] . '\\Connection';
-    }
-    else {
-      // Fallback for Drupal 7 settings.php.
-      $driver_class = "Drupal\\Core\\Database\\Driver\\{$driver}\\Connection";
-    }
+    $driver_class = "Drupal\\$driver\\Connection";
 
     $pdo_connection = $driver_class::open(self::$databaseInfo[$key][$target]);
     $new_connection = new $driver_class($pdo_connection, self::$databaseInfo[$key][$target]);
diff --git a/core/lib/Drupal/Core/Extension/Discovery/RecursiveExtensionFilterIterator.php b/core/lib/Drupal/Core/Extension/Discovery/RecursiveExtensionFilterIterator.php
index d5da27c..ffe041d 100644
--- a/core/lib/Drupal/Core/Extension/Discovery/RecursiveExtensionFilterIterator.php
+++ b/core/lib/Drupal/Core/Extension/Discovery/RecursiveExtensionFilterIterator.php
@@ -44,6 +44,7 @@ class RecursiveExtensionFilterIterator extends \RecursiveFilterIterator {
    * @var array
    */
   protected $whitelist = array(
+    'drivers',
     'profiles',
     'modules',
     'themes',
diff --git a/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php b/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php
index f51cbb3..39137fb 100644
--- a/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php
+++ b/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php
@@ -97,8 +97,8 @@ class ExtensionDiscovery {
    * compatible with the current version of Drupal core.
    *
    * @param string $type
-   *   The extension type to search for. One of 'profile', 'module', 'theme', or
-   *   'theme_engine'.
+   *   The extension type to search for. One of 'profile', 'module', 'theme',
+   *   'theme_engine', or 'driver'.
    * @param bool $include_tests
    *   (optional) Whether to explicitly include or exclude test extensions. By
    *   default, test extensions are only discovered when in a test environment.
diff --git a/core/lib/Drupal/Core/Installer/Form/SiteSettingsForm.php b/core/lib/Drupal/Core/Installer/Form/SiteSettingsForm.php
index 48fadf6..1b2487f 100644
--- a/core/lib/Drupal/Core/Installer/Form/SiteSettingsForm.php
+++ b/core/lib/Drupal/Core/Installer/Form/SiteSettingsForm.php
@@ -120,11 +120,17 @@ public function validateForm(array &$form, FormStateInterface $form_state) {
     $driver = $form_state->getValue('driver');
     $database = $form_state->getValue($driver);
     $drivers = drupal_get_database_types();
+
     $reflection = new \ReflectionClass($drivers[$driver]);
-    $install_namespace = $reflection->getNamespaceName();
+
+    $database['driver'] = $driver;
+    // Record the effective filesystem path of this driver (without /Install).
+    $database['path'] = dirname(dirname($reflection->getFileName()));
+
     // Cut the trailing \Install from namespace.
+    // @todo 'namespace' is theoretically obsolete now?
+    $install_namespace = $reflection->getNamespaceName();
     $database['namespace'] = substr($install_namespace, 0, strrpos($install_namespace, '\\'));
-    $database['driver'] = $driver;
 
     $form_state['storage']['database'] = $database;
     $errors = install_database_errors($database, $form_state->getValue('settings_file'));
diff --git a/core/modules/comment/tests/src/CommentStatisticsUnitTest.php b/core/modules/comment/tests/src/CommentStatisticsUnitTest.php
index f625b48..b7e0784 100644
--- a/core/modules/comment/tests/src/CommentStatisticsUnitTest.php
+++ b/core/modules/comment/tests/src/CommentStatisticsUnitTest.php
@@ -55,7 +55,7 @@ class CommentStatisticsUnitTest extends UnitTestCase {
    * Sets up required mocks and the CommentStatistics service under test.
    */
   protected function setUp() {
-    $this->statement = $this->getMockBuilder('Drupal\Core\Database\Driver\fake\FakeStatement')
+    $this->statement = $this->getMockBuilder('Drupal\fake\FakeStatement')
       ->disableOriginalConstructor()
       ->getMock();
 
diff --git a/core/modules/migrate/tests/src/MigrateTestCase.php b/core/modules/migrate/tests/src/MigrateTestCase.php
index 279ffa9..d7ced9f 100644
--- a/core/modules/migrate/tests/src/MigrateTestCase.php
+++ b/core/modules/migrate/tests/src/MigrateTestCase.php
@@ -8,7 +8,7 @@
 namespace Drupal\migrate\Tests;
 
 use Drupal\Tests\UnitTestCase;
-use Drupal\Core\Database\Driver\fake\FakeConnection;
+use Drupal\fake\FakeConnection;
 
 /**
  * Provides setup and helper methods for Migrate module tests.
@@ -63,7 +63,7 @@ protected function getMigration() {
    * @param string $prefix
    *   (optional) The table prefix on the database.
    *
-   * @return \Drupal\Core\Database\Driver\fake\FakeConnection
+   * @return \Drupal\fake\FakeConnection
    *   The database connection.
    */
   protected function getDatabase(array $database_contents, $connection_options = array(), $prefix = '') {
