Fixes #13814: MySQL unique index names can now contain spaces

This commit is contained in:
Chris Harris
2018-01-21 13:27:58 -08:00
committed by Alexander Makarov
parent 940377ce56
commit a2a79a70eb
3 changed files with 14 additions and 3 deletions

View File

@ -4,6 +4,7 @@ Yii Framework 2 Change Log
2.0.14 under development
------------------------
- Enh #13814: MySQL unique index names can now contain spaces (df2)
- Bug #15300: Fixed "Cannot read property 'style' of undefined" error at the error screen (vitorarantes)
- Enh #15426: Added abilitiy to create and drop database views (igravity, vladis84)
- Enh #10186: Use native `hash_equals` in `yii\base\Security::compareString()` if available, throw exception if non-strings are compared (aotd1, samdark)

View File

@ -447,11 +447,11 @@ SQL;
$sql = $this->getCreateTableSql($table);
$uniqueIndexes = [];
$regexp = '/UNIQUE KEY\s+([^\(\s]+)\s*\(([^\(\)]+)\)/mi';
$regexp = '/UNIQUE KEY\s+\`(.+)\`\s*\((\`.+\`)+\)/mi';
if (preg_match_all($regexp, $sql, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
$indexName = str_replace('`', '', $match[1]);
$indexColumns = array_map('trim', explode(',', str_replace('`', '', $match[2])));
$indexName = $match[1];
$indexColumns = array_map('trim', explode('`,`', trim($match[2], '`')));
$uniqueIndexes[$indexName] = $indexColumns;
}
}

View File

@ -531,6 +531,16 @@ abstract class SchemaTest extends DatabaseTestCase
'somecolUnique' => ['somecol'],
'someCol2Unique' => ['someCol2'],
], $uniqueIndexes);
// see https://github.com/yiisoft/yii2/issues/13814
$db->createCommand()->createIndex('another unique index', 'uniqueIndex', 'someCol2', true)->execute();
$uniqueIndexes = $schema->findUniqueIndexes($schema->getTableSchema('uniqueIndex', true));
$this->assertEquals([
'somecolUnique' => ['somecol'],
'someCol2Unique' => ['someCol2'],
'another unique index' => ['someCol2'],
], $uniqueIndexes);
}
public function testContraintTablesExistance()