Merge pull request #50 from NightJar/escape-enum-default-death

FIX preserve enum values with correct escaping
This commit is contained in:
Maxime Rainville 2018-10-12 14:37:08 +13:00 committed by GitHub
commit 7add192ebf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2,10 +2,11 @@
namespace SilverStripe\SQLite; namespace SilverStripe\SQLite;
use Exception;
use SilverStripe\Control\Director; use SilverStripe\Control\Director;
use SilverStripe\Dev\Debug; use SilverStripe\Dev\Debug;
use SilverStripe\ORM\Connect\DBSchemaManager; use SilverStripe\ORM\Connect\DBSchemaManager;
use Exception; use SQLite3;
/** /**
* SQLite schema manager class * SQLite schema manager class
@ -540,7 +541,18 @@ class SQLite3SchemaManager extends DBSchemaManager
// Set default // Set default
if (!empty($values['default'])) { if (!empty($values['default'])) {
$default = str_replace(array('"', "'", "\\", "\0"), "", $values['default']); /*
On escaping strings:
https://www.sqlite.org/lang_expr.html
"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."
Also, there is a nifty PHP function for this. However apparently one must still be cautious of
the null character ('\0' or 0x0), as per https://bugs.php.net/bug.php?id=63419
*/
$default = SQLite3::escapeString(str_replace("\0", "", $values['default']));
return "TEXT DEFAULT '$default'"; return "TEXT DEFAULT '$default'";
} else { } else {
return 'TEXT'; return 'TEXT';