Skip to content

Commit 85aac91

Browse files
committed
Fix bugs + fix failing tests
1 parent 617fdf5 commit 85aac91

File tree

4 files changed

+23
-11
lines changed

4 files changed

+23
-11
lines changed

src/lib/migrations/BaseMigrationBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,5 +554,5 @@ abstract public function handleColumnsPositionsChanges(array $haveNames, array $
554554
* 'FIRST' if column is added at first position
555555
* 'AFTER <columnName>' if column is added in between e.g. if 'email' is added after 'username' then 'AFTER username'
556556
*/
557-
abstract public function findPosition(ColumnSchema $column, bool $forDrop = false): ?string;
557+
abstract public function findPosition(ColumnSchema $column, bool $forDrop = false, bool $forAlter = false): ?string;
558558
}

src/lib/migrations/MysqlMigrationBuilder.php

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ protected function buildColumnChanges(ColumnSchema $current, ColumnSchema $desir
2525
{
2626
$positionCurrent = $positionDesired = null;
2727
if (in_array('position', $changed, true)) {
28-
$positionCurrent = $this->findPosition($current, true);
29-
$positionDesired = $this->findPosition($desired);
28+
$positionDesired = $this->findPosition($desired, false, true);
29+
$positionCurrent = $this->findPosition($desired, true, true);
3030
$key = array_search('position', $changed, true);
3131
if ($key !== false) {
3232
unset($changed[$key]);
@@ -195,8 +195,13 @@ public function checkOrder()
195195
/**
196196
* {@inheritDoc}
197197
*/
198-
public function findPosition(ColumnSchema $column, bool $forDrop = false): ?string
198+
public function findPosition(ColumnSchema $column, bool $forDrop = false, bool $forAlter = false): ?string
199199
{
200+
// if ($column instanceof \cebe\yii2openapi\db\ColumnSchema) {
201+
// if (!$column->isPositionReallyChanged) {
202+
// return null;
203+
// }
204+
// }
200205
// if (!$forDrop) {
201206
// $columnNames = array_keys($this->newColumns);
202207
// $key = array_search($column->name, $columnNames);
@@ -233,17 +238,24 @@ public function findPosition(ColumnSchema $column, bool $forDrop = false): ?stri
233238
// }
234239
// }
235240
// return null;
241+
236242
$columnNames = array_keys($forDrop ? $this->tableSchema->columns : $this->newColumns);
237243

238244
$key = array_search($column->name, $columnNames);
239245
if ($key > 0) {
240246
$prevColName = $columnNames[$key - 1];
241-
242-
if (!$forDrop && !isset($columnNames[$key + 1])) { // if new col is added at last then no need to add 'AFTER' SQL part. This is checked as if next column is present or not
247+
if (($key === count($columnNames) - 1) && !$forAlter) {
243248
return null;
244249
}
245250

246-
if (array_key_exists($prevColName, $this->newColumns)) {
251+
// if (!$forDrop && !isset($columnNames[$key + 1])) { // if new col is added at last then no need to add 'AFTER' SQL part. This is checked as if next column is present or not
252+
// return null;
253+
// }
254+
255+
if (array_key_exists($prevColName, $forDrop ? $this->tableSchema->columns : $this->newColumns)) {
256+
if (($prevColName === $columnNames[count($columnNames) - 1]) && !$forAlter) {
257+
return null;
258+
}
247259
return self::POS_AFTER . ' ' . $prevColName;
248260
}
249261
return null;

src/lib/migrations/PostgresMigrationBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ public function handleColumnsPositionsChanges(array $haveNames, array $wantNames
259259
/**
260260
* {@inheritDoc}
261261
*/
262-
public function findPosition(ColumnSchema $column, bool $forDrop = false): ?string
262+
public function findPosition(ColumnSchema $column, bool $forDrop = false, bool $forAlter = false): ?string
263263
{
264264
return null;
265265
}

tests/unit/IssueFixTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ public function up()
483483
484484
public function down()
485485
{
486-
$this->addColumn('{{%fruits}}', 'size', $this->text()->notNull()->after('colour'));
486+
$this->addColumn('{{%fruits}}', 'size', $this->text()->notNull());
487487
}
488488
}
489489

@@ -646,7 +646,7 @@ public function up()
646646
public function down()
647647
{
648648
$this->addColumn('{{%fruits}}', 'description', $this->text()->notNull()->after('name'));
649-
$this->addColumn('{{%fruits}}', 'colour', $this->text()->notNull());
649+
$this->addColumn('{{%fruits}}', 'colour', $this->text()->notNull()->after('description'));
650650
}
651651
}
652652

@@ -1225,7 +1225,7 @@ public function down()
12251225
$this->alterColumn('{{%fruits}}', 'description', $this->text()->null()->after('name'));
12261226
$this->alterColumn('{{%fruits}}', 'name', $this->text()->null()->after('id'));
12271227
$this->alterColumn('{{%fruits}}', 'colour', $this->text()->null()->after('description'));
1228-
$this->addColumn('{{%fruits}}', 'size', $this->text()->null()->after('colour'));
1228+
$this->addColumn('{{%fruits}}', 'size', $this->text()->null());
12291229
$this->dropColumn('{{%fruits}}', 'col_6');
12301230
}
12311231
}

0 commit comments

Comments
 (0)