public void TestGetPODetailsID() { foreach (DbConnection connection in emptyConnections) { PredictedObservedDetails details = new PredictedObservedDetails(); Assert.AreEqual(0, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 0, null, details)); Assert.AreEqual(0, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 0, "wheat.apsimx", details)); Assert.AreEqual(0, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 1, null, details)); Assert.AreEqual(0, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 1, "wheat.apsimx", details)); details.DatabaseTableName = "PredictedObserved"; Assert.AreEqual(0, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 0, null, details)); Assert.AreEqual(0, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 0, "wheat.apsimx", details)); Assert.AreEqual(0, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 1, null, details)); Assert.AreEqual(0, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 1, "wheat.apsimx", details)); } foreach (DbConnection connection in populousConnections) { PredictedObservedDetails details = new PredictedObservedDetails(); Assert.AreEqual(0, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 0, null, details)); Assert.AreEqual(0, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 0, "wheat.apsimx", details)); Assert.AreEqual(0, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 1, null, details)); Assert.AreEqual(0, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 1, "wheat.apsimx", details)); details.DatabaseTableName = "PredictedObserved"; Assert.AreEqual(0, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 0, null, details)); Assert.AreEqual(0, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 0, "wheat.apsimx", details)); Assert.AreEqual(0, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 1, null, details)); Assert.AreEqual(1, DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, 1, "wheat.apsimx", details)); } }
/// <summary> /// This will Update the 'Accepted' Stats details and referenced id's from one Pull Request ID to another Pull Request ID. /// </summary> /// <param name="currentPullRequestID"></param> /// <param name="acceptedPullRequestID"></param> private void UpdateAcceptedStatsforPullRequest(int currentPullRequestID, int acceptedPullRequestID) { //Do I need to update the log table string HelperMessage = string.Empty; string connectStr = Utilities.GetConnectionString(); using (SqlConnection sqlCon = new SqlConnection(connectStr)) { sqlCon.Open(); try { List <ApsimFile> currentApsimFiles = GetApsimFilesRelatedPredictedObservedData(sqlCon, currentPullRequestID); //need to get the (latest) run date for the acceptedPullRequestID DateTime acceptedRunDate = DBFunctions.GetLatestPullRequestRunDate(sqlCon, acceptedPullRequestID); foreach (ApsimFile currentApsimFile in currentApsimFiles) { foreach (PredictedObservedDetails currentPODetails in currentApsimFile.PredictedObserved) { int acceptedPredictedObservedDetailsID = DBFunctions.GetAcceptedPredictedObservedDetailsId(sqlCon, acceptedPullRequestID, currentApsimFile.FileName, currentPODetails); if (acceptedPredictedObservedDetailsID > 0) { HelperMessage = string.Format("Current Pull Request Id: {0} to Accepted Pull Request Id: {1} for FileName: {2} - PO TableName: {3}, Current PO Id: {4}, Accepted PO Id: {5}.", currentPullRequestID, acceptedPullRequestID, currentApsimFile.FileName, currentPODetails.DatabaseTableName, currentPODetails.ID, acceptedPredictedObservedDetailsID); DataTable currentPOValues = DBFunctions.GetPredictedObservedValues(sqlCon, currentPODetails.ID); DataTable currentStats = Tests.CalculateStatsOnPredictedObservedValues(currentPOValues); DataTable acceptedPOValues = DBFunctions.GetPredictedObservedValues(sqlCon, acceptedPredictedObservedDetailsID); DataTable acceptedStats = Tests.CalculateStatsOnPredictedObservedValues(acceptedPOValues); //DataTable acceptedStats = DBFunctions.getPredictedObservedTestsData(connectStr, acceptedPredictedObservedDetailsID); DataTable dtTests = Tests.MergeTestsStatsAndCompare(currentStats, acceptedStats); DBFunctions.AddPredictedObservedTestsData(sqlCon, currentApsimFile.FileName, currentPODetails.ID, currentPODetails.DatabaseTableName, dtTests); //Update the accepted reference for Predicted Observed Values, so that it can be DBFunctions.UpdatePredictedObservedDetails(sqlCon, acceptedPredictedObservedDetailsID, currentPODetails.ID); } } } DBFunctions.UpdateApsimFileAcceptedDetails(sqlCon, currentPullRequestID, acceptedPullRequestID, acceptedRunDate); } catch (Exception ex) { Utilities.WriteToLogFile(string.Format("ERROR: Unable to update {0}: {2}", HelperMessage, ex.Message.ToString()));; } } }
/// <summary> /// Returns the PredictedObservedTests data for 'Accepted' data set, based on matching 'Current' Details /// </summary> /// <param name="conStr"></param> /// <param name="currentApsimID"></param> /// <param name="currentApsim"></param> /// <param name="poDetail"></param> /// <param name="predictedObservedId"></param> /// <param name="acceptedPredictedObservedDetailsID"></param> /// <returns></returns> private static DataTable RetrieveAcceptedStatsData(DbConnection connection, int currentApsimID, ApsimFile currentApsim, PredictedObservedDetails poDetail, int predictedObservedId, ref int acceptedPredictedObservedDetailsID) { DataTable acceptedStats = new DataTable(); ApsimFile acceptedApsim = new ApsimFile(); try { string strSQL = "SELECT * FROM ApsimFiles WHERE StatsAccepted = 1 AND PullRequestId != @PullRequestId ORDER BY RunDate DESC"; strSQL = Utilities.Limit(connection, strSQL, 1); using (DbCommand command = connection.CreateCommand(strSQL)) { command.CommandType = CommandType.Text; command.AddParamWithValue("@PullRequestId", currentApsim.PullRequestId); using (DbDataReader sdReader = command.ExecuteReader()) { while (sdReader.Read()) { acceptedApsim.ID = sdReader.GetInt32(0); acceptedApsim.PullRequestId = sdReader.GetInt32(1); acceptedApsim.FileName = sdReader.GetString(2); acceptedApsim.FullFileName = sdReader.GetString(3); acceptedApsim.RunDate = sdReader.GetDateTime(4); acceptedApsim.StatsAccepted = sdReader.GetBoolean(5); acceptedApsim.IsMerged = sdReader.GetBoolean(6); acceptedApsim.SubmitDetails = sdReader.GetString(7); acceptedApsim.AcceptedPullRequestId = sdReader.IsDBNull(8) ? 0 : sdReader.GetInt32(8); } } } if (acceptedApsim.PullRequestId > 0) { DBFunctions.UpdateApsimFileAcceptedDetails(connection, currentApsim.PullRequestId, acceptedApsim.PullRequestId, acceptedApsim.RunDate); ////get the PredictedObservedDetail.ID for the records that match our current record 'matching' criteria acceptedPredictedObservedDetailsID = DBFunctions.GetAcceptedPredictedObservedDetailsId(connection, acceptedApsim.PullRequestId, currentApsim.FileName, poDetail); ////Now retreieve the matching tests data for our predicted observed details acceptedStats = DBFunctions.GetPredictedObservedTestsData(connection, acceptedPredictedObservedDetailsID); } } catch (Exception ex) { Utilities.WriteToLogFile(string.Format(" ERROR: Unable to RetrieveAcceptedStatsData for ApsimFile {0}: Pull Request Id {1}: {2}.", currentApsim.FileName, currentApsim.PullRequestId, ex.Message.ToString())); } return(acceptedStats); }
/// <summary> // Returns the PredictedObservedTests data for 'Accepted' data set, based on matching 'Current' Details /// </summary> /// <param name="conStr"></param> /// <param name="currentApsimID"></param> /// <param name="currentApsim"></param> /// <param name="poDetail"></param> /// <param name="predictedObservedId"></param> /// <param name="acceptedPredictedObservedDetailsID"></param> /// <returns></returns> private static DataTable RetrieveAcceptedStatsData(SqlConnection sqlCon, int currentApsimID, ApsimFile currentApsim, PredictedObservedDetails poDetail, int predictedObservedId, ref int acceptedPredictedObservedDetailsID) { DataTable acceptedStats = new DataTable(); ApsimFile acceptedApsim = new ApsimFile(); try { string strSQL = "SELECT TOP 1 * FROM ApsimFiles WHERE StatsAccepted = 1 AND PullRequestId != @PullRequestId ORDER BY RunDate DESC"; using (SqlCommand commandER = new SqlCommand(strSQL, sqlCon)) { commandER.CommandType = CommandType.Text; commandER.Parameters.AddWithValue("@PullRequestId", currentApsim.PullRequestId); //SqlDataReader sdReader = commandER.ExecuteReader(); //while (sdReader.Read()) //{ // acceptedApsim.ID = sdReader.GetInt32(0); // acceptedApsim.PullRequestId = sdReader.GetInt32(1); // acceptedApsim.FileName = sdReader.GetString(2); // acceptedApsim.FullFileName = sdReader.GetString(3); // acceptedApsim.RunDate = sdReader.GetDateTime(4); // acceptedApsim.StatsAccepted = sdReader.GetBoolean(5); // acceptedApsim.IsMerged = sdReader.GetBoolean(6); // acceptedApsim.SubmitDetails = sdReader.GetString(7); // if (sdReader.IsDBNull(8)) // { // acceptedApsim.AcceptedPullRequestId = 0; // } // else // { // acceptedApsim.AcceptedPullRequestId = sdReader.GetInt32(8); // } //} //sdReader.Close(); string response = Comms.SendQuery(commandER, "reader"); var jsonObject = JsonConvert.DeserializeObject(response); DataTable dt = JsonConvert.DeserializeObject <DataTable>(jsonObject.ToString()); foreach (DataRow row in dt.Rows) { acceptedApsim.ID = Convert.ToInt32(row[0].ToString()); acceptedApsim.PullRequestId = Convert.ToInt32(row[1].ToString()); acceptedApsim.FileName = row[2].ToString(); acceptedApsim.FullFileName = row[3].ToString(); acceptedApsim.RunDate = Convert.ToDateTime(row[4].ToString()); acceptedApsim.StatsAccepted = Convert.ToBoolean(row[5].ToString()); acceptedApsim.IsMerged = Convert.ToBoolean(row[6].ToString()); acceptedApsim.SubmitDetails = row[7].ToString(); if (row[8] == DBNull.Value) { acceptedApsim.AcceptedPullRequestId = 0; } else { acceptedApsim.AcceptedPullRequestId = Convert.ToInt32(row[8].ToString()); } } } if (acceptedApsim.PullRequestId > 0) { DBFunctions.UpdateApsimFileAcceptedDetails(sqlCon, currentApsim.PullRequestId, acceptedApsim.PullRequestId, acceptedApsim.RunDate); ////get the PredictedObservedDetail.ID for the records that match our current record 'matching' criteria acceptedPredictedObservedDetailsID = DBFunctions.GetAcceptedPredictedObservedDetailsId(sqlCon, acceptedApsim.PullRequestId, currentApsim.FileName, poDetail); ////Now retreieve the matching tests data for our predicted observed details acceptedStats = DBFunctions.GetPredictedObservedTestsData(sqlCon, acceptedPredictedObservedDetailsID); } } catch (Exception ex) { Utilities.WriteToLogFile(string.Format(" ERROR: Unable to RetrieveAcceptedStatsData for ApsimFile {0}: Pull Request Id {1}: {2}.", currentApsim.FileName, currentApsim.PullRequestId, ex.Message.ToString())); } return(acceptedStats); }