/// <summary> /// Analyze the schema. /// </summary> /// <param name="sherlock">The sherlock.</param> /// <param name="logger">The logger.</param> /// <param name="source">The source.</param> /// <param name="sourceConnection">The source connection.</param> /// <param name="batch">The batch.</param> private static async Task AnalyzeSchemaAsync(Sherlock sherlock, ILogger logger, IMappingSource source, IConnection sourceConnection, SQLHelper batch) { if (!source.ApplyAnalysis && !source.GenerateAnalysis) { return; } logger.Information("Analyzing {Info:l} for suggestions.", sourceConnection.DatabaseName); var Results = await sherlock.AnalyzeAsync(sourceConnection).ConfigureAwait(false); batch.CreateBatch(); foreach (var Result in Results) { logger.Information("Finding: {Info:l}", Result.Text); logger.Information("Metrics: {Data:l}", Result.Metrics); logger.Information("Suggested Fix: {Fix:l}", Result.Fix); if (source.ApplyAnalysis && string.IsNullOrEmpty(Result.Fix)) { batch.AddQuery(CommandType.Text, Result.Fix); } } if (source.ApplyAnalysis) { logger.Information("Applying fixes for {Info:l}.", sourceConnection.DatabaseName); await batch.ExecuteScalarAsync <int>().ConfigureAwait(false); } }
public async Task Analyze() { var Results = await Sherlock.AnalyzeAsync(new Connection(Configuration, SqlClientFactory.Instance, "Default")).ConfigureAwait(false); Assert.NotEmpty(Results); }