New AddColumn overloads for migrations (obsoleted the oddly named AddColumnIfNotExists)

This commit is contained in:
Ronald Barendse
2021-07-13 13:43:07 +02:00
parent 2befd73640
commit 81bdcf58a8

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
@@ -13,39 +14,48 @@ namespace Umbraco.Core.Migrations
{
// provides extra methods for migrations
[Obsolete("Renamed to AddColumn, as that already checks whether the column does not exist.")]
protected void AddColumnIfNotExists<T>(IEnumerable<ColumnInfo> columns, string columnName) => AddColumn<T>(columns, columnName);
[Obsolete("Renamed to AddColumn, as that already checks whether the column does not exist.")]
protected void AddColumnIfNotExists<T>(IEnumerable<ColumnInfo> columns, string tableName, string columnName) => AddColumn<T>(columns, tableName, columnName);
protected void AddColumn<T>(string columnName)
{
var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax);
AddColumn(table, table.Name, columnName);
}
protected void AddColumnIfNotExists<T>(IEnumerable<ColumnInfo> columns, string columnName)
{
var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax);
if (columns.Any(x => x.TableName.InvariantEquals(table.Name) && !x.ColumnName.InvariantEquals(columnName)))
AddColumn(table, table.Name, columnName);
}
protected void AddColumn<T>(string tableName, string columnName)
{
var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax);
AddColumn(table, tableName, columnName);
}
protected void AddColumnIfNotExists<T>(IEnumerable<ColumnInfo> columns, string tableName, string columnName)
protected void AddColumn<T>(IEnumerable<ColumnInfo> columns, string columnName)
{
var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax);
if (columns.Any(x => x.TableName.InvariantEquals(tableName) && !x.ColumnName.InvariantEquals(columnName)))
AddColumn(table, tableName, columnName);
AddColumn(columns, table, table.Name, columnName);
}
protected void AddColumn<T>(IEnumerable<ColumnInfo> columns, string tableName, string columnName)
{
var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax);
AddColumn(columns, table, tableName, columnName);
}
private void AddColumn(TableDefinition table, string tableName, string columnName)
{
if (ColumnExists(tableName, columnName)) return;
var columns = SqlSyntax.GetColumnsInSchema(Context.Database).Distinct().ToArray();
AddColumn(columns, table, tableName, columnName);
}
private void AddColumn(IEnumerable<ColumnInfo> columns, TableDefinition table, string tableName, string columnName)
{
if (ColumnExists(columns, tableName, columnName)) return;
var column = table.Columns.First(x => x.Name == columnName);
var createSql = SqlSyntax.Format(column);
Execute.Sql(string.Format(SqlSyntax.AddColumn, SqlSyntax.GetQuotedTableName(tableName), createSql)).Do();
}
@@ -61,9 +71,27 @@ namespace Umbraco.Core.Migrations
AddColumn(table, tableName, columnName, out sqls);
}
protected void AddColumn<T>(IEnumerable<ColumnInfo> columns, string columnName, out IEnumerable<string> sqls)
{
var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax);
AddColumn(columns, table, table.Name, columnName, out sqls);
}
protected void AddColumn<T>(IEnumerable<ColumnInfo> columns, string tableName, string columnName, out IEnumerable<string> sqls)
{
var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax);
AddColumn(columns, table, tableName, columnName, out sqls);
}
private void AddColumn(TableDefinition table, string tableName, string columnName, out IEnumerable<string> sqls)
{
if (ColumnExists(tableName, columnName))
var columns = SqlSyntax.GetColumnsInSchema(Context.Database).Distinct().ToArray();
AddColumn(columns, table, tableName, columnName, out sqls);
}
private void AddColumn(IEnumerable<ColumnInfo> columns, TableDefinition table, string tableName, string columnName, out IEnumerable<string> sqls)
{
if (ColumnExists(columns, tableName, columnName))
{
sqls = Enumerable.Empty<string>();
return;
@@ -114,6 +142,11 @@ namespace Umbraco.Core.Migrations
protected bool ColumnExists(string tableName, string columnName)
{
var columns = SqlSyntax.GetColumnsInSchema(Context.Database).Distinct().ToArray();
return ColumnExists(columns, tableName, columnName);
}
protected bool ColumnExists(IEnumerable<ColumnInfo> columns, string tableName, string columnName)
{
return columns.Any(x => x.TableName.InvariantEquals(tableName) && x.ColumnName.InvariantEquals(columnName));
}