Skip to content

Commit 5158295

Browse files
JaBistDuNarrischJaBistDuNarrisch
authored andcommitted
Added include columns tests for SQL Server
1 parent 9ec8769 commit 5158295

File tree

2 files changed

+64
-3
lines changed

2 files changed

+64
-3
lines changed

src/Migrator.Tests/Providers/SQLServer/SQLServerTransformationProvider_AddIndexTests.cs

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
using System.Collections.Generic;
21
using System.Data;
32
using System.Linq;
43
using System.Threading.Tasks;
54
using DotNetProjects.Migrator.Framework;
6-
using DotNetProjects.Migrator.Providers.Models.Indexes;
75
using DotNetProjects.Migrator.Providers.Models.Indexes.Enums;
86
using Migrator.Tests.Providers.Generic;
97
using NUnit.Framework;
@@ -85,4 +83,64 @@ public void AddIndex_FilteredIndexGreaterOrEqualThanNumber_PartialIndexThrowsOnC
8583
Assert.That(index.Unique, Is.True);
8684
Assert.That(sqlException.Number, Is.EqualTo(2601));
8785
}
86+
87+
[Test]
88+
public void AddIndex_IncludeColumnsSingle_Success()
89+
{
90+
// Arrange
91+
const string tableName = "TestTable";
92+
const string columnName = "TestColumn";
93+
const string columnName2 = "TestColumn2";
94+
const string indexName = "TestIndexName";
95+
96+
Provider.AddTable(tableName, new Column(columnName, DbType.Int32), new Column(columnName2, DbType.String));
97+
98+
// Act
99+
Provider.AddIndex(tableName,
100+
new Index
101+
{
102+
Name = indexName,
103+
KeyColumns = [columnName],
104+
Unique = true,
105+
IncludeColumns = [columnName2]
106+
});
107+
108+
// Assert
109+
var index = Provider.GetIndexes(tableName).Single();
110+
111+
Assert.That(index.Unique, Is.True);
112+
Assert.That(index.KeyColumns.Single, Is.EqualTo(columnName).IgnoreCase);
113+
Assert.That(index.IncludeColumns.Single, Is.EqualTo(columnName2).IgnoreCase);
114+
}
115+
116+
[Test]
117+
public void AddIndex_IncludeColumnsMultiple_Success()
118+
{
119+
// Arrange
120+
const string tableName = "TestTable";
121+
const string columnName = "TestColumn";
122+
const string columnName2 = "TestColumn2";
123+
const string columnName3 = "TestColumn3";
124+
const string indexName = "TestIndexName";
125+
126+
Provider.AddTable(tableName, new Column(columnName, DbType.Int32), new Column(columnName2, DbType.String), new Column(columnName3, DbType.Boolean));
127+
128+
// Act
129+
Provider.AddIndex(tableName,
130+
new Index
131+
{
132+
Name = indexName,
133+
KeyColumns = [columnName],
134+
Unique = true,
135+
IncludeColumns = [columnName2, columnName3]
136+
});
137+
138+
// Assert
139+
var index = Provider.GetIndexes(tableName).Single();
140+
141+
Assert.That(index.Unique, Is.True);
142+
Assert.That(index.KeyColumns.Single, Is.EqualTo(columnName).IgnoreCase);
143+
Assert.That(index.IncludeColumns, Is.EquivalentTo([columnName2, columnName3])
144+
.Using<string>((x, y) => string.Compare(x, y, ignoreCase: true)));
145+
}
88146
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ public override void AddIndex(string table, Index index)
149149

150150
var uniqueString = index.Unique ? "UNIQUE" : null;
151151
var columnsString = $"({string.Join(", ", columns)})";
152+
var includeString = hasIncludedColumns ? $"INCLUDE ({string.Join(", ", index.IncludeColumns)})" : null;
152153
var filterString = string.Empty;
153154
var clusteredString = index.Clustered ? "CLUSTERED" : "NONCLUSTERED";
154155

@@ -201,6 +202,7 @@ public override void AddIndex(string table, Index index)
201202
list.Add("ON");
202203
list.Add(table);
203204
list.Add(columnsString);
205+
list.Add(includeString);
204206
list.Add(filterString);
205207

206208
list = [.. list.Where(x => !string.IsNullOrWhiteSpace(x))];
@@ -334,7 +336,8 @@ ORDER BY
334336
{
335337
Clustered = reader.GetString(indexTypeOrdinal) == "CLUSTERED",
336338
ColumnName = reader.GetString(columnNameOrdinal),
337-
FilterString = reader.GetString(filterDefinitionOrdinal),
339+
ColumnOrder = reader.GetInt32(columnOrderOrdinal),
340+
FilterString = !reader.IsDBNull(filterDefinitionOrdinal) ? reader.GetString(filterDefinitionOrdinal) : null,
338341
IsFilteredIndex = reader.GetBoolean(isFilteredIndexOrdinal),
339342
IsIncludedColumn = reader.GetBoolean(isIncludedColumnOrdinal),
340343
Name = reader.GetString(indexNameOrdinal),

0 commit comments

Comments
 (0)