Skip to content

Commit d000fd9

Browse files
committed
Proper [NOT] NULL handling for altering columns in migrations (#977).
1 parent c8f6047 commit d000fd9

File tree

2 files changed

+27
-17
lines changed

2 files changed

+27
-17
lines changed

Provider/src/FirebirdSql.EntityFrameworkCore.Firebird.Tests/Migrations/MigrationsTests.cs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -326,9 +326,10 @@ public async Task AlterColumnNullableToNotNull()
326326
},
327327
};
328328
var batch = await Generate(new[] { operation });
329-
Assert.AreEqual(2, batch.Count());
329+
Assert.AreEqual(3, batch.Count());
330330
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" DROP NOT NULL;"), batch[0].CommandText);
331-
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" TYPE VARCHAR(100) NOT NULL;"), batch[1].CommandText);
331+
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" TYPE VARCHAR(100);"), batch[1].CommandText);
332+
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" SET NOT NULL;"), batch[2].CommandText);
332333
}
333334

334335
[Test]
@@ -370,8 +371,8 @@ public async Task AlterColumnType()
370371
},
371372
};
372373
var batch = await Generate(new[] { operation });
373-
Assert.AreEqual(2, batch.Count());
374-
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" TYPE BIGINT NOT NULL;"), batch[1].CommandText);
374+
Assert.AreEqual(3, batch.Count());
375+
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" TYPE BIGINT;"), batch[1].CommandText);
375376
}
376377

377378
[Test]
@@ -390,10 +391,10 @@ public async Task AlterColumnDefault()
390391
},
391392
};
392393
var batch = await Generate(new[] { operation });
393-
Assert.AreEqual(4, batch.Count());
394-
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" TYPE INTEGER NOT NULL;"), batch[1].CommandText);
395-
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" DROP DEFAULT;"), batch[2].CommandText);
396-
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" SET DEFAULT 20;"), batch[3].CommandText);
394+
Assert.AreEqual(5, batch.Count());
395+
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" TYPE INTEGER;"), batch[1].CommandText);
396+
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" DROP DEFAULT;"), batch[3].CommandText);
397+
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" SET DEFAULT 20;"), batch[4].CommandText);
397398
}
398399

399400
[Test]
@@ -411,8 +412,8 @@ public async Task AlterColumnAddIdentityColumn()
411412
},
412413
};
413414
var batch = await Generate(new[] { operation });
414-
Assert.AreEqual(2, batch.Count());
415-
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" TYPE INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL;"), batch[1].CommandText);
415+
Assert.AreEqual(3, batch.Count());
416+
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" TYPE INTEGER GENERATED BY DEFAULT AS IDENTITY;"), batch[1].CommandText);
416417
}
417418

418419
[Test]
@@ -430,10 +431,10 @@ public async Task AlterColumnAddSequenceTrigger()
430431
},
431432
};
432433
var batch = await Generate(new[] { operation });
433-
Assert.AreEqual(4, batch.Count());
434-
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" TYPE INTEGER NOT NULL;"), batch[1].CommandText);
435-
StringAssert.Contains("rdb$generator_name = ", batch[2].CommandText);
436-
StringAssert.StartsWith("CREATE TRIGGER ", batch[3].CommandText);
434+
Assert.AreEqual(5, batch.Count());
435+
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" TYPE INTEGER;"), batch[1].CommandText);
436+
StringAssert.Contains("rdb$generator_name = ", batch[3].CommandText);
437+
StringAssert.StartsWith("CREATE TRIGGER ", batch[4].CommandText);
437438
}
438439

439440
[Test]
@@ -451,9 +452,9 @@ public async Task AlterColumnRemoveSequenceTrigger()
451452
},
452453
};
453454
var batch = await Generate(new[] { operation });
454-
Assert.AreEqual(3, batch.Count());
455+
Assert.AreEqual(4, batch.Count());
455456
StringAssert.Contains("drop trigger", batch[0].CommandText);
456-
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" TYPE INTEGER NOT NULL;"), batch[2].CommandText);
457+
Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" ALTER COLUMN ""Col"" TYPE INTEGER;"), batch[2].CommandText);
457458
}
458459

459460
[Test]

Provider/src/FirebirdSql.EntityFrameworkCore.Firebird/Migrations/FbMigrationsSqlGenerator.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,18 @@ protected override void Generate(AlterColumnOperation operation, IModel model, M
131131
{
132132
builder.Append(" GENERATED BY DEFAULT AS IDENTITY");
133133
}
134-
builder.Append(operation.IsNullable ? string.Empty : " NOT NULL");
135134
TerminateStatement(builder);
136135

136+
if (!operation.IsNullable)
137+
{
138+
builder.Append("ALTER TABLE ");
139+
builder.Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Table, operation.Schema));
140+
builder.Append(" ALTER COLUMN ");
141+
builder.Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Name));
142+
builder.Append(" SET NOT NULL");
143+
TerminateStatement(builder);
144+
}
145+
137146
if (operation.DefaultValue != null || !string.IsNullOrWhiteSpace(operation.DefaultValueSql))
138147
{
139148
builder.Append("ALTER TABLE ");

0 commit comments

Comments
 (0)