Skip to content

Commit df90f1c

Browse files
Ja bist du narrischJa bist du narrisch
authored andcommitted
Fix namings in ITransformationProvider and TransformationProvider
1 parent d548bbd commit df90f1c

File tree

6 files changed

+93
-71
lines changed

6 files changed

+93
-71
lines changed

src/Migrator.Tests/Providers/SQLiteTransformationProviderTest.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#endregion
1313

14+
using System.Linq;
1415
using DotNetProjects.Migrator.Framework;
1516
using DotNetProjects.Migrator.Providers.Impl.SQLite;
1617
using Migrator.Providers.SQLite;
@@ -43,11 +44,20 @@ public void AddForeignKey()
4344
AddTableWithPrimaryKey();
4445

4546
// Act
46-
_provider.AddForeignKey("FK name is not supported by SQLite", foreignTable: "Test", foreignColumn: "Id", primaryTable: "TestTwo", primaryColumn: "TestId", ForeignKeyConstraintType.Cascade);
47+
_provider.AddForeignKey("FK name is not supported by SQLite", parentTable: "Test", parentColumn: "Id", childTable: "TestTwo", childColumn: "TestId", ForeignKeyConstraintType.Cascade);
4748

4849
// Assert
49-
var foreignKeyConstraints = ((SQLiteTransformationProvider)_provider).GetForeignKeyConstraints("Test");
50-
var tableSQLCreateScript = ((SQLiteTransformationProvider)_provider).GetSqlCreateTableScript("Test");
50+
var foreignKeyConstraints = ((SQLiteTransformationProvider)_provider).GetForeignKeyConstraints("TestTwo");
51+
var tableSQLCreateScript = ((SQLiteTransformationProvider)_provider).GetSqlCreateTableScript("TestTwo");
52+
53+
Assert.That(foreignKeyConstraints.Single().Name, Is.Null);
54+
Assert.That(foreignKeyConstraints.Single().ChildTable, Is.EqualTo("TestTwo"));
55+
Assert.That(foreignKeyConstraints.Single().ParentTable, Is.EqualTo("Test"));
56+
Assert.That(foreignKeyConstraints.Single().ChildColumns.Single(), Is.EqualTo("TestId"));
57+
Assert.That(foreignKeyConstraints.Single().ParentColumns.Single(), Is.EqualTo("Id"));
58+
59+
Assert.That(tableSQLCreateScript, Does.Contain("CREATE TABLE \"TestTwo\""));
60+
Assert.That(tableSQLCreateScript, Does.Contain(", FOREIGN KEY (TestId) REFERENCES Test(Id))"));
5161
}
5262

5363

src/Migrator/Framework/ForeignKeyConstraint.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ public class ForeignKeyConstraint : IDbField
77
public ForeignKeyConstraint()
88
{ }
99

10-
public ForeignKeyConstraint(string name, string table, string[] columns, string pkTable, string[] pkColumns)
10+
public ForeignKeyConstraint(string name, string parentTable, string[] parentcolumns, string childTable, string[] childColumns)
1111
{
1212
Name = name;
13-
Table = table;
14-
Columns = columns;
15-
PkTable = pkTable;
16-
PkColumns = pkColumns;
13+
ParentTable = parentTable;
14+
ParentColumns = parentcolumns;
15+
ChildTable = childTable;
16+
ChildColumns = childColumns;
1717
}
1818

1919
/// <summary>
@@ -22,10 +22,10 @@ public ForeignKeyConstraint(string name, string table, string[] columns, string
2222
/// </summary>
2323
public int? Id { get; set; }
2424
public string Name { get; set; }
25-
public string Table { get; set; }
26-
public string[] Columns { get; set; }
27-
public string PkTable { get; set; }
28-
public string[] PkColumns { get; set; }
25+
public string ParentTable { get; set; }
26+
public string[] ParentColumns { get; set; }
27+
public string ChildTable { get; set; }
28+
public string[] ChildColumns { get; set; }
2929

3030
/// <summary>
3131
/// Gets or sets the on update text. Currently only used for SQLite.

src/Migrator/Framework/ITransformationProvider.cs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -162,44 +162,44 @@ public interface ITransformationProvider : IDisposable
162162
/// Add a foreign key constraint
163163
/// </summary>
164164
/// <param name="name">The name of the foreign key. e.g. FK_TABLE_REF</param>
165-
/// <param name="foreignTable">The table that the foreign key will be created in (eg. Table.FK_id)</param>
166-
/// <param name="foreignColumns">The columns that are the foreign keys (eg. FK_id)</param>
167-
/// <param name="primaryTable">The table that holds the primary keys (eg. Table.PK_id)</param>
168-
/// <param name="primaryColumns">The columns that are the primary keys (eg. PK_id)</param>
169-
void AddForeignKey(string name, string foreignTable, string[] foreignColumns, string primaryTable, string[] primaryColumns);
165+
/// <param name="parentTable">The table that the foreign key will be created in (eg. Table.FK_id)</param>
166+
/// <param name="parentColumns">The columns that are the foreign keys (eg. FK_id)</param>
167+
/// <param name="childTable">The table that holds the primary keys (eg. Table.PK_id)</param>
168+
/// <param name="childColumns">The columns that are the primary keys (eg. PK_id)</param>
169+
void AddForeignKey(string name, string parentTable, string[] parentColumns, string childTable, string[] childColumns);
170170

171171
/// <summary>
172172
/// Add a foreign key constraint
173173
/// </summary>
174174
/// <param name="name">The name of the foreign key. e.g. FK_TABLE_REF</param>
175-
/// <param name="foreignTable">The table that the foreign key will be created in (eg. Table.FK_id)</param>
176-
/// <param name="foreignColumns">The columns that are the foreign keys (eg. FK_id)</param>
177-
/// <param name="primaryTable">The table that holds the primary keys (eg. Table.PK_id)</param>
178-
/// <param name="primaryColumns">The columns that are the primary keys (eg. PK_id)</param>
175+
/// <param name="parentTable">The table that the foreign key will be created in (eg. Table.FK_id)</param>
176+
/// <param name="parentColumns">The columns that are the foreign keys (eg. FK_id)</param>
177+
/// <param name="childTable">The table that holds the primary keys (eg. Table.PK_id)</param>
178+
/// <param name="childColumns">The columns that are the primary keys (eg. PK_id)</param>
179179
/// <param name="constraint">Constraint parameters</param>
180-
void AddForeignKey(string name, string foreignTable, string[] foreignColumns, string primaryTable, string[] primaryColumns, ForeignKeyConstraintType constraint);
180+
void AddForeignKey(string name, string parentTable, string[] parentColumns, string childTable, string[] childColumns, ForeignKeyConstraintType constraint);
181181

182182
/// <summary>
183183
/// Add a foreign key constraint
184184
/// </summary>
185185
///
186186
/// <param name="name">The name of the foreign key. e.g. FK_TABLE_REF</param>
187-
/// <param name="foreignTable">The table that the foreign key will be created in (eg. Table.FK_id)</param>
188-
/// <param name="foreignColumn">The column that is the foreign key (eg. FK_id)</param>
189-
/// <param name="primaryTable">The table that holds the primary keys (eg. Table.PK_id)</param>
190-
/// <param name="primaryColumn">The column that is the primary key (eg. PK_id)</param>
191-
void AddForeignKey(string name, string foreignTable, string foreignColumn, string primaryTable, string primaryColumn);
187+
/// <param name="parentTable">The table that the foreign key will be created in (eg. Table.FK_id)</param>
188+
/// <param name="parentColumn">The column that is the foreign key (eg. FK_id)</param>
189+
/// <param name="childTable">The table that holds the primary keys (eg. Table.PK_id)</param>
190+
/// <param name="childColumn">The column that is the primary key (eg. PK_id)</param>
191+
void AddForeignKey(string name, string parentTable, string parentColumn, string childTable, string childColumn);
192192

193193
/// <summary>
194194
/// Add a foreign key constraint
195195
/// </summary>
196196
/// <param name="name">The name of the foreign key. e.g. FK_TABLE_REF</param>
197-
/// <param name="foreignTable">The table that the foreign key will be created in (eg. Table.FK_id)</param>
198-
/// <param name="foreignColumn">The column that is the foreign key (eg. FK_id)</param>
199-
/// <param name="primaryTable">The table that holds the primary key (eg. Table.PK_id)</param>
200-
/// <param name="primaryColumn">The column that is the primary key (eg. PK_id)</param>
197+
/// <param name="parentTable">The table that the foreign key will be created in (eg. Table.FK_id)</param>
198+
/// <param name="parentColumn">The column that is the foreign key (eg. FK_id)</param>
199+
/// <param name="childTable">The table that holds the primary key (eg. Table.PK_id)</param>
200+
/// <param name="childColumn">The column that is the primary key (eg. PK_id)</param>
201201
/// <param name="constraint">Constraint parameters</param>
202-
void AddForeignKey(string name, string foreignTable, string foreignColumn, string primaryTable, string primaryColumn, ForeignKeyConstraintType constraint);
202+
void AddForeignKey(string name, string parentTable, string parentColumn, string childTable, string childColumn, ForeignKeyConstraintType constraint);
203203

204204
/// <summary>
205205
/// Add a foreign key constraint when you don't care about the name of the constraint.

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

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,24 @@ protected virtual void CreateConnection(string providerName)
4444
_connection.Open();
4545
}
4646

47-
public override void AddForeignKey(string name, string primaryTable, string[] primaryColumns, string refTable,
48-
string[] refColumns, ForeignKeyConstraintType constraint)
47+
public override void AddForeignKey(
48+
string name,
49+
string parentTable,
50+
string[] parentColumns,
51+
string childTable,
52+
string[] childColumns,
53+
ForeignKeyConstraintType constraint)
4954
{
50-
var sqliteTableInfo = GetTableData(primaryTable);
55+
var sqliteTableInfo = GetTableData(childTable);
5156

5257
var foreignKey = new ForeignKeyConstraint
5358
{
5459
// SQLite does not support FK names
5560
Name = null,
56-
Table = primaryTable,
57-
PkTable = refTable,
58-
Columns = primaryColumns,
59-
PkColumns = refColumns
61+
ParentTable = parentTable,
62+
ChildTable = childTable,
63+
ParentColumns = parentColumns,
64+
ChildColumns = childColumns
6065
};
6166

6267
sqliteTableInfo.ForeignKeys.Add(foreignKey);
@@ -99,10 +104,10 @@ public override ForeignKeyConstraint[] GetForeignKeyConstraints(string tableName
99104
Id = group.First().Id,
100105
// SQLite does not support FK names.
101106
Name = null,
102-
Table = tableName,
103-
Columns = group.OrderBy(x => x.Seq).Select(x => x.From).ToArray(),
104-
PkColumns = group.OrderBy(x => x.Seq).Select(x => x.To).ToArray(),
105-
PkTable = group.First().Table,
107+
ParentTable = group.First().Table,
108+
ParentColumns = group.OrderBy(x => x.Seq).Select(x => x.To).ToArray(),
109+
ChildColumns = group.OrderBy(x => x.Seq).Select(x => x.From).ToArray(),
110+
ChildTable = tableName,
106111
OnDelete = group.First().OnDelete,
107112
OnUpdate = group.First().OnUpdate,
108113
Match = group.First().Match
@@ -778,11 +783,11 @@ public override void AddTable(string name, string engine, params IDbField[] fiel
778783
// but not being stored in any way hence not being retrievable using foreign_key_list
779784
// we leave it out in the following string.
780785

781-
var sourceColumnNamesQuotedString = string.Join(", ", fk.Columns.Select(QuoteColumnNameIfRequired));
782-
var foreignColumnNamesQuotedString = string.Join(", ", fk.PkColumns.Select(QuoteColumnNameIfRequired));
783-
var targetTableNameQuoted = QuoteTableNameIfRequired(fk.PkTable);
786+
var sourceColumnNamesQuotedString = string.Join(", ", fk.ChildColumns.Select(QuoteColumnNameIfRequired));
787+
var parentColumnNamesQuotedString = string.Join(", ", fk.ParentColumns.Select(QuoteColumnNameIfRequired));
788+
var parentTableNameQuoted = QuoteTableNameIfRequired(fk.ParentTable);
784789

785-
var foreignKeyString = $", FOREIGN KEY ({sourceColumnNamesQuotedString}) REFERENCES {targetTableNameQuoted}({foreignColumnNamesQuotedString})";
790+
var foreignKeyString = $", FOREIGN KEY ({sourceColumnNamesQuotedString}) REFERENCES {parentTableNameQuoted}({parentColumnNamesQuotedString})";
786791

787792
stringBuilder.Append(foreignKeyString);
788793
}

src/Migrator/Providers/TransformationProvider.cs

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,12 @@ public virtual Column[] GetColumns(string table)
140140
public virtual ForeignKeyConstraint[] GetForeignKeyConstraints(string table)
141141
{
142142
var constraints = new List<ForeignKeyConstraint>();
143-
using (IDbCommand cmd = CreateCommand())
143+
using (var cmd = CreateCommand())
144144
using (
145-
IDataReader reader =
145+
var reader =
146+
// TODO:
147+
// In this statement the naming of alias PK is misleading since INFORMATION_SCHEMA.TABLE_CONSTRAINTS (alias PK) is the child
148+
// while INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS (alias C) is the parent
146149
ExecuteQuery(
147150
cmd, String.Format("SELECT K_Table = FK.TABLE_NAME, FK_Column = CU.COLUMN_NAME, PK_Table = PK.TABLE_NAME, PK_Column = PT.COLUMN_NAME, Constraint_Name = C.CONSTRAINT_NAME FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME INNER JOIN ( SELECT i1.TABLE_NAME, i2.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1 INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY' ) PT ON PT.TABLE_NAME = PK.TABLE_NAME WHERE FK.table_name = '{0}'", table)))
148151
{
@@ -151,10 +154,10 @@ public virtual ForeignKeyConstraint[] GetForeignKeyConstraints(string table)
151154
var constraint = new ForeignKeyConstraint
152155
{
153156
Name = reader.GetString(4),
154-
Table = reader.GetString(0),
155-
Columns = new[] { reader.GetString(1) },
156-
PkTable = reader.GetString(2),
157-
PkColumns = new[] { reader.GetString(3) }
157+
ParentTable = reader.GetString(0),
158+
ParentColumns = [reader.GetString(1)],
159+
ChildTable = reader.GetString(2),
160+
ChildColumns = [reader.GetString(3)]
158161
};
159162

160163
constraints.Add(constraint);
@@ -748,18 +751,18 @@ public virtual void GenerateForeignKey(string primaryTable, string[] primaryColu
748751

749752
public virtual void AddForeignKey(string table, ForeignKeyConstraint fk)
750753
{
751-
AddForeignKey(fk.Name, table, fk.Columns, fk.PkTable, fk.PkColumns);
754+
AddForeignKey(fk.Name, table, fk.ParentColumns, fk.ChildTable, fk.ChildColumns);
752755
}
753756

754-
public virtual void AddForeignKey(string name, string primaryTable, string primaryColumn, string refTable, string refColumn)
757+
public virtual void AddForeignKey(string name, string parentTable, string parentColumn, string childTable, string childColumn)
755758
{
756759
try
757760
{
758-
AddForeignKey(name, primaryTable, new[] { primaryColumn }, refTable, new[] { refColumn });
761+
AddForeignKey(name, parentTable, [parentColumn], childTable, [childColumn]);
759762
}
760763
catch (Exception ex)
761764
{
762-
throw new Exception(string.Format("Error occured while adding foreign key: \"{0}\" between table: \"{1}\" and table: \"{2}\" - see inner exception for details", name, primaryTable, refTable), ex);
765+
throw new Exception(string.Format("Error occured while adding foreign key: \"{0}\" between table: \"{1}\" and table: \"{2}\" - see inner exception for details", name, parentTable, childTable), ex);
763766
}
764767
}
765768

@@ -768,32 +771,32 @@ public virtual void AddForeignKey(string name, string primaryTable, string prima
768771
/// AddForeignKey(string, string, string, string, string)
769772
/// </see>
770773
/// </summary>
771-
public virtual void AddForeignKey(string name, string primaryTable, string[] primaryColumns, string refTable, string[] refColumns)
774+
public virtual void AddForeignKey(string name, string parentTable, string[] parentColumns, string childTable, string[] childColumns)
772775
{
773-
AddForeignKey(name, primaryTable, primaryColumns, refTable, refColumns, ForeignKeyConstraintType.NoAction);
776+
AddForeignKey(name, parentTable, parentColumns, childTable, childColumns, ForeignKeyConstraintType.NoAction);
774777
}
775778

776-
public virtual void AddForeignKey(string name, string primaryTable, string primaryColumn, string refTable, string refColumn, ForeignKeyConstraintType constraint)
779+
public virtual void AddForeignKey(string name, string parentTable, string parentColumn, string childTable, string childColumn, ForeignKeyConstraintType constraint)
777780
{
778-
AddForeignKey(name, primaryTable, new[] { primaryColumn }, refTable, new[] { refColumn },
781+
AddForeignKey(name, parentTable, new[] { parentColumn }, childTable, new[] { childColumn },
779782
constraint);
780783
}
781784

782-
public virtual void AddForeignKey(string name, string primaryTable, string[] primaryColumns, string refTable,
783-
string[] refColumns, ForeignKeyConstraintType constraint)
785+
public virtual void AddForeignKey(string name, string parentTable, string[] parentColumns, string childTable,
786+
string[] childColumns, ForeignKeyConstraintType constraint)
784787
{
785-
refTable = QuoteTableNameIfRequired(refTable);
786-
primaryTable = QuoteTableNameIfRequired(primaryTable);
787-
QuoteColumnNames(primaryColumns);
788-
QuoteColumnNames(refColumns);
788+
childTable = QuoteTableNameIfRequired(childTable);
789+
parentTable = QuoteTableNameIfRequired(parentTable);
790+
QuoteColumnNames(parentColumns);
791+
QuoteColumnNames(childColumns);
789792

790793
string constraintResolved = constraintMapper.SqlForConstraint(constraint);
791794

792795
ExecuteNonQuery(
793796
String.Format(
794797
"ALTER TABLE {0} ADD CONSTRAINT {1} FOREIGN KEY ({2}) REFERENCES {3} ({4}) ON UPDATE {5} ON DELETE {6}",
795-
primaryTable, name, String.Join(",", primaryColumns),
796-
refTable, String.Join(",", refColumns), constraintResolved, constraintResolved));
798+
parentTable, name, String.Join(",", parentColumns),
799+
childTable, String.Join(",", childColumns), constraintResolved, constraintResolved));
797800
}
798801

799802
/// <summary>

src/Migrator/Tools/SchemaDumper.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,17 @@ private string GetListString(string[] list)
7777
}
7878
return $"new []{String.Format("{{{0}}}", String.Join(",", list))}";
7979
}
80+
8081
private void addForeignKeys(StringWriter writer)
8182
{
8283
foreach (var fk in this.foreignKeys)
8384
{
84-
string[] fkCols = fk.Columns;
85+
var fkCols = fk.ParentColumns;
86+
8587
foreach (var col in fkCols)
86-
writer.WriteLine($"\t\tDatabase.AddForeignKey(\"{fk.Name}\", \"{fk.Table}\", {this.GetListString(fk.Columns)}, \"{fk.PkTable}\", {this.GetListString(fk.PkColumns)});");
88+
{
89+
writer.WriteLine($"\t\tDatabase.AddForeignKey(\"{fk.Name}\", \"{fk.ParentTable}\", {this.GetListString(fk.ParentColumns)}, \"{fk.ChildTable}\", {this.GetListString(fk.ChildColumns)});");
90+
}
8791
//this._provider.AddForeignKey(name, fktable, fkcols, pktable, primaryCols);
8892
}
8993
}

0 commit comments

Comments
 (0)