Skip to content

Commit a931a38

Browse files
authored
Merge pull request #55 from dotnetprojects/Sqlite
Foreign key adjustments
2 parents f1f07cb + 6bf800f commit a931a38

13 files changed

+205
-131
lines changed

src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_AddColumnTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System.Data;
22
using System.Linq;
3-
using DotNetProjects.Migrator.Framework;
43
using DotNetProjects.Migrator.Providers.Impl.SQLite;
54
using Migrator.Framework;
65
using Migrator.Tests.Providers.SQLite.Base;

src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_AddForeignKeyTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public void AddForeignKey()
1919
Provider.ExecuteNonQuery("INSERT INTO TestTwo (TestId) VALUES (1)");
2020

2121
// Act
22-
Provider.AddForeignKey("FK name is not supported by SQLite", parentTable: "Test", parentColumn: "Id", childTable: "TestTwo", childColumn: "TestId", ForeignKeyConstraintType.Cascade);
22+
Provider.AddForeignKey(name: "FK name is not supported by SQLite", childTable: "TestTwo", childColumn: "TestId", parentTable: "Test", parentColumn: "Id", constraint: ForeignKeyConstraintType.Cascade);
2323

2424
// Assert
2525
var foreignKeyConstraints = ((SQLiteTransformationProvider)Provider).GetForeignKeyConstraints("TestTwo");
@@ -48,7 +48,7 @@ public void AddForeignKey_RenameParentColumWithForeignKeyAndData_ForeignKeyPoint
4848
Provider.ExecuteNonQuery("INSERT INTO TestTwo (TestId) VALUES (1)");
4949

5050
// Act
51-
Provider.AddForeignKey("FK name is not supported by SQLite", parentTable: "Test", parentColumn: "Id", childTable: "TestTwo", childColumn: "TestId", ForeignKeyConstraintType.Cascade);
51+
Provider.AddForeignKey(name: "FK name is not supported by SQLite", childTable: "TestTwo", childColumn: "TestId", parentTable: "Test", parentColumn: "Id", constraint: ForeignKeyConstraintType.Cascade);
5252

5353
// Rename column in parent
5454
Provider.RenameColumn("Test", "Id", "IdNew");

src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_ChangeColumnTests.cs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,4 @@ public void ChangeColumn_HavingColumnPropertyUniqueAndIndex_RebuildSucceeds()
5858
Assert.That(indexAfter.Name, Is.EqualTo(indexName));
5959
CollectionAssert.AreEquivalent(indexAfter.KeyColumns, new string[] { propertyName1, propertyName2 });
6060
}
61-
}
62-
63-
64-
65-
66-
67-
68-
69-
70-
71-
72-
73-
61+
}

src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_CheckForeignKeyIntegrityTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public void CheckForeignKeyIntegrity_IntegrityViolated_ReturnsFalse()
1616
AddTableWithPrimaryKey();
1717
Provider.ExecuteNonQuery("INSERT INTO Test (Id, name) VALUES (1, 'my name')");
1818
Provider.ExecuteNonQuery("INSERT INTO TestTwo (TestId) VALUES (44444)");
19-
Provider.AddForeignKey("FK name is not supported by SQLite", parentTable: "Test", parentColumn: "Id", childTable: "TestTwo", childColumn: "TestId", ForeignKeyConstraintType.Cascade);
19+
Provider.AddForeignKey(name: "FK name is not supported by SQLite", childTable: "TestTwo", childColumn: "TestId", parentTable: "Test", parentColumn: "Id", constraint: ForeignKeyConstraintType.Cascade);
2020

2121
// Act
2222
var result = ((SQLiteTransformationProvider)Provider).CheckForeignKeyIntegrity();
@@ -32,7 +32,7 @@ public void CheckForeignKeyIntegrity_IntegrityOk_ReturnsTrue()
3232
AddTableWithPrimaryKey();
3333
Provider.ExecuteNonQuery("INSERT INTO Test (Id, name) VALUES (1, 'my name')");
3434
Provider.ExecuteNonQuery("INSERT INTO TestTwo (TestId) VALUES (1)");
35-
Provider.AddForeignKey("FK name is not supported by SQLite", parentTable: "Test", parentColumn: "Id", childTable: "TestTwo", childColumn: "TestId", ForeignKeyConstraintType.Cascade);
35+
Provider.AddForeignKey(name: "FK name is not supported by SQLite", childTable: "TestTwo", childColumn: "TestId", parentTable: "Test", parentColumn: "Id", constraint: ForeignKeyConstraintType.Cascade);
3636

3737
// Act
3838
var result = ((SQLiteTransformationProvider)Provider).CheckForeignKeyIntegrity();
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
2+
3+
4+
5+
// Does not work because we cannot reuse the connection at this point in time.
6+
7+
8+
9+
10+
11+
12+
// using System.Data;
13+
// using DotNetProjects.Migrator.Providers.Impl.SQLite;
14+
// using Migrator.Framework;
15+
// using Migrator.Tests.Providers.SQLite.Base;
16+
// using NUnit.Framework;
17+
18+
// namespace Migrator.Tests.Providers.SQLite;
19+
20+
// [TestFixture]
21+
// [Category("SQLite")]
22+
// public class SQLiteTransformationProvider_PRAGMAForeignKeysTests : SQLiteTransformationProviderTestBase
23+
// {
24+
// [Test, Description("Tests the set ON indirectly. Integrity violation should throw.")]
25+
// public void PragmaForeignKeys_IntegrityViolation_Throws()
26+
// {
27+
// const string parentTableName = "ParentTable";
28+
// const string childTableName = "ChildTable";
29+
// const string propertyIdName = "Id";
30+
// const string foreignKeyColumnName = "ParentId";
31+
32+
// Provider.AddTable(parentTableName, new Column(propertyIdName, DbType.Int32, ColumnProperty.PrimaryKey));
33+
// Provider.AddTable(childTableName, new Column(propertyIdName, DbType.Int32, ColumnProperty.PrimaryKey), new Column(foreignKeyColumnName, DbType.Int32));
34+
35+
// ((SQLiteTransformationProvider)Provider).BeginTransaction();
36+
// ((SQLiteTransformationProvider)Provider).SetPragmaForeignKeys(false);
37+
// var pragmaForeignKeyState1 = ((SQLiteTransformationProvider)Provider).IsPragmaForeignKeysOn();
38+
39+
// Provider.ExecuteNonQuery($"INSERT INTO {parentTableName} ({propertyIdName}) VALUES (1)");
40+
41+
// // Integrity violation does not throw due to set OFF validation
42+
// Provider.ExecuteNonQuery($"INSERT INTO {childTableName} ({propertyIdName}, {foreignKeyColumnName}) VALUES (1, 999)");
43+
44+
// Provider.ExecuteNonQuery($"DELETE FROM {childTableName}");
45+
46+
// ((SQLiteTransformationProvider)Provider).SetPragmaForeignKeys(true);
47+
// var pragmaForeignKeyState2 = ((SQLiteTransformationProvider)Provider).IsPragmaForeignKeysOn();
48+
49+
50+
// Assert.That(pragmaForeignKeyState1, Is.False);
51+
// Assert.That(pragmaForeignKeyState2, Is.True);
52+
// }
53+
// }

src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_RemoveColumnTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,11 @@ public void RemoveColumn_HavingASingleForeignKeyPointingToTheTargetColumn_Single
7676
);
7777

7878
Provider.AddTable(childTestTableName, new Column(propertyChildTableName1, DbType.Int32));
79-
Provider.AddForeignKey("Not used in SQLite", testTableName, propertyName1, childTestTableName, propertyChildTableName1);
79+
Provider.AddForeignKey("Not used in SQLite", childTestTableName, propertyChildTableName1, testTableName, propertyName1);
8080
var script = ((SQLiteTransformationProvider)Provider).GetSqlCreateTableScript(childTestTableName);
8181

8282
Provider.AddTable(childTestTableName2, new Column(propertyChildTableName1, DbType.Int32));
83-
Provider.AddForeignKey("Not used in SQLite", testTableName, propertyName2, childTestTableName2, propertyChildTableName1);
83+
Provider.AddForeignKey(name: "Not used in SQLite", childTable: childTestTableName2, childColumn: propertyChildTableName1, parentTable: testTableName, parentColumn: propertyName2);
8484

8585
var tableInfoBefore = ((SQLiteTransformationProvider)Provider).GetSQLiteTableInfo(testTableName);
8686
var tableInfoChildBefore = ((SQLiteTransformationProvider)Provider).GetSQLiteTableInfo(childTestTableName);

src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_RenameColumnTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ public void RenameColumn_HavingASingleForeignKeyPointingToTheTargetColumn_Single
3636
new Column(propertyLevel2Id, DbType.Int32)
3737
);
3838

39-
Provider.AddForeignKey("Level2ToLevel1", tableNameLevel1, propertyId, tableNameLevel2, propertyLevel1Id);
40-
Provider.AddForeignKey("Level3ToLevel2", tableNameLevel2, propertyId, tableNameLevel3, propertyLevel2Id);
39+
Provider.AddForeignKey("Level2ToLevel1", tableNameLevel2, propertyLevel1Id, tableNameLevel1, propertyId);
40+
Provider.AddForeignKey("Level3ToLevel2", tableNameLevel3, propertyLevel2Id, tableNameLevel2, propertyId);
4141

4242
var script = ((SQLiteTransformationProvider)Provider).GetSqlCreateTableScript(tableNameLevel2);
4343

0 commit comments

Comments
 (0)