Skip to content

Commit 874131f

Browse files
Merge pull request #116 from dotnetprojects/sql-server-default-values
Added byte to default values in SQL Server
2 parents f227757 + 42ccfcc commit 874131f

File tree

2 files changed

+97
-0
lines changed

2 files changed

+97
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
using System;
2+
using System.Data;
3+
using System.Linq;
4+
using System.Runtime.CompilerServices;
5+
using System.Threading.Tasks;
6+
using DotNetProjects.Migrator.Framework;
7+
using Migrator.Tests.Providers.Base;
8+
using NUnit.Framework;
9+
10+
namespace Migrator.Tests.Providers.SQLServer;
11+
12+
[TestFixture]
13+
[Category("SqlServer")]
14+
public class SQLServerTransformationProvider_GetColumns_DefaultValues_Tests : TransformationProviderBase
15+
{
16+
[SetUp]
17+
public async Task SetUpAsync()
18+
{
19+
await BeginSQLServerTransactionAsync();
20+
}
21+
22+
[Test]
23+
public void GetColumns_DefaultValues_Succeeds()
24+
{
25+
// Arrange
26+
var dateTimeDefaultValue = new DateTime(2000, 1, 2, 3, 4, 5, DateTimeKind.Utc);
27+
var guidDefaultValue = Guid.NewGuid();
28+
var decimalDefaultValue = 14.56565m;
29+
30+
const string testTableName = "MyDefaultTestTable";
31+
32+
const string dateTimeColumnName1 = "datetimecolumn1";
33+
const string dateTimeColumnName2 = "datetimecolumn2";
34+
const string decimalColumnName1 = "decimalcolumn";
35+
const string guidColumnName1 = "guidcolumn1";
36+
const string booleanColumnName1 = "booleancolumn1";
37+
const string int32ColumnName1 = "int32column1";
38+
const string int64ColumnName1 = "int64column1";
39+
const string int64ColumnName2 = "int64column2";
40+
const string stringColumnName1 = "stringcolumn1";
41+
const string binaryColumnName1 = "binarycolumn1";
42+
const string doubleColumnName1 = "doublecolumn1";
43+
const string byteColumnName1 = "byteColumn1";
44+
45+
// Should be extended by remaining types
46+
Provider.AddTable(testTableName,
47+
new Column(dateTimeColumnName1, DbType.DateTime, dateTimeDefaultValue),
48+
new Column(dateTimeColumnName2, DbType.DateTime2, dateTimeDefaultValue),
49+
new Column(decimalColumnName1, DbType.Decimal, decimalDefaultValue),
50+
new Column(guidColumnName1, DbType.Guid, guidDefaultValue),
51+
52+
// other boolean default values are tested in another test
53+
new Column(booleanColumnName1, DbType.Boolean, true),
54+
55+
new Column(int32ColumnName1, DbType.Int32, defaultValue: 43),
56+
new Column(int64ColumnName1, DbType.Int64, defaultValue: 88),
57+
new Column(int64ColumnName2, DbType.Int64, defaultValue: 0),
58+
new Column(stringColumnName1, DbType.String, defaultValue: "Hello"),
59+
new Column(binaryColumnName1, DbType.Binary, defaultValue: new byte[] { 12, 32, 34 }),
60+
new Column(doubleColumnName1, DbType.Double, defaultValue: 84.874596567) { Precision = 19, Scale = 10 },
61+
new Column(byteColumnName1, DbType.Byte, defaultValue: 233)
62+
);
63+
64+
// Act
65+
var columns = Provider.GetColumns(testTableName);
66+
67+
// Assert
68+
var dateTimeColumn1 = columns.Single(x => x.Name.Equals(dateTimeColumnName1, StringComparison.OrdinalIgnoreCase));
69+
var dateTimeColumn2 = columns.Single(x => x.Name.Equals(dateTimeColumnName2, StringComparison.OrdinalIgnoreCase));
70+
var decimalColumn1 = columns.Single(x => x.Name.Equals(decimalColumnName1, StringComparison.OrdinalIgnoreCase));
71+
var guidColumn1 = columns.Single(x => x.Name.Equals(guidColumnName1, StringComparison.OrdinalIgnoreCase));
72+
var booleanColumn1 = columns.Single(x => x.Name.Equals(booleanColumnName1, StringComparison.OrdinalIgnoreCase));
73+
var int32Column1 = columns.Single(x => x.Name.Equals(int32ColumnName1, StringComparison.OrdinalIgnoreCase));
74+
var int64Column1 = columns.Single(x => x.Name.Equals(int64ColumnName1, StringComparison.OrdinalIgnoreCase));
75+
var int64Column2 = columns.Single(x => x.Name.Equals(int64ColumnName2, StringComparison.OrdinalIgnoreCase));
76+
var stringColumn1 = columns.Single(x => x.Name.Equals(stringColumnName1, StringComparison.OrdinalIgnoreCase));
77+
var binarycolumn1 = columns.Single(x => x.Name.Equals(binaryColumnName1, StringComparison.OrdinalIgnoreCase));
78+
var doubleColumn1 = columns.Single(x => x.Name.Equals(doubleColumnName1, StringComparison.OrdinalIgnoreCase));
79+
var byteColumn1 = columns.Single(x => x.Name.Equals(byteColumnName1, StringComparison.OrdinalIgnoreCase));
80+
81+
Assert.That(dateTimeColumn1.DefaultValue, Is.EqualTo(dateTimeDefaultValue));
82+
Assert.That(dateTimeColumn2.DefaultValue, Is.EqualTo(dateTimeDefaultValue));
83+
Assert.That(decimalColumn1.DefaultValue, Is.EqualTo(decimalDefaultValue));
84+
Assert.That(guidColumn1.DefaultValue, Is.EqualTo(guidDefaultValue));
85+
Assert.That(booleanColumn1.DefaultValue, Is.True);
86+
Assert.That(int32Column1.DefaultValue, Is.EqualTo(43));
87+
Assert.That(int64Column1.DefaultValue, Is.EqualTo(88));
88+
Assert.That(stringColumn1.DefaultValue, Is.EqualTo("Hello"));
89+
Assert.That(binarycolumn1.DefaultValue, Is.EqualTo(new byte[] { 12, 32, 34 }));
90+
Assert.That(doubleColumn1.DefaultValue, Is.EqualTo(84.874596567));
91+
Assert.That(byteColumn1.DefaultValue, Is.EqualTo(233));
92+
}
93+
}

src/Migrator/Providers/Impl/SqlServer/SqlServerTransformationProvider.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,10 @@ public override Column[] GetColumns(string table)
544544
throw new NotImplementedException($"Cannot parse the binary default value of '{column.Name}'. The value is '{defaultValueString}'");
545545
}
546546
}
547+
else if (column.MigratorDbType == MigratorDbType.Byte)
548+
{
549+
column.DefaultValue = byte.Parse(bracesStrippedString);
550+
}
547551
else
548552
{
549553
throw new NotImplementedException($"Cannot parse the default value of {column.Name} type '{column.MigratorDbType}'. It is not yet implemented - file an issue.");

0 commit comments

Comments
 (0)