Skip to content

Commit

Permalink
Refactor SqlConstraintString
Browse files Browse the repository at this point in the history
  • Loading branch information
hazzik committed Feb 11, 2025
1 parent f4c803d commit 1acea53
Showing 1 changed file with 21 additions and 32 deletions.
53 changes: 21 additions & 32 deletions src/NHibernate/Mapping/ForeignKey.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,29 +27,26 @@ public class ForeignKey : Constraint
/// <returns>
/// A string that contains the SQL to create the named Foreign Key Constraint.
/// </returns>
public override string SqlConstraintString(Dialect.Dialect d, string constraintName, string defaultCatalog, string defaultSchema)
{
string[] cols = new string[ColumnSpan];
string[] refcols = new string[ColumnSpan];
int i = 0;
IEnumerable<Column> refiter;
if (IsReferenceToPrimaryKey)
refiter = referencedTable.PrimaryKey.ColumnIterator;
else
refiter = referencedColumns ?? Enumerable.Empty<Column>();
foreach (Column column in ColumnIterator)
{
cols[i] = column.GetQuotedName(d);
i++;
}
public override string SqlConstraintString(
Dialect.Dialect d,
string constraintName,
string defaultCatalog,
string defaultSchema)
{
var refiter = IsReferenceToPrimaryKey
? referencedTable.PrimaryKey.Columns
: referencedColumns;

var cols = Columns.ToArray(column => column.GetQuotedName(d));
var refcols = refiter.ToArray(column => column.GetQuotedName(d));

string result = d.GetAddForeignKeyConstraintString(
constraintName,
cols,
referencedTable.GetQualifiedName(d, defaultCatalog, defaultSchema),
refcols,
IsReferenceToPrimaryKey);

i = 0;
foreach (Column column in refiter)
{
refcols[i] = column.GetQuotedName(d);
i++;
}
string result = d.GetAddForeignKeyConstraintString(constraintName, cols, referencedTable.GetQualifiedName(d, defaultCatalog, defaultSchema), refcols, IsReferenceToPrimaryKey);
return cascadeDeleteEnabled && d.SupportsCascadeDelete ? result + " on delete cascade" : result;
}

Expand Down Expand Up @@ -217,10 +214,7 @@ public string ReferencedEntityName
}

/// <summary>Does this foreignkey reference the primary key of the reference table </summary>
public bool IsReferenceToPrimaryKey
{
get { return referencedColumns == null || referencedColumns.Count == 0; }
}
public bool IsReferenceToPrimaryKey => referencedColumns == null || referencedColumns.Count == 0;

public string GeneratedConstraintNamePrefix => "FK_";

Expand All @@ -231,12 +225,7 @@ public override bool IsGenerated(Dialect.Dialect dialect)
if (dialect.SupportsNullInUnique || IsReferenceToPrimaryKey)
return true;

foreach (var column in referencedColumns)
{
if (column.IsNullable)
return false;
}
return true;
return referencedColumns.All(column => !column.IsNullable);
}
}
}

0 comments on commit 1acea53

Please sign in to comment.