From 7b3497ee137606dc63595ccf2c40841da662908b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Feb 2026 06:33:18 +0000 Subject: [PATCH 1/3] Initial plan From f2aa1874970a2c30fdbdff04adb7f68c53e110ea Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Feb 2026 06:37:40 +0000 Subject: [PATCH 2/3] Add tests for GetForeignKeyConstraints with quoted table names Co-authored-by: jogibear9988 <364896+jogibear9988@users.noreply.github.com> --- ...nsformationProvider_GetForeignKeysTests.cs | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_GetForeignKeysTests.cs b/src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_GetForeignKeysTests.cs index 17b431b1..ef94294e 100644 --- a/src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_GetForeignKeysTests.cs +++ b/src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_GetForeignKeysTests.cs @@ -53,4 +53,139 @@ public void RenameColumn_HavingASingleForeignKeyPointingToTheTargetColumn_Single Assert.That(foreignKeyConstraints.Single(x => x.Name == foreignKeyStringB).ChildColumns, Is.EqualTo([childColumnFKToParentBProperty1, childColumnFKToParentBProperty2])); Assert.That(foreignKeyConstraints.Single(x => x.Name == foreignKeyStringB).ParentColumns, Is.EqualTo([parentBProperty1, parentBProperty2])); } + + [Test] + public void GetForeignKeyConstraints_WithReservedWordTableName_ReturnsCorrectForeignKeys() + { + // Arrange - Testing with SQLite reserved word "group" as parent table name + const string parentTable = "group"; + const string parentColumn = "Id"; + const string childTable = "Orders"; + const string childColumn = "GroupId"; + const string foreignKeyName = "FK_Orders_Group"; + + Provider.AddTable(parentTable, new Column(parentColumn, DbType.Int32, ColumnProperty.PrimaryKey)); + Provider.AddTable(childTable, + new Column("Id", DbType.Int32, ColumnProperty.PrimaryKey), + new Column(childColumn, DbType.Int32) + ); + + Provider.AddForeignKey(foreignKeyName, childTable, childColumn, parentTable, parentColumn); + + // Act + var foreignKeyConstraints = Provider.GetForeignKeyConstraints(childTable); + + // Assert + Assert.That(foreignKeyConstraints.Length, Is.EqualTo(1)); + var fk = foreignKeyConstraints.Single(); + Assert.That(fk.Name, Is.EqualTo(foreignKeyName)); + Assert.That(fk.ParentTable, Is.EqualTo(parentTable)); + Assert.That(fk.ParentColumns, Is.EqualTo(new[] { parentColumn })); + Assert.That(fk.ChildTable, Is.EqualTo(childTable)); + Assert.That(fk.ChildColumns, Is.EqualTo(new[] { childColumn })); + } + + [Test] + public void GetForeignKeyConstraints_WithReservedWordOrder_ReturnsCorrectForeignKeys() + { + // Arrange - Testing with SQLite reserved word "order" as parent table name + const string parentTable = "order"; + const string parentColumn = "OrderId"; + const string childTable = "LineItems"; + const string childColumn = "OrderRef"; + const string foreignKeyName = "FK_LineItems_Order"; + + Provider.AddTable(parentTable, new Column(parentColumn, DbType.Int32, ColumnProperty.PrimaryKey)); + Provider.AddTable(childTable, + new Column("Id", DbType.Int32, ColumnProperty.PrimaryKey), + new Column(childColumn, DbType.Int32) + ); + + Provider.AddForeignKey(foreignKeyName, childTable, childColumn, parentTable, parentColumn); + + // Act + var foreignKeyConstraints = Provider.GetForeignKeyConstraints(childTable); + + // Assert + Assert.That(foreignKeyConstraints.Length, Is.EqualTo(1)); + var fk = foreignKeyConstraints.Single(); + Assert.That(fk.Name, Is.EqualTo(foreignKeyName)); + Assert.That(fk.ParentTable, Is.EqualTo(parentTable)); + Assert.That(fk.ParentColumns, Is.EqualTo(new[] { parentColumn })); + Assert.That(fk.ChildTable, Is.EqualTo(childTable)); + Assert.That(fk.ChildColumns, Is.EqualTo(new[] { childColumn })); + } + + [Test] + public void GetForeignKeyConstraints_WithReservedWordKey_ReturnsCorrectForeignKeys() + { + // Arrange - Testing with SQLite reserved word "key" as parent table name + const string parentTable = "key"; + const string parentColumn = "KeyId"; + const string childTable = "Locks"; + const string childColumn = "KeyRef"; + const string foreignKeyName = "FK_Locks_Key"; + + Provider.AddTable(parentTable, new Column(parentColumn, DbType.Int32, ColumnProperty.PrimaryKey)); + Provider.AddTable(childTable, + new Column("Id", DbType.Int32, ColumnProperty.PrimaryKey), + new Column(childColumn, DbType.Int32) + ); + + Provider.AddForeignKey(foreignKeyName, childTable, childColumn, parentTable, parentColumn); + + // Act + var foreignKeyConstraints = Provider.GetForeignKeyConstraints(childTable); + + // Assert + Assert.That(foreignKeyConstraints.Length, Is.EqualTo(1)); + var fk = foreignKeyConstraints.Single(); + Assert.That(fk.Name, Is.EqualTo(foreignKeyName)); + Assert.That(fk.ParentTable, Is.EqualTo(parentTable)); + Assert.That(fk.ParentColumns, Is.EqualTo(new[] { parentColumn })); + Assert.That(fk.ChildTable, Is.EqualTo(childTable)); + Assert.That(fk.ChildColumns, Is.EqualTo(new[] { childColumn })); + } + + [Test] + public void GetForeignKeyConstraints_WithMultipleForeignKeysIncludingQuoted_ReturnsAllCorrectly() + { + // Arrange - Testing combination of regular and quoted table names + const string regularParent = "NormalTable"; + const string quotedParent = "order"; + const string regularColumn = "NormalId"; + const string quotedColumn = "OrderId"; + const string childTable = "MixedChild"; + const string childColumnRegular = "NormalRef"; + const string childColumnQuoted = "OrderRef"; + const string fkRegular = "FK_Mixed_Normal"; + const string fkQuoted = "FK_Mixed_Order"; + + Provider.AddTable(regularParent, new Column(regularColumn, DbType.Int32, ColumnProperty.PrimaryKey)); + Provider.AddTable(quotedParent, new Column(quotedColumn, DbType.Int32, ColumnProperty.PrimaryKey)); + Provider.AddTable(childTable, + new Column("Id", DbType.Int32, ColumnProperty.PrimaryKey), + new Column(childColumnRegular, DbType.Int32), + new Column(childColumnQuoted, DbType.Int32) + ); + + Provider.AddForeignKey(fkRegular, childTable, childColumnRegular, regularParent, regularColumn); + Provider.AddForeignKey(fkQuoted, childTable, childColumnQuoted, quotedParent, quotedColumn); + + // Act + var foreignKeyConstraints = Provider.GetForeignKeyConstraints(childTable); + + // Assert + Assert.That(foreignKeyConstraints.Length, Is.EqualTo(2)); + + var fkReg = foreignKeyConstraints.Single(x => x.Name == fkRegular); + Assert.That(fkReg.ParentTable, Is.EqualTo(regularParent)); + Assert.That(fkReg.ParentColumns, Is.EqualTo(new[] { regularColumn })); + Assert.That(fkReg.ChildColumns, Is.EqualTo(new[] { childColumnRegular })); + + var fkQuo = foreignKeyConstraints.Single(x => x.Name == fkQuoted); + Assert.That(fkQuo.ParentTable, Is.EqualTo(quotedParent)); + Assert.That(fkQuo.ParentColumns, Is.EqualTo(new[] { quotedColumn })); + Assert.That(fkQuo.ChildColumns, Is.EqualTo(new[] { childColumnQuoted })); + } } From 56b7ccef670f2521537f63c35dceeb6a4625fec4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Feb 2026 06:38:26 +0000 Subject: [PATCH 3/3] Rename test method for consistency with other test names Co-authored-by: jogibear9988 <364896+jogibear9988@users.noreply.github.com> --- .../SQLite/SQLiteTransformationProvider_GetForeignKeysTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_GetForeignKeysTests.cs b/src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_GetForeignKeysTests.cs index ef94294e..0e3e89a3 100644 --- a/src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_GetForeignKeysTests.cs +++ b/src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_GetForeignKeysTests.cs @@ -55,7 +55,7 @@ public void RenameColumn_HavingASingleForeignKeyPointingToTheTargetColumn_Single } [Test] - public void GetForeignKeyConstraints_WithReservedWordTableName_ReturnsCorrectForeignKeys() + public void GetForeignKeyConstraints_WithReservedWordGroup_ReturnsCorrectForeignKeys() { // Arrange - Testing with SQLite reserved word "group" as parent table name const string parentTable = "group";