Enable Sqlite WAL mode by default

WAL provides more concurrency as readers do not block writers and,
a writer does not block readers. Reading and writing can proceed concurrently.

This change might reduce the number of errors related to locked databases.

For reference: https://sqlite.org/wal.html
This commit is contained in:
Frédéric Guillot
2023-02-10 19:30:37 -08:00
committed by Frédéric Guillot
parent 1e304f4ad6
commit 5e4d506b28
3 changed files with 10 additions and 2 deletions

View File

@@ -117,10 +117,11 @@ class DatabaseProvider implements ServiceProviderInterface
{ {
require_once __DIR__.'/../Schema/Sqlite.php'; require_once __DIR__.'/../Schema/Sqlite.php';
return new Database(array( return new Database([
'driver' => 'sqlite', 'driver' => 'sqlite',
'filename' => DB_FILENAME, 'filename' => DB_FILENAME,
)); 'wal_mode' => DB_WAL_MODE,
]);
} }
/** /**

View File

@@ -43,6 +43,7 @@ defined('DB_DRIVER') or define('DB_DRIVER', getenv('DB_DRIVER') ?: 'sqlite');
// Sqlite configuration // Sqlite configuration
defined('DB_FILENAME') or define('DB_FILENAME', getenv('DB_FILENAME') ?: DATA_DIR.DIRECTORY_SEPARATOR.'db.sqlite'); defined('DB_FILENAME') or define('DB_FILENAME', getenv('DB_FILENAME') ?: DATA_DIR.DIRECTORY_SEPARATOR.'db.sqlite');
defined('DB_WAL_MODE') or define('DB_WAL_MODE', getenv('DB_WAL_MODE') ? strtolower(getenv('DB_WAL_MODE')) === 'true' : true);
// Mysql/Postgres configuration // Mysql/Postgres configuration
defined('DB_USERNAME') or define('DB_USERNAME', getenv('DB_USERNAME') ?: 'root'); defined('DB_USERNAME') or define('DB_USERNAME', getenv('DB_USERNAME') ?: 'root');

View File

@@ -36,6 +36,12 @@ class Sqlite extends Base
} }
$this->pdo = new PDO('sqlite:'.$settings['filename'], null, null, $options); $this->pdo = new PDO('sqlite:'.$settings['filename'], null, null, $options);
// Official docs: https://sqlite.org/wal.html
if (isset($settings['wal_mode']) && $settings['wal_mode'] === true) {
$this->pdo->exec('PRAGMA journal_mode=wal');
}
$this->enableForeignKeys(); $this->enableForeignKeys();
} }