Skip to content

Commit 5a91b67

Browse files
authored
Merge pull request #96 from dotnetprojects/boolean-default-values-postgre
Interval default value are now supported in Postgre (set and parsing)
2 parents 4a02a72 + 94ad5ec commit 5a91b67

File tree

4 files changed

+113
-58
lines changed

4 files changed

+113
-58
lines changed

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ public void GetColumns_DefaultValues_Succeeds()
3232
const string stringColumnName1 = "stringcolumn1";
3333
const string binaryColumnName1 = "binarycolumn1";
3434
const string doubleColumnName1 = "doublecolumn1";
35+
const string intervalColumnName1 = "intervalcolumn1";
36+
const string intervalColumnName2 = "intervalcolumn2";
3537

3638
// Should be extended by remaining types
3739
Provider.AddTable(testTableName,
@@ -48,7 +50,9 @@ public void GetColumns_DefaultValues_Succeeds()
4850
new Column(int64ColumnName2, DbType.Int64, defaultValue: 0),
4951
new Column(stringColumnName1, DbType.String, defaultValue: "Hello"),
5052
new Column(binaryColumnName1, DbType.Binary, defaultValue: new byte[] { 12, 32, 34 }),
51-
new Column(doubleColumnName1, DbType.Double, defaultValue: 84.874596565)
53+
new Column(doubleColumnName1, DbType.Double, defaultValue: 84.874596565),
54+
new Column(intervalColumnName1, MigratorDbType.Interval, defaultValue: new TimeSpan(100000, 3, 4, 5, 666)),
55+
new Column(intervalColumnName2, MigratorDbType.Interval, defaultValue: new TimeSpan(0, 0, 0, 0, 666))
5256
);
5357

5458
// Act
@@ -66,6 +70,8 @@ public void GetColumns_DefaultValues_Succeeds()
6670
var stringColumn1 = columns.Single(x => x.Name == stringColumnName1);
6771
var binarycolumn1 = columns.Single(x => x.Name == binaryColumnName1);
6872
var doubleColumn1 = columns.Single(x => x.Name == doubleColumnName1);
73+
var intervalColumn1 = columns.Single(x => x.Name == intervalColumnName1);
74+
var intervalColumn2 = columns.Single(x => x.Name == intervalColumnName2);
6975

7076
Assert.That(dateTimeColumn1.DefaultValue, Is.EqualTo(dateTimeDefaultValue));
7177
Assert.That(dateTimeColumn2.DefaultValue, Is.EqualTo(dateTimeDefaultValue));
@@ -77,6 +83,8 @@ public void GetColumns_DefaultValues_Succeeds()
7783
Assert.That(stringColumn1.DefaultValue, Is.EqualTo("Hello"));
7884
Assert.That(binarycolumn1.DefaultValue, Is.EqualTo(new byte[] { 12, 32, 34 }));
7985
Assert.That(doubleColumn1.DefaultValue, Is.EqualTo(84.874596565));
86+
Assert.That(intervalColumn1.DefaultValue, Is.EqualTo(new TimeSpan(100000, 3, 4, 5, 666)));
87+
Assert.That(intervalColumn2.DefaultValue, Is.EqualTo(new TimeSpan(0, 0, 0, 0, 666)));
8088
}
8189

8290
// 1 will coerce to true on inserts but not for default values in Postgre SQL - same for 0 to false
@@ -104,9 +112,6 @@ public void GetColumns_DefaultValues_Succeeds()
104112
public void GetColumns_DefaultValueBooleanValues_Succeeds(object inboundBooleanDefaultValue, bool outboundBooleanDefaultValue)
105113
{
106114
// Arrange
107-
var dateTimeDefaultValue = new DateTime(2000, 1, 2, 3, 4, 5, DateTimeKind.Utc);
108-
var guidDefaultValue = Guid.NewGuid();
109-
110115
const string testTableName = "MyDefaultTestTable";
111116
const string booleanColumnName1 = "booleancolumn1";
112117

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

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public void GetColumns_DataTypeResolveSucceeds()
2525
const string stringColumnName2 = "stringcolumn2";
2626
const string binaryColumnName1 = "binarycolumn";
2727
const string doubleColumnName1 = "doublecolumn";
28+
const string intervalColumnName1 = "intervalcolumn";
2829

2930
// Should be extended by remaining types
3031
Provider.AddTable(testTableName,
@@ -38,9 +39,11 @@ public void GetColumns_DataTypeResolveSucceeds()
3839
new Column(stringColumnName1, DbType.String),
3940
new Column(stringColumnName2, DbType.String) { Size = 30 },
4041
new Column(binaryColumnName1, DbType.Binary),
41-
new Column(doubleColumnName1, DbType.Double)
42+
new Column(doubleColumnName1, DbType.Double),
43+
new Column(intervalColumnName1, MigratorDbType.Interval)
4244
);
4345

46+
4447
// Act
4548
var columns = Provider.GetColumns(testTableName);
4649

@@ -55,24 +58,26 @@ public void GetColumns_DataTypeResolveSucceeds()
5558
var stringColumn2 = columns.Single(x => x.Name == stringColumnName2);
5659
var binaryColumn1 = columns.Single(x => x.Name == binaryColumnName1);
5760
var doubleColumn1 = columns.Single(x => x.Name == doubleColumnName1);
61+
var intervalColumn1 = columns.Single(x => x.Name == intervalColumnName1);
5862

5963

6064
// Assert
61-
Assert.That(dateTimeColumn1.Type, Is.EqualTo(DbType.DateTime));
65+
Assert.That(dateTimeColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.DateTime));
6266
Assert.That(dateTimeColumn1.Precision, Is.EqualTo(3));
63-
Assert.That(dateTimeColumn2.Type, Is.EqualTo(DbType.DateTime2));
67+
Assert.That(dateTimeColumn2.MigratorDbType, Is.EqualTo(MigratorDbType.DateTime2));
6468
Assert.That(dateTimeColumn2.Precision, Is.EqualTo(6));
65-
Assert.That(decimalColumn1.Type, Is.EqualTo(DbType.Decimal));
69+
Assert.That(decimalColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.Decimal));
6670
Assert.That(decimalColumn1.Precision, Is.EqualTo(19));
6771
Assert.That(decimalColumn1.Scale, Is.EqualTo(5));
68-
Assert.That(guidColumn1.Type, Is.EqualTo(DbType.Guid));
69-
Assert.That(booleanColumn1.Type, Is.EqualTo(DbType.Boolean));
70-
Assert.That(int32Column1.Type, Is.EqualTo(DbType.Int32));
71-
Assert.That(int64column1.Type, Is.EqualTo(DbType.Int64));
72-
Assert.That(stringColumn1.Type, Is.EqualTo(DbType.String));
73-
Assert.That(stringColumn2.Type, Is.EqualTo(DbType.String));
72+
Assert.That(guidColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.Guid));
73+
Assert.That(booleanColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.Boolean));
74+
Assert.That(int32Column1.MigratorDbType, Is.EqualTo(MigratorDbType.Int32));
75+
Assert.That(int64column1.MigratorDbType, Is.EqualTo(MigratorDbType.Int64));
76+
Assert.That(stringColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.String));
77+
Assert.That(stringColumn2.MigratorDbType, Is.EqualTo(MigratorDbType.String));
7478
Assert.That(stringColumn2.Size, Is.EqualTo(30));
75-
Assert.That(binaryColumn1.Type, Is.EqualTo(DbType.Binary));
76-
Assert.That(doubleColumn1.Type, Is.EqualTo(DbType.Double));
79+
Assert.That(binaryColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.Binary));
80+
Assert.That(doubleColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.Double));
81+
Assert.That(intervalColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.Interval));
7782
}
7883
}

src/Migrator/Providers/Impl/PostgreSQL/PostgreSQLDialect.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using DotNetProjects.Migrator.Framework;
2+
using System;
23
using System.Data;
34

45
namespace DotNetProjects.Migrator.Providers.Impl.PostgreSQL;
@@ -112,6 +113,18 @@ public override ITransformationProvider GetTransformationProvider(Dialect dialec
112113
return new PostgreSQLTransformationProvider(dialect, connection, defaultSchema, scope, providerName);
113114
}
114115

116+
public override string Default(object defaultValue)
117+
{
118+
if (defaultValue is TimeSpan timeSpan)
119+
{
120+
var intervalPostgreNotation = $"{(int)timeSpan.TotalHours:D2}:{timeSpan.Minutes:D2}:{timeSpan.Seconds:D2}.{timeSpan.Milliseconds:D3}";
121+
122+
return $"DEFAULT '{intervalPostgreNotation}'";
123+
}
124+
125+
return base.Default(defaultValue);
126+
}
127+
115128
//public override string SqlForProperty(ColumnProperty property, Column column)
116129
//{
117130
// if (property == ColumnProperty.Identity && (column.Type == DbType.Int64 || column.Type == DbType.UInt32 || column.Type == DbType.UInt64))

0 commit comments

Comments
 (0)