diff --git a/Directory.Build.props b/Directory.Build.props index dc4bce2..a6626e5 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -5,7 +5,7 @@ SQL Schema Compare https://github.com/TiCodeX/SQLSchemaCompare TiCodeX - 2026.5.1 + 2026.6.1 true true enable diff --git a/SQLSchemaCompare.CLI/Commands/CompareCommand.cs b/SQLSchemaCompare.CLI/Commands/CompareCommand.cs index 8259380..7e031d3 100644 --- a/SQLSchemaCompare.CLI/Commands/CompareCommand.cs +++ b/SQLSchemaCompare.CLI/Commands/CompareCommand.cs @@ -24,7 +24,7 @@ protected override int Execute(CommandContext context, Options options, Cancella projectService.Project.TargetProviderOptions.ConnectionString = options.TargetConnectionString; } - databaseCompareService.StartCompare(); + databaseCompareService.StartCompare(false); while (!taskService.CurrentTaskInfos.All(x => x.Status is TaskStatus.RanToCompletion or TaskStatus.Faulted or TaskStatus.Canceled)) { diff --git a/SQLSchemaCompare.CLI/Commands/MonitorCommand.cs b/SQLSchemaCompare.CLI/Commands/MonitorCommand.cs new file mode 100644 index 0000000..0c4e23e --- /dev/null +++ b/SQLSchemaCompare.CLI/Commands/MonitorCommand.cs @@ -0,0 +1,117 @@ +namespace TiCodeX.SQLSchemaCompare.CLI.Commands; + +using System.Reflection; + +/// +/// The monitor command +/// +internal class MonitorCommand(IProjectService projectService, ITaskService taskService, IDatabaseCompareService databaseCompareService, ILogger logger) + : Command +{ + /// + protected override int Execute(CommandContext context, Options options, CancellationToken cancellationToken) + { + projectService.NewProject(options.DatabaseType); + projectService.Project.SourceProviderOptions.UseConnectionString = true; + projectService.Project.SourceProviderOptions.ConnectionString = options.ConnectionString; + projectService.Project.TargetProviderOptions.UseConnectionString = true; + projectService.Project.TargetProviderOptions.ConnectionString = options.ConnectionString; + + databaseCompareService.StartCompare(true); + + while (!taskService.CurrentTaskInfos.All(x => x.Status is TaskStatus.RanToCompletion or TaskStatus.Faulted or TaskStatus.Canceled)) + { + Thread.Sleep(200); + } + + if (taskService.CurrentTaskInfos.Any(x => x.Status is TaskStatus.Faulted or TaskStatus.Canceled)) + { + var exception = taskService.CurrentTaskInfos.FirstOrDefault(x => x.Status is TaskStatus.Faulted or TaskStatus.Canceled)?.Exception; + if (exception != null) + { + throw exception; + } + + throw new InvalidOperationException("Unknown error during compare task"); + } + + File.WriteAllText(options.OutputFile, projectService.Project.Result.FullAlterScript); + logger.LogInformation("Compare completed successfully. Output written to {OutputFile}", options.OutputFile); + + return 0; + } + + /// + /// The options for the compare command + /// + internal sealed class Options : CommandSettings + { + /// + /// Gets the type of the database. + /// + [OptionGroup("Inline options")] + [CommandOption("--type ")] + [Description("The database type")] + public DatabaseType DatabaseType { get; init; } = (DatabaseType)(-1); + + /// + /// Gets the connection string. + /// + [OptionGroup("Inline options")] + [CommandOption("--connection ")] + [Description("The connection string")] + public string ConnectionString { get; init; } + + /// + /// Gets the output file. + /// + [OptionGroup("Common options")] + [CommandOption("-o|--output ")] + [Description("The output file")] + public string OutputFile { get; init; } + + /// + public override ValidationResult Validate() + { + var hasDatabaseType = this.DatabaseType != (DatabaseType)(-1); + var hasConnectionString = !string.IsNullOrWhiteSpace(this.ConnectionString); + var hasOutputFile = !string.IsNullOrWhiteSpace(this.OutputFile); + + if (!hasDatabaseType && !hasConnectionString && !hasOutputFile) + { + throw new ShowHelpException(); + } + + var missingOptions = new List(); + + if (!hasDatabaseType) + { + missingOptions.Add(GetLongName(nameof(this.DatabaseType))); + } + + if (!hasConnectionString) + { + missingOptions.Add(GetLongName(nameof(this.ConnectionString))); + } + + if (!hasOutputFile) + { + missingOptions.Add(GetLongName(nameof(this.OutputFile))); + } + + if (missingOptions.Count > 0) + { + return ValidationResult.Error($"Missing required options: {string.Join(", ", missingOptions)}"); + } + + return ValidationResult.Success(); + + static string GetLongName(string propertyName) + { + var propertyInfo = typeof(Options).GetProperty(propertyName); + var commandOption = propertyInfo.GetCustomAttribute(); + return $"--{commandOption.LongNames[0]}"; + } + } + } +} diff --git a/SQLSchemaCompare.CLI/Program.cs b/SQLSchemaCompare.CLI/Program.cs index 290b60b..81ef3b2 100644 --- a/SQLSchemaCompare.CLI/Program.cs +++ b/SQLSchemaCompare.CLI/Program.cs @@ -14,7 +14,10 @@ public static int Main(string[] args) { var services = new ServiceCollection() .RegisterServices() - .AddLogging(); + .AddLogging(builder => + { + builder.AddConsole(); + }); using var registrar = new DependencyInjectionRegistrar(services); @@ -27,6 +30,7 @@ public static int Main(string[] args) config.SetHelpProvider(new CustomHelpProvider(config.Settings)); config.AddCommand("compare").WithDescription("Compare two databases."); + config.AddCommand("monitor").WithDescription("Monitor database changes."); }); // When options are provided without a command name, default to 'compare' diff --git a/SQLSchemaCompare.CLI/SQLSchemaCompare.CLI.csproj b/SQLSchemaCompare.CLI/SQLSchemaCompare.CLI.csproj index de45a92..bc876b7 100644 --- a/SQLSchemaCompare.CLI/SQLSchemaCompare.CLI.csproj +++ b/SQLSchemaCompare.CLI/SQLSchemaCompare.CLI.csproj @@ -20,13 +20,14 @@ + runtime; build; native; contentfiles; analyzers; buildtransitive all - + - + diff --git a/SQLSchemaCompare.CLI/packages.lock.json b/SQLSchemaCompare.CLI/packages.lock.json index 1f1fdb8..22e4827 100644 --- a/SQLSchemaCompare.CLI/packages.lock.json +++ b/SQLSchemaCompare.CLI/packages.lock.json @@ -2,6 +2,19 @@ "version": 1, "dependencies": { "net10.0": { + "Microsoft.Extensions.Logging.Console": { + "type": "Direct", + "requested": "[10.0.9, )", + "resolved": "10.0.9", + "contentHash": "WyZEG/O8jKqBOBF6/M6IJqiEyWFBUv6PDyzNoXDA0mBZwKtkuf7GiZ/0/8eU8OpLKKQL0O95oPOY1szrWIKofQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9", + "Microsoft.Extensions.Logging": "10.0.9", + "Microsoft.Extensions.Logging.Abstractions": "10.0.9", + "Microsoft.Extensions.Logging.Configuration": "10.0.9", + "Microsoft.Extensions.Options": "10.0.9" + } + }, "Neolution.CodeAnalysis": { "type": "Direct", "requested": "[3.3.0-beta.2, )", @@ -14,11 +27,11 @@ }, "Spectre.Console": { "type": "Direct", - "requested": "[0.55.2, )", - "resolved": "0.55.2", - "contentHash": "yc0g12YJpmZHofGJLTQX02/uqfzJ6XHRx6pe9rANNjleQptXMHPxD9KI2/DWkXiJWddc+4oizEdGox15c89hhw==", + "requested": "[0.57.1, )", + "resolved": "0.57.1", + "contentHash": "h/B0CJLR5Ba8yq+iVjjZR9JXMS+8a1syHmHhyZ6w5m8rHDWLGOlaKAhzJanHJL62rZxynLeVOx+43MKvskJ1lA==", "dependencies": { - "Spectre.Console.Ansi": "0.55.2" + "Spectre.Console.Ansi": "0.57.1" } }, "Spectre.Console.Cli": { @@ -32,11 +45,11 @@ }, "Spectre.Console.Cli.Extensions.DependencyInjection": { "type": "Direct", - "requested": "[0.25.0, )", - "resolved": "0.25.0", - "contentHash": "MVhVuErdBt9Lm10MboaJriu/7vf5+WpgQEQ2U/g7FMx3zF7WqRbM+KV0GSFsEgIWorgfTX/ke4akZ9rZd9644g==", + "requested": "[0.26.0, )", + "resolved": "0.26.0", + "contentHash": "wxE6ySq4kwcE48K+3CCHtzoIJG9xqedzT6Xb97eRodoGmQZIi/RqTlEAf/PykkpF3m0R1BsZBNgmXBpSa/qA4g==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "10.0.8", + "Microsoft.Extensions.DependencyInjection": "10.0.9", "Spectre.Console.Cli": "0.55.0" } }, @@ -103,120 +116,165 @@ }, "Microsoft.EntityFrameworkCore": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "EJx+fIBMgBlgD+ublKCn+GTOJkw3UqV7xOjYWBRVdUYyIm8UfvAsmSOPFiIInsWTHyMEYUJ9gCJY1jwX+6UB7w==", + "resolved": "10.0.9", + "contentHash": "tu85SRzOT021V7EQlViCiAE7TqldVn469Y6lt5TEn/+XC4/MeNCHgMRSxqYuWqvF4zAQZUhCmtNEZuM3ss4LeA==", "dependencies": { - "Microsoft.EntityFrameworkCore.Abstractions": "10.0.8", - "Microsoft.EntityFrameworkCore.Analyzers": "10.0.8", - "Microsoft.Extensions.Caching.Memory": "10.0.8", - "Microsoft.Extensions.Logging": "10.0.8" + "Microsoft.EntityFrameworkCore.Abstractions": "10.0.9", + "Microsoft.EntityFrameworkCore.Analyzers": "10.0.9", + "Microsoft.Extensions.Caching.Memory": "10.0.9", + "Microsoft.Extensions.Logging": "10.0.9" } }, "Microsoft.EntityFrameworkCore.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "jbKDXWPZQhuPHygMnwzNOqxBADVcpRVytcKYZsA++QqhPkpF93Ta8o5mbJQGrARSjlkr9WtOaADV97EDMOZ7DA==" + "resolved": "10.0.9", + "contentHash": "GRMaiPkqYna/gCsyDffYDWmefGPC3hDrdMw+2rrGcQwhs6uZOsaMQXMJnoXQ35tx9SkBV2ieRRU9N/jLOO6BZw==" }, "Microsoft.EntityFrameworkCore.Analyzers": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "M3BZ8JH8rB6BE7dO2g9iVbrHLnEz9wMXT6q+tDR6Nq3gyP3KmBj5OTiZGxyF3vesjOQNKanYoPGSNBR4kR2llg==" + "resolved": "10.0.9", + "contentHash": "aiEFB+C5EsZGqxvMPazE07hbWsp4iPaufJpanGt5O+lrwv7mJLrqma5haVIgFAPCyhQkmk75XSCEubT1zUjxtA==" }, "Microsoft.EntityFrameworkCore.Relational": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "UU3diAD2wwZveye2rnrwaF/wvJ9tm5iL2fuY9TTap6/iGQK1OO29M1BzXZRlRPVH/dByt5w/pISBSFtyR7hTqw==", + "resolved": "10.0.9", + "contentHash": "dEoyYKgiaZHHgOFm1WMWm1sFEsEuhPWufX4L9PekKtqd/RaIcPjkCjvbrVvJtApErb5wPSJhYvnTlxhH+p9h2g==", "dependencies": { - "Microsoft.EntityFrameworkCore": "10.0.8", - "Microsoft.Extensions.Caching.Memory": "10.0.8", - "Microsoft.Extensions.Configuration.Abstractions": "10.0.8", - "Microsoft.Extensions.Logging": "10.0.8" + "Microsoft.EntityFrameworkCore": "10.0.9", + "Microsoft.Extensions.Caching.Memory": "10.0.9", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.9", + "Microsoft.Extensions.Logging": "10.0.9" } }, "Microsoft.EntityFrameworkCore.SqlServer": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "A+FLIsTH9l5DG2iD6QW6Mfwlvr+BjWme/jJ2hvwmmENTr7lR1UWmgCtKCjDYcHxqdAD15bb4PgQnSzw12DV/pw==", + "resolved": "10.0.9", + "contentHash": "wjgpB/UFSeMU3uMfMzD4so567vJi5UugE6iTcONBx+rPb/PWpjYlzYKyxm2pGAFNpTFNbqoirtt7uUCc97Tfiw==", "dependencies": { "Microsoft.Data.SqlClient": "6.1.1", - "Microsoft.EntityFrameworkCore.Relational": "10.0.8", - "Microsoft.Extensions.Caching.Memory": "10.0.8", - "Microsoft.Extensions.Configuration.Abstractions": "10.0.8", - "Microsoft.Extensions.Logging": "10.0.8" + "Microsoft.EntityFrameworkCore.Relational": "10.0.9", + "Microsoft.Extensions.Caching.Memory": "10.0.9", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.9", + "Microsoft.Extensions.Logging": "10.0.9" } }, "Microsoft.Extensions.Caching.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "EoK2TwVR1daxmfXUPnvIYZSk5XQjHe45sGekox4kvMt88KQZQhDVzYW5Na5+oNwTuRpE48hipyGJg12F1Tm70w==", + "resolved": "10.0.9", + "contentHash": "5fGxcw2vuYp8s0wio9H1ECiuk4iKSdTIlNuigdLIrkhg+5XAwgFVDB/5Ots3pfN/QhABLYXutA79JFtnUKDSHA==", "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.8" + "Microsoft.Extensions.Primitives": "10.0.9" } }, "Microsoft.Extensions.Caching.Memory": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "sYMYQjNprfqPTryuLNnr0/AOtnhlfuZ0ZxyOV0d3AXOEL8j9KV0EbelpZYyIatT2hJiaSGO9XGr5YDRsh22OfQ==", + "resolved": "10.0.9", + "contentHash": "G9mregdatGWMCQWeCw012LDeJVP7G/XIxH8Ddbjc8bD1//dA+8VVQdcRE9jI1moyoJxSSZhHITUnNQ8FUDl5+Q==", "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "10.0.8", - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8", - "Microsoft.Extensions.Logging.Abstractions": "10.0.8", - "Microsoft.Extensions.Options": "10.0.8", - "Microsoft.Extensions.Primitives": "10.0.8" + "Microsoft.Extensions.Caching.Abstractions": "10.0.9", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9", + "Microsoft.Extensions.Logging.Abstractions": "10.0.9", + "Microsoft.Extensions.Options": "10.0.9", + "Microsoft.Extensions.Primitives": "10.0.9" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "10.0.9", + "contentHash": "woZsWLhOQsASuxbmgiZJqiGUBNo3IjRdXC92xt8rRokza+P6/nIsnzq7sm9Or6ZYcRl2kL1ufj8HVzp1QlPTXw==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.9", + "Microsoft.Extensions.Primitives": "10.0.9" } }, "Microsoft.Extensions.Configuration.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "I63esIFbL3h5pSt7gXpXOlmcwDmYBUoYNEglKfDPFUqtYvSV84f2l28hO2lfVXsV0wdlplgAM7IVz16matapSg==", + "resolved": "10.0.9", + "contentHash": "qGhRPd3VxfLV9UqatVOiD9mAeUbj2KiMwGFYC5uXlzExiZQoe4X/hdmzGIU7BQjNLTqCnnbTHVyBglG3668/HA==", + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.9" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "10.0.9", + "contentHash": "Tp/+LPb70RyjjtLg9m5C959eP4KrUpJHThZfAegZVpsfmGvzfuNkuYbI/ft+LvXhMSyUcAeOPaN6rzTccwnZAg==", "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.8" + "Microsoft.Extensions.Configuration": "10.0.9", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.9" } }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "daf62xHIrq8pnE709hgaZZN9tSam9TGGepWe1+bE6V3GEuVwJiMs6ib+38lfMCyAJAHiX0vapxBhsuMSV7U+cg==", + "resolved": "10.0.9", + "contentHash": "NijozhERJDIaJ4k5TSMy1jOi0cSC2HfkvRD/Sl+kGSSKgVbFnF4GxgtMN/MrzHB8D1JxIrD4xSer9Blh9v3axQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "21nbDV60SRPWGIivsyl6lqBeEJNG1sginhhfWgRrr3Ais7aQ12To25OAHQxgoiJkjqy1aQ6RxpZBGYuTi7Ge6A==" + "resolved": "10.0.9", + "contentHash": "g41l/30G3K4B/d/L8kjux0+30e27c8D0FVQ/PFCpbekgfDpj9mnDhieP67EqXWvl1EWNeZh2rpR4F5B/jcDOHA==" }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "K60JhWC2hN/Gi7TP68tBxSzk5ACWOs7lkmPzsfA8Bcf/IXTajujt2ORMf9rSMk1bsng6Lv4Y3fuxp3bm1+15ug==", + "resolved": "10.0.9", + "contentHash": "N7Gm9SjugYjmmnhwbBKC9DFqGqjfJvh6YfOJgtwh0AW0Xpok3dIVors1ik050XmUxKAgAc7nNngDIJyFb06K2g==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "10.0.8", - "Microsoft.Extensions.Logging.Abstractions": "10.0.8", - "Microsoft.Extensions.Options": "10.0.8" + "Microsoft.Extensions.DependencyInjection": "10.0.9", + "Microsoft.Extensions.Logging.Abstractions": "10.0.9", + "Microsoft.Extensions.Options": "10.0.9" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "fdVadZmsC8jRP0KvKy8mO8f6GV/HyBvElfcSxEhd+5FM5boAw/01iSaCto5G3G37ApJira4A3pNaVvBv8cUiLQ==", + "resolved": "10.0.9", + "contentHash": "9S/DFt4cohlMPpzIxjG6kk0L8MuN2vDm9pbMCulxtJzzk82oJHVLBd8vuQxaPskaYQwKqmFmbannf5eoChgjYg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9" + } + }, + "Microsoft.Extensions.Logging.Configuration": { + "type": "Transitive", + "resolved": "10.0.9", + "contentHash": "bUth5ip7YsZMXWZS42IRTI0zDrPEqdE+xnsmcL0Pk784grWKApDvc5UoMi2tP2qYJ5ylFzeVDuDu08sFATq1bg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8" + "Microsoft.Extensions.Configuration": "10.0.9", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.9", + "Microsoft.Extensions.Configuration.Binder": "10.0.9", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9", + "Microsoft.Extensions.Logging": "10.0.9", + "Microsoft.Extensions.Logging.Abstractions": "10.0.9", + "Microsoft.Extensions.Options": "10.0.9", + "Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.9" } }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "VBD+131DpTNCNDfA4kIyKTiCySvJGNhwibdWBSdFRu7GMfXLXcXODkgA+KStKbbhzraLglZWUN4nXyHgW4JIRA==", + "resolved": "10.0.9", + "contentHash": "hyNdX4c2UwkRkzb9byw0H2DQkRzwBM3mzY2sCM9egwzTyg8dvQJmp5noQHGEaaCORQrNK3DD2gREBsc2DlXS4A==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8", - "Microsoft.Extensions.Primitives": "10.0.8" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9", + "Microsoft.Extensions.Primitives": "10.0.9" + } + }, + "Microsoft.Extensions.Options.ConfigurationExtensions": { + "type": "Transitive", + "resolved": "10.0.9", + "contentHash": "Y4E24zffF/aPS0igNvY6ZzAQfbxd6AYdC9L4brnH+uK0yYYHIR6FeGVQVVjAOo8wub1EQDl2B90lCcpqoTF7Yw==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.9", + "Microsoft.Extensions.Configuration.Binder": "10.0.9", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9", + "Microsoft.Extensions.Options": "10.0.9", + "Microsoft.Extensions.Primitives": "10.0.9" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "OBPo4nYhMyIbtueoC10CBm6AGAbo/A9IV8QQ/6ryZS7VvmqpGT7hunazeHLxFawRzn3oLOq4jhqhpBX4tfswWQ==" + "resolved": "10.0.9", + "contentHash": "fmEbAUFsaIKirgLt/lYhuFRBwhcSJN31jjHgCdbQxJiWOum6EdLjkbgGuukSP9z/a+9LibaxII/kF+GwOXgC4g==" }, "Microsoft.Identity.Client": { "type": "Transitive", @@ -288,17 +346,17 @@ }, "Microting.EntityFrameworkCore.MySql": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "vaxt+8dU7WODnxl5/2k4VH+LNgbQHk+yGIqWum619+6lICCmbLHyYyzqgJRGzic+Aeyh212TeH5fHklfXAjWVw==", + "resolved": "10.0.9", + "contentHash": "aLW8gEz8Tue1zLYycAJw0xeH5h3VSaHNGEplKFRMX56AeWm824kiMtqp8pOg4koReKY91W6Tbjswnj/RL7jewg==", "dependencies": { "Microsoft.EntityFrameworkCore.Relational": "[10.0.8, 10.0.999]", - "MySqlConnector": "2.5.0" + "MySqlConnector": "2.6.0" } }, "MySqlConnector": { "type": "Transitive", - "resolved": "2.5.0", - "contentHash": "hoAwfHHF8DlRRqwHOhN3u1KLi+XbX/4LPS7Anfa+SYC97vRyIfdEOEEfj1L50q01Ik8aDNvmDrNmu/VPFiAiaQ==", + "resolved": "2.6.0", + "contentHash": "YLceXhrEznpXf8XkwvH6JWHjAq0AA2lsf/zYWiESe4B9ki2v473XH2GRcPbLwktBqYu1Uy3Dvs7G+mu48QKL2w==", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2" @@ -319,20 +377,20 @@ }, "Npgsql": { "type": "Transitive", - "resolved": "10.0.2", - "contentHash": "q5RfBI+wywJSFUNDE1L4ZbHEHCFTblo8Uf6A6oe4feOUFYiUQXyAf9GBh5qEZpvJaHiEbpBPkQumjEhXCJxdrg==", + "resolved": "10.0.3", + "contentHash": "7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "10.0.0" } }, "Npgsql.EntityFrameworkCore.PostgreSQL": { "type": "Transitive", - "resolved": "10.0.1", - "contentHash": "P6EwH0Q4xkaA264iNZDqCPhWt8pscfUGxXazDQg4noBfqjoOlk4hKWfvBjF9ZX3R/9JybRmmJfmxr2iBMj0EpA==", + "resolved": "10.0.2", + "contentHash": "PsNYgPOSW41Xx19gin7y4EdZAPteWr9Cb01XkdObxOsPzi+mgBupBEN7J7+erXFsROPOILM7MlIoO9QzL8+LGQ==", "dependencies": { "Microsoft.EntityFrameworkCore": "[10.0.4, 11.0.0)", "Microsoft.EntityFrameworkCore.Relational": "[10.0.4, 11.0.0)", - "Npgsql": "10.0.2" + "Npgsql": "10.0.3" } }, "SonarAnalyzer.CSharp": { @@ -342,8 +400,8 @@ }, "Spectre.Console.Ansi": { "type": "Transitive", - "resolved": "0.55.2", - "contentHash": "tN3KEJQQZwLW9HJnG5YTSAxfBwxsmg1wVuGvhGG2rM+pbl+NGaHU8pDcNofPlOXlgpkbpBMxI5t9o9qPfy3sHQ==" + "resolved": "0.57.1", + "contentHash": "IFlXdGXOGD4XCK5ybZsXgQo7PE0ZE/pt9YFFWo2cECTipS8DrViLFazx+K00/A+fY1PlHYt1Vqwrjfod4EEckw==" }, "StyleCop.Analyzers.Unstable": { "type": "Transitive", @@ -411,20 +469,20 @@ "TiCodeX.SQLSchemaCompare.Infrastructure": { "type": "Project", "dependencies": { - "Microsoft.EntityFrameworkCore.Relational": "[10.0.8, )", - "Microsoft.EntityFrameworkCore.SqlServer": "[10.0.8, )", - "Microting.EntityFrameworkCore.MySql": "[10.0.8, )", - "Npgsql.EntityFrameworkCore.PostgreSQL": "[10.0.1, )", - "TiCodeX.SQLSchemaCompare.Services": "[2026.5.1, )" + "Microsoft.EntityFrameworkCore.Relational": "[10.0.9, )", + "Microsoft.EntityFrameworkCore.SqlServer": "[10.0.9, )", + "Microting.EntityFrameworkCore.MySql": "[10.0.9, )", + "Npgsql.EntityFrameworkCore.PostgreSQL": "[10.0.2, )", + "TiCodeX.SQLSchemaCompare.Services": "[2026.6.1, )" } }, "TiCodeX.SQLSchemaCompare.Services": { "type": "Project", "dependencies": { "Microsoft.AspNet.WebApi.Client": "[6.0.0, )", - "Microsoft.Extensions.Logging.Abstractions": "[10.0.8, )", + "Microsoft.Extensions.Logging.Abstractions": "[10.0.9, )", "Newtonsoft.Json": "[13.0.4, )", - "TiCodeX.SQLSchemaCompare.Core": "[2026.5.1, )" + "TiCodeX.SQLSchemaCompare.Core": "[2026.6.1, )" } } }, diff --git a/SQLSchemaCompare.Core/Interfaces/Services/IDatabaseCompareService.cs b/SQLSchemaCompare.Core/Interfaces/Services/IDatabaseCompareService.cs index 7758b59..7cbc726 100644 --- a/SQLSchemaCompare.Core/Interfaces/Services/IDatabaseCompareService.cs +++ b/SQLSchemaCompare.Core/Interfaces/Services/IDatabaseCompareService.cs @@ -8,5 +8,6 @@ public interface IDatabaseCompareService /// /// Compares two databases /// - void StartCompare(); + /// Indicates whether to wait before retrieving the target database + void StartCompare(bool waitBeforeRetrieveTargetDatabase); } diff --git a/SQLSchemaCompare.Infrastructure/DatabaseUtilities/DatabaseMapper.cs b/SQLSchemaCompare.Infrastructure/DatabaseUtilities/DatabaseMapper.cs index 3e3bae7..fe135dd 100644 --- a/SQLSchemaCompare.Infrastructure/DatabaseUtilities/DatabaseMapper.cs +++ b/SQLSchemaCompare.Infrastructure/DatabaseUtilities/DatabaseMapper.cs @@ -3,13 +3,12 @@ /// /// Implements the database mapper functionality /// -public class DatabaseMapper : IDatabaseMapper +public class DatabaseMapper(ILogger logger) : IDatabaseMapper { /// public void PerformMapping(ABaseDb source, ABaseDb target, object mappingTable, TaskInfo taskInfo) { ArgumentNullException.ThrowIfNull(source); - ArgumentNullException.ThrowIfNull(target); // Linearize the 2 databases for mapping @@ -24,6 +23,7 @@ public void PerformMapping(ABaseDb source, ABaseDb target, object mappingTable, new() { ObjectTitle = Localization.StatusMappingSequences, DbObjects = source.Sequences, MappableDbObjects = target.Sequences }, }; + logger.LogInformation("Mapping source and target database objects..."); this.PerformMapping(maps, taskInfo); } diff --git a/SQLSchemaCompare.Infrastructure/SQLSchemaCompare.Infrastructure.csproj b/SQLSchemaCompare.Infrastructure/SQLSchemaCompare.Infrastructure.csproj index d0ca1ab..573d10d 100644 --- a/SQLSchemaCompare.Infrastructure/SQLSchemaCompare.Infrastructure.csproj +++ b/SQLSchemaCompare.Infrastructure/SQLSchemaCompare.Infrastructure.csproj @@ -5,14 +5,14 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + diff --git a/SQLSchemaCompare.Infrastructure/packages.lock.json b/SQLSchemaCompare.Infrastructure/packages.lock.json index 75615d8..6b6975c 100644 --- a/SQLSchemaCompare.Infrastructure/packages.lock.json +++ b/SQLSchemaCompare.Infrastructure/packages.lock.json @@ -4,37 +4,37 @@ "net10.0": { "Microsoft.EntityFrameworkCore.Relational": { "type": "Direct", - "requested": "[10.0.8, )", - "resolved": "10.0.8", - "contentHash": "UU3diAD2wwZveye2rnrwaF/wvJ9tm5iL2fuY9TTap6/iGQK1OO29M1BzXZRlRPVH/dByt5w/pISBSFtyR7hTqw==", + "requested": "[10.0.9, )", + "resolved": "10.0.9", + "contentHash": "dEoyYKgiaZHHgOFm1WMWm1sFEsEuhPWufX4L9PekKtqd/RaIcPjkCjvbrVvJtApErb5wPSJhYvnTlxhH+p9h2g==", "dependencies": { - "Microsoft.EntityFrameworkCore": "10.0.8", - "Microsoft.Extensions.Caching.Memory": "10.0.8", - "Microsoft.Extensions.Configuration.Abstractions": "10.0.8", - "Microsoft.Extensions.Logging": "10.0.8" + "Microsoft.EntityFrameworkCore": "10.0.9", + "Microsoft.Extensions.Caching.Memory": "10.0.9", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.9", + "Microsoft.Extensions.Logging": "10.0.9" } }, "Microsoft.EntityFrameworkCore.SqlServer": { "type": "Direct", - "requested": "[10.0.8, )", - "resolved": "10.0.8", - "contentHash": "A+FLIsTH9l5DG2iD6QW6Mfwlvr+BjWme/jJ2hvwmmENTr7lR1UWmgCtKCjDYcHxqdAD15bb4PgQnSzw12DV/pw==", + "requested": "[10.0.9, )", + "resolved": "10.0.9", + "contentHash": "wjgpB/UFSeMU3uMfMzD4so567vJi5UugE6iTcONBx+rPb/PWpjYlzYKyxm2pGAFNpTFNbqoirtt7uUCc97Tfiw==", "dependencies": { "Microsoft.Data.SqlClient": "6.1.1", - "Microsoft.EntityFrameworkCore.Relational": "10.0.8", - "Microsoft.Extensions.Caching.Memory": "10.0.8", - "Microsoft.Extensions.Configuration.Abstractions": "10.0.8", - "Microsoft.Extensions.Logging": "10.0.8" + "Microsoft.EntityFrameworkCore.Relational": "10.0.9", + "Microsoft.Extensions.Caching.Memory": "10.0.9", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.9", + "Microsoft.Extensions.Logging": "10.0.9" } }, "Microting.EntityFrameworkCore.MySql": { "type": "Direct", - "requested": "[10.0.8, )", - "resolved": "10.0.8", - "contentHash": "vaxt+8dU7WODnxl5/2k4VH+LNgbQHk+yGIqWum619+6lICCmbLHyYyzqgJRGzic+Aeyh212TeH5fHklfXAjWVw==", + "requested": "[10.0.9, )", + "resolved": "10.0.9", + "contentHash": "aLW8gEz8Tue1zLYycAJw0xeH5h3VSaHNGEplKFRMX56AeWm824kiMtqp8pOg4koReKY91W6Tbjswnj/RL7jewg==", "dependencies": { "Microsoft.EntityFrameworkCore.Relational": "[10.0.8, 10.0.999]", - "MySqlConnector": "2.5.0" + "MySqlConnector": "2.6.0" } }, "Neolution.CodeAnalysis": { @@ -49,13 +49,13 @@ }, "Npgsql.EntityFrameworkCore.PostgreSQL": { "type": "Direct", - "requested": "[10.0.1, )", - "resolved": "10.0.1", - "contentHash": "P6EwH0Q4xkaA264iNZDqCPhWt8pscfUGxXazDQg4noBfqjoOlk4hKWfvBjF9ZX3R/9JybRmmJfmxr2iBMj0EpA==", + "requested": "[10.0.2, )", + "resolved": "10.0.2", + "contentHash": "PsNYgPOSW41Xx19gin7y4EdZAPteWr9Cb01XkdObxOsPzi+mgBupBEN7J7+erXFsROPOILM7MlIoO9QzL8+LGQ==", "dependencies": { "Microsoft.EntityFrameworkCore": "[10.0.4, 11.0.0)", "Microsoft.EntityFrameworkCore.Relational": "[10.0.4, 11.0.0)", - "Npgsql": "10.0.2" + "Npgsql": "10.0.3" } }, "Azure.Core": { @@ -121,97 +121,97 @@ }, "Microsoft.EntityFrameworkCore": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "EJx+fIBMgBlgD+ublKCn+GTOJkw3UqV7xOjYWBRVdUYyIm8UfvAsmSOPFiIInsWTHyMEYUJ9gCJY1jwX+6UB7w==", + "resolved": "10.0.9", + "contentHash": "tu85SRzOT021V7EQlViCiAE7TqldVn469Y6lt5TEn/+XC4/MeNCHgMRSxqYuWqvF4zAQZUhCmtNEZuM3ss4LeA==", "dependencies": { - "Microsoft.EntityFrameworkCore.Abstractions": "10.0.8", - "Microsoft.EntityFrameworkCore.Analyzers": "10.0.8", - "Microsoft.Extensions.Caching.Memory": "10.0.8", - "Microsoft.Extensions.Logging": "10.0.8" + "Microsoft.EntityFrameworkCore.Abstractions": "10.0.9", + "Microsoft.EntityFrameworkCore.Analyzers": "10.0.9", + "Microsoft.Extensions.Caching.Memory": "10.0.9", + "Microsoft.Extensions.Logging": "10.0.9" } }, "Microsoft.EntityFrameworkCore.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "jbKDXWPZQhuPHygMnwzNOqxBADVcpRVytcKYZsA++QqhPkpF93Ta8o5mbJQGrARSjlkr9WtOaADV97EDMOZ7DA==" + "resolved": "10.0.9", + "contentHash": "GRMaiPkqYna/gCsyDffYDWmefGPC3hDrdMw+2rrGcQwhs6uZOsaMQXMJnoXQ35tx9SkBV2ieRRU9N/jLOO6BZw==" }, "Microsoft.EntityFrameworkCore.Analyzers": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "M3BZ8JH8rB6BE7dO2g9iVbrHLnEz9wMXT6q+tDR6Nq3gyP3KmBj5OTiZGxyF3vesjOQNKanYoPGSNBR4kR2llg==" + "resolved": "10.0.9", + "contentHash": "aiEFB+C5EsZGqxvMPazE07hbWsp4iPaufJpanGt5O+lrwv7mJLrqma5haVIgFAPCyhQkmk75XSCEubT1zUjxtA==" }, "Microsoft.Extensions.Caching.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "EoK2TwVR1daxmfXUPnvIYZSk5XQjHe45sGekox4kvMt88KQZQhDVzYW5Na5+oNwTuRpE48hipyGJg12F1Tm70w==", + "resolved": "10.0.9", + "contentHash": "5fGxcw2vuYp8s0wio9H1ECiuk4iKSdTIlNuigdLIrkhg+5XAwgFVDB/5Ots3pfN/QhABLYXutA79JFtnUKDSHA==", "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.8" + "Microsoft.Extensions.Primitives": "10.0.9" } }, "Microsoft.Extensions.Caching.Memory": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "sYMYQjNprfqPTryuLNnr0/AOtnhlfuZ0ZxyOV0d3AXOEL8j9KV0EbelpZYyIatT2hJiaSGO9XGr5YDRsh22OfQ==", + "resolved": "10.0.9", + "contentHash": "G9mregdatGWMCQWeCw012LDeJVP7G/XIxH8Ddbjc8bD1//dA+8VVQdcRE9jI1moyoJxSSZhHITUnNQ8FUDl5+Q==", "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "10.0.8", - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8", - "Microsoft.Extensions.Logging.Abstractions": "10.0.8", - "Microsoft.Extensions.Options": "10.0.8", - "Microsoft.Extensions.Primitives": "10.0.8" + "Microsoft.Extensions.Caching.Abstractions": "10.0.9", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9", + "Microsoft.Extensions.Logging.Abstractions": "10.0.9", + "Microsoft.Extensions.Options": "10.0.9", + "Microsoft.Extensions.Primitives": "10.0.9" } }, "Microsoft.Extensions.Configuration.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "I63esIFbL3h5pSt7gXpXOlmcwDmYBUoYNEglKfDPFUqtYvSV84f2l28hO2lfVXsV0wdlplgAM7IVz16matapSg==", + "resolved": "10.0.9", + "contentHash": "qGhRPd3VxfLV9UqatVOiD9mAeUbj2KiMwGFYC5uXlzExiZQoe4X/hdmzGIU7BQjNLTqCnnbTHVyBglG3668/HA==", "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.8" + "Microsoft.Extensions.Primitives": "10.0.9" } }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "daf62xHIrq8pnE709hgaZZN9tSam9TGGepWe1+bE6V3GEuVwJiMs6ib+38lfMCyAJAHiX0vapxBhsuMSV7U+cg==", + "resolved": "10.0.9", + "contentHash": "NijozhERJDIaJ4k5TSMy1jOi0cSC2HfkvRD/Sl+kGSSKgVbFnF4GxgtMN/MrzHB8D1JxIrD4xSer9Blh9v3axQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "21nbDV60SRPWGIivsyl6lqBeEJNG1sginhhfWgRrr3Ais7aQ12To25OAHQxgoiJkjqy1aQ6RxpZBGYuTi7Ge6A==" + "resolved": "10.0.9", + "contentHash": "g41l/30G3K4B/d/L8kjux0+30e27c8D0FVQ/PFCpbekgfDpj9mnDhieP67EqXWvl1EWNeZh2rpR4F5B/jcDOHA==" }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "K60JhWC2hN/Gi7TP68tBxSzk5ACWOs7lkmPzsfA8Bcf/IXTajujt2ORMf9rSMk1bsng6Lv4Y3fuxp3bm1+15ug==", + "resolved": "10.0.9", + "contentHash": "N7Gm9SjugYjmmnhwbBKC9DFqGqjfJvh6YfOJgtwh0AW0Xpok3dIVors1ik050XmUxKAgAc7nNngDIJyFb06K2g==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "10.0.8", - "Microsoft.Extensions.Logging.Abstractions": "10.0.8", - "Microsoft.Extensions.Options": "10.0.8" + "Microsoft.Extensions.DependencyInjection": "10.0.9", + "Microsoft.Extensions.Logging.Abstractions": "10.0.9", + "Microsoft.Extensions.Options": "10.0.9" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "fdVadZmsC8jRP0KvKy8mO8f6GV/HyBvElfcSxEhd+5FM5boAw/01iSaCto5G3G37ApJira4A3pNaVvBv8cUiLQ==", + "resolved": "10.0.9", + "contentHash": "9S/DFt4cohlMPpzIxjG6kk0L8MuN2vDm9pbMCulxtJzzk82oJHVLBd8vuQxaPskaYQwKqmFmbannf5eoChgjYg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9" } }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "VBD+131DpTNCNDfA4kIyKTiCySvJGNhwibdWBSdFRu7GMfXLXcXODkgA+KStKbbhzraLglZWUN4nXyHgW4JIRA==", + "resolved": "10.0.9", + "contentHash": "hyNdX4c2UwkRkzb9byw0H2DQkRzwBM3mzY2sCM9egwzTyg8dvQJmp5noQHGEaaCORQrNK3DD2gREBsc2DlXS4A==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8", - "Microsoft.Extensions.Primitives": "10.0.8" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9", + "Microsoft.Extensions.Primitives": "10.0.9" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "OBPo4nYhMyIbtueoC10CBm6AGAbo/A9IV8QQ/6ryZS7VvmqpGT7hunazeHLxFawRzn3oLOq4jhqhpBX4tfswWQ==" + "resolved": "10.0.9", + "contentHash": "fmEbAUFsaIKirgLt/lYhuFRBwhcSJN31jjHgCdbQxJiWOum6EdLjkbgGuukSP9z/a+9LibaxII/kF+GwOXgC4g==" }, "Microsoft.Identity.Client": { "type": "Transitive", @@ -283,8 +283,8 @@ }, "MySqlConnector": { "type": "Transitive", - "resolved": "2.5.0", - "contentHash": "hoAwfHHF8DlRRqwHOhN3u1KLi+XbX/4LPS7Anfa+SYC97vRyIfdEOEEfj1L50q01Ik8aDNvmDrNmu/VPFiAiaQ==", + "resolved": "2.6.0", + "contentHash": "YLceXhrEznpXf8XkwvH6JWHjAq0AA2lsf/zYWiESe4B9ki2v473XH2GRcPbLwktBqYu1Uy3Dvs7G+mu48QKL2w==", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2" @@ -305,8 +305,8 @@ }, "Npgsql": { "type": "Transitive", - "resolved": "10.0.2", - "contentHash": "q5RfBI+wywJSFUNDE1L4ZbHEHCFTblo8Uf6A6oe4feOUFYiUQXyAf9GBh5qEZpvJaHiEbpBPkQumjEhXCJxdrg==", + "resolved": "10.0.3", + "contentHash": "7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "10.0.0" } @@ -383,9 +383,9 @@ "type": "Project", "dependencies": { "Microsoft.AspNet.WebApi.Client": "[6.0.0, )", - "Microsoft.Extensions.Logging.Abstractions": "[10.0.8, )", + "Microsoft.Extensions.Logging.Abstractions": "[10.0.9, )", "Newtonsoft.Json": "[13.0.4, )", - "TiCodeX.SQLSchemaCompare.Core": "[2026.5.1, )" + "TiCodeX.SQLSchemaCompare.Core": "[2026.6.1, )" } } }, diff --git a/SQLSchemaCompare.Services/DatabaseCompareService.cs b/SQLSchemaCompare.Services/DatabaseCompareService.cs index 5203e7d..7cd9929 100644 --- a/SQLSchemaCompare.Services/DatabaseCompareService.cs +++ b/SQLSchemaCompare.Services/DatabaseCompareService.cs @@ -83,13 +83,13 @@ public DatabaseCompareService( } /// - public void StartCompare() + public void StartCompare(bool waitBeforeRetrieveTargetDatabase) { - this.taskService.ExecuteTasks( - [ - new TaskWork( + var tasks = new List + { + new( new TaskInfo(Localization.LabelRetrieveSourceDatabase), - true, + runInParallel: !waitBeforeRetrieveTargetDatabase, taskInfo => { this.retrievedSourceDatabase = this.databaseService.GetDatabase( @@ -98,9 +98,24 @@ public void StartCompare() this.databaseFilter.PerformFilter(this.retrievedSourceDatabase, this.projectService.Project.Options.Filtering); return true; }), - new TaskWork( + }; + + if (waitBeforeRetrieveTargetDatabase) + { + tasks.Add(new( + new TaskInfo(string.Empty), + runInParallel: false, + taskInfo => + { + this.logger.LogInformation("Make any database changes and press any key to compare..."); + Console.ReadKey(true); + return true; + })); + } + + tasks.Add(new( new TaskInfo(Localization.LabelRetrieveTargetDatabase), - true, + runInParallel: !waitBeforeRetrieveTargetDatabase, taskInfo => { this.retrievedTargetDatabase = this.databaseService.GetDatabase( @@ -108,20 +123,22 @@ public void StartCompare() this.retrievedTargetDatabase.Direction = CompareDirection.Target; this.databaseFilter.PerformFilter(this.retrievedTargetDatabase, this.projectService.Project.Options.Filtering); return true; - }), - new TaskWork( + })); + + tasks.Add(new( new TaskInfo(Localization.LabelMappingDatabaseObjects), - false, + runInParallel: false, taskInfo => { this.databaseMapper.PerformMapping(this.retrievedSourceDatabase, this.retrievedTargetDatabase, null, taskInfo); return true; - }), - new TaskWork( + })); + tasks.Add(new( new TaskInfo(Localization.LabelDatabaseComparison), - false, - this.ExecuteDatabaseComparison), - ]); + runInParallel: false, + this.ExecuteDatabaseComparison)); + + this.taskService.ExecuteTasks(tasks); } /// @@ -201,6 +218,8 @@ private bool ExecuteDatabaseComparison(TaskInfo taskInfo) { try { + this.logger.LogInformation("Comparing..."); + var processedItems = 1; var scripter = this.databaseScripterFactory.Create( this.retrievedSourceDatabase, diff --git a/SQLSchemaCompare.Services/SQLSchemaCompare.Services.csproj b/SQLSchemaCompare.Services/SQLSchemaCompare.Services.csproj index 2e05e03..eff7754 100644 --- a/SQLSchemaCompare.Services/SQLSchemaCompare.Services.csproj +++ b/SQLSchemaCompare.Services/SQLSchemaCompare.Services.csproj @@ -8,7 +8,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/SQLSchemaCompare.Services/packages.lock.json b/SQLSchemaCompare.Services/packages.lock.json index 914c0f0..ab169c4 100644 --- a/SQLSchemaCompare.Services/packages.lock.json +++ b/SQLSchemaCompare.Services/packages.lock.json @@ -14,11 +14,11 @@ }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Direct", - "requested": "[10.0.8, )", - "resolved": "10.0.8", - "contentHash": "fdVadZmsC8jRP0KvKy8mO8f6GV/HyBvElfcSxEhd+5FM5boAw/01iSaCto5G3G37ApJira4A3pNaVvBv8cUiLQ==", + "requested": "[10.0.9, )", + "resolved": "10.0.9", + "contentHash": "9S/DFt4cohlMPpzIxjG6kk0L8MuN2vDm9pbMCulxtJzzk82oJHVLBd8vuQxaPskaYQwKqmFmbannf5eoChgjYg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9" } }, "Neolution.CodeAnalysis": { @@ -39,8 +39,8 @@ }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "21nbDV60SRPWGIivsyl6lqBeEJNG1sginhhfWgRrr3Ais7aQ12To25OAHQxgoiJkjqy1aQ6RxpZBGYuTi7Ge6A==" + "resolved": "10.0.9", + "contentHash": "g41l/30G3K4B/d/L8kjux0+30e27c8D0FVQ/PFCpbekgfDpj9mnDhieP67EqXWvl1EWNeZh2rpR4F5B/jcDOHA==" }, "Newtonsoft.Json.Bson": { "type": "Transitive", diff --git a/SQLSchemaCompare.Test/DatabaseFixture.cs b/SQLSchemaCompare.Test/DatabaseFixture.cs index 0f458d0..7d811a4 100644 --- a/SQLSchemaCompare.Test/DatabaseFixture.cs +++ b/SQLSchemaCompare.Test/DatabaseFixture.cs @@ -396,10 +396,10 @@ internal void PerformCompareAndWaitResult(IProjectService projectService) projectService, new DatabaseService(new DatabaseProviderFactory(this.LoggerFactory, new CipherService())), new DatabaseScripterFactory(this.LoggerFactory), - new DatabaseMapper(), + new DatabaseMapper(this.LoggerFactory.CreateLogger()), new DatabaseFilter(), taskService); - dbCompareService.StartCompare(); + dbCompareService.StartCompare(false); while (!taskService.CurrentTaskInfos.All(x => x.Status is TaskStatus.RanToCompletion or TaskStatus.Faulted or TaskStatus.Canceled)) { diff --git a/SQLSchemaCompare.Test/SQLSchemaCompare.Test.csproj b/SQLSchemaCompare.Test/SQLSchemaCompare.Test.csproj index a973897..79fc158 100644 --- a/SQLSchemaCompare.Test/SQLSchemaCompare.Test.csproj +++ b/SQLSchemaCompare.Test/SQLSchemaCompare.Test.csproj @@ -16,10 +16,10 @@ - + - + all diff --git a/SQLSchemaCompare.Test/packages.lock.json b/SQLSchemaCompare.Test/packages.lock.json index d2b6165..d78e6b8 100644 --- a/SQLSchemaCompare.Test/packages.lock.json +++ b/SQLSchemaCompare.Test/packages.lock.json @@ -4,9 +4,9 @@ "net10.0": { "EPPlus": { "type": "Direct", - "requested": "[8.5.4, )", - "resolved": "8.5.4", - "contentHash": "dHIYNqU4MDbkZPNyCF76bcQPSbx7/WhgDZw5hmDgGzRB1wn9+q/TMy4LC5gw00DamlqiWRnw4AVUXMdV1mGtOg==", + "requested": "[8.6.1, )", + "resolved": "8.6.1", + "contentHash": "ialCJVbku7pQ6Cf2qcdgVkynEkpdkx+6ryGpAu2n3Jlra//HY+0Fp54OM7ELRCE71id5qk55q3SMZgPGW1Pbbw==", "dependencies": { "EPPlus.Interfaces": "8.4.0", "Microsoft.Extensions.Configuration.Json": "10.0.7", @@ -30,12 +30,12 @@ }, "Microsoft.NET.Test.Sdk": { "type": "Direct", - "requested": "[18.5.1, )", - "resolved": "18.5.1", - "contentHash": "SfqVaLiIqAbRWuPg5BP4QFwBIirQj/YIL8Dhxl6zntBKbXp0cQykoV480SmwG+yRMiWptxEI6NbHQuGSZ8b97w==", + "requested": "[18.7.0, )", + "resolved": "18.7.0", + "contentHash": "49xH9j4UzCh2hMohJp53g3wUTvyycECw7CtVht4gfCz5ykudB1uBcF6D0TtgJPjCtP76UPW53bQElKdCeX+dUg==", "dependencies": { - "Microsoft.CodeCoverage": "18.5.1", - "Microsoft.TestPlatform.TestHost": "18.5.1" + "Microsoft.CodeCoverage": "18.7.0", + "Microsoft.TestPlatform.TestHost": "18.7.0" } }, "Moq": { @@ -131,8 +131,8 @@ }, "Microsoft.CodeCoverage": { "type": "Transitive", - "resolved": "18.5.1", - "contentHash": "vMFDR1ZjqzzgKmM0zrPie7Gv9Y+ZppjODB5Quzu9Eq0TlIusUfUCYFPEawO91zQuqwzvdFbJSU7WHNtjStffJQ==" + "resolved": "18.7.0", + "contentHash": "+wFfx9s7D9wegM0RziXMj2kvYDT4qcqXXtyjiQwSZOGQ2wwcOAJQcD6eQXk02jt0MvRNawtp8TJxTrV+wD8X1g==" }, "Microsoft.Data.SqlClient": { "type": "Transitive", @@ -158,66 +158,66 @@ }, "Microsoft.EntityFrameworkCore": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "EJx+fIBMgBlgD+ublKCn+GTOJkw3UqV7xOjYWBRVdUYyIm8UfvAsmSOPFiIInsWTHyMEYUJ9gCJY1jwX+6UB7w==", + "resolved": "10.0.9", + "contentHash": "tu85SRzOT021V7EQlViCiAE7TqldVn469Y6lt5TEn/+XC4/MeNCHgMRSxqYuWqvF4zAQZUhCmtNEZuM3ss4LeA==", "dependencies": { - "Microsoft.EntityFrameworkCore.Abstractions": "10.0.8", - "Microsoft.EntityFrameworkCore.Analyzers": "10.0.8", - "Microsoft.Extensions.Caching.Memory": "10.0.8", - "Microsoft.Extensions.Logging": "10.0.8" + "Microsoft.EntityFrameworkCore.Abstractions": "10.0.9", + "Microsoft.EntityFrameworkCore.Analyzers": "10.0.9", + "Microsoft.Extensions.Caching.Memory": "10.0.9", + "Microsoft.Extensions.Logging": "10.0.9" } }, "Microsoft.EntityFrameworkCore.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "jbKDXWPZQhuPHygMnwzNOqxBADVcpRVytcKYZsA++QqhPkpF93Ta8o5mbJQGrARSjlkr9WtOaADV97EDMOZ7DA==" + "resolved": "10.0.9", + "contentHash": "GRMaiPkqYna/gCsyDffYDWmefGPC3hDrdMw+2rrGcQwhs6uZOsaMQXMJnoXQ35tx9SkBV2ieRRU9N/jLOO6BZw==" }, "Microsoft.EntityFrameworkCore.Analyzers": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "M3BZ8JH8rB6BE7dO2g9iVbrHLnEz9wMXT6q+tDR6Nq3gyP3KmBj5OTiZGxyF3vesjOQNKanYoPGSNBR4kR2llg==" + "resolved": "10.0.9", + "contentHash": "aiEFB+C5EsZGqxvMPazE07hbWsp4iPaufJpanGt5O+lrwv7mJLrqma5haVIgFAPCyhQkmk75XSCEubT1zUjxtA==" }, "Microsoft.EntityFrameworkCore.Relational": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "UU3diAD2wwZveye2rnrwaF/wvJ9tm5iL2fuY9TTap6/iGQK1OO29M1BzXZRlRPVH/dByt5w/pISBSFtyR7hTqw==", + "resolved": "10.0.9", + "contentHash": "dEoyYKgiaZHHgOFm1WMWm1sFEsEuhPWufX4L9PekKtqd/RaIcPjkCjvbrVvJtApErb5wPSJhYvnTlxhH+p9h2g==", "dependencies": { - "Microsoft.EntityFrameworkCore": "10.0.8", - "Microsoft.Extensions.Caching.Memory": "10.0.8", - "Microsoft.Extensions.Configuration.Abstractions": "10.0.8", - "Microsoft.Extensions.Logging": "10.0.8" + "Microsoft.EntityFrameworkCore": "10.0.9", + "Microsoft.Extensions.Caching.Memory": "10.0.9", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.9", + "Microsoft.Extensions.Logging": "10.0.9" } }, "Microsoft.EntityFrameworkCore.SqlServer": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "A+FLIsTH9l5DG2iD6QW6Mfwlvr+BjWme/jJ2hvwmmENTr7lR1UWmgCtKCjDYcHxqdAD15bb4PgQnSzw12DV/pw==", + "resolved": "10.0.9", + "contentHash": "wjgpB/UFSeMU3uMfMzD4so567vJi5UugE6iTcONBx+rPb/PWpjYlzYKyxm2pGAFNpTFNbqoirtt7uUCc97Tfiw==", "dependencies": { "Microsoft.Data.SqlClient": "6.1.1", - "Microsoft.EntityFrameworkCore.Relational": "10.0.8", - "Microsoft.Extensions.Caching.Memory": "10.0.8", - "Microsoft.Extensions.Configuration.Abstractions": "10.0.8", - "Microsoft.Extensions.Logging": "10.0.8" + "Microsoft.EntityFrameworkCore.Relational": "10.0.9", + "Microsoft.Extensions.Caching.Memory": "10.0.9", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.9", + "Microsoft.Extensions.Logging": "10.0.9" } }, "Microsoft.Extensions.Caching.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "EoK2TwVR1daxmfXUPnvIYZSk5XQjHe45sGekox4kvMt88KQZQhDVzYW5Na5+oNwTuRpE48hipyGJg12F1Tm70w==", + "resolved": "10.0.9", + "contentHash": "5fGxcw2vuYp8s0wio9H1ECiuk4iKSdTIlNuigdLIrkhg+5XAwgFVDB/5Ots3pfN/QhABLYXutA79JFtnUKDSHA==", "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.8" + "Microsoft.Extensions.Primitives": "10.0.9" } }, "Microsoft.Extensions.Caching.Memory": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "sYMYQjNprfqPTryuLNnr0/AOtnhlfuZ0ZxyOV0d3AXOEL8j9KV0EbelpZYyIatT2hJiaSGO9XGr5YDRsh22OfQ==", + "resolved": "10.0.9", + "contentHash": "G9mregdatGWMCQWeCw012LDeJVP7G/XIxH8Ddbjc8bD1//dA+8VVQdcRE9jI1moyoJxSSZhHITUnNQ8FUDl5+Q==", "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "10.0.8", - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8", - "Microsoft.Extensions.Logging.Abstractions": "10.0.8", - "Microsoft.Extensions.Options": "10.0.8", - "Microsoft.Extensions.Primitives": "10.0.8" + "Microsoft.Extensions.Caching.Abstractions": "10.0.9", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9", + "Microsoft.Extensions.Logging.Abstractions": "10.0.9", + "Microsoft.Extensions.Options": "10.0.9", + "Microsoft.Extensions.Primitives": "10.0.9" } }, "Microsoft.Extensions.Configuration": { @@ -231,10 +231,10 @@ }, "Microsoft.Extensions.Configuration.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "I63esIFbL3h5pSt7gXpXOlmcwDmYBUoYNEglKfDPFUqtYvSV84f2l28hO2lfVXsV0wdlplgAM7IVz16matapSg==", + "resolved": "10.0.9", + "contentHash": "qGhRPd3VxfLV9UqatVOiD9mAeUbj2KiMwGFYC5uXlzExiZQoe4X/hdmzGIU7BQjNLTqCnnbTHVyBglG3668/HA==", "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.8" + "Microsoft.Extensions.Primitives": "10.0.9" } }, "Microsoft.Extensions.Configuration.FileExtensions": { @@ -262,16 +262,16 @@ }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "daf62xHIrq8pnE709hgaZZN9tSam9TGGepWe1+bE6V3GEuVwJiMs6ib+38lfMCyAJAHiX0vapxBhsuMSV7U+cg==", + "resolved": "10.0.9", + "contentHash": "NijozhERJDIaJ4k5TSMy1jOi0cSC2HfkvRD/Sl+kGSSKgVbFnF4GxgtMN/MrzHB8D1JxIrD4xSer9Blh9v3axQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "21nbDV60SRPWGIivsyl6lqBeEJNG1sginhhfWgRrr3Ais7aQ12To25OAHQxgoiJkjqy1aQ6RxpZBGYuTi7Ge6A==" + "resolved": "10.0.9", + "contentHash": "g41l/30G3K4B/d/L8kjux0+30e27c8D0FVQ/PFCpbekgfDpj9mnDhieP67EqXWvl1EWNeZh2rpR4F5B/jcDOHA==" }, "Microsoft.Extensions.FileProviders.Abstractions": { "type": "Transitive", @@ -298,35 +298,35 @@ }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "K60JhWC2hN/Gi7TP68tBxSzk5ACWOs7lkmPzsfA8Bcf/IXTajujt2ORMf9rSMk1bsng6Lv4Y3fuxp3bm1+15ug==", + "resolved": "10.0.9", + "contentHash": "N7Gm9SjugYjmmnhwbBKC9DFqGqjfJvh6YfOJgtwh0AW0Xpok3dIVors1ik050XmUxKAgAc7nNngDIJyFb06K2g==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "10.0.8", - "Microsoft.Extensions.Logging.Abstractions": "10.0.8", - "Microsoft.Extensions.Options": "10.0.8" + "Microsoft.Extensions.DependencyInjection": "10.0.9", + "Microsoft.Extensions.Logging.Abstractions": "10.0.9", + "Microsoft.Extensions.Options": "10.0.9" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "fdVadZmsC8jRP0KvKy8mO8f6GV/HyBvElfcSxEhd+5FM5boAw/01iSaCto5G3G37ApJira4A3pNaVvBv8cUiLQ==", + "resolved": "10.0.9", + "contentHash": "9S/DFt4cohlMPpzIxjG6kk0L8MuN2vDm9pbMCulxtJzzk82oJHVLBd8vuQxaPskaYQwKqmFmbannf5eoChgjYg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9" } }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "VBD+131DpTNCNDfA4kIyKTiCySvJGNhwibdWBSdFRu7GMfXLXcXODkgA+KStKbbhzraLglZWUN4nXyHgW4JIRA==", + "resolved": "10.0.9", + "contentHash": "hyNdX4c2UwkRkzb9byw0H2DQkRzwBM3mzY2sCM9egwzTyg8dvQJmp5noQHGEaaCORQrNK3DD2gREBsc2DlXS4A==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8", - "Microsoft.Extensions.Primitives": "10.0.8" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9", + "Microsoft.Extensions.Primitives": "10.0.9" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "OBPo4nYhMyIbtueoC10CBm6AGAbo/A9IV8QQ/6ryZS7VvmqpGT7hunazeHLxFawRzn3oLOq4jhqhpBX4tfswWQ==" + "resolved": "10.0.9", + "contentHash": "fmEbAUFsaIKirgLt/lYhuFRBwhcSJN31jjHgCdbQxJiWOum6EdLjkbgGuukSP9z/a+9LibaxII/kF+GwOXgC4g==" }, "Microsoft.Identity.Client": { "type": "Transitive", @@ -433,15 +433,15 @@ }, "Microsoft.TestPlatform.ObjectModel": { "type": "Transitive", - "resolved": "18.5.1", - "contentHash": "KNZd+M0S0rz5eNAln0pbZX+A/RbokYZCbGKx4fN4CkhtWhkz6nSJDO+9LGYjRE4d0WPVriJ2JnVubkjt3+PpMg==" + "resolved": "18.7.0", + "contentHash": "6rmgU4q3/WOpOPcncI0YW0Q/QpcQtwR2TTEXDR5+4TfSimPBAk6Z/BgKLeGgp1SOun0ROVUCCafXhRLwsHaPpA==" }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", - "resolved": "18.5.1", - "contentHash": "RM+3JNHEoHOCFXzVntUcIiYxzPjzBN0N8wto6HYXi76YyBTZ/3CeRL8U+Pk5zx3AUrOmHxDvKJwGUCdElU9bJg==", + "resolved": "18.7.0", + "contentHash": "kYwfmebCs8992zaxEDkvG7S+YEouTeKfYVKUFEkwh1W2dIoOaevBt80XSKVXCUFEhusjOIm1sFfHBnoJgygrRA==", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "18.5.1", + "Microsoft.TestPlatform.ObjectModel": "18.7.0", "Newtonsoft.Json": "13.0.3" } }, @@ -452,17 +452,17 @@ }, "Microting.EntityFrameworkCore.MySql": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "vaxt+8dU7WODnxl5/2k4VH+LNgbQHk+yGIqWum619+6lICCmbLHyYyzqgJRGzic+Aeyh212TeH5fHklfXAjWVw==", + "resolved": "10.0.9", + "contentHash": "aLW8gEz8Tue1zLYycAJw0xeH5h3VSaHNGEplKFRMX56AeWm824kiMtqp8pOg4koReKY91W6Tbjswnj/RL7jewg==", "dependencies": { "Microsoft.EntityFrameworkCore.Relational": "[10.0.8, 10.0.999]", - "MySqlConnector": "2.5.0" + "MySqlConnector": "2.6.0" } }, "MySqlConnector": { "type": "Transitive", - "resolved": "2.5.0", - "contentHash": "hoAwfHHF8DlRRqwHOhN3u1KLi+XbX/4LPS7Anfa+SYC97vRyIfdEOEEfj1L50q01Ik8aDNvmDrNmu/VPFiAiaQ==", + "resolved": "2.6.0", + "contentHash": "YLceXhrEznpXf8XkwvH6JWHjAq0AA2lsf/zYWiESe4B9ki2v473XH2GRcPbLwktBqYu1Uy3Dvs7G+mu48QKL2w==", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2" @@ -483,20 +483,20 @@ }, "Npgsql": { "type": "Transitive", - "resolved": "10.0.2", - "contentHash": "q5RfBI+wywJSFUNDE1L4ZbHEHCFTblo8Uf6A6oe4feOUFYiUQXyAf9GBh5qEZpvJaHiEbpBPkQumjEhXCJxdrg==", + "resolved": "10.0.3", + "contentHash": "7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "10.0.0" } }, "Npgsql.EntityFrameworkCore.PostgreSQL": { "type": "Transitive", - "resolved": "10.0.1", - "contentHash": "P6EwH0Q4xkaA264iNZDqCPhWt8pscfUGxXazDQg4noBfqjoOlk4hKWfvBjF9ZX3R/9JybRmmJfmxr2iBMj0EpA==", + "resolved": "10.0.2", + "contentHash": "PsNYgPOSW41Xx19gin7y4EdZAPteWr9Cb01XkdObxOsPzi+mgBupBEN7J7+erXFsROPOILM7MlIoO9QzL8+LGQ==", "dependencies": { "Microsoft.EntityFrameworkCore": "[10.0.4, 11.0.0)", "Microsoft.EntityFrameworkCore.Relational": "[10.0.4, 11.0.0)", - "Npgsql": "10.0.2" + "Npgsql": "10.0.3" } }, "SonarAnalyzer.CSharp": { @@ -645,20 +645,20 @@ "TiCodeX.SQLSchemaCompare.Infrastructure": { "type": "Project", "dependencies": { - "Microsoft.EntityFrameworkCore.Relational": "[10.0.8, )", - "Microsoft.EntityFrameworkCore.SqlServer": "[10.0.8, )", - "Microting.EntityFrameworkCore.MySql": "[10.0.8, )", - "Npgsql.EntityFrameworkCore.PostgreSQL": "[10.0.1, )", - "TiCodeX.SQLSchemaCompare.Services": "[2026.5.1, )" + "Microsoft.EntityFrameworkCore.Relational": "[10.0.9, )", + "Microsoft.EntityFrameworkCore.SqlServer": "[10.0.9, )", + "Microting.EntityFrameworkCore.MySql": "[10.0.9, )", + "Npgsql.EntityFrameworkCore.PostgreSQL": "[10.0.2, )", + "TiCodeX.SQLSchemaCompare.Services": "[2026.6.1, )" } }, "TiCodeX.SQLSchemaCompare.Services": { "type": "Project", "dependencies": { "Microsoft.AspNet.WebApi.Client": "[6.0.0, )", - "Microsoft.Extensions.Logging.Abstractions": "[10.0.8, )", + "Microsoft.Extensions.Logging.Abstractions": "[10.0.9, )", "Newtonsoft.Json": "[13.0.4, )", - "TiCodeX.SQLSchemaCompare.Core": "[2026.5.1, )" + "TiCodeX.SQLSchemaCompare.Core": "[2026.6.1, )" } } }, diff --git a/SQLSchemaCompare.UI/Pages/Project/ProjectPageModel.cshtml.cs b/SQLSchemaCompare.UI/Pages/Project/ProjectPageModel.cshtml.cs index 75ea61c..73b0d47 100644 --- a/SQLSchemaCompare.UI/Pages/Project/ProjectPageModel.cshtml.cs +++ b/SQLSchemaCompare.UI/Pages/Project/ProjectPageModel.cshtml.cs @@ -276,7 +276,7 @@ public ActionResult OnPostEditProject([FromBody] CompareProjectOptions options) /// The ApiResponse in JSON public ActionResult OnGetStartCompare() { - this.databaseCompareService.StartCompare(); + this.databaseCompareService.StartCompare(false); return new JsonResult(new ApiResponse()); } diff --git a/SQLSchemaCompare.UI/SQLSchemaCompare.UI.csproj b/SQLSchemaCompare.UI/SQLSchemaCompare.UI.csproj index e5be5ef..c8a6891 100644 --- a/SQLSchemaCompare.UI/SQLSchemaCompare.UI.csproj +++ b/SQLSchemaCompare.UI/SQLSchemaCompare.UI.csproj @@ -44,8 +44,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/SQLSchemaCompare.UI/packages.lock.json b/SQLSchemaCompare.UI/packages.lock.json index dc79b81..25e151b 100644 --- a/SQLSchemaCompare.UI/packages.lock.json +++ b/SQLSchemaCompare.UI/packages.lock.json @@ -4,20 +4,20 @@ "net10.0": { "Microsoft.AspNetCore.Mvc.NewtonsoftJson": { "type": "Direct", - "requested": "[10.0.8, )", - "resolved": "10.0.8", - "contentHash": "LAZmDrEsExc11l7nyQ+efQHTKp4MOskAuPSgkW64LoxrJv2YnElc4IM1VGfIHNRspqVguO5TY5kz2YTRcNSHeQ==", + "requested": "[10.0.9, )", + "resolved": "10.0.9", + "contentHash": "92fflUH1zefpjO7fnNJo3dpV0PQnvRpRcqR7ctlxnTumS1oQN8FRwRsruU/jW9PwWl/yYHOuFjuiHESzE4gY5g==", "dependencies": { - "Microsoft.AspNetCore.JsonPatch": "10.0.8", + "Microsoft.AspNetCore.JsonPatch": "10.0.9", "Newtonsoft.Json": "13.0.3", "Newtonsoft.Json.Bson": "1.0.2" } }, "Microsoft.Extensions.FileProviders.Embedded": { "type": "Direct", - "requested": "[10.0.8, )", - "resolved": "10.0.8", - "contentHash": "Wv9s0rmrmUEma268HCqqcHGgJI30O9mqMxnORZ/QFxtbjoTFEuMvnqL2kIfbZcOGD6XF6II47Hc6YSff0jKGkw==" + "requested": "[10.0.9, )", + "resolved": "10.0.9", + "contentHash": "UpRgjjSUmF7KYZTIv1Zd2Y0Wv2oK9jE+Jmyp4UMynTowjvJGG1yrRe2JodYyVgcDgZF2auGwYEl+U0J1+YhBRw==" }, "Microsoft.TypeScript.MSBuild": { "type": "Direct", @@ -81,8 +81,8 @@ }, "Microsoft.AspNetCore.JsonPatch": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "xGMQwR06DxQSpSUdYvUPLQkjcQUAXnFIUbNoafAcLvUXDnmKNEuddxKvrGoWDT7svt90wWet2Xve5uacO/pVtw==", + "resolved": "10.0.9", + "contentHash": "XgN+a1F7kt4JOlwfiYSu6YMpK20QgIKebPE9QvrHogAX5A0jnqAG2E8I+Hh7/vu59+BrFKQ0UX6Ls7E80/O9IA==", "dependencies": { "Newtonsoft.Json": "13.0.3" } @@ -120,38 +120,38 @@ }, "Microsoft.EntityFrameworkCore": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "EJx+fIBMgBlgD+ublKCn+GTOJkw3UqV7xOjYWBRVdUYyIm8UfvAsmSOPFiIInsWTHyMEYUJ9gCJY1jwX+6UB7w==", + "resolved": "10.0.9", + "contentHash": "tu85SRzOT021V7EQlViCiAE7TqldVn469Y6lt5TEn/+XC4/MeNCHgMRSxqYuWqvF4zAQZUhCmtNEZuM3ss4LeA==", "dependencies": { - "Microsoft.EntityFrameworkCore.Abstractions": "10.0.8", - "Microsoft.EntityFrameworkCore.Analyzers": "10.0.8" + "Microsoft.EntityFrameworkCore.Abstractions": "10.0.9", + "Microsoft.EntityFrameworkCore.Analyzers": "10.0.9" } }, "Microsoft.EntityFrameworkCore.Abstractions": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "jbKDXWPZQhuPHygMnwzNOqxBADVcpRVytcKYZsA++QqhPkpF93Ta8o5mbJQGrARSjlkr9WtOaADV97EDMOZ7DA==" + "resolved": "10.0.9", + "contentHash": "GRMaiPkqYna/gCsyDffYDWmefGPC3hDrdMw+2rrGcQwhs6uZOsaMQXMJnoXQ35tx9SkBV2ieRRU9N/jLOO6BZw==" }, "Microsoft.EntityFrameworkCore.Analyzers": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "M3BZ8JH8rB6BE7dO2g9iVbrHLnEz9wMXT6q+tDR6Nq3gyP3KmBj5OTiZGxyF3vesjOQNKanYoPGSNBR4kR2llg==" + "resolved": "10.0.9", + "contentHash": "aiEFB+C5EsZGqxvMPazE07hbWsp4iPaufJpanGt5O+lrwv7mJLrqma5haVIgFAPCyhQkmk75XSCEubT1zUjxtA==" }, "Microsoft.EntityFrameworkCore.Relational": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "UU3diAD2wwZveye2rnrwaF/wvJ9tm5iL2fuY9TTap6/iGQK1OO29M1BzXZRlRPVH/dByt5w/pISBSFtyR7hTqw==", + "resolved": "10.0.9", + "contentHash": "dEoyYKgiaZHHgOFm1WMWm1sFEsEuhPWufX4L9PekKtqd/RaIcPjkCjvbrVvJtApErb5wPSJhYvnTlxhH+p9h2g==", "dependencies": { - "Microsoft.EntityFrameworkCore": "10.0.8" + "Microsoft.EntityFrameworkCore": "10.0.9" } }, "Microsoft.EntityFrameworkCore.SqlServer": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "A+FLIsTH9l5DG2iD6QW6Mfwlvr+BjWme/jJ2hvwmmENTr7lR1UWmgCtKCjDYcHxqdAD15bb4PgQnSzw12DV/pw==", + "resolved": "10.0.9", + "contentHash": "wjgpB/UFSeMU3uMfMzD4so567vJi5UugE6iTcONBx+rPb/PWpjYlzYKyxm2pGAFNpTFNbqoirtt7uUCc97Tfiw==", "dependencies": { "Microsoft.Data.SqlClient": "6.1.1", - "Microsoft.EntityFrameworkCore.Relational": "10.0.8" + "Microsoft.EntityFrameworkCore.Relational": "10.0.9" } }, "Microsoft.Identity.Client": { @@ -224,17 +224,17 @@ }, "Microting.EntityFrameworkCore.MySql": { "type": "Transitive", - "resolved": "10.0.8", - "contentHash": "vaxt+8dU7WODnxl5/2k4VH+LNgbQHk+yGIqWum619+6lICCmbLHyYyzqgJRGzic+Aeyh212TeH5fHklfXAjWVw==", + "resolved": "10.0.9", + "contentHash": "aLW8gEz8Tue1zLYycAJw0xeH5h3VSaHNGEplKFRMX56AeWm824kiMtqp8pOg4koReKY91W6Tbjswnj/RL7jewg==", "dependencies": { "Microsoft.EntityFrameworkCore.Relational": "[10.0.8, 10.0.999]", - "MySqlConnector": "2.5.0" + "MySqlConnector": "2.6.0" } }, "MySqlConnector": { "type": "Transitive", - "resolved": "2.5.0", - "contentHash": "hoAwfHHF8DlRRqwHOhN3u1KLi+XbX/4LPS7Anfa+SYC97vRyIfdEOEEfj1L50q01Ik8aDNvmDrNmu/VPFiAiaQ==" + "resolved": "2.6.0", + "contentHash": "YLceXhrEznpXf8XkwvH6JWHjAq0AA2lsf/zYWiESe4B9ki2v473XH2GRcPbLwktBqYu1Uy3Dvs7G+mu48QKL2w==" }, "Newtonsoft.Json": { "type": "Transitive", @@ -259,17 +259,17 @@ }, "Npgsql": { "type": "Transitive", - "resolved": "10.0.2", - "contentHash": "q5RfBI+wywJSFUNDE1L4ZbHEHCFTblo8Uf6A6oe4feOUFYiUQXyAf9GBh5qEZpvJaHiEbpBPkQumjEhXCJxdrg==" + "resolved": "10.0.3", + "contentHash": "7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==" }, "Npgsql.EntityFrameworkCore.PostgreSQL": { "type": "Transitive", - "resolved": "10.0.1", - "contentHash": "P6EwH0Q4xkaA264iNZDqCPhWt8pscfUGxXazDQg4noBfqjoOlk4hKWfvBjF9ZX3R/9JybRmmJfmxr2iBMj0EpA==", + "resolved": "10.0.2", + "contentHash": "PsNYgPOSW41Xx19gin7y4EdZAPteWr9Cb01XkdObxOsPzi+mgBupBEN7J7+erXFsROPOILM7MlIoO9QzL8+LGQ==", "dependencies": { "Microsoft.EntityFrameworkCore": "[10.0.4, 11.0.0)", "Microsoft.EntityFrameworkCore.Relational": "[10.0.4, 11.0.0)", - "Npgsql": "10.0.2" + "Npgsql": "10.0.3" } }, "SonarAnalyzer.CSharp": { @@ -336,11 +336,11 @@ "TiCodeX.SQLSchemaCompare.Infrastructure": { "type": "Project", "dependencies": { - "Microsoft.EntityFrameworkCore.Relational": "[10.0.8, )", - "Microsoft.EntityFrameworkCore.SqlServer": "[10.0.8, )", - "Microting.EntityFrameworkCore.MySql": "[10.0.8, )", - "Npgsql.EntityFrameworkCore.PostgreSQL": "[10.0.1, )", - "TiCodeX.SQLSchemaCompare.Services": "[2026.5.1, )" + "Microsoft.EntityFrameworkCore.Relational": "[10.0.9, )", + "Microsoft.EntityFrameworkCore.SqlServer": "[10.0.9, )", + "Microting.EntityFrameworkCore.MySql": "[10.0.9, )", + "Npgsql.EntityFrameworkCore.PostgreSQL": "[10.0.2, )", + "TiCodeX.SQLSchemaCompare.Services": "[2026.6.1, )" } }, "TiCodeX.SQLSchemaCompare.Services": { @@ -348,7 +348,7 @@ "dependencies": { "Microsoft.AspNet.WebApi.Client": "[6.0.0, )", "Newtonsoft.Json": "[13.0.4, )", - "TiCodeX.SQLSchemaCompare.Core": "[2026.5.1, )" + "TiCodeX.SQLSchemaCompare.Core": "[2026.6.1, )" } } }, diff --git a/SQLSchemaCompare/package.json b/SQLSchemaCompare/package.json index 9dae9ac..8c7e404 100644 --- a/SQLSchemaCompare/package.json +++ b/SQLSchemaCompare/package.json @@ -1,6 +1,6 @@ { "name": "sqlschemacompare", - "version": "2026.5.1", + "version": "2026.6.1", "license": "GPL-3.0-only", "description": "The Swiss Army Knife of Database Schema Comparison for Microsoft SQL, mySQL and PostgreSQL which runs on Windows, Linux and macOS systems.", "main": "app.js",