Skip to content

Commit 2f98da0

Browse files
JaBistDuNarrischJaBistDuNarrisch
authored andcommitted
Added string to Postgre default value
1 parent 5944df7 commit 2f98da0

File tree

3 files changed

+37
-9
lines changed

3 files changed

+37
-9
lines changed

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ public void GetColumns_DataTypeResolveSucceeds()
2929
const string int32ColumnName1 = "int32column1";
3030
const string int64ColumnName1 = "int64column1";
3131
const string stringColumnName1 = "stringcolumn1";
32-
const string stringColumnName2 = "stringcolumn2";
3332

3433
// Should be extended by remaining types
3534
Provider.AddTable(testTableName,
@@ -41,10 +40,9 @@ public void GetColumns_DataTypeResolveSucceeds()
4140
// other boolean default values are tested in another test
4241
new Column(booleanColumnName1, DbType.Boolean, true),
4342

44-
new Column(int32ColumnName1, DbType.Int32, 43),
45-
new Column(int64ColumnName1, DbType.Int64, 88),
46-
new Column(stringColumnName1, DbType.String),
47-
new Column(stringColumnName2, DbType.String) { Size = 30 }
43+
new Column(int32ColumnName1, DbType.Int32, defaultValue: 43),
44+
new Column(int64ColumnName1, DbType.Int64, defaultValue: 88),
45+
new Column(stringColumnName1, DbType.String, defaultValue: "Hello")
4846
);
4947

5048
// Act
@@ -59,7 +57,6 @@ public void GetColumns_DataTypeResolveSucceeds()
5957
var int32Column1 = columns.Single(x => x.Name == int32ColumnName1);
6058
var int64Column1 = columns.Single(x => x.Name == int64ColumnName1);
6159
var stringColumn1 = columns.Single(x => x.Name == stringColumnName1);
62-
var stringColumn2 = columns.Single(x => x.Name == stringColumnName2);
6360

6461
Assert.That(dateTimeColumn1.DefaultValue, Is.EqualTo(dateTimeDefaultValue));
6562
Assert.That(dateTimeColumn2.DefaultValue, Is.EqualTo(dateTimeDefaultValue));
@@ -68,5 +65,6 @@ public void GetColumns_DataTypeResolveSucceeds()
6865
Assert.That(booleanColumn1.DefaultValue, Is.True);
6966
Assert.That(int32Column1.DefaultValue, Is.EqualTo(43));
7067
Assert.That(int64Column1.DefaultValue, Is.EqualTo(88));
68+
Assert.That(stringColumn1.DefaultValue, Is.EqualTo("Hello"));
7169
}
7270
}

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

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -391,15 +391,15 @@ public override Column[] GetColumns(string table)
391391
{
392392
if (column.Type == DbType.Int16 || column.Type == DbType.Int32 || column.Type == DbType.Int64)
393393
{
394-
column.DefaultValue = long.Parse(column.DefaultValue.ToString());
394+
column.DefaultValue = long.Parse(defaultValueString.ToString());
395395
}
396396
else if (column.Type == DbType.UInt16 || column.Type == DbType.UInt32 || column.Type == DbType.UInt64)
397397
{
398-
column.DefaultValue = ulong.Parse(column.DefaultValue.ToString());
398+
column.DefaultValue = ulong.Parse(defaultValueString.ToString());
399399
}
400400
else if (column.Type == DbType.Double || column.Type == DbType.Single)
401401
{
402-
column.DefaultValue = double.Parse(column.DefaultValue.ToString());
402+
column.DefaultValue = double.Parse(defaultValueString.ToString());
403403
}
404404
else if (column.Type == DbType.Boolean)
405405
{
@@ -464,6 +464,28 @@ public override Column[] GetColumns(string table)
464464
{
465465
column.DefaultValue = decimal.Parse(defaultValueString, CultureInfo.InvariantCulture);
466466
}
467+
else if (column.Type == DbType.String)
468+
{
469+
if (defaultValueString.StartsWith("'"))
470+
{
471+
var match = stripSingleQuoteRegEx.Match(defaultValueString);
472+
473+
if (!match.Success)
474+
{
475+
throw new Exception("Postgre default value for date time: We expected single quotes around the date time string.");
476+
}
477+
478+
column.DefaultValue = match.Value;
479+
}
480+
else
481+
{
482+
throw new NotImplementedException();
483+
}
484+
}
485+
else
486+
{
487+
throw new NotImplementedException();
488+
}
467489
}
468490

469491
columns.Add(column);

src/Migrator/Providers/TransformationProvider.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1784,6 +1784,14 @@ public virtual List<string> GetPrimaryKeys(IEnumerable<Column> columns)
17841784

17851785
public virtual void AddColumnDefaultValue(string table, string column, object defaultValue)
17861786
{
1787+
if (defaultValue is DateTime defaultValueDateTime)
1788+
{
1789+
if (defaultValueDateTime.Kind != DateTimeKind.Utc)
1790+
{
1791+
throw new Exception("We only accept UTC values as default DateTime values.");
1792+
}
1793+
}
1794+
17871795
table = QuoteTableNameIfRequired(table);
17881796
column = this.QuoteColumnNameIfRequired(column);
17891797
var def = Dialect.Default(defaultValue);

0 commit comments

Comments
 (0)