diff --git a/config/config.sample.php b/config/config.sample.php index bf26172c494e4ebf04c9bd75a2d856bf82915ac2..2a9b43d56903eaf252c6b618bdec198673de4e9c 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -133,6 +133,12 @@ $CONFIG = array( PDO::MYSQL_ATTR_SSL_CA => '/file/path/to/ca_cert.pem', ), +/** + * sqlite3 journal mode can be specified using this config parameter - can be 'WAL' or 'DELETE' + * see for more details https://www.sqlite.org/wal.html + */ +'sqlite.journal_mode' => 'DELETE', + /** * Indicates whether the ownCloud instance was installed successfully; ``true`` * indicates a successful installation, and ``false`` indicates an unsuccessful diff --git a/lib/private/db/connectionfactory.php b/lib/private/db/connectionfactory.php index f6253e09b951290ae4e2f2659ac656ca770394b2..58043b3044037cc502fb704457cb37f6196b94f8 100644 --- a/lib/private/db/connectionfactory.php +++ b/lib/private/db/connectionfactory.php @@ -90,7 +90,8 @@ class ConnectionFactory { $eventManager->addEventSubscriber(new \Doctrine\DBAL\Event\Listeners\OracleSessionInit); break; case 'sqlite3': - $eventManager->addEventSubscriber(new SQLiteSessionInit); + $journalMode = $additionalConnectionParams['sqlite.journal_mode']; + $eventManager->addEventSubscriber(new SQLiteSessionInit(true, $journalMode)); break; } $connection = \Doctrine\DBAL\DriverManager::getConnection( @@ -153,6 +154,7 @@ class ConnectionFactory { } $connectionParams['tablePrefix'] = $config->getSystemValue('dbtableprefix', 'oc_'); + $connectionParams['sqlite.journal_mode'] = $config->getSystemValue('sqlite.journal_mode', 'WAL'); //additional driver options, eg. for mysql ssl $driverOptions = $config->getSystemValue('dbdriveroptions', null); diff --git a/lib/private/db/sqlitesessioninit.php b/lib/private/db/sqlitesessioninit.php index 7e1166be95b2caf7e14fba5de80bfa73a67fad27..1fff22b883a644e7e520046a4a11447eac8d1fec 100644 --- a/lib/private/db/sqlitesessioninit.php +++ b/lib/private/db/sqlitesessioninit.php @@ -18,13 +18,20 @@ class SQLiteSessionInit implements EventSubscriber { */ private $caseSensitiveLike; + /** + * @var string + */ + private $journalMode; + /** * Configure case sensitive like for each connection * * @param bool $caseSensitiveLike + * @param string $journalMode */ - public function __construct($caseSensitiveLike = true) { + public function __construct($caseSensitiveLike, $journalMode) { $this->caseSensitiveLike = $caseSensitiveLike; + $this->journalMode = $journalMode; } /** @@ -34,6 +41,7 @@ class SQLiteSessionInit implements EventSubscriber { public function postConnect(ConnectionEventArgs $args) { $sensitive = ($this->caseSensitiveLike) ? 'true' : 'false'; $args->getConnection()->executeUpdate('PRAGMA case_sensitive_like = ' . $sensitive); + $args->getConnection()->executeUpdate('PRAGMA journal_mode = ' . $this->journalMode); } public function getSubscribedEvents() { diff --git a/tests/lib/tempmanager.php b/tests/lib/tempmanager.php index 05311e820a7ed85da50a83a723311264dc881a28..c030eef2c9e3a6b3b6a3a15469d4b96958df1beb 100644 --- a/tests/lib/tempmanager.php +++ b/tests/lib/tempmanager.php @@ -27,7 +27,7 @@ class TempManager extends \Test\TestCase { protected function setUp() { parent::setUp(); - $this->baseDir = get_temp_dir() . '/oc_tmp_test'; + $this->baseDir = get_temp_dir() . $this->getUniqueID('/oc_tmp_test'); if (!is_dir($this->baseDir)) { mkdir($this->baseDir); } @@ -39,7 +39,7 @@ class TempManager extends \Test\TestCase { } /** - * @param \Psr\Log\LoggerInterface $logger + * @param \OCP\ILogger $logger * @return \OC\TempManager */ protected function getManager($logger = null) { diff --git a/tests/preseed-config.php b/tests/preseed-config.php index 3fd5b3cb7fc72007e553947326048e5b38376b2a..3f41573bf2954478b6d34bdb3ecc3750a3a7be53 100644 --- a/tests/preseed-config.php +++ b/tests/preseed-config.php @@ -1,22 +1,21 @@ <?php $CONFIG = array ( - "appstoreenabled" => false, - 'apps_paths' => - array ( - 0 => - array ( - 'path' => OC::$SERVERROOT.'/apps', - 'url' => '/apps', - 'writable' => true, - ), - 1 => - array ( - 'path' => OC::$SERVERROOT.'/apps2', - 'url' => '/apps2', - 'writable' => false, - ) - ), - + "appstoreenabled" => false, + 'apps_paths' => + array ( + 0 => + array ( + 'path' => OC::$SERVERROOT.'/apps', + 'url' => '/apps', + 'writable' => true, + ), + 1 => + array ( + 'path' => OC::$SERVERROOT.'/apps2', + 'url' => '/apps2', + 'writable' => false, + ) + ), ); if(substr(strtolower(PHP_OS), 0, 3) == "win") {