From 9997cd047ab34e6c33e93e42543d9a958fd99829 Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Mon, 29 Apr 2024 03:43:32 +0300 Subject: [PATCH 1/6] Move IDataMigrationManager.UpdateAsync(IEnumerable) to extension method --- .../DataMigrationManagerExtensions.cs | 27 +++++++++++++++++++ .../IDataMigrationManager.cs | 10 ++++++- .../Migration/DataMigrationManager.cs | 16 +++-------- 3 files changed, 40 insertions(+), 13 deletions(-) create mode 100644 src/OrchardCore/OrchardCore.Data.Abstractions/Extensions/DataMigrationManagerExtensions.cs diff --git a/src/OrchardCore/OrchardCore.Data.Abstractions/Extensions/DataMigrationManagerExtensions.cs b/src/OrchardCore/OrchardCore.Data.Abstractions/Extensions/DataMigrationManagerExtensions.cs new file mode 100644 index 00000000000..d7b93f9175d --- /dev/null +++ b/src/OrchardCore/OrchardCore.Data.Abstractions/Extensions/DataMigrationManagerExtensions.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace OrchardCore.Data.Migration; + +/// +/// Provides an extension methods for . +/// +public static class DataMigrationManagerExtensions +{ + /// + /// Updates the database to the latest version for the specified features. + /// + /// The . + /// The features to be updated. + public static async Task UpdateAsync(this IDataMigrationManager dataMigrationManager, IEnumerable features) + { + ArgumentNullException.ThrowIfNull(dataMigrationManager, nameof(dataMigrationManager)); + ArgumentNullException.ThrowIfNull(features, nameof(features)); + + foreach (var feature in features) + { + await dataMigrationManager.UpdateAsync(feature); + } + } +} diff --git a/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs b/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs index 80f070e968c..aacb0ed1ce1 100644 --- a/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs +++ b/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Threading.Tasks; @@ -28,7 +29,14 @@ public interface IDataMigrationManager /// Updates the database to the latest version for the specified features. /// /// The features to be updated. - Task UpdateAsync(IEnumerable features); + [Obsolete("This method has been deprecated and moved into an extension method.")] + async Task UpdateAsync(IEnumerable features) + { + foreach (var feature in features) + { + await UpdateAsync(feature); + } + } /// /// Execute a script to delete any information relative to the feature. diff --git a/src/OrchardCore/OrchardCore.Data.YesSql/Migration/DataMigrationManager.cs b/src/OrchardCore/OrchardCore.Data.YesSql/Migration/DataMigrationManager.cs index 3a8530abaa4..9706208a739 100644 --- a/src/OrchardCore/OrchardCore.Data.YesSql/Migration/DataMigrationManager.cs +++ b/src/OrchardCore/OrchardCore.Data.YesSql/Migration/DataMigrationManager.cs @@ -123,17 +123,6 @@ public async Task Uninstall(string feature) } } - public async Task UpdateAsync(IEnumerable featureIds) - { - foreach (var featureId in featureIds) - { - if (!_processedFeatures.Contains(featureId)) - { - await UpdateAsync(featureId); - } - } - } - public async Task UpdateAsync(string featureId) { if (_processedFeatures.Contains(featureId)) @@ -152,7 +141,10 @@ public async Task UpdateAsync(string featureId) .Where(x => x.Id != featureId) .Select(x => x.Id); - await UpdateAsync(dependencies); + foreach (var dependency in dependencies) + { + await UpdateAsync(dependency); + } var migrations = GetDataMigrations(featureId); From abc78a6809eff4aac3de567f7c674c34e52f15cb Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Mon, 29 Apr 2024 03:52:44 +0300 Subject: [PATCH 2/6] Use Task.WhenAll() --- .../Extensions/DataMigrationManagerExtensions.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/OrchardCore/OrchardCore.Data.Abstractions/Extensions/DataMigrationManagerExtensions.cs b/src/OrchardCore/OrchardCore.Data.Abstractions/Extensions/DataMigrationManagerExtensions.cs index d7b93f9175d..d051df5f018 100644 --- a/src/OrchardCore/OrchardCore.Data.Abstractions/Extensions/DataMigrationManagerExtensions.cs +++ b/src/OrchardCore/OrchardCore.Data.Abstractions/Extensions/DataMigrationManagerExtensions.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; namespace OrchardCore.Data.Migration; @@ -19,9 +20,6 @@ public static async Task UpdateAsync(this IDataMigrationManager dataMigrationMan ArgumentNullException.ThrowIfNull(dataMigrationManager, nameof(dataMigrationManager)); ArgumentNullException.ThrowIfNull(features, nameof(features)); - foreach (var feature in features) - { - await dataMigrationManager.UpdateAsync(feature); - } + await Task.WhenAll(features.Select(dataMigrationManager.UpdateAsync)); } } From 11cbcda0a1f5875301b463676c5ae4d13a01dade Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Mon, 29 Apr 2024 03:56:24 +0300 Subject: [PATCH 3/6] Use Task.WhenAll() in the interface default method --- .../IDataMigrationManager.cs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs b/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs index aacb0ed1ce1..30b42256196 100644 --- a/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs +++ b/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; namespace OrchardCore.Data.Migration @@ -30,13 +31,7 @@ public interface IDataMigrationManager /// /// The features to be updated. [Obsolete("This method has been deprecated and moved into an extension method.")] - async Task UpdateAsync(IEnumerable features) - { - foreach (var feature in features) - { - await UpdateAsync(feature); - } - } + async Task UpdateAsync(IEnumerable features) => await Task.WhenAll(features.Select(UpdateAsync)); /// /// Execute a script to delete any information relative to the feature. From 8993f46671e42bd868b03bfe5855167afbf56c99 Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Mon, 29 Apr 2024 20:17:21 +0300 Subject: [PATCH 4/6] Address feedback --- .../DataMigrationManagerExtensions.cs | 25 ------------------- .../IDataMigrationManager.cs | 11 +++----- .../Migration/DataMigrationManager.cs | 13 +++++++++- 3 files changed, 16 insertions(+), 33 deletions(-) delete mode 100644 src/OrchardCore/OrchardCore.Data.Abstractions/Extensions/DataMigrationManagerExtensions.cs diff --git a/src/OrchardCore/OrchardCore.Data.Abstractions/Extensions/DataMigrationManagerExtensions.cs b/src/OrchardCore/OrchardCore.Data.Abstractions/Extensions/DataMigrationManagerExtensions.cs deleted file mode 100644 index d051df5f018..00000000000 --- a/src/OrchardCore/OrchardCore.Data.Abstractions/Extensions/DataMigrationManagerExtensions.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace OrchardCore.Data.Migration; - -/// -/// Provides an extension methods for . -/// -public static class DataMigrationManagerExtensions -{ - /// - /// Updates the database to the latest version for the specified features. - /// - /// The . - /// The features to be updated. - public static async Task UpdateAsync(this IDataMigrationManager dataMigrationManager, IEnumerable features) - { - ArgumentNullException.ThrowIfNull(dataMigrationManager, nameof(dataMigrationManager)); - ArgumentNullException.ThrowIfNull(features, nameof(features)); - - await Task.WhenAll(features.Select(dataMigrationManager.UpdateAsync)); - } -} diff --git a/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs b/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs index 30b42256196..d9ad1bf85e0 100644 --- a/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs +++ b/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs @@ -1,6 +1,4 @@ -using System; using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; namespace OrchardCore.Data.Migration @@ -24,14 +22,13 @@ public interface IDataMigrationManager /// Updates the database to the latest version for the specified feature. /// /// The feature to be uninstalled. - Task UpdateAsync(string feature); + Task UpdateAsync(string feature) => UpdateAsync([feature]); /// - /// Updates the database to the latest version for the specified features. + /// Updates the database to the latest version for the specified feature(s). /// - /// The features to be updated. - [Obsolete("This method has been deprecated and moved into an extension method.")] - async Task UpdateAsync(IEnumerable features) => await Task.WhenAll(features.Select(UpdateAsync)); + /// The feature(s) to be updated. + Task UpdateAsync(params string[] features); /// /// Execute a script to delete any information relative to the feature. diff --git a/src/OrchardCore/OrchardCore.Data.YesSql/Migration/DataMigrationManager.cs b/src/OrchardCore/OrchardCore.Data.YesSql/Migration/DataMigrationManager.cs index 9706208a739..594d72e1ad8 100644 --- a/src/OrchardCore/OrchardCore.Data.YesSql/Migration/DataMigrationManager.cs +++ b/src/OrchardCore/OrchardCore.Data.YesSql/Migration/DataMigrationManager.cs @@ -123,7 +123,18 @@ public async Task Uninstall(string feature) } } - public async Task UpdateAsync(string featureId) + public async Task UpdateAsync(params string[] featureIds) + { + foreach (var featureId in featureIds) + { + if (!_processedFeatures.Contains(featureId)) + { + await UpdateAsync(featureId); + } + } + } + + private async Task UpdateAsync(string featureId) { if (_processedFeatures.Contains(featureId)) { From 2ce8c06f4fda632dcbfc96af742c46bbc028e454 Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Mon, 29 Apr 2024 20:21:39 +0300 Subject: [PATCH 5/6] Obsolete UpdateAsync(string) --- .../OrchardCore.Data.Abstractions/IDataMigrationManager.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs b/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs index d9ad1bf85e0..92caa1bef24 100644 --- a/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs +++ b/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Threading.Tasks; @@ -22,6 +23,7 @@ public interface IDataMigrationManager /// Updates the database to the latest version for the specified feature. /// /// The feature to be uninstalled. + [Obsolete("This method has been deprectated please use UpdateAsync(string[] features) instead.")] Task UpdateAsync(string feature) => UpdateAsync([feature]); /// From 3443c3ce31b409dcef4680477f3b1b3206bd7c61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20Leh=C3=B3czky?= Date: Thu, 2 May 2024 00:43:32 +0200 Subject: [PATCH 6/6] Typo --- .../OrchardCore.Data.Abstractions/IDataMigrationManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs b/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs index 92caa1bef24..1082e5661f5 100644 --- a/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs +++ b/src/OrchardCore/OrchardCore.Data.Abstractions/IDataMigrationManager.cs @@ -23,7 +23,7 @@ public interface IDataMigrationManager /// Updates the database to the latest version for the specified feature. /// /// The feature to be uninstalled. - [Obsolete("This method has been deprectated please use UpdateAsync(string[] features) instead.")] + [Obsolete("This method has been deprecated, please use UpdateAsync(string[] features) instead.")] Task UpdateAsync(string feature) => UpdateAsync([feature]); ///