Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fix issue where createSchema() would omit primary keys sometimes.

Fix missing primary key SQL when using the primary flag + other indexes.

Fixes #3292
  • Loading branch information...
commit a0a61b5980272ec98dba0f02c9896d23a30d51fc 1 parent 1c0c860
@markstory markstory authored
View
2  lib/Cake/Model/Datasource/DboSource.php
@@ -2984,7 +2984,7 @@ public function createSchema($schema, $tableName = null) {
$tableParameters = array_merge($tableParameters, $this->buildTableParameters($col, $table));
}
}
- if (empty($indexes) && !empty($primary)) {
+ if (!isset($columns['indexes']['PRIMARY']) && !empty($primary)) {
$col = array('PRIMARY' => array('column' => $primary, 'unique' => 1));
$indexes = array_merge($indexes, $this->buildIndex($col, $table));
}
View
46 lib/Cake/Test/Case/Model/Datasource/Database/MysqlTest.php
@@ -878,6 +878,52 @@ public function testTwoColumnsWithPrimaryKey() {
}
/**
+ * Test that the primary flag is handled correctly.
+ *
+ * @return void
+ */
+ public function testCreateSchemaAutoPrimaryKey() {
+ $schema = new CakeSchema();
+ $schema->tables = array(
+ 'no_indexes' => array(
+ 'id' => array('type' => 'integer', 'null' => false, 'key' => 'primary'),
+ 'data' => array('type' => 'integer', 'null' => false),
+ 'indexes' => array(),
+ )
+ );
+ $result = $this->Dbo->createSchema($schema, 'no_indexes');
+ $this->assertContains('PRIMARY KEY (`id`)', $result);
+ $this->assertNotContains('UNIQUE KEY', $result);
+
+ $schema->tables = array(
+ 'primary_index' => array(
+ 'id' => array('type' => 'integer', 'null' => false),
+ 'data' => array('type' => 'integer', 'null' => false),
+ 'indexes' => array(
+ 'PRIMARY' => array('column' => 'id', 'unique' => 1),
+ 'some_index' => array('column' => 'data', 'unique' => 1)
+ ),
+ )
+ );
+ $result = $this->Dbo->createSchema($schema, 'primary_index');
+ $this->assertContains('PRIMARY KEY (`id`)', $result);
+ $this->assertContains('UNIQUE KEY `some_index` (`data`)', $result);
+
+ $schema->tables = array(
+ 'primary_flag_has_index' => array(
+ 'id' => array('type' => 'integer', 'null' => false, 'key' => 'primary'),
+ 'data' => array('type' => 'integer', 'null' => false),
+ 'indexes' => array (
+ 'some_index' => array('column' => 'data', 'unique' => 1)
+ ),
+ )
+ );
+ $result = $this->Dbo->createSchema($schema, 'primary_flag_has_index');
+ $this->assertContains('PRIMARY KEY (`id`)', $result);
+ $this->assertContains('UNIQUE KEY `some_index` (`data`)', $result);
+ }
+
+/**
* Tests that listSources method sends the correct query and parses the result accordingly
* @return void
*/
Please sign in to comment.
Something went wrong with that request. Please try again.