static int DisplayHashesFor(string connectionString, List <Query> queries, OutDir outDir, Formatter fn, HashAlgorithm algorithm) { var padding = queries.Select(q => q.Name.Length).Max(); var results = queries.Select(AsHashResult); int exitCode = 0; foreach (var result in results) { exitCode = Math.Max(result.ExitCode, exitCode); DisplayHashFor(result); } return(exitCode); HashResult AsHashResult(Query query) => GetHashResultFor(connectionString, query.Name, query.CommandText, outDir, fn, algorithm); void DisplayHashFor(HashResult hashResult) { Console.Out.Write(hashResult.QueryName.PadRight(padding, ' ')); Console.Out.Write(" "); hashResult.PrintValue(Console.Out, Console.Error); } }
static string ComputeHash(string connectionString, string name, string commandText, OutDir outDir, Formatter fn, HashAlgorithm algorithm) { string file = outDir.AddFile(name); string text; using (var stream = LoadData(connectionString, file, commandText, fn)) { byte[] hash = algorithm.ComputeHash(stream); StringBuilder sb = new StringBuilder(2 + hash.Length * 2); sb.Append("0x"); foreach (var b in hash) { sb.Append(b.ToString("X2")); } text = sb.ToString(); } return(text); }
static HashResult GetHashResultFor(string connectionString, string name, string commandText, OutDir outDir, Formatter fn, HashAlgorithm algorithm) { Result <string, Exception> r = Try(ComputeHash, connectionString, name, commandText, outDir, fn, algorithm); return(r.Map(hash => HashResult.Hash(name, hash)) .MapError(ex => HashResult.Error(name, ex.ToString())) .UnwrapEither()); }