/// <summary>Remove all simulations from the database that don't exist in 'simulationsToKeep'</summary> /// <param name="simulationsToKeep">The simulations to keep.</param> public void RemoveUnwantedSimulations(Simulations simulationsToKeep) { Open(forWriting: true); string[] simulationNamesToKeep = simulationsToKeep.FindAllSimulationNames(); // Make sure that the list of simulations in 'simulationsToKeep' are in the // Simulations table. string[] simulationNames = this.SimulationNames; foreach (string simulationNameToKeep in simulationNamesToKeep) { if (!StringUtilities.Contains(simulationNames, simulationNameToKeep)) { RunQueryWithNoReturnData("INSERT INTO [Simulations] (Name) VALUES ('" + simulationNameToKeep + "')"); } } // Get a list of simulation IDs that we are to delete. List <int> idsToDelete = new List <int>(); foreach (string simulationNameInDB in SimulationNames) { if (!simulationNamesToKeep.Contains(simulationNameInDB)) { idsToDelete.Add(GetSimulationID(simulationNameInDB)); } } if (idsToDelete.Count == 0) { return; } // create an SQL WHERE clause with all IDs string idString = ""; for (int i = 0; i < idsToDelete.Count; i++) { if (i > 0) { idString += " OR "; } idString += "ID = " + idsToDelete[i].ToString(); } RunQueryWithNoReturnData("DELETE FROM Simulations WHERE " + idString); idString = ""; for (int i = 0; i < idsToDelete.Count; i++) { if (i > 0) { idString += " OR "; } idString += "SimulationID = " + idsToDelete[i].ToString(); } foreach (string tableName in TableNames) { // delete this simulation RunQueryWithNoReturnData("DELETE FROM " + tableName + " WHERE " + idString); } }
/// <summary>Remove all simulations from the database that don't exist in 'simulationsToKeep'</summary> /// <param name="simulationsToKeep">The simulations to keep.</param> /// <param name="simulationNamesToBeRun">The simulation names about to be run.</param> public void RemoveUnwantedSimulations(Simulations simulationsToKeep, List <string> simulationNamesToBeRun) { Open(forWriting: true); string[] simulationNamesToKeep = simulationsToKeep.FindAllSimulationNames(); // Tell SQLite that we're beginning a transaction. Connection.ExecuteNonQuery("BEGIN"); try { // Make sure that the list of simulations in 'simulationsToKeep' are in the // Simulations table. string[] simulationNames = this.SimulationNames; string sql = string.Empty; foreach (string simulationNameToKeep in simulationNamesToKeep) { if (!StringUtilities.Contains(simulationNames, simulationNameToKeep)) { if (sql != string.Empty) { sql += "),("; } sql += "'" + simulationNameToKeep + "'"; } } if (sql != string.Empty) { RunQueryWithNoReturnData("INSERT INTO [Simulations] (Name) VALUES (" + sql + ")"); } // Get a list of simulation IDs that we are to delete. List <int> idsToDelete = new List <int>(); foreach (string simulationNameInDB in SimulationNames) { if (!simulationNamesToKeep.Contains(simulationNameInDB)) { idsToDelete.Add(GetSimulationID(simulationNameInDB)); } } // create an SQL WHERE clause with all IDs string idString = ""; for (int i = 0; i < idsToDelete.Count; i++) { if (i > 0) { idString += " OR "; } idString += "ID = " + idsToDelete[i].ToString(); } if (idString != string.Empty) { RunQueryWithNoReturnData("DELETE FROM Simulations WHERE " + idString); } // Now add to IDs to delete the simulations IDs of the simulations we are // about to run i.e. remove the rows that we are about to regenerate. idsToDelete.Clear(); foreach (string simulationNameToBeRun in simulationNamesToBeRun) { idsToDelete.Add(GetSimulationID(simulationNameToBeRun)); } idString = ""; for (int i = 0; i < idsToDelete.Count; i++) { if (i > 0) { idString += " OR "; } idString += "SimulationID = " + idsToDelete[i].ToString(); } foreach (string tableName in TableNames) { // delete this simulation RunQueryWithNoReturnData("DELETE FROM " + tableName + " WHERE " + idString); } } finally { // Tell SQLite that we're ending a transaction. Connection.ExecuteNonQuery("END"); } }