Skip to content

Commit

Permalink
Prevent sql error for uuids if id is specified as null
Browse files Browse the repository at this point in the history
if the primary key is present in the data to be saved as null - prevent
passing the same key (id) twice and therefore triggering an sql error.

Signed-off-by: Mark Story <mark@mark-story.com>
  • Loading branch information
AD7six authored and markstory committed Mar 17, 2010
1 parent 01a5738 commit bc990f4
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
7 changes: 6 additions & 1 deletion cake/libs/model/model.php
Expand Up @@ -1273,7 +1273,12 @@ function save($data = null, $validate = true, $fieldList = array()) {
($fInfo['type'] === 'string' || $fInfo['type'] === 'binary')
);
if (empty($this->data[$this->alias][$this->primaryKey]) && $isUUID) {
list($fields[], $values[]) = array($this->primaryKey, String::uuid());
if (array_key_exists($this->primaryKey, $this->data[$this->alias])) {
$j = array_search($this->primaryKey, $fields);
$values[$j] = String::uuid();
} else {
list($fields[], $values[]) = array($this->primaryKey, String::uuid());
}
}
break;
}
Expand Down
23 changes: 23 additions & 0 deletions cake/tests/cases/libs/model/model_write.test.php
Expand Up @@ -161,6 +161,29 @@ function testAutoSaveUuid() {
);
$this->assertEqual(strlen($result['Uuid']['id']), 36);
}
/**
* Ensure that if the id key is null but present the save doesn't fail (with an
* x sql error: "Column id specified twice")
*
* @return void
* @access public
*/
function testSaveUuidNull() {
// SQLite does not support non-integer primary keys
$this->skipIf($this->db->config['driver'] == 'sqlite');

$this->loadFixtures('Uuid');
$TestModel =& new Uuid();

$TestModel->save(array('title' => 'Test record', 'id' => null));
$result = $TestModel->findByTitle('Test record');
$this->assertEqual(
array_keys($result['Uuid']),
array('id', 'title', 'count', 'created', 'updated')
);
$this->assertEqual(strlen($result['Uuid']['id']), 36);
}

/**
* testZeroDefaultFieldValue method
*
Expand Down

0 comments on commit bc990f4

Please sign in to comment.