Skip to content

Commit b8376e0

Browse files
committed
Fix bug + failing tests
1 parent 1ce997f commit b8376e0

File tree

7 files changed

+37
-30
lines changed

7 files changed

+37
-30
lines changed

src/lib/migrations/BaseMigrationBuilder.php

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ function (string $unknownColumn) {
199199

200200
$columnsForChange = array_intersect($wantNames, $haveNames);
201201

202-
$this->handleColumnsRename($columnsForCreate, $columnsForDrop, $this->newColumns);
202+
$fromColNameToColName = $this->handleColumnsRename($columnsForCreate, $columnsForDrop, $this->newColumns);
203203

204204
if ($this->model->drop) {
205205
$this->newColumns = [];
@@ -219,7 +219,9 @@ function (string $unknownColumn) {
219219
}
220220

221221
if (!$relation) {
222-
$this->buildIndexChanges();
222+
$this->buildIndexChanges($fromColNameToColName);
223+
} else {
224+
$this->migrationForRenameColumn($fromColNameToColName);
223225
}
224226

225227
$this->buildColumnsDrop($columnsForDrop);
@@ -304,7 +306,7 @@ abstract protected function findTableIndexes():array;
304306

305307
abstract public function handleCommentsMigration();
306308

307-
protected function buildIndexChanges():void
309+
protected function buildIndexChanges(array $fromColNameToColName): void
308310
{
309311
$haveIndexes = $this->findTableIndexes();
310312
$wantIndexes = $this->model->indexes;
@@ -339,6 +341,9 @@ function ($idx) use ($wantIndexes) {
339341
$this->migration->addUpCode($this->recordBuilder->dropIndex($tableName, $index->name))
340342
->addDownCode($downCode);
341343
}
344+
345+
$this->migrationForRenameColumn($fromColNameToColName);
346+
342347
foreach ($forCreate as $index) {
343348
$upCode = $index->isUnique
344349
? $this->recordBuilder->addUniqueIndex($tableName, $index->name, $index->columns)
@@ -620,13 +625,15 @@ protected function shouldCompareComment(ColumnSchema $desired): bool
620625
* @param array $columnsForCreate
621626
* @param array $columnsForDrop
622627
* @param $newColumns
628+
* @return array key is previous/old column name and value is new column name
623629
*/
624-
public function handleColumnsRename(array &$columnsForCreate, array &$columnsForDrop, $newColumns)
630+
public function handleColumnsRename(array &$columnsForCreate, array &$columnsForDrop, $newColumns): array
625631
{
626632
$keys = [];
633+
$fromColNameToColName = [];
627634
$existingColumns = $this->tableSchema->columns;
628635
if (count($existingColumns) !== count($newColumns)) {
629-
return;
636+
return $fromColNameToColName;
630637
}
631638
$existingColumnNames = array_keys($existingColumns);
632639
$newColumnNames = array_flip(array_keys($newColumns));
@@ -649,10 +656,9 @@ public function handleColumnsRename(array &$columnsForCreate, array &$columnsFor
649656
unset($columnsForDrop[$dropKeyOut]);
650657

651658
// TODO check in `required` and `x-index`
652-
653659
// Create ALTER COLUMN NAME query
654-
$this->migration->addUpCode($this->recordBuilder->renameColumn($this->model->tableAlias, $previousColumnName, $column->name))
655-
->addDownCode($this->recordBuilder->renameColumn($this->model->tableAlias, $column->name, $previousColumnName));
660+
// see `migrationForRenameColumn()`
661+
$fromColNameToColName[$previousColumnName] = $column->name;
656662
}
657663
}
658664
}
@@ -661,5 +667,14 @@ public function handleColumnsRename(array &$columnsForCreate, array &$columnsFor
661667
foreach ($keys as $key) {
662668
unset($columnsForCreate[$key]);
663669
}
670+
return $fromColNameToColName;
671+
}
672+
673+
public function migrationForRenameColumn(array $fromColNameToColName): void
674+
{
675+
foreach ($fromColNameToColName as $previousColumnName => $columnName) {
676+
$this->migration->addUpCode($this->recordBuilder->renameColumn($this->model->tableAlias, $previousColumnName, $columnName))
677+
->addDownCode($this->recordBuilder->renameColumn($this->model->tableAlias, $columnName, $previousColumnName));
678+
}
664679
}
665680
}

tests/specs/change_column_name/maria/app/migrations_maria_db/m200000_000000_change_table_column_name_changes.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@ class m200000_000000_change_table_column_name_changes extends \yii\db\Migration
77
{
88
public function up()
99
{
10-
$this->db->createCommand('ALTER TABLE {{%column_name_changes}} ADD COLUMN updated_at_2 datetime NOT NULL')->execute();
11-
$this->dropColumn('{{%column_name_changes}}', 'updated_at');
10+
$this->renameColumn('{{%column_name_changes}}', 'updated_at', 'updated_at_2');
1211
}
1312

1413
public function down()
1514
{
16-
$this->addColumn('{{%column_name_changes}}', 'updated_at', $this->datetime()->notNull());
17-
$this->dropColumn('{{%column_name_changes}}', 'updated_at_2');
15+
$this->renameColumn('{{%column_name_changes}}', 'updated_at_2', 'updated_at');
1816
}
1917
}

tests/specs/change_column_name/mysql/app/migrations_mysql_db/m200000_000000_change_table_column_name_changes.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@ class m200000_000000_change_table_column_name_changes extends \yii\db\Migration
77
{
88
public function up()
99
{
10-
$this->db->createCommand('ALTER TABLE {{%column_name_changes}} ADD COLUMN updated_at_2 datetime NOT NULL')->execute();
11-
$this->dropColumn('{{%column_name_changes}}', 'updated_at');
10+
$this->renameColumn('{{%column_name_changes}}', 'updated_at', 'updated_at_2');
1211
}
1312

1413
public function down()
1514
{
16-
$this->addColumn('{{%column_name_changes}}', 'updated_at', $this->datetime()->notNull());
17-
$this->dropColumn('{{%column_name_changes}}', 'updated_at_2');
15+
$this->renameColumn('{{%column_name_changes}}', 'updated_at_2', 'updated_at');
1816
}
1917
}

tests/specs/change_column_name/pgsql/app/migrations_pgsql_db/m200000_000000_change_table_column_name_changes.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@ class m200000_000000_change_table_column_name_changes extends \yii\db\Migration
77
{
88
public function safeUp()
99
{
10-
$this->db->createCommand('ALTER TABLE {{%column_name_changes}} ADD COLUMN "updated_at_2" timestamp NOT NULL')->execute();
11-
$this->dropColumn('{{%column_name_changes}}', 'updated_at');
10+
$this->renameColumn('{{%column_name_changes}}', 'updated_at', 'updated_at_2');
1211
}
1312

1413
public function safeDown()
1514
{
16-
$this->addColumn('{{%column_name_changes}}', 'updated_at', $this->timestamp()->notNull());
17-
$this->dropColumn('{{%column_name_changes}}', 'updated_at_2');
15+
$this->renameColumn('{{%column_name_changes}}', 'updated_at_2', 'updated_at');
1816
}
1917
}

tests/specs/issue_fix/3_bug_add_remove_property_and_at_the_same_time_change_it_at_x_indexes/mysql/migrations_mysql_db/m200000_000000_change_table_addresses.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,15 @@ class m200000_000000_change_table_addresses extends \yii\db\Migration
77
{
88
public function up()
99
{
10-
$this->addColumn('{{%addresses}}', 'postCode', $this->string(64)->null()->defaultValue(null));
1110
$this->dropIndex('addresses_shortName_postalCode_key', '{{%addresses}}');
11+
$this->renameColumn('{{%addresses}}', 'postalCode', 'postCode');
1212
$this->createIndex('addresses_shortName_postCode_key', '{{%addresses}}', ["shortName", "postCode"], true);
13-
$this->dropColumn('{{%addresses}}', 'postalCode');
1413
}
1514

1615
public function down()
1716
{
18-
$this->addColumn('{{%addresses}}', 'postalCode', $this->string(64)->null()->defaultValue(null));
1917
$this->dropIndex('addresses_shortName_postCode_key', '{{%addresses}}');
18+
$this->renameColumn('{{%addresses}}', 'postCode', 'postalCode');
2019
$this->createIndex('addresses_shortName_postalCode_key', '{{%addresses}}', ["shortName", "postalCode"], true);
21-
$this->dropColumn('{{%addresses}}', 'postCode');
2220
}
2321
}

tests/unit/Issue58FixTest.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use tests\DbTestCase;
66
use Yii;
7-
use yii\base\InvalidArgumentException;
87
use yii\helpers\FileHelper;
98

109
// This class contains tests for various issues present at GitHub
@@ -900,7 +899,7 @@ public function test58Move1Add1Del1Col()
900899
description:
901900
type: boolean
902901
col_6:
903-
type: boolean
902+
type: integer
904903
paths:
905904
'/':
906905
get:
@@ -919,7 +918,7 @@ class m200000_000000_change_table_fruits extends \yii\db\Migration
919918
{
920919
public function up()
921920
{
922-
$this->addColumn('{{%fruits}}', 'col_6', $this->boolean()->null()->defaultValue(null));
921+
$this->addColumn('{{%fruits}}', 'col_6', $this->integer()->null()->defaultValue(null));
923922
$this->dropColumn('{{%fruits}}', 'size');
924923
$this->alterColumn('{{%fruits}}', 'colour', $this->tinyInteger(1)->null()->defaultValue(null)->after('id'));
925924
}
@@ -962,7 +961,8 @@ public function test58Add1Del1ColAtSamePosition()
962961
name:
963962
type: boolean
964963
description_new:
965-
type: boolean
964+
type: integer
965+
default: 7
966966
colour:
967967
type: boolean
968968
size:
@@ -985,7 +985,7 @@ class m200000_000000_change_table_fruits extends \yii\db\Migration
985985
{
986986
public function up()
987987
{
988-
$this->addColumn('{{%fruits}}', 'description_new', $this->boolean()->null()->defaultValue(null)->after('name'));
988+
$this->addColumn('{{%fruits}}', 'description_new', $this->integer()->null()->defaultValue(7)->after('name'));
989989
$this->dropColumn('{{%fruits}}', 'description');
990990
}
991991

tests/unit/IssueFixTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -742,14 +742,14 @@ public function test3BugAddRemovePropertyAndAtTheSameTimeChangeItAtXIndexes()
742742
$this->createTestTableFor3BugAddRemovePropertyAndAtTheSameTimeChangeItAtXIndexes();
743743
$testFile = Yii::getAlias("@specs/issue_fix/3_bug_add_remove_property_and_at_the_same_time_change_it_at_x_indexes/index.php");
744744
$this->runGenerator($testFile);
745-
$this->runActualMigrations('mysql', 1);
746745
$actualFiles = FileHelper::findFiles(Yii::getAlias('@app'), [
747746
'recursive' => true,
748747
]);
749748
$expectedFiles = FileHelper::findFiles(Yii::getAlias("@specs/issue_fix/3_bug_add_remove_property_and_at_the_same_time_change_it_at_x_indexes/mysql"), [
750749
'recursive' => true,
751750
]);
752751
$this->checkFiles($actualFiles, $expectedFiles);
752+
$this->runActualMigrations('mysql', 1);
753753
$this->dropTestTableFor3BugAddRemovePropertyAndAtTheSameTimeChangeItAtXIndexes();
754754
}
755755

0 commit comments

Comments
 (0)