Skip to content

Commit 689ea62

Browse files
JaBistDuNarrischJaBistDuNarrisch
authored andcommitted
UpdateFromTableToTable Tests
1 parent 75bbce3 commit 689ea62

11 files changed

+220
-53
lines changed
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
using System.Collections.Generic;
2+
using System.Data;
3+
using DotNetProjects.Migrator.Framework;
4+
using DotNetProjects.Migrator.Framework.Models;
5+
using Migrator.Tests.Providers.Base;
6+
using Migrator.Tests.Providers.Generic.Models;
7+
using NUnit.Framework;
8+
9+
namespace Migrator.Tests.Providers.Generic;
10+
11+
public abstract class Generic_UpdateFromTableToTableTestsBase : TransformationProviderBase
12+
{
13+
[Test]
14+
public void UpdateFromTableToTable_Success()
15+
{
16+
// Arrange
17+
const string tableNameSource = "TableSource";
18+
const string tableNameTarget = "TableTarget";
19+
const string columnName1Source = "ColumnName1Source";
20+
const string columnName2Source = "ColumnName2Source";
21+
const string columnName3Source = "ColumnName3Source";
22+
const string columnName4Source = "ColumnName4Source";
23+
const string columnName5Source = "ColumnName5Source";
24+
25+
const string columnName1Target = "ColumnName1Target";
26+
const string columnName2Target = "ColumnName2Target";
27+
const string columnName3Target = "ColumnName3Target";
28+
const string columnName4Target = "ColumnName4Target";
29+
const string columnName5Target = "ColumnName5Target";
30+
31+
32+
Provider.AddTable(tableNameSource,
33+
new Column(columnName1Source, DbType.Int32, ColumnProperty.NotNull),
34+
new Column(columnName2Source, DbType.Int32, ColumnProperty.NotNull),
35+
new Column(columnName3Source, DbType.String),
36+
new Column(columnName4Source, DbType.String),
37+
new Column(columnName5Source, DbType.String)
38+
);
39+
40+
Provider.AddPrimaryKey("PK_Source", tableNameSource, [columnName1Source, columnName2Source]);
41+
42+
Provider.AddTable(tableNameTarget,
43+
new Column(columnName1Target, DbType.Int32, ColumnProperty.NotNull),
44+
new Column(columnName2Target, DbType.Int32, ColumnProperty.NotNull),
45+
new Column(columnName3Target, DbType.String),
46+
new Column(columnName4Target, DbType.String),
47+
new Column(columnName5Target, DbType.String)
48+
);
49+
50+
Provider.AddPrimaryKey("PK_Target", tableNameTarget, [columnName1Target, columnName2Target]);
51+
52+
Provider.Insert(tableNameSource, [columnName1Source, columnName2Source, columnName3Source, columnName4Source, columnName5Source], [1, 2, "source 1", "source 2", "source 3"]);
53+
Provider.Insert(tableNameSource, [columnName1Source, columnName2Source, columnName3Source, columnName4Source, columnName5Source], [2, 3, "source 11", "source 22", "source 33"]);
54+
55+
Provider.Insert(tableNameTarget, [columnName1Target, columnName2Target, columnName3Target, columnName4Target, columnName5Target], [1, 2, "target 1", "target 2", "target 3"]);
56+
Provider.Insert(tableNameTarget, [columnName1Target, columnName2Target, columnName3Target, columnName4Target, columnName5Target], [1, 3, "target no update", "target no update", "target no update"]);
57+
58+
// Act
59+
Provider.UpdateFromTableToTable(
60+
tableNameSource,
61+
tableNameTarget,
62+
[
63+
new ColumnPair { ColumnNameSourceNotQuoted = columnName3Source, ColumnNameTargetNotQuoted = columnName3Target },
64+
new ColumnPair { ColumnNameSourceNotQuoted = columnName4Source, ColumnNameTargetNotQuoted = columnName4Target },
65+
new ColumnPair { ColumnNameSourceNotQuoted = columnName5Source, ColumnNameTargetNotQuoted = columnName5Target }
66+
],
67+
[
68+
new ColumnPair { ColumnNameSourceNotQuoted = columnName1Source, ColumnNameTargetNotQuoted = columnName1Target },
69+
new ColumnPair { ColumnNameSourceNotQuoted = columnName2Source, ColumnNameTargetNotQuoted = columnName2Target }
70+
]
71+
);
72+
73+
// Assert
74+
List<UpdateFromTableToTableModel> targetRows = [];
75+
using (var cmd = Provider.CreateCommand())
76+
using (var reader = Provider.Select(cmd, tableNameTarget, [columnName1Target, columnName2Target, columnName3Target, columnName4Target, columnName5Target]))
77+
{
78+
while (reader.Read())
79+
{
80+
targetRows.Add(new UpdateFromTableToTableModel
81+
{
82+
Column1 = reader.GetInt32(0),
83+
Column2 = reader.GetInt32(1),
84+
Column3 = reader.GetString(2),
85+
Column4 = reader.GetString(3),
86+
Column5 = reader.GetString(4)
87+
});
88+
}
89+
}
90+
91+
List<UpdateFromTableToTableModel> expectedTargetRows = [
92+
new UpdateFromTableToTableModel{ Column1 = 1, Column2 = 2, Column3 = "source 1", Column4 = "source 2", Column5 = "source 3"},
93+
new UpdateFromTableToTableModel{ Column1 = 1, Column2 = 3, Column3 = "target no update", Column4 = "target no update", Column5 = "target no update"},
94+
];
95+
96+
Assert.That(targetRows, Is.EquivalentTo(expectedTargetRows).Using<UpdateFromTableToTableModel>((x, y) =>
97+
x.Column1 == y.Column1 &&
98+
x.Column2 == y.Column2 &&
99+
x.Column3 == y.Column3 &&
100+
x.Column4 == y.Column4 &&
101+
x.Column5 == y.Column5));
102+
}
103+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace Migrator.Tests.Providers.Generic.Models;
2+
3+
public class UpdateFromTableToTableModel
4+
{
5+
public int Column1 { get; set; }
6+
public int Column2 { get; set; }
7+
public string Column3 { get; set; }
8+
public string Column4 { get; set; }
9+
public string Column5 { get; set; }
10+
}
Lines changed: 30 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,30 @@
1-
using System;
2-
using System.Data;
3-
using System.Threading;
4-
using System.Threading.Tasks;
5-
using DotNetProjects.Migrator.Framework;
6-
using DotNetProjects.Migrator.Providers;
7-
using DotNetProjects.Migrator.Providers.Impl.Oracle;
8-
using DryIoc;
9-
using Migrator.Tests.Database;
10-
using Migrator.Tests.Database.Interfaces;
11-
using Migrator.Tests.Providers.Generic;
12-
using Migrator.Tests.Settings;
13-
using Migrator.Tests.Settings.Config;
14-
using Migrator.Tests.Settings.Models;
15-
using NUnit.Framework;
16-
17-
namespace Migrator.Tests.Providers.OracleProvider;
18-
19-
[TestFixture]
20-
[Category("Oracle")]
21-
public class OracleTransformationProviderGenericTests : TransformationProviderGenericMiscConstraintBase
22-
{
23-
[SetUp]
24-
public async Task SetUpAsync()
25-
{
26-
await BeginOracleTransactionAsync();
27-
28-
AddDefaultTable();
29-
}
30-
31-
[Test]
32-
public void ChangeColumn_FromNotNullToNotNull()
33-
{
34-
Provider.ExecuteNonQuery("DELETE FROM TestTwo");
35-
Provider.ChangeColumn("TestTwo", new Column("TestId", DbType.String, 50, ColumnProperty.Null));
36-
Provider.Insert("TestTwo", ["Id", "TestId"], [3, "Not an Int val."]);
37-
Provider.ChangeColumn("TestTwo", new Column("TestId", DbType.String, 50, ColumnProperty.NotNull));
38-
Provider.ChangeColumn("TestTwo", new Column("TestId", DbType.String, 50, ColumnProperty.NotNull));
39-
}
40-
}
1+
using System.Data;
2+
using System.Threading.Tasks;
3+
using DotNetProjects.Migrator.Framework;
4+
using Migrator.Tests.Providers.Generic;
5+
using NUnit.Framework;
6+
7+
namespace Migrator.Tests.Providers.OracleProvider;
8+
9+
[TestFixture]
10+
[Category("Oracle")]
11+
public class OracleTransformationProviderGenericTests : TransformationProviderGenericMiscConstraintBase
12+
{
13+
[SetUp]
14+
public async Task SetUpAsync()
15+
{
16+
await BeginOracleTransactionAsync();
17+
18+
AddDefaultTable();
19+
}
20+
21+
[Test]
22+
public void ChangeColumn_FromNotNullToNotNull()
23+
{
24+
Provider.ExecuteNonQuery("DELETE FROM TestTwo");
25+
Provider.ChangeColumn("TestTwo", new Column("TestId", DbType.String, 50, ColumnProperty.Null));
26+
Provider.Insert("TestTwo", ["Id", "TestId"], [3, "Not an Int val."]);
27+
Provider.ChangeColumn("TestTwo", new Column("TestId", DbType.String, 50, ColumnProperty.NotNull));
28+
Provider.ChangeColumn("TestTwo", new Column("TestId", DbType.String, 50, ColumnProperty.NotNull));
29+
}
30+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System.Threading.Tasks;
2+
using Migrator.Tests.Providers.Generic;
3+
using NUnit.Framework;
4+
5+
namespace Migrator.Tests.Providers.OracleProvider;
6+
7+
[TestFixture]
8+
[Category("Oracle")]
9+
public class OracleTransformationProvider_UpdateFromTableToTableTests : Generic_UpdateFromTableToTableTestsBase
10+
{
11+
[SetUp]
12+
public async Task SetUpAsync()
13+
{
14+
await BeginOracleTransactionAsync();
15+
}
16+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System.Threading.Tasks;
2+
using Migrator.Tests.Providers.Generic;
3+
using NUnit.Framework;
4+
5+
namespace Migrator.Tests.Providers.PostgreSQL;
6+
7+
[TestFixture]
8+
[Category("Postgre")]
9+
public class PostgreSQLTransformationProvider_UpdateFromTableToTableTests : Generic_UpdateFromTableToTableTestsBase
10+
{
11+
[SetUp]
12+
public async Task SetUpAsync()
13+
{
14+
await BeginPostgreSQLTransactionAsync();
15+
}
16+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System.Threading.Tasks;
2+
using Migrator.Tests.Providers.Generic;
3+
using NUnit.Framework;
4+
5+
namespace Migrator.Tests.Providers.SQLServer;
6+
7+
[TestFixture]
8+
[Category("SqlServer")]
9+
public class SQLServerTransformationProvider_UpdateFromTableToTableTests : Generic_UpdateFromTableToTableTestsBase
10+
{
11+
[SetUp]
12+
public async Task SetUpAsync()
13+
{
14+
await BeginSQLServerTransactionAsync();
15+
}
16+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System.Threading.Tasks;
2+
using Migrator.Tests.Providers.Generic;
3+
using NUnit.Framework;
4+
5+
namespace Migrator.Tests.Providers.SQLite;
6+
7+
[TestFixture]
8+
[Category("SQLite")]
9+
public class SQLiteTransformationProvider_UpdateFromTableToTableTests : Generic_UpdateFromTableToTableTestsBase
10+
{
11+
[SetUp]
12+
public async Task SetUpAsync()
13+
{
14+
await BeginSQLiteTransactionAsync();
15+
}
16+
}

src/Migrator/Providers/Impl/Oracle/OracleTransformationProvider.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -943,14 +943,14 @@ public override void UpdateFromTableToTable(string tableSourceNotQuoted, string
943943
var tableNameSource = QuoteTableNameIfRequired(tableSourceNotQuoted);
944944
var tableNameTarget = QuoteTableNameIfRequired(tableTargetNotQuoted);
945945

946-
var assignStrings = fromSourceToTargetColumnPairs.Select(x => $"s.{QuoteColumnNameIfRequired(x.ColumnNameSourceNotQuoted)} = t.{QuoteColumnNameIfRequired(x.ColumnNameTargetNotQuoted)}").ToList();
947-
948946
var conditionStrings = conditionColumnPairs.Select(x => $"t.{QuoteColumnNameIfRequired(x.ColumnNameTargetNotQuoted)} = s.{QuoteColumnNameIfRequired(x.ColumnNameSourceNotQuoted)}");
949947

950-
var assignStringsJoined = string.Join(", ", assignStrings);
948+
var assignStrings = fromSourceToTargetColumnPairs.Select(x => $"{QuoteColumnNameIfRequired(x.ColumnNameTargetNotQuoted)} = s.{QuoteColumnNameIfRequired(x.ColumnNameSourceNotQuoted)}").ToList();
949+
951950
var conditionStringsJoined = string.Join(" AND ", conditionStrings);
951+
var assignStringsJoined = string.Join(", ", assignStrings);
952952

953-
var sql = $"MERGE INTO {tableNameTarget} t ON ({conditionStringsJoined}) WHEN MATCHED THEN UPDATE SET {assignStringsJoined}";
953+
var sql = $"MERGE INTO {tableNameTarget} t USING {tableNameSource} s ON ({conditionStringsJoined}) WHEN MATCHED THEN UPDATE SET {assignStringsJoined}";
954954
ExecuteNonQuery(sql);
955955
}
956956

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -851,14 +851,14 @@ public override void UpdateFromTableToTable(string tableSourceNotQuoted, string
851851
var tableNameSource = QuoteTableNameIfRequired(tableSourceNotQuoted);
852852
var tableNameTarget = QuoteTableNameIfRequired(tableTargetNotQuoted);
853853

854-
var assignStrings = fromSourceToTargetColumnPairs.Select(x => $"s.{QuoteColumnNameIfRequired(x.ColumnNameSourceNotQuoted)} = t.{QuoteColumnNameIfRequired(x.ColumnNameTargetNotQuoted)}").ToList();
855-
856854
var conditionStrings = conditionColumnPairs.Select(x => $"t.{QuoteColumnNameIfRequired(x.ColumnNameTargetNotQuoted)} = s.{QuoteColumnNameIfRequired(x.ColumnNameSourceNotQuoted)}");
857855

858-
var assignStringsJoined = string.Join(", ", assignStrings);
856+
var assignStrings = fromSourceToTargetColumnPairs.Select(x => $"{QuoteColumnNameIfRequired(x.ColumnNameTargetNotQuoted)} = s.{QuoteColumnNameIfRequired(x.ColumnNameSourceNotQuoted)}").ToList();
857+
859858
var conditionStringsJoined = string.Join(" AND ", conditionStrings);
859+
var assignStringsJoined = string.Join(", ", assignStrings);
860860

861-
var sql = $"MERGE INTO {tableNameTarget} t ON ({conditionStringsJoined}) WHEN MATCHED THEN UPDATE SET {assignStringsJoined}";
861+
var sql = $"MERGE INTO {tableNameTarget} t USING {tableNameSource} s ON ({conditionStringsJoined}) WHEN MATCHED THEN UPDATE SET {assignStringsJoined}";
862862
ExecuteNonQuery(sql);
863863
}
864864

src/Migrator/Providers/Impl/SQLite/SQLiteTransformationProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ public override void UpdateFromTableToTable(string tableSourceNotQuoted, string
245245
var tableNameSource = QuoteTableNameIfRequired(tableSourceNotQuoted);
246246
var tableNameTarget = QuoteTableNameIfRequired(tableTargetNotQuoted);
247247

248-
var assignStrings = fromSourceToTargetColumnPairs.Select(x => $"{QuoteColumnNameIfRequired(x.ColumnNameSourceNotQuoted)} = {tableNameSource}.{QuoteColumnNameIfRequired(x.ColumnNameSourceNotQuoted)}").ToList();
248+
var assignStrings = fromSourceToTargetColumnPairs.Select(x => $"{QuoteColumnNameIfRequired(x.ColumnNameTargetNotQuoted)} = {tableNameSource}.{QuoteColumnNameIfRequired(x.ColumnNameSourceNotQuoted)}").ToList();
249249

250250
var conditionStrings = conditionColumnPairs.Select(x => $"{tableNameSource}.{QuoteColumnNameIfRequired(x.ColumnNameSourceNotQuoted)} = {tableNameTarget}.{QuoteColumnNameIfRequired(x.ColumnNameTargetNotQuoted)}");
251251

0 commit comments

Comments
 (0)