Skip to content

Commit afbd64c

Browse files
authored
Merge pull request #127 from BeMySlaveDarlin/issue/126-fix-update-column-name
#126 - Fix update column name alg
2 parents 4a57782 + 34e6d6e commit afbd64c

File tree

6 files changed

+47
-27
lines changed

6 files changed

+47
-27
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# [2.2.3](https://github.com/phalcon/migrations/releases/tag/v2.2.3) (2021-08-11)
22
- Changed column modification behaviour during table morph ([#97](https://github.com/phalcon/migrations/issues/97))
33
- Updated composer packages ([#124](https://github.com/phalcon/migrations/pull/124))
4+
- Changed column modification behaviour during table morph ([#126](https://github.com/phalcon/migrations/issues/126))
45

56
# [2.2.2](https://github.com/phalcon/migrations/releases/tag/v2.2.2) (2021-08-08)
67
- Integrated nette/php-generator, changed algorithm of migrations generation ([#90](https://github.com/phalcon/migrations/issues/90))

psalm.xml.dist

+1
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@
1515
<issueHandlers>
1616
<MethodSignatureMismatch errorLevel="info" />
1717
<InvalidArgument errorLevel="info" />
18+
<PossiblyUndefinedArrayOffset errorLevel="info" />
1819
</issueHandlers>
1920
</psalm>

src/Db/Adapter/Pdo/PdoPostgresql.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,8 @@ public function describeIndexes(string $table, string $schema = null): array
118118
foreach ($indexes as $name => $index) {
119119
$indexObjects[$name] = new Index(
120120
$name,
121-
$index['columns'] ?? [],
122-
$index['type'] ?? ''
121+
$index['columns'],
122+
$index['type']
123123
);
124124
}
125125

src/Db/FieldDefinition.php

+11-5
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,16 @@ public function isChangedName(FieldDefinition $comparingFieldDefinition): bool
126126

127127
public function isChangedData(FieldDefinition $comparingFieldDefinition): bool
128128
{
129-
return $this->currentColumn->getType() !== $comparingFieldDefinition->getColumn()->getType() ||
130-
$this->currentColumn->getSize() !== $comparingFieldDefinition->getColumn()->getSize() ||
131-
$this->currentColumn->isNotNull() !== $comparingFieldDefinition->getColumn()->isNotNull() ||
132-
$this->currentColumn->getDefault() !== $comparingFieldDefinition->getColumn()->getDefault() ||
133-
$this->currentColumn->isUnsigned() !== $comparingFieldDefinition->getColumn()->isUnsigned();
129+
$paramsToCheck = get_class_methods(ColumnInterface::class);
130+
unset($paramsToCheck['getName']);
131+
132+
$comparingFieldColumn = $comparingFieldDefinition->getColumn();
133+
foreach ($paramsToCheck as $method) {
134+
if ($this->currentColumn->$method() !== $comparingFieldColumn->$method()) {
135+
return true;
136+
}
137+
}
138+
139+
return false;
134140
}
135141
}

tests/mysql/MigrationsCest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ public function updateColumnUnsigned(MysqlTester $mysqlTester): void
445445

446446
$columns = $mysqlTester->getPhalconDb()->describeColumns($tableName);
447447

448-
$mysqlTester->asserttrue($columns[0]->isUnsigned());
448+
$mysqlTester->assertTrue($columns[0]->isUnsigned());
449449
}
450450

451451
public function nullableTimestamp(MysqlTester $I): void

tests/unit/Db/FieldDefinitionTest.php

+31-19
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,22 @@
1919

2020
final class FieldDefinitionTest extends Unit
2121
{
22-
public const OLD_COLUMN_NAME = 'login';
23-
public const NEW_COLUMN_NAME = 'username';
22+
public const COLUMN_NAME = 'login';
2423
public const COLUMN_DEF = [
2524
'type' => Column::TYPE_VARCHAR,
2625
'notNull' => true,
2726
'size' => 2047,
2827
'after' => 'id',
2928
];
29+
30+
public const NEW_COLUMN_NAME = 'username';
31+
public const NEW_COLUMN_DEF = [
32+
'type' => Column::TYPE_VARCHAR,
33+
'notNull' => true,
34+
'size' => 4096,
35+
'after' => 'id',
36+
];
37+
3038
public const PREV_COLUMN = 'id';
3139
public const ID_COLUMN_DEF = [
3240
'type' => Column::TYPE_INTEGER,
@@ -35,6 +43,7 @@ final class FieldDefinitionTest extends Unit
3543
'size' => 11,
3644
'first' => true,
3745
];
46+
3847
public const NEXT_COLUMN = 'password';
3948
public const PASSWORD_COLUMN_DEF = [
4049
'type' => Column::TYPE_VARCHAR,
@@ -44,15 +53,15 @@ final class FieldDefinitionTest extends Unit
4453

4554
public function testCreate(): void
4655
{
47-
$column = new Column(self::OLD_COLUMN_NAME, self::COLUMN_DEF);
56+
$column = new Column(self::COLUMN_NAME, self::COLUMN_DEF);
4857
$fieldDefinition = new FieldDefinition($column);
4958

5059
$this->assertSame($column->getName(), $fieldDefinition->getName());
5160
}
5261

5362
public function testSetPrevAndNext(): void
5463
{
55-
$column = new Column(self::OLD_COLUMN_NAME, self::COLUMN_DEF);
64+
$column = new Column(self::COLUMN_NAME, self::COLUMN_DEF);
5665
$fieldDefinition = new FieldDefinition($column);
5766

5867
$prevColumn = new Column(self::PREV_COLUMN, self::ID_COLUMN_DEF);
@@ -69,32 +78,35 @@ public function testSetPrevAndNext(): void
6978

7079
public function testNameChanged(): void
7180
{
72-
$localFields = [];
73-
$column = new Column(self::OLD_COLUMN_NAME, self::COLUMN_DEF);
81+
$column = new Column(self::COLUMN_NAME, self::COLUMN_DEF);
82+
$columnChanged = new Column(self::NEW_COLUMN_NAME, self::COLUMN_DEF);
83+
7484
$fieldDefinition = new FieldDefinition($column);
85+
$fieldDefinitionChanged = new FieldDefinition($columnChanged);
86+
7587
$prevFieldDefinition = $this->createPrev($fieldDefinition);
7688
$nextFieldDefinition = $this->createNext($fieldDefinition);
7789

90+
$localFields = [];
7891
$localFields[$fieldDefinition->getName()] = $fieldDefinition;
7992
$localFields[$prevFieldDefinition->getName()] = $prevFieldDefinition;
8093
$localFields[$nextFieldDefinition->getName()] = $nextFieldDefinition;
8194

82-
$fields = [];
83-
$columnChanged = new Column(self::NEW_COLUMN_NAME, self::COLUMN_DEF);
84-
$fieldDefinitionChanged = new FieldDefinition($columnChanged);
85-
$prevFieldDefinitionChanged = $this->createPrev($fieldDefinitionChanged);
86-
$nextFieldDefinitionChanged = $this->createNext($fieldDefinitionChanged);
95+
$pairedDefinition = $fieldDefinitionChanged->getPairedDefinition($localFields);
8796

88-
$fields[$fieldDefinitionChanged->getName()] = $fieldDefinitionChanged;
89-
$fields[$prevFieldDefinitionChanged->getName()] = $prevFieldDefinitionChanged;
90-
$fields[$nextFieldDefinitionChanged->getName()] = $nextFieldDefinitionChanged;
97+
$this->assertNull($pairedDefinition);
98+
}
9199

92-
$pairedDefinition = $fieldDefinition->getPairedDefinition($fields);
93-
$localPairedDefinition = $fieldDefinitionChanged->getPairedDefinition($localFields);
100+
public function testIsChangedData(): void
101+
{
102+
$column = new Column(self::COLUMN_NAME, self::COLUMN_DEF);
103+
$fieldDefinition = new FieldDefinition($column);
104+
105+
$columnChanged = new Column(self::NEW_COLUMN_NAME, self::NEW_COLUMN_DEF);
106+
$fieldDefinitionChanged = new FieldDefinition($columnChanged);
94107

95-
$this->assertFalse($pairedDefinition->isChangedData($localPairedDefinition));
96-
$this->assertTrue($pairedDefinition->isChangedName($localPairedDefinition));
97-
$this->assertTrue($pairedDefinition->isChanged($localPairedDefinition));
108+
$this->assertFalse($fieldDefinition->isChangedData($fieldDefinition));
109+
$this->assertTrue($fieldDefinition->isChangedData($fieldDefinitionChanged));
98110
}
99111

100112
private function createPrev(FieldDefinition $fieldDefinition): FieldDefinition

0 commit comments

Comments
 (0)