private async Task <List <NGenAssemblyData> > GetFromStream(Stream stream, Func <ZipArchiveEntry, bool> predicate) { var regex = new Regex(@"(.*)-([\w.]+).ngen.txt", RegexOptions.IgnoreCase | RegexOptions.Compiled); using var zipArchive = new ZipArchive(stream); var list = new List <NGenAssemblyData>(); foreach (var entry in zipArchive.Entries) { if (predicate(entry)) { var match = regex.Match(entry.Name); var assemblyName = match.Groups[1].Value; var targetFramework = match.Groups[2].Value; var methodList = new List <string>(); using var entryStream = entry.Open(); using var reader = new StreamReader(entryStream); do { var line = await reader.ReadLineAsync(); if (line is null) { break; } methodList.Add(line); }while (true); var ngenAssemblyData = new NGenAssemblyData(assemblyName, targetFramework, methodList.Count); list.Add(ngenAssemblyData); } } return(list); }
private async Task UploadNGenAssemblyDataAsync(SqlTransaction transaction, int buildId, string branchName, string buildUri, NGenAssemblyData ngenAssemblyData) { var query = "INSERT INTO dbo.NGenAssemblyData (BuildId, BranchName, BuildUri, AssemblyName, TargetFramework, MethodCount) VALUES (@BuildId, @BranchName, @BuildUri, @AssemblyName, @TargetFramework, @MethodCount)"; using var command = new SqlCommand(query, transaction.Connection, transaction); command.Parameters.AddWithValue("@BuildId", buildId); command.Parameters.AddWithValue("@BranchName", branchName); command.Parameters.AddWithValue("@BuildUri", buildUri); command.Parameters.AddWithValue("@AssemblyName", ngenAssemblyData.AssemblyName); command.Parameters.AddWithValue("@TargetFramework", ngenAssemblyData.TargetFramework); command.Parameters.AddWithValue("@MethodCount", ngenAssemblyData.MethodCount); var result = await command.ExecuteNonQueryAsync(); if (result < 0) { throw new Exception("Unable to execute the insert"); } }