Skip to content

Commit a0090f7

Browse files
committed
Fix bugs
1 parent 6fa477f commit a0090f7

File tree

1 file changed

+45
-10
lines changed

1 file changed

+45
-10
lines changed

src/lib/migrations/MysqlMigrationBuilder.php

Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ public function setPositions()
251251
$i = 0;
252252
$haveColumns = $this->tableSchema->columns;
253253
$onlyColumnNames = array_keys($this->newColumns);
254+
$haveNamesOnlyColNames = array_keys($haveColumns);
254255
foreach ($this->newColumns as $columnName => $column) {
255256
/** @var \cebe\yii2openapi\db\ColumnSchema $column */
256257
$column->toPosition = [
@@ -259,7 +260,6 @@ public function setPositions()
259260
'before' => $i === (count($onlyColumnNames) - 1) ? null : $onlyColumnNames[$i + 1],
260261
];
261262

262-
$haveNamesOnlyColNames = array_keys($haveColumns);
263263
if (isset($haveColumns[$columnName])) {
264264
$index = array_search($columnName, $haveNamesOnlyColNames) + 1;
265265
$column->fromPosition = [
@@ -275,6 +275,35 @@ public function setPositions()
275275
$takenIndices = [];
276276
foreach ($this->newColumns as $columnName => $column) {
277277
/** @var \cebe\yii2openapi\db\ColumnSchema $column */
278+
279+
if (count($onlyColumnNames) !== count($haveNamesOnlyColNames)) {
280+
// check if only new columns are added without any explicit position change
281+
$onlyColumnNamesCopy = $onlyColumnNames;
282+
$columnsForCreate = array_diff($onlyColumnNames, $haveNamesOnlyColNames);
283+
foreach ($columnsForCreate as $key => $value) {
284+
$at = array_search($value, $onlyColumnNames);
285+
if (is_int($at)) {
286+
unset($onlyColumnNamesCopy[$at]);
287+
}
288+
}
289+
if ($onlyColumnNamesCopy === $onlyColumnNames) {
290+
continue;
291+
}
292+
293+
$haveNamesOnlyColNamesCopy = $haveNamesOnlyColNames;
294+
$columnsForDrop = array_diff($haveNamesOnlyColNames, $onlyColumnNames);
295+
foreach ($columnsForDrop as $key => $value) {
296+
$at = array_search($value, $haveNamesOnlyColNames);
297+
if (is_int($at)) {
298+
unset($haveNamesOnlyColNamesCopy[$at]);
299+
}
300+
}
301+
if ($haveNamesOnlyColNamesCopy === $haveNamesOnlyColNames) {
302+
continue;
303+
}
304+
}
305+
306+
278307
if (!$column->fromPosition || !$column->toPosition) {
279308
continue;
280309
}
@@ -288,20 +317,26 @@ public function setPositions()
288317
continue;
289318
}
290319

291-
if (!in_array($column->fromPosition['after'], $onlyColumnNames) && !in_array($column->fromPosition['before'], $onlyColumnNames)) { // deleted column
292-
continue;
293-
}
320+
// TODO this does not look correct
321+
// if (!in_array($column->fromPosition['after'], $onlyColumnNames) && !in_array($column->fromPosition['before'], $onlyColumnNames)) { // after and before column are deleted
322+
// continue;
323+
// }
324+
325+
// TODO this does not look correct
326+
// if (!in_array($column->toPosition['after'], $haveNamesOnlyColNames) && !in_array($column->toPosition['before'], $haveNamesOnlyColNames)) { // after and before column are added just now
327+
// continue;
328+
// }
294329

295330
if ($column->fromPosition['index'] === $column->toPosition['index']) {
296331
continue;
297332
}
298333

299-
if ($this->checkAfterPosition($column)) {
300-
continue;
301-
}
302-
if ($this->checkBeforePosition($column)) {
303-
continue;
304-
}
334+
// if ($this->checkAfterPosition($column)) {
335+
// continue;
336+
// }
337+
// if ($this->checkBeforePosition($column)) {
338+
// continue;
339+
// }
305340

306341
// if ($column->fromPosition['before'] === $column->toPosition['before']
307342
//// && $column->fromPosition['index'] !== $column->toPosition['index']

0 commit comments

Comments
 (0)