mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2025-06-26 08:43:41 +00:00
Fix issue where createSchema() would omit primary keys sometimes.
Fix missing primary key SQL when using the primary flag + other indexes. Fixes #3292
This commit is contained in:
parent
1c0c8604c8
commit
a0a61b5980
2 changed files with 47 additions and 1 deletions
lib/Cake
|
@ -2984,7 +2984,7 @@ class DboSource extends DataSource {
|
||||||
$tableParameters = array_merge($tableParameters, $this->buildTableParameters($col, $table));
|
$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));
|
$col = array('PRIMARY' => array('column' => $primary, 'unique' => 1));
|
||||||
$indexes = array_merge($indexes, $this->buildIndex($col, $table));
|
$indexes = array_merge($indexes, $this->buildIndex($col, $table));
|
||||||
}
|
}
|
||||||
|
|
|
@ -877,6 +877,52 @@ class MysqlTest extends CakeTestCase {
|
||||||
$this->assertContains('`user_id` int(11) NOT NULL,', $result);
|
$this->assertContains('`user_id` int(11) NOT NULL,', $result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
* Tests that listSources method sends the correct query and parses the result accordingly
|
||||||
* @return void
|
* @return void
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue