Skip to content

Commit 25c32c0

Browse files
Merge pull request #93 from dotnetprojects/boolean-default-values-postgre
Boolean default values postgre
2 parents b09d7b4 + 7e88463 commit 25c32c0

File tree

3 files changed

+49
-3
lines changed

3 files changed

+49
-3
lines changed

src/Migrator.Tests/Providers/PostgreSQL/PostgreSQLTransformationProvider_GetColumnsDefaultValueTests.cs

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class PostgreSQLTransformationProvider_GetColumnsDefaultTypeTests : Postg
1313
private const decimal DecimalDefaultValue = 14.56565m;
1414

1515
[Test]
16-
public void GetColumns_DataTypeResolveSucceeds()
16+
public void GetColumns_DefaultValues_Succeeds()
1717
{
1818
// Arrange
1919
var dateTimeDefaultValue = new DateTime(2000, 1, 2, 3, 4, 5, DateTimeKind.Utc);
@@ -71,4 +71,48 @@ public void GetColumns_DataTypeResolveSucceeds()
7171
Assert.That(stringColumn1.DefaultValue, Is.EqualTo("Hello"));
7272
Assert.That(binarycolumn1.DefaultValue, Is.EqualTo(new byte[] { 12, 32, 34 }));
7373
}
74+
75+
// 1 will coerce to true on inserts but not for default values in Postgre SQL - same for 0 to false
76+
// so we do not test it here
77+
[TestCase("true", true)]
78+
[TestCase("TRUE", true)]
79+
[TestCase("t", true)]
80+
[TestCase("T", true)]
81+
[TestCase("yes", true)]
82+
[TestCase("YES", true)]
83+
[TestCase("y", true)]
84+
[TestCase("Y", true)]
85+
[TestCase("on", true)]
86+
[TestCase("ON", true)]
87+
[TestCase("false", false)]
88+
[TestCase("FALSE", false)]
89+
[TestCase("f", false)]
90+
[TestCase("F", false)]
91+
[TestCase("false", false)]
92+
[TestCase("FALSE", false)]
93+
[TestCase("n", false)]
94+
[TestCase("N", false)]
95+
[TestCase("off", false)]
96+
[TestCase("OFF", false)]
97+
public void GetColumns_DefaultValueBooleanValues_Succeeds(object inboundBooleanDefaultValue, bool outboundBooleanDefaultValue)
98+
{
99+
// Arrange
100+
var dateTimeDefaultValue = new DateTime(2000, 1, 2, 3, 4, 5, DateTimeKind.Utc);
101+
var guidDefaultValue = Guid.NewGuid();
102+
103+
const string testTableName = "MyDefaultTestTable";
104+
const string booleanColumnName1 = "booleancolumn1";
105+
106+
Provider.AddTable(testTableName,
107+
new Column(booleanColumnName1, DbType.Boolean) { DefaultValue = inboundBooleanDefaultValue }
108+
);
109+
110+
// Act
111+
var columns = Provider.GetColumns(testTableName);
112+
113+
// Assert
114+
var booleanColumn1 = columns.Single(x => x.Name == booleanColumnName1);
115+
116+
Assert.That(booleanColumn1.DefaultValue, Is.EqualTo(outboundBooleanDefaultValue));
117+
}
74118
}

src/Migrator/Framework/Column.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ public object DefaultValue
171171
{
172172
if (defaultValueDateTime.Kind != DateTimeKind.Utc)
173173
{
174-
throw new Exception("We only accept UTC values as default DateTime values.");
174+
throw new Exception("Only UTC values are accepted as default DateTime values.");
175175
}
176176
}
177177

src/Migrator/Providers/TransformationProvider.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1721,6 +1721,7 @@ public virtual string QuoteColumnNameIfRequired(string name)
17211721
{
17221722
return Dialect.Quote(name);
17231723
}
1724+
17241725
return name;
17251726
}
17261727

@@ -1730,6 +1731,7 @@ public virtual string QuoteTableNameIfRequired(string name)
17301731
{
17311732
return Dialect.Quote(name);
17321733
}
1734+
17331735
return name;
17341736
}
17351737

@@ -1793,7 +1795,7 @@ public virtual void AddColumnDefaultValue(string table, string column, object de
17931795
}
17941796

17951797
table = QuoteTableNameIfRequired(table);
1796-
column = this.QuoteColumnNameIfRequired(column);
1798+
column = QuoteColumnNameIfRequired(column);
17971799
var def = Dialect.Default(defaultValue);
17981800
ExecuteNonQuery(string.Format("ALTER TABLE {0} ADD DEFAULT('{1}') FOR {2}", table, def, column));
17991801
}

0 commit comments

Comments
 (0)