diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs
index 86b90b9d6d..92bc11b04d 100644
--- a/src/Umbraco.Core/Migrations/Expressions/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs
@@ -28,9 +28,10 @@ namespace Umbraco.Core.Migrations.Expressions.Delete.DefaultConstraint
///
public IExecutableBuilder OnColumn(string columnName)
{
- var defaultConstraint = _context.SqlContext.SqlSyntax.GetDefaultConstraint(_context.Database, Expression.TableName, columnName);
- Expression.ConstraintName = defaultConstraint ?? string.Empty;
Expression.ColumnName = columnName;
+ Expression.HasDefaultConstraint = _context.SqlContext.SqlSyntax.TryGetDefaultConstraint(_context.Database, Expression.TableName, columnName, out var constraintName);
+ Expression.ConstraintName = constraintName ?? string.Empty;
+
return new ExecutableBuilder(Expression);
}
}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteDefaultConstraintExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteDefaultConstraintExpression.cs
index 294190c766..b73d3f0d13 100644
--- a/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteDefaultConstraintExpression.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteDefaultConstraintExpression.cs
@@ -11,15 +11,16 @@ namespace Umbraco.Core.Migrations.Expressions.Delete.Expressions
public virtual string TableName { get; set; }
public virtual string ColumnName { get; set; }
public virtual string ConstraintName { get; set; }
+ public virtual bool HasDefaultConstraint { get; set; }
protected override string GetSql()
{
- return ConstraintName.IsNullOrWhiteSpace()
- ? string.Empty
- : string.Format(SqlSyntax.DeleteDefaultConstraint,
+ return HasDefaultConstraint
+ ? string.Format(SqlSyntax.DeleteDefaultConstraint,
SqlSyntax.GetQuotedTableName(TableName),
SqlSyntax.GetQuotedColumnName(ColumnName),
- SqlSyntax.GetQuotedName(ConstraintName));
+ SqlSyntax.GetQuotedName(ConstraintName))
+ : string.Empty;
}
}
}
diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs
index 39419021e0..55625ff04e 100644
--- a/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs
+++ b/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs
@@ -108,12 +108,18 @@ namespace Umbraco.Core.Persistence.SqlSyntax
IEnumerable> GetDefinedIndexes(IDatabase db);
///
- /// Gets the name of the default constraint on a column.
+ /// Tries to gets the name of the default constraint on a column.
///
/// The database.
/// The table name.
/// The column name.
- /// The name of the default constraint, or the empty string if there is no default constraint.
- string GetDefaultConstraint(IDatabase db, string tableName, string columnName);
+ /// The constraint name.
+ /// A value indicating whether a default constraint was found.
+ ///
+ /// Some database engines (e.g. SqlCe) may not have names for default constraints,
+ /// in which case the function may return true, but is
+ /// unspecified.
+ ///
+ bool TryGetDefaultConstraint(IDatabase db, string tableName, string columnName, out string constraintName);
}
}
diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs
index bb91a83da4..cb4b7a5176 100644
--- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs
+++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs
@@ -133,13 +133,14 @@ ORDER BY TABLE_NAME, INDEX_NAME");
}
///
- public override string GetDefaultConstraint(IDatabase db, string tableName, string columnName)
+ public override bool TryGetDefaultConstraint(IDatabase db, string tableName, string columnName, out string constraintName)
{
// cannot return a true default constraint name (does not exist on SqlCe)
// but we won't really need it anyways - just check whether there is a constraint
+ constraintName = null;
var hasDefault = db.Fetch(@"select column_hasdefault from information_schema.columns
where table_name=@0 and column_name=@1", tableName, columnName).FirstOrDefault();
- return hasDefault ? "XXXXX" : string.Empty;
+ return hasDefault;
}
public override bool DoesTableExist(IDatabase db, string tableName)
diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs
index b0f95b0c56..fab7526a6b 100644
--- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs
+++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs
@@ -226,14 +226,15 @@ order by T.name, I.name");
}
///
- public override string GetDefaultConstraint(IDatabase db, string tableName, string columnName)
+ public override bool TryGetDefaultConstraint(IDatabase db, string tableName, string columnName, out string constraintName)
{
- return db.Fetch(@"select con.[name] as [constraintName]
+ constraintName = db.Fetch(@"select con.[name] as [constraintName]
from sys.default_constraints con
join sys.columns col on con.object_id=col.default_object_id
join sys.tables tbl on col.object_id=tbl.object_id
where tbl.[name]=@0 and col.[name]=@1;", tableName, columnName)
- .FirstOrDefault() ?? string.Empty;
+ .FirstOrDefault();
+ return !constraintName.IsNullOrWhiteSpace();
}
public override bool DoesTableExist(IDatabase db, string tableName)
diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs
index 210d8e4cf1..0c27ac2d50 100644
--- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs
+++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs
@@ -223,7 +223,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax
public abstract IEnumerable> GetDefinedIndexes(IDatabase db);
- public abstract string GetDefaultConstraint(IDatabase db, string tableName, string columnName);
+ public abstract bool TryGetDefaultConstraint(IDatabase db, string tableName, string columnName, out string constraintName);
public virtual bool DoesTableExist(IDatabase db, string tableName)
{