0fa6b0fde7
The logic for cancelling a savepoint was incorrect, as the behaviour the logic was modelled on was for a different RDBMS - where a COMMIT would always close the most recently opened transaction. SQLite on contrast will commit the entire transaction, not just the most recent savepoint marker until current execution point. The correct manner to deal with a 'partial' commit is to call RELEASE <savepoint>. This revealed an error in the savepoint logic, in that if someone had supplied a savepoint name instead of relying on generated ones, the rollback command did not factor for this and always assumed generated savepoint names - again causing error. For this reason a new class member field has been introduced to track savepoint names in a stack fashion. |
||
---|---|---|
_config | ||
code | ||
_config.php | ||
_configure_database.php | ||
_register_database.php | ||
.editorconfig | ||
.gitattributes | ||
.scrutinizer.yml | ||
.travis.yml | ||
.upgrade.yml | ||
code-of-conduct.md | ||
composer.json | ||
LICENSE | ||
phpcs.xml.dist | ||
phpunit.xml.dist | ||
README.md |
SQLite3 Module
Maintainer Contact
Andreas Piening (Nickname: apiening) <andreas (at) silverstripe (dot) com>
Requirements
- SilverStripe 4.0 or newer
Installation
- Install using composer with
composer require silverstripe/sqlite3 ^2
.
Configuration
Either use the installer to automatically install SQLite or add this to your _config.php (right after "require_once("conf/ConfigureFromEnv.php");" if you are using _ss_environment.php)
$databaseConfig['type'] = 'SQLite3Database';
$databaseConfig['path'] = "/path/to/my/database/file";
Make sure the webserver has sufficient privileges to write to that folder and that it is protected from external access.
Sample mysite/_config.php
<?php
global $project;
$project = 'mysite';
global $database;
$database = 'SS_mysite';
require_once("conf/ConfigureFromEnv.php");
global $databaseConfig;
$databaseConfig = array(
"type" => 'SQLite3Database',
"server" => 'none',
"username" => 'none',
"password" => 'none',
"database" => $database,
"path" => "/path/to/my/database/file",
);
Again: make sure that the webserver has permission to read and write to the above path (/path/to/my/database/, 'file' would be the name of the sqlite db file)
URL parameter
If you're trying to change a field constrain to NOT NULL on a field that contains NULLs dev/build fails because it might corrupt existing records. In order to perform the action anyway add the URL parameter 'avoidConflict' when running dev/build which temporarily adds a conflict clause to the field spec. E.g.: http://www.my-project.com/?avoidConflict=1
Open Issues
- SQLite3 is supposed to work with all may not work with certain modules as they are using custom SQL statements passed to the DB class directly ;(
- there is no real fulltext search yet and the build-in search engine is not ordering by relevance, check out fts3