From 7adc9864726c40a72bf1cee45f3d09a85102fff7 Mon Sep 17 00:00:00 2001 From: Stephan Date: Wed, 28 Mar 2018 12:40:52 +0200 Subject: [PATCH] Cleanup various migration stuff --- .../Expressions/InsertDataExpression.cs | 24 +++++++++------ .../Migrations/MigrationBase_Extra.cs | 29 ++++++++++++++++--- .../Services/Implement/KeyValueService.cs | 17 ++++++----- 3 files changed, 49 insertions(+), 21 deletions(-) diff --git a/src/Umbraco.Core/Migrations/Expressions/Insert/Expressions/InsertDataExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Insert/Expressions/InsertDataExpression.cs index 7fbd7765e3..7efe457402 100644 --- a/src/Umbraco.Core/Migrations/Expressions/Insert/Expressions/InsertDataExpression.cs +++ b/src/Umbraco.Core/Migrations/Expressions/Insert/Expressions/InsertDataExpression.cs @@ -32,19 +32,25 @@ namespace Umbraco.Core.Migrations.Expressions.Insert.Expressions { foreach (var item in Rows) { - var cols = ""; - var vals = ""; + var cols = new StringBuilder(); + var vals = new StringBuilder(); + var first = true; foreach (var keyVal in item) { - cols += SqlSyntax.GetQuotedColumnName(keyVal.Key) + ","; - vals += GetQuotedValue(keyVal.Value) + ","; + if (first) + { + first = false; + } + else + { + cols.Append(","); + vals.Append(","); + } + cols.Append(SqlSyntax.GetQuotedColumnName(keyVal.Key)); + vals.Append(GetQuotedValue(keyVal.Value)); } - cols = cols.TrimEnd(','); - vals = vals.TrimEnd(','); - var sql = string.Format(SqlSyntax.InsertData, - SqlSyntax.GetQuotedTableName(TableName), - cols, vals); + var sql = string.Format(SqlSyntax.InsertData, SqlSyntax.GetQuotedTableName(TableName), cols, vals); stmts.Append(sql); AppendStatementSeparator(stmts); diff --git a/src/Umbraco.Core/Migrations/MigrationBase_Extra.cs b/src/Umbraco.Core/Migrations/MigrationBase_Extra.cs index 9f4c45f0ad..b1b405bcf4 100644 --- a/src/Umbraco.Core/Migrations/MigrationBase_Extra.cs +++ b/src/Umbraco.Core/Migrations/MigrationBase_Extra.cs @@ -12,19 +12,41 @@ namespace Umbraco.Core.Migrations { // provides extra methods for migrations - //fixme - why do we have tableName and provide a table type which we can just extract the table name from? + protected void AddColumn(string columnName) + { + var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax); + AddColumn(table, table.Name, columnName); + } + protected void AddColumn(string tableName, string columnName) + { + var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax); + AddColumn(table, tableName, columnName); + } + + private void AddColumn(TableDefinition table, string tableName, string columnName) { if (ColumnExists(tableName, columnName)) return; - var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax); var column = table.Columns.First(x => x.Name == columnName); var createSql = SqlSyntax.Format(column); - Execute.Sql(string.Format(SqlSyntax.AddColumn, SqlSyntax.GetQuotedTableName(table.Name), createSql)).Do(); + Execute.Sql(string.Format(SqlSyntax.AddColumn, SqlSyntax.GetQuotedTableName(tableName), createSql)).Do(); + } + + protected void AddColumn(string columnName, out IEnumerable sqls) + { + var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax); + AddColumn(table, table.Name, columnName, out sqls); } protected void AddColumn(string tableName, string columnName, out IEnumerable sqls) + { + var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax); + AddColumn(table, tableName, columnName, out sqls); + } + + private void AddColumn(TableDefinition table, string tableName, string columnName, out IEnumerable sqls) { if (ColumnExists(tableName, columnName)) { @@ -32,7 +54,6 @@ namespace Umbraco.Core.Migrations return; } - var table = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax); var column = table.Columns.First(x => x.Name == columnName); var createSql = SqlSyntax.Format(column, SqlSyntax.GetQuotedTableName(tableName), out sqls); Execute.Sql(string.Format(SqlSyntax.AddColumn, SqlSyntax.GetQuotedTableName(tableName), createSql)).Do(); diff --git a/src/Umbraco.Core/Services/Implement/KeyValueService.cs b/src/Umbraco.Core/Services/Implement/KeyValueService.cs index 9b91325eab..cb1c423535 100644 --- a/src/Umbraco.Core/Services/Implement/KeyValueService.cs +++ b/src/Umbraco.Core/Services/Implement/KeyValueService.cs @@ -35,8 +35,9 @@ namespace Umbraco.Core.Services.Implement private void Initialize() { - // all this cannot be achieved via default migrations since it needs to run - // before any migration, in order to figure out migrations, ironically we are using a custom migration to do this + // all this cannot be achieved via an UmbracoPlan migration since it needs to + // run before any migration, in order to figure out the current plan's state. + // (does not prevent us from using a migration to do it, though) using (var scope = _scopeProvider.CreateScope()) { @@ -56,13 +57,13 @@ namespace Umbraco.Core.Services.Implement } /// - /// A custom migration that executes standalone during the Initialize phase of this service + /// A custom migration that executes standalone during the Initialize phase of this service. /// private class InitializeMigration : MigrationBase { - public InitializeMigration(IMigrationContext context) : base(context) - { - } + public InitializeMigration(IMigrationContext context) + : base(context) + { } public override void Migrate() { @@ -79,9 +80,9 @@ namespace Umbraco.Core.Services.Implement Delete.Column("nid").FromTable(Constants.DatabaseSchema.Tables.Lock).Do(); // complete the primary key Alter.Table(Constants.DatabaseSchema.Tables.Lock).AlterColumn("id").AsInt32().NotNullable().PrimaryKey("PK_umbracoLock").Do(); - + // insert the key-value lock - Insert.IntoTable(Constants.DatabaseSchema.Tables.Lock).Row(new {id = Constants.Locks.KeyValues, name = "KeyValues", value = 1}).Do(); + Insert.IntoTable(Constants.DatabaseSchema.Tables.Lock).Row(new {id = Constants.Locks.KeyValues, name = "KeyValues", value = 1}).Do(); // create the key-value table if it's not there if (TableExists(Constants.DatabaseSchema.Tables.KeyValue) == false)