Go to file
NightjarNZ 418c1178a1 FIX preserve enum values with correct escaping
Enum values are themselves enumerated in sqlite as they are not supported
as a type. This leads to values being stored in their own table, and a
regular TEXT field being used in a MySQL ENUM's stead. The default value
for this field was being escaped with custom string replacement, and
erroneously relacing the backslash (a redundant operation). This lead
to invalid Fully Qualified Class Names in SilverStripe 4, which is a
required trait for polymorphic relationships. As a result any polymorphic
relationship not set on first write would then proceed to cause an execution
error the next time the dataobject with the relationship was fetched from
the database. By using the PHP supplied escape function for SQLite3 we can
avoid this, and restore functionality.

Relevant section of SQLite documentation to justify the removal of escaping
various characters, such as the backslash:

A string constant is formed by enclosing the string in single quotes (').
A single quote within the string can be encoded by putting two single quotes
in a row - as in Pascal. C-style escapes using the backslash character are
not supported because they are not standard SQL.

https://www.sqlite.org/lang_expr.html
2018-10-08 23:09:24 +13:00
_config Upgrade for silverstripe namespaces 2016-09-08 15:41:17 +12:00
code FIX preserve enum values with correct escaping 2018-10-08 23:09:24 +13:00
_config.php Upgrade for silverstripe namespaces 2016-09-08 15:41:17 +12:00
_configure_database.php Update config / code styles for 4.0 2017-11-23 14:11:10 +13:00
_register_database.php Update config / code styles for 4.0 2017-11-23 14:11:10 +13:00
.editorconfig Added standard .editorconfig file 2015-12-17 10:06:47 +13:00
.gitattributes Added standard .gitattributes file 2016-01-16 19:32:49 +13:00
.scrutinizer.yml Added standard Scrutinizer config 2016-03-23 23:18:23 +13:00
.travis.yml Update config / code styles for 4.0 2017-11-23 14:11:10 +13:00
.upgrade.yml API Apply SilverStripe\SQLite namespace to module 2016-06-29 13:55:45 +12:00
code-of-conduct.md Added standard code of conduct file 2016-02-16 11:42:22 +13:00
composer.json Update 2 branch alias to 2.2 2017-11-28 10:50:04 +13:00
LICENSE Create LICENSE 2013-09-02 21:20:35 +12:00
phpcs.xml.dist Update config / code styles for 4.0 2017-11-23 14:11:10 +13:00
phpunit.xml.dist Travis setup 2017-10-10 15:10:30 +01:00
README.md Add supported module badge to readme 2018-06-15 17:49:06 +12:00

SQLite3 Module

Build Status SilverStripe supported 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