From 81bdcf58a847d82f24b4cd3d51effcb6d3dbef93 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 13 Jul 2021 13:43:07 +0200 Subject: [PATCH] New AddColumn overloads for migrations (obsoleted the oddly named AddColumnIfNotExists) --- .../Migrations/MigrationBase_Extra.cs | 61 ++++++++++++++----- 1 file changed, 47 insertions(+), 14 deletions(-) diff --git a/src/Umbraco.Core/Migrations/MigrationBase_Extra.cs b/src/Umbraco.Core/Migrations/MigrationBase_Extra.cs index f4c6150073..4f3ced9b14 100644 --- a/src/Umbraco.Core/Migrations/MigrationBase_Extra.cs +++ b/src/Umbraco.Core/Migrations/MigrationBase_Extra.cs @@ -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(IEnumerable columns, string columnName) => AddColumn(columns, columnName); + + [Obsolete("Renamed to AddColumn, as that already checks whether the column does not exist.")] + protected void AddColumnIfNotExists(IEnumerable columns, string tableName, string columnName) => AddColumn(columns, tableName, columnName); + protected void AddColumn(string columnName) { var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax); AddColumn(table, table.Name, columnName); } - protected void AddColumnIfNotExists(IEnumerable 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(string tableName, string columnName) { var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax); AddColumn(table, tableName, columnName); } - protected void AddColumnIfNotExists(IEnumerable columns, string tableName, string columnName) + protected void AddColumn(IEnumerable 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(IEnumerable 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 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(IEnumerable columns, string columnName, out IEnumerable sqls) + { + var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax); + AddColumn(columns, table, table.Name, columnName, out sqls); + } + + protected void AddColumn(IEnumerable columns, string tableName, string columnName, out IEnumerable 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 sqls) { - if (ColumnExists(tableName, columnName)) + var columns = SqlSyntax.GetColumnsInSchema(Context.Database).Distinct().ToArray(); + AddColumn(columns, table, tableName, columnName, out sqls); + } + + private void AddColumn(IEnumerable columns, TableDefinition table, string tableName, string columnName, out IEnumerable sqls) + { + if (ColumnExists(columns, tableName, columnName)) { sqls = Enumerable.Empty(); 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 columns, string tableName, string columnName) + { return columns.Any(x => x.TableName.InvariantEquals(tableName) && x.ColumnName.InvariantEquals(columnName)); }