Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

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.