mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge pull request #252 from halkyon/database_changes
Adding Database::prepStringForDB() to allow MSSQLDatabase to prepare string for unicode
This commit is contained in:
commit
4ec208c93e
BIN
admin/javascript/.DS_Store
vendored
BIN
admin/javascript/.DS_Store
vendored
Binary file not shown.
@ -758,6 +758,18 @@ abstract class SS_Database {
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrap a string into DB-specific quotes. MySQL, PostgreSQL and SQLite3 only need single quotes around the string.
|
||||
* MSSQL will overload this and include it's own N prefix to mark the string as unicode, so characters like macrons
|
||||
* are saved correctly.
|
||||
*
|
||||
* @param string $string String to be prepared for database query
|
||||
* @return string Prepared string
|
||||
*/
|
||||
public function prepStringForDB($string) {
|
||||
return "'" . Convert::raw2sql($string) . "'";
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to return an SQL datetime expression that can be used with the adapter in use
|
||||
* used for querying a datetime in a certain format
|
||||
|
@ -143,7 +143,7 @@ abstract class DBField extends ViewableData {
|
||||
if($value === null || $value === "" || $value === false) {
|
||||
return "null";
|
||||
} else {
|
||||
return "'" . Convert::raw2sql($value) . "'";
|
||||
return DB::getConn()->prepStringForDB($value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -76,7 +76,7 @@ abstract class StringField extends DBField {
|
||||
*/
|
||||
function prepValueForDB($value) {
|
||||
if(!$this->nullifyEmpty && $value === '') {
|
||||
return "'" . Convert::raw2sql($value) . "'";
|
||||
return DB::getConn()->prepStringForDB($value);
|
||||
} else {
|
||||
return parent::prepValueForDB($value);
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ class DBFieldTest extends SapphireTest {
|
||||
* Test the prepValueForDB() method on DBField.
|
||||
*/
|
||||
function testPrepValueForDB() {
|
||||
$db = DB::getConn();
|
||||
|
||||
/* Float behaviour, asserting we have 0 */
|
||||
$this->assertEquals('0', singleton('Float')->prepValueForDB(0));
|
||||
@ -74,63 +75,64 @@ class DBFieldTest extends SapphireTest {
|
||||
$this->assertEquals("'1'", singleton('Boolean')->prepValueForDB('1'));
|
||||
|
||||
/* Varchar behaviour */
|
||||
$this->assertEquals($db->prepStringForDB("0"), singleton('Varchar')->prepValueForDB(0));
|
||||
$this->assertEquals("'0'", singleton('Varchar')->prepValueForDB(0));
|
||||
$this->assertEquals("null", singleton('Varchar')->prepValueForDB(null));
|
||||
$this->assertEquals("null", singleton('Varchar')->prepValueForDB(false));
|
||||
$this->assertEquals("null", singleton('Varchar')->prepValueForDB(''));
|
||||
$this->assertEquals("'0'", singleton('Varchar')->prepValueForDB('0'));
|
||||
$this->assertEquals("'1'", singleton('Varchar')->prepValueForDB(1));
|
||||
$this->assertEquals("'1'", singleton('Varchar')->prepValueForDB(true));
|
||||
$this->assertEquals("'1'", singleton('Varchar')->prepValueForDB('1'));
|
||||
$this->assertEquals("'00000'", singleton('Varchar')->prepValueForDB('00000'));
|
||||
$this->assertEquals("'0'", singleton('Varchar')->prepValueForDB(0000));
|
||||
$this->assertEquals("'test'", singleton('Varchar')->prepValueForDB('test'));
|
||||
$this->assertEquals("'123'", singleton('Varchar')->prepValueForDB(123));
|
||||
$this->assertEquals($db->prepStringForDB("0"), singleton('Varchar')->prepValueForDB('0'));
|
||||
$this->assertEquals($db->prepStringForDB("1"), singleton('Varchar')->prepValueForDB(1));
|
||||
$this->assertEquals($db->prepStringForDB("1"), singleton('Varchar')->prepValueForDB(true));
|
||||
$this->assertEquals($db->prepStringForDB("1"), singleton('Varchar')->prepValueForDB('1'));
|
||||
$this->assertEquals($db->prepStringForDB("00000"), singleton('Varchar')->prepValueForDB('00000'));
|
||||
$this->assertEquals($db->prepStringForDB("0"), singleton('Varchar')->prepValueForDB(0000));
|
||||
$this->assertEquals($db->prepStringForDB("test"), singleton('Varchar')->prepValueForDB('test'));
|
||||
$this->assertEquals($db->prepStringForDB("123"), singleton('Varchar')->prepValueForDB(123));
|
||||
|
||||
/* AllowEmpty Varchar behaviour */
|
||||
$varcharField = new Varchar("testfield", 50, array("nullifyEmpty"=>false));
|
||||
$this->assertSame("'0'", $varcharField->prepValueForDB(0));
|
||||
$this->assertSame($db->prepStringForDB("0"), $varcharField->prepValueForDB(0));
|
||||
$this->assertSame("null", $varcharField->prepValueForDB(null));
|
||||
$this->assertSame("null", $varcharField->prepValueForDB(false));
|
||||
$this->assertSame("''", $varcharField->prepValueForDB(''));
|
||||
$this->assertSame("'0'", $varcharField->prepValueForDB('0'));
|
||||
$this->assertSame("'1'", $varcharField->prepValueForDB(1));
|
||||
$this->assertSame("'1'", $varcharField->prepValueForDB(true));
|
||||
$this->assertSame("'1'", $varcharField->prepValueForDB('1'));
|
||||
$this->assertSame("'00000'", $varcharField->prepValueForDB('00000'));
|
||||
$this->assertSame("'0'", $varcharField->prepValueForDB(0000));
|
||||
$this->assertSame("'test'", $varcharField->prepValueForDB('test'));
|
||||
$this->assertSame("'123'", $varcharField->prepValueForDB(123));
|
||||
$this->assertSame($db->prepStringForDB(""), $varcharField->prepValueForDB(''));
|
||||
$this->assertSame($db->prepStringForDB("0"), $varcharField->prepValueForDB('0'));
|
||||
$this->assertSame($db->prepStringForDB("1"), $varcharField->prepValueForDB(1));
|
||||
$this->assertSame($db->prepStringForDB("1"), $varcharField->prepValueForDB(true));
|
||||
$this->assertSame($db->prepStringForDB("1"), $varcharField->prepValueForDB('1'));
|
||||
$this->assertSame($db->prepStringForDB("00000"), $varcharField->prepValueForDB('00000'));
|
||||
$this->assertSame($db->prepStringForDB("0"), $varcharField->prepValueForDB(0000));
|
||||
$this->assertSame($db->prepStringForDB("test"), $varcharField->prepValueForDB('test'));
|
||||
$this->assertSame($db->prepStringForDB("123"), $varcharField->prepValueForDB(123));
|
||||
unset($varcharField);
|
||||
|
||||
/* Text behaviour */
|
||||
$this->assertEquals("'0'", singleton('Text')->prepValueForDB(0));
|
||||
$this->assertEquals($db->prepStringForDB("0"), singleton('Text')->prepValueForDB(0));
|
||||
$this->assertEquals("null", singleton('Text')->prepValueForDB(null));
|
||||
$this->assertEquals("null", singleton('Text')->prepValueForDB(false));
|
||||
$this->assertEquals("null", singleton('Text')->prepValueForDB(''));
|
||||
$this->assertEquals("'0'", singleton('Text')->prepValueForDB('0'));
|
||||
$this->assertEquals("'1'", singleton('Text')->prepValueForDB(1));
|
||||
$this->assertEquals("'1'", singleton('Text')->prepValueForDB(true));
|
||||
$this->assertEquals("'1'", singleton('Text')->prepValueForDB('1'));
|
||||
$this->assertEquals("'00000'", singleton('Text')->prepValueForDB('00000'));
|
||||
$this->assertEquals("'0'", singleton('Text')->prepValueForDB(0000));
|
||||
$this->assertEquals("'test'", singleton('Text')->prepValueForDB('test'));
|
||||
$this->assertEquals("'123'", singleton('Text')->prepValueForDB(123));
|
||||
$this->assertEquals($db->prepStringForDB("0"), singleton('Text')->prepValueForDB('0'));
|
||||
$this->assertEquals($db->prepStringForDB("1"), singleton('Text')->prepValueForDB(1));
|
||||
$this->assertEquals($db->prepStringForDB("1"), singleton('Text')->prepValueForDB(true));
|
||||
$this->assertEquals($db->prepStringForDB("1"), singleton('Text')->prepValueForDB('1'));
|
||||
$this->assertEquals($db->prepStringForDB("00000"), singleton('Text')->prepValueForDB('00000'));
|
||||
$this->assertEquals($db->prepStringForDB("0"), singleton('Text')->prepValueForDB(0000));
|
||||
$this->assertEquals($db->prepStringForDB("test"), singleton('Text')->prepValueForDB('test'));
|
||||
$this->assertEquals($db->prepStringForDB("123"), singleton('Text')->prepValueForDB(123));
|
||||
|
||||
/* AllowEmpty Text behaviour */
|
||||
$textField = new Text("testfield", array("nullifyEmpty"=>false));
|
||||
$this->assertSame("'0'", $textField->prepValueForDB(0));
|
||||
$this->assertSame($db->prepStringForDB("0"), $textField->prepValueForDB(0));
|
||||
$this->assertSame("null", $textField->prepValueForDB(null));
|
||||
$this->assertSame("null", $textField->prepValueForDB(false));
|
||||
$this->assertSame("''", $textField->prepValueForDB(''));
|
||||
$this->assertSame("'0'", $textField->prepValueForDB('0'));
|
||||
$this->assertSame("'1'", $textField->prepValueForDB(1));
|
||||
$this->assertSame("'1'", $textField->prepValueForDB(true));
|
||||
$this->assertSame("'1'", $textField->prepValueForDB('1'));
|
||||
$this->assertSame("'00000'", $textField->prepValueForDB('00000'));
|
||||
$this->assertSame("'0'", $textField->prepValueForDB(0000));
|
||||
$this->assertSame("'test'", $textField->prepValueForDB('test'));
|
||||
$this->assertSame("'123'", $textField->prepValueForDB(123));
|
||||
$this->assertSame($db->prepStringForDB(""), $textField->prepValueForDB(''));
|
||||
$this->assertSame($db->prepStringForDB("0"), $textField->prepValueForDB('0'));
|
||||
$this->assertSame($db->prepStringForDB("1"), $textField->prepValueForDB(1));
|
||||
$this->assertSame($db->prepStringForDB("1"), $textField->prepValueForDB(true));
|
||||
$this->assertSame($db->prepStringForDB("1"), $textField->prepValueForDB('1'));
|
||||
$this->assertSame($db->prepStringForDB("00000"), $textField->prepValueForDB('00000'));
|
||||
$this->assertSame($db->prepStringForDB("0"), $textField->prepValueForDB(0000));
|
||||
$this->assertSame($db->prepStringForDB("test"), $textField->prepValueForDB('test'));
|
||||
$this->assertSame($db->prepStringForDB("123"), $textField->prepValueForDB(123));
|
||||
unset($textField);
|
||||
|
||||
/* Time behaviour */
|
||||
|
BIN
thirdparty/jasmine-dom/lib/.DS_Store
vendored
BIN
thirdparty/jasmine-dom/lib/.DS_Store
vendored
Binary file not shown.
Loading…
Reference in New Issue
Block a user