예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        public async Task Analyze()
        {
            var Results = await Sherlock.AnalyzeAsync(new Connection(Configuration, SqlClientFactory.Instance, "Default")).ConfigureAwait(false);

            Assert.NotEmpty(Results);
        }