Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ public void GetColumns_DefaultValues_Succeeds()
const string stringColumnName1 = "stringcolumn1";
const string binaryColumnName1 = "binarycolumn1";
const string doubleColumnName1 = "doublecolumn1";
const string intervalColumnName1 = "intervalcolumn1";
const string intervalColumnName2 = "intervalcolumn2";

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

// Act
Expand All @@ -66,6 +70,8 @@ public void GetColumns_DefaultValues_Succeeds()
var stringColumn1 = columns.Single(x => x.Name == stringColumnName1);
var binarycolumn1 = columns.Single(x => x.Name == binaryColumnName1);
var doubleColumn1 = columns.Single(x => x.Name == doubleColumnName1);
var intervalColumn1 = columns.Single(x => x.Name == intervalColumnName1);
var intervalColumn2 = columns.Single(x => x.Name == intervalColumnName2);

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

// 1 will coerce to true on inserts but not for default values in Postgre SQL - same for 0 to false
Expand Down Expand Up @@ -104,9 +112,6 @@ public void GetColumns_DefaultValues_Succeeds()
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";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public void GetColumns_DataTypeResolveSucceeds()
const string stringColumnName2 = "stringcolumn2";
const string binaryColumnName1 = "binarycolumn";
const string doubleColumnName1 = "doublecolumn";
const string intervalColumnName1 = "intervalcolumn";

// Should be extended by remaining types
Provider.AddTable(testTableName,
Expand All @@ -38,9 +39,11 @@ public void GetColumns_DataTypeResolveSucceeds()
new Column(stringColumnName1, DbType.String),
new Column(stringColumnName2, DbType.String) { Size = 30 },
new Column(binaryColumnName1, DbType.Binary),
new Column(doubleColumnName1, DbType.Double)
new Column(doubleColumnName1, DbType.Double),
new Column(intervalColumnName1, MigratorDbType.Interval)
);


// Act
var columns = Provider.GetColumns(testTableName);

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


// Assert
Assert.That(dateTimeColumn1.Type, Is.EqualTo(DbType.DateTime));
Assert.That(dateTimeColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.DateTime));
Assert.That(dateTimeColumn1.Precision, Is.EqualTo(3));
Assert.That(dateTimeColumn2.Type, Is.EqualTo(DbType.DateTime2));
Assert.That(dateTimeColumn2.MigratorDbType, Is.EqualTo(MigratorDbType.DateTime2));
Assert.That(dateTimeColumn2.Precision, Is.EqualTo(6));
Assert.That(decimalColumn1.Type, Is.EqualTo(DbType.Decimal));
Assert.That(decimalColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.Decimal));
Assert.That(decimalColumn1.Precision, Is.EqualTo(19));
Assert.That(decimalColumn1.Scale, Is.EqualTo(5));
Assert.That(guidColumn1.Type, Is.EqualTo(DbType.Guid));
Assert.That(booleanColumn1.Type, Is.EqualTo(DbType.Boolean));
Assert.That(int32Column1.Type, Is.EqualTo(DbType.Int32));
Assert.That(int64column1.Type, Is.EqualTo(DbType.Int64));
Assert.That(stringColumn1.Type, Is.EqualTo(DbType.String));
Assert.That(stringColumn2.Type, Is.EqualTo(DbType.String));
Assert.That(guidColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.Guid));
Assert.That(booleanColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.Boolean));
Assert.That(int32Column1.MigratorDbType, Is.EqualTo(MigratorDbType.Int32));
Assert.That(int64column1.MigratorDbType, Is.EqualTo(MigratorDbType.Int64));
Assert.That(stringColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.String));
Assert.That(stringColumn2.MigratorDbType, Is.EqualTo(MigratorDbType.String));
Assert.That(stringColumn2.Size, Is.EqualTo(30));
Assert.That(binaryColumn1.Type, Is.EqualTo(DbType.Binary));
Assert.That(doubleColumn1.Type, Is.EqualTo(DbType.Double));
Assert.That(binaryColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.Binary));
Assert.That(doubleColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.Double));
Assert.That(intervalColumn1.MigratorDbType, Is.EqualTo(MigratorDbType.Interval));
}
}
13 changes: 13 additions & 0 deletions src/Migrator/Providers/Impl/PostgreSQL/PostgreSQLDialect.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using DotNetProjects.Migrator.Framework;
using System;
using System.Data;

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

public override string Default(object defaultValue)
{
if (defaultValue is TimeSpan timeSpan)
{
var intervalPostgreNotation = $"{(int)timeSpan.TotalHours:D2}:{timeSpan.Minutes:D2}:{timeSpan.Seconds:D2}.{timeSpan.Milliseconds:D3}";

return $"DEFAULT '{intervalPostgreNotation}'";
}

return base.Default(defaultValue);
}

//public override string SqlForProperty(ColumnProperty property, Column column)
//{
// if (property == ColumnProperty.Identity && (column.Type == DbType.Int64 || column.Type == DbType.UInt32 || column.Type == DbType.UInt64))
Expand Down
Loading
Loading