diff --git a/EF6.PG.Tests/EntityFrameworkMigrationTests.cs b/EF6.PG.Tests/EntityFrameworkMigrationTests.cs index 3fde9fb..224bafe 100644 --- a/EF6.PG.Tests/EntityFrameworkMigrationTests.cs +++ b/EF6.PG.Tests/EntityFrameworkMigrationTests.cs @@ -217,6 +217,20 @@ public void DatabaseExistsCreateDelete() [Test] public void AddColumnOperation() + { + var operations = new List(); + operations.Add(new AddColumnOperation("tableName", new ColumnModel(PrimitiveTypeKind.Double) + { + Name = "columnName", + IsNullable = false + })); + var statments = new NpgsqlMigrationSqlGenerator().Generate(operations, _backendVersion.ToString()); + Assert.AreEqual(1, statments.Count()); + Assert.AreEqual("ALTER TABLE \"tableName\" ADD \"columnName\" float8 NOT NULL DEFAULT 0", statments.ElementAt(0).Sql); + } + + [Test] + public void AddColumnOperationNullable() { var operations = new List(); operations.Add(new AddColumnOperation("tableName", new ColumnModel(PrimitiveTypeKind.Double) @@ -262,7 +276,23 @@ public void AlterColumnOperation() var operations = new List(); operations.Add(new AlterColumnOperation("tableName", new ColumnModel(PrimitiveTypeKind.Double) { - Name = "columnName" + Name = "columnName", + IsNullable = false + }, false)); + var statments = new NpgsqlMigrationSqlGenerator().Generate(operations, _backendVersion.ToString()); + Assert.AreEqual(3, statments.Count()); + Assert.AreEqual("ALTER TABLE \"tableName\" ALTER COLUMN \"columnName\" TYPE float8", statments.ElementAt(0).Sql); + Assert.AreEqual("ALTER TABLE \"tableName\" ALTER COLUMN \"columnName\" SET NOT NULL", statments.ElementAt(1).Sql); + Assert.AreEqual("ALTER TABLE \"tableName\" ALTER COLUMN \"columnName\" SET DEFAULT 0", statments.ElementAt(2).Sql); + } + + [Test] + public void AlterColumnOperationNullable() + { + var operations = new List(); + operations.Add(new AlterColumnOperation("tableName", new ColumnModel(PrimitiveTypeKind.Double) + { + Name = "columnName", }, false)); var statments = new NpgsqlMigrationSqlGenerator().Generate(operations, _backendVersion.ToString()); Assert.AreEqual(3, statments.Count()); @@ -335,7 +365,7 @@ public void CreateTableOperation() Assert.AreEqual("CREATE SCHEMA IF NOT EXISTS \"someSchema\"", statments.ElementAt(0).Sql); else Assert.AreEqual("CREATE SCHEMA \"someSchema\"", statments.ElementAt(0).Sql); - Assert.AreEqual("CREATE TABLE \"someSchema\".\"someTable\"(\"SomeString\" varchar(233) NOT NULL,\"AnotherString\" text,\"SomeBytes\" bytea,\"SomeLong\" serial8,\"SomeDateTime\" timestamp)", statments.ElementAt(1).Sql); + Assert.AreEqual("CREATE TABLE \"someSchema\".\"someTable\"(\"SomeString\" varchar(233) NOT NULL DEFAULT '',\"AnotherString\" text,\"SomeBytes\" bytea,\"SomeLong\" serial8,\"SomeDateTime\" timestamp)", statments.ElementAt(1).Sql); } [Test] diff --git a/EF6.PG/NpgsqlMigrationSqlGenerator.cs b/EF6.PG/NpgsqlMigrationSqlGenerator.cs index c3f26e0..e41601a 100644 --- a/EF6.PG/NpgsqlMigrationSqlGenerator.cs +++ b/EF6.PG/NpgsqlMigrationSqlGenerator.cs @@ -292,6 +292,11 @@ protected virtual void Convert(AlterColumnOperation alterColumnOperation) throw new NotImplementedException("Not supporting creating IsIdentity for " + alterColumnOperation.Column.Type); } } + else if(alterColumnOperation.Column.IsNullable==false && alterColumnOperation.Column.ClrDefaultValue != null) + { + sql.Append(" SET DEFAULT "); + AppendValue(alterColumnOperation.Column.ClrDefaultValue, sql); + } else sql.Append(" DROP DEFAULT"); AddStatment(sql); @@ -551,6 +556,11 @@ void AppendColumn(ColumnModel column, StringBuilder sql) break; } } + else if (column.IsNullable == false && column.ClrDefaultValue != null) + { + sql.Append(" DEFAULT "); + AppendValue(column.ClrDefaultValue, sql); + } } void AppendColumnType(ColumnModel column, StringBuilder sql, bool setSerial)