protected function doDatabaseSqliteCheck($config)
{
if (!$this->sqliteLoaded) {
return $this->getExceptionController()->databaseDriver('missing', 'SQLite', 'pdo_sqlite');
}
// If in-memory connection, skip path checks
if (isset($config['memory']) && $config['memory'] === true) {
return null;
}
// If the file is present, make sure it is writable
$file = $config['path'];
if (file_exists($file)) {
if (!is_writable($file)) {
return $this->getExceptionController()->databasePath('file', $file, 'is not writable');
}
return null;
}
// If the file isn't present, make sure the directory
// exists and is writable so the file can be created
$dir = dirname($file);
if (!file_exists($dir)) {
// At this point, it is possible that the site has been moved and
// the configured Sqlite database file path is no longer relevant
// to the site's root path
$cacheJson = $this->config->getPath('cache/config-cache.json');
if (file_exists($cacheJson)) {
unlink($cacheJson);
$this->config->app['config']->initialize();
$config = $this->config->app['config']->get('general/database');
if (!file_exists(dirname($config['path']))) {
return $this->getExceptionController()->databasePath('folder', $dir, 'does not exist');
}
} else {
return $this->getExceptionController()->databasePath('folder', $dir, 'does not exist');
}
}
if (!is_writable($dir)) {
return $this->getExceptionController()->databasePath('folder', $dir, 'is not writable');
}
}