Skip to content

Commit 4a02a72

Browse files
Merge pull request #94 from dotnetprojects/boolean-default-values-postgre
Added double to GetColumns
2 parents 25c32c0 + 39459ab commit 4a02a72

File tree

4 files changed

+27
-5
lines changed

4 files changed

+27
-5
lines changed

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ public void GetColumns_DefaultValues_Succeeds()
2828
const string booleanColumnName1 = "booleancolumn1";
2929
const string int32ColumnName1 = "int32column1";
3030
const string int64ColumnName1 = "int64column1";
31+
const string int64ColumnName2 = "int64column2";
3132
const string stringColumnName1 = "stringcolumn1";
3233
const string binaryColumnName1 = "binarycolumn1";
34+
const string doubleColumnName1 = "doublecolumn1";
3335

3436
// Should be extended by remaining types
3537
Provider.AddTable(testTableName,
@@ -43,8 +45,10 @@ public void GetColumns_DefaultValues_Succeeds()
4345

4446
new Column(int32ColumnName1, DbType.Int32, defaultValue: 43),
4547
new Column(int64ColumnName1, DbType.Int64, defaultValue: 88),
48+
new Column(int64ColumnName2, DbType.Int64, defaultValue: 0),
4649
new Column(stringColumnName1, DbType.String, defaultValue: "Hello"),
47-
new Column(binaryColumnName1, DbType.Binary, defaultValue: new byte[] { 12, 32, 34 })
50+
new Column(binaryColumnName1, DbType.Binary, defaultValue: new byte[] { 12, 32, 34 }),
51+
new Column(doubleColumnName1, DbType.Double, defaultValue: 84.874596565)
4852
);
4953

5054
// Act
@@ -58,8 +62,10 @@ public void GetColumns_DefaultValues_Succeeds()
5862
var booleanColumn1 = columns.Single(x => x.Name == booleanColumnName1);
5963
var int32Column1 = columns.Single(x => x.Name == int32ColumnName1);
6064
var int64Column1 = columns.Single(x => x.Name == int64ColumnName1);
65+
var int64Column2 = columns.Single(x => x.Name == int64ColumnName2);
6166
var stringColumn1 = columns.Single(x => x.Name == stringColumnName1);
6267
var binarycolumn1 = columns.Single(x => x.Name == binaryColumnName1);
68+
var doubleColumn1 = columns.Single(x => x.Name == doubleColumnName1);
6369

6470
Assert.That(dateTimeColumn1.DefaultValue, Is.EqualTo(dateTimeDefaultValue));
6571
Assert.That(dateTimeColumn2.DefaultValue, Is.EqualTo(dateTimeDefaultValue));
@@ -70,6 +76,7 @@ public void GetColumns_DefaultValues_Succeeds()
7076
Assert.That(int64Column1.DefaultValue, Is.EqualTo(88));
7177
Assert.That(stringColumn1.DefaultValue, Is.EqualTo("Hello"));
7278
Assert.That(binarycolumn1.DefaultValue, Is.EqualTo(new byte[] { 12, 32, 34 }));
79+
Assert.That(doubleColumn1.DefaultValue, Is.EqualTo(84.874596565));
7380
}
7481

7582
// 1 will coerce to true on inserts but not for default values in Postgre SQL - same for 0 to false

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public void GetColumns_DataTypeResolveSucceeds()
2424
const string stringColumnName1 = "stringcolumn1";
2525
const string stringColumnName2 = "stringcolumn2";
2626
const string binaryColumnName1 = "binarycolumn";
27+
const string doubleColumnName1 = "doublecolumn";
2728

2829
// Should be extended by remaining types
2930
Provider.AddTable(testTableName,
@@ -36,7 +37,8 @@ public void GetColumns_DataTypeResolveSucceeds()
3637
new Column(int64ColumnName1, DbType.Int64),
3738
new Column(stringColumnName1, DbType.String),
3839
new Column(stringColumnName2, DbType.String) { Size = 30 },
39-
new Column(binaryColumnName1, DbType.Binary)
40+
new Column(binaryColumnName1, DbType.Binary),
41+
new Column(doubleColumnName1, DbType.Double)
4042
);
4143

4244
// Act
@@ -52,6 +54,7 @@ public void GetColumns_DataTypeResolveSucceeds()
5254
var stringColumn1 = columns.Single(x => x.Name == stringColumnName1);
5355
var stringColumn2 = columns.Single(x => x.Name == stringColumnName2);
5456
var binaryColumn1 = columns.Single(x => x.Name == binaryColumnName1);
57+
var doubleColumn1 = columns.Single(x => x.Name == doubleColumnName1);
5558

5659

5760
// Assert
@@ -70,5 +73,6 @@ public void GetColumns_DataTypeResolveSucceeds()
7073
Assert.That(stringColumn2.Type, Is.EqualTo(DbType.String));
7174
Assert.That(stringColumn2.Size, Is.EqualTo(30));
7275
Assert.That(binaryColumn1.Type, Is.EqualTo(DbType.Binary));
76+
Assert.That(doubleColumn1.Type, Is.EqualTo(DbType.Double));
7377
}
7478
}

src/Migrator/Providers/Dialect.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,10 @@ public virtual string Default(object defaultValue)
368368
var convertedString = BitConverter.ToString(byteArray).Replace("-", "").ToLower();
369369
defaultValue = $"'\\x{convertedString}'";
370370
}
371+
else if (defaultValue is double doubleValue)
372+
{
373+
defaultValue = Convert.ToString(doubleValue, CultureInfo.InvariantCulture);
374+
}
371375

372376
return string.Format("DEFAULT {0}", defaultValue);
373377
}

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
using System.Data;
1818
using System.Globalization;
1919
using System.Linq;
20+
using System.Runtime.InteropServices;
2021
using System.Text;
2122
using System.Text.RegularExpressions;
2223
using Index = DotNetProjects.Migrator.Framework.Index;
@@ -295,6 +296,12 @@ public override Column[] GetColumns(string table)
295296
dbType = DbType.DateTimeOffset;
296297
precision = dateTimePrecision;
297298
}
299+
else if (dataTypeString == "double precision")
300+
{
301+
dbType = DbType.Double;
302+
scale = numericScale;
303+
precision = numericPrecision;
304+
}
298305
else if (dataTypeString == "timestamp" || dataTypeString == "timestamp without time zone")
299306
{
300307
// 6 is the maximum in PostgreSQL
@@ -403,12 +410,12 @@ public override Column[] GetColumns(string table)
403410
}
404411
else if (column.Type == DbType.Double || column.Type == DbType.Single)
405412
{
406-
column.DefaultValue = double.Parse(defaultValueString.ToString());
413+
column.DefaultValue = double.Parse(defaultValueString.ToString(), CultureInfo.InvariantCulture);
407414
}
408415
else if (column.Type == DbType.Boolean)
409416
{
410-
var truthy = new[] { "1", "TRUE", "YES", "'true'", "on", "'on'", "t", "'t'" };
411-
var falsy = new[] { "0", "FALSE", "NO", "'false'", "off", "'off'", "f", "'f'" };
417+
var truthy = new[] { "TRUE", "YES", "'true'", "on", "'on'", "t", "'t'" };
418+
var falsy = new[] { "FALSE", "NO", "'false'", "off", "'off'", "f", "'f'" };
412419

413420
if (truthy.Any(x => x.Equals(defaultValueString.Trim(), StringComparison.OrdinalIgnoreCase)))
414421
{

0 commit comments

Comments
 (0)