ensure boolean values are converted to correct value on update, avoiding issues with posgres boolean type

This commit is contained in:
Ceeram 2012-03-19 13:27:26 +01:00
parent c38419e33a
commit 091ad53b80
2 changed files with 50 additions and 0 deletions

View file

@ -1836,6 +1836,8 @@ class DboSource extends DataSource {
if ($quoteValues) { if ($quoteValues) {
$update .= $this->value($value, $model->getColumnType($field)); $update .= $this->value($value, $model->getColumnType($field));
} elseif ($model->getColumnType($field) == 'boolean') {
$update .= $this->boolean($value, true);
} elseif (!$alias) { } elseif (!$alias) {
$update .= str_replace($quotedAlias . '.', '', str_replace( $update .= str_replace($quotedAlias . '.', '', str_replace(
$model->alias . '.', '', $value $model->alias . '.', '', $value

View file

@ -6605,4 +6605,52 @@ class ModelWriteTest extends BaseModelTest {
$this->assertEquals($expected, $result); $this->assertEquals($expected, $result);
} }
/**
* testUpdateAllBoolean
*
* return @void
*/
public function testUpdateAllBoolean() {
$this->loadFixtures('Item', 'Syfile', 'Portfolio', 'Image', 'ItemsPortfolio');
$TestModel = new Item();
$result = $TestModel->updateAll(array('published' => true));
$this->assertTrue($result);
$result = $TestModel->find('first', array('fields' => array('id', 'published')));
$this->assertEquals(true, $result['Item']['published']);
}
/**
* testUpdateAllBooleanConditions
*
* return @void
*/
public function testUpdateAllBooleanConditions() {
$this->loadFixtures('Item', 'Syfile', 'Portfolio', 'Image', 'ItemsPortfolio');
$TestModel = new Item();
$result = $TestModel->updateAll(array('published' => true), array('Item.id' => 1));
$this->assertTrue($result);
$result = $TestModel->find('first', array(
'fields' => array('id', 'published'),
'conditions' => array('Item.id' => 1)));
$this->assertEquals(true, $result['Item']['published']);
}
/**
* testUpdateBoolean
*
* return @void
*/
public function testUpdateBoolean() {
$this->loadFixtures('Item', 'Syfile', 'Portfolio', 'Image', 'ItemsPortfolio');
$TestModel = new Item();
$result = $TestModel->save(array('published' => true, 'id' => 1));
$this->assertTrue((boolean)$result);
$result = $TestModel->find('first', array(
'fields' => array('id', 'published'),
'conditions' => array('Item.id' => 1)));
$this->assertEquals(true, $result['Item']['published']);
}
} }