diff --git a/src/Migrator.Tests/Providers/PostgreSQL/PostgreSQLTransformationProvider_GetColumnsDefaultValueTests.cs b/src/Migrator.Tests/Providers/PostgreSQL/PostgreSQLTransformationProvider_GetColumnsDefaultValueTests.cs index 3bbc9237..fc5f1931 100644 --- a/src/Migrator.Tests/Providers/PostgreSQL/PostgreSQLTransformationProvider_GetColumnsDefaultValueTests.cs +++ b/src/Migrator.Tests/Providers/PostgreSQL/PostgreSQLTransformationProvider_GetColumnsDefaultValueTests.cs @@ -13,7 +13,7 @@ public class PostgreSQLTransformationProvider_GetColumnsDefaultTypeTests : Postg private const decimal DecimalDefaultValue = 14.56565m; [Test] - public void GetColumns_DataTypeResolveSucceeds() + public void GetColumns_DefaultValues_Succeeds() { // Arrange var dateTimeDefaultValue = new DateTime(2000, 1, 2, 3, 4, 5, DateTimeKind.Utc); @@ -71,4 +71,48 @@ public void GetColumns_DataTypeResolveSucceeds() Assert.That(stringColumn1.DefaultValue, Is.EqualTo("Hello")); Assert.That(binarycolumn1.DefaultValue, Is.EqualTo(new byte[] { 12, 32, 34 })); } + + // 1 will coerce to true on inserts but not for default values in Postgre SQL - same for 0 to false + // so we do not test it here + [TestCase("true", true)] + [TestCase("TRUE", true)] + [TestCase("t", true)] + [TestCase("T", true)] + [TestCase("yes", true)] + [TestCase("YES", true)] + [TestCase("y", true)] + [TestCase("Y", true)] + [TestCase("on", true)] + [TestCase("ON", true)] + [TestCase("false", false)] + [TestCase("FALSE", false)] + [TestCase("f", false)] + [TestCase("F", false)] + [TestCase("false", false)] + [TestCase("FALSE", false)] + [TestCase("n", false)] + [TestCase("N", false)] + [TestCase("off", false)] + [TestCase("OFF", false)] + public void GetColumns_DefaultValueBooleanValues_Succeeds(object inboundBooleanDefaultValue, bool outboundBooleanDefaultValue) + { + // Arrange + var dateTimeDefaultValue = new DateTime(2000, 1, 2, 3, 4, 5, DateTimeKind.Utc); + var guidDefaultValue = Guid.NewGuid(); + + const string testTableName = "MyDefaultTestTable"; + const string booleanColumnName1 = "booleancolumn1"; + + Provider.AddTable(testTableName, + new Column(booleanColumnName1, DbType.Boolean) { DefaultValue = inboundBooleanDefaultValue } + ); + + // Act + var columns = Provider.GetColumns(testTableName); + + // Assert + var booleanColumn1 = columns.Single(x => x.Name == booleanColumnName1); + + Assert.That(booleanColumn1.DefaultValue, Is.EqualTo(outboundBooleanDefaultValue)); + } } diff --git a/src/Migrator/Framework/Column.cs b/src/Migrator/Framework/Column.cs index 765a98ac..3a444a20 100644 --- a/src/Migrator/Framework/Column.cs +++ b/src/Migrator/Framework/Column.cs @@ -171,7 +171,7 @@ public object DefaultValue { if (defaultValueDateTime.Kind != DateTimeKind.Utc) { - throw new Exception("We only accept UTC values as default DateTime values."); + throw new Exception("Only UTC values are accepted as default DateTime values."); } } diff --git a/src/Migrator/Providers/TransformationProvider.cs b/src/Migrator/Providers/TransformationProvider.cs index f7f6b9e6..b06d0a25 100644 --- a/src/Migrator/Providers/TransformationProvider.cs +++ b/src/Migrator/Providers/TransformationProvider.cs @@ -1721,6 +1721,7 @@ public virtual string QuoteColumnNameIfRequired(string name) { return Dialect.Quote(name); } + return name; } @@ -1730,6 +1731,7 @@ public virtual string QuoteTableNameIfRequired(string name) { return Dialect.Quote(name); } + return name; } @@ -1793,7 +1795,7 @@ public virtual void AddColumnDefaultValue(string table, string column, object de } table = QuoteTableNameIfRequired(table); - column = this.QuoteColumnNameIfRequired(column); + column = QuoteColumnNameIfRequired(column); var def = Dialect.Default(defaultValue); ExecuteNonQuery(string.Format("ALTER TABLE {0} ADD DEFAULT('{1}') FOR {2}", table, def, column)); }