Index: Ringtoets/Common/src/Ringtoets.Common.IO/HydraRing/HydraRingSettingsDatabaseReader.cs =================================================================== diff -u -r6ef5e439a6d9f40ebd9926251945e0935fbbc314 -rf8c28b3b04cdabb62ea37772efcb1f4ebbbf2b9e --- Ringtoets/Common/src/Ringtoets.Common.IO/HydraRing/HydraRingSettingsDatabaseReader.cs (.../HydraRingSettingsDatabaseReader.cs) (revision 6ef5e439a6d9f40ebd9926251945e0935fbbc314) +++ Ringtoets/Common/src/Ringtoets.Common.IO/HydraRing/HydraRingSettingsDatabaseReader.cs (.../HydraRingSettingsDatabaseReader.cs) (revision f8c28b3b04cdabb62ea37772efcb1f4ebbbf2b9e) @@ -31,6 +31,7 @@ using Ringtoets.Common.IO.Properties; using Ringtoets.HydraRing.Calculation.Data; using Ringtoets.HydraRing.Calculation.Data.Settings; +using Ringtoets.HydraRing.Calculation.Readers; namespace Ringtoets.Common.IO.HydraRing { @@ -66,10 +67,15 @@ private const string locationIdColumn = "LocationID"; - private readonly string designTableSettingsForLocationAndCalculationTypeQuery; - private readonly string numericSettingsForLocationMechanismAndSubMechanismQuery; + private const string minValueRunPreprocessorColumn = "MinValueRunPreprocessor"; + private const string maxValueRunPreprocessorColumn = "MaxValueRunPreprocessor"; + + private readonly string designTablesSettingsForLocationAndCalculationTypeQuery; + private readonly string numericsSettingsForLocationMechanismAndSubMechanismQuery; private readonly string excludedLocationsQuery; + private readonly string excludedPreprocessorLocationsQuery; private readonly string timeIntegrationSettingsForLocationAndCalculationTypeQuery; + private readonly string preprocessorSettingsForLocationQuery; /// /// Creates a new instance of . @@ -86,26 +92,36 @@ public HydraRingSettingsDatabaseReader(string databaseFilePath) : base(databaseFilePath) { - designTableSettingsForLocationAndCalculationTypeQuery = - $"SELECT {minColumn}, {maxColumn} " + - "FROM DesignTablesSettings " + - $"WHERE LocationID = {locationIdParameterName} AND CalculationTypeID = {calculationTypeIdParameterName}"; + designTablesSettingsForLocationAndCalculationTypeQuery = $"SELECT {minColumn}, {maxColumn} " + + "FROM DesignTablesSettings " + + $"WHERE LocationID = {locationIdParameterName} " + + $"AND CalculationTypeID = {calculationTypeIdParameterName}"; - numericSettingsForLocationMechanismAndSubMechanismQuery = - $"SELECT {calculationTechniqueIdColumn}, {formStartMethodColumn}, {formNumberOfIterationsColumn}, " + - $"{formRelaxationFactorColumn}, {formEpsBetaColumn}, {formEpsHohColumn}, {formEpsZFuncColumn}, " + - $"{dsStartMethodColumn}, {dsMinNumberOfIterationsColumn}, {dsMaxNumberOfIterationsColumn}, " + - $"{dsVarCoefficientColumn}, {niUMinColumn}, {niUMaxColumn}, {niNumberStepsColumn} " + - "FROM NumericsSettings " + - $"WHERE LocationID = {locationIdParameterName} AND MechanismID = {mechanismIdParameterName} AND SubMechanismID = {subMechanismIdParameterName}"; + numericsSettingsForLocationMechanismAndSubMechanismQuery = $"SELECT {calculationTechniqueIdColumn}, {formStartMethodColumn}, " + + $"{formNumberOfIterationsColumn}, {formRelaxationFactorColumn}, " + + $"{formEpsBetaColumn}, {formEpsHohColumn}, " + + $"{formEpsZFuncColumn}, {dsStartMethodColumn}, " + + $"{dsMinNumberOfIterationsColumn}, {dsMaxNumberOfIterationsColumn}, " + + $"{dsVarCoefficientColumn}, {niUMinColumn}, " + + $"{niUMaxColumn}, {niNumberStepsColumn} " + + "FROM NumericsSettings " + + $"WHERE LocationID = {locationIdParameterName} " + + $"AND MechanismID = {mechanismIdParameterName} " + + $"AND SubMechanismID = {subMechanismIdParameterName}"; - timeIntegrationSettingsForLocationAndCalculationTypeQuery = - $"SELECT {timeIntegrationSchemeIdColumn} " + - $"FROM TimeIntegrationSettings " + - $"WHERE LocationID = {locationIdParameterName} AND CalculationTypeID = {calculationTypeIdParameterName}"; + timeIntegrationSettingsForLocationAndCalculationTypeQuery = $"SELECT {timeIntegrationSchemeIdColumn} " + + "FROM TimeIntegrationSettings " + + $"WHERE LocationID = {locationIdParameterName} " + + $"AND CalculationTypeID = {calculationTypeIdParameterName}"; excludedLocationsQuery = $"SELECT {locationIdColumn} FROM ExcludedLocations"; + preprocessorSettingsForLocationQuery = $"SELECT {minValueRunPreprocessorColumn}, {maxValueRunPreprocessorColumn} " + + "FROM PreprocessorSettings " + + $"WHERE LocationID = {locationIdParameterName}"; + + excludedPreprocessorLocationsQuery = $"SELECT {locationIdColumn} FROM ExcludedLocationsPreprocessor"; + ValidateSchema(); } @@ -240,6 +256,51 @@ } /// + /// Read a preprocessor setting for a given location. + /// + /// The id of a hydraulic boundary location. + /// A new containing values read from the database. + /// Thrown when a column that is being read doesn't + /// contain expected type. + public ReadPreprocessorSetting ReadPreprocessorSetting(long locationId) + { + using (IDataReader reader = CreatePreprocessorSettingsDataReader(locationId)) + { + if (MoveNext(reader)) + { + try + { + return new ReadPreprocessorSetting( + reader.Read(minValueRunPreprocessorColumn), + reader.Read(maxValueRunPreprocessorColumn)); + } + catch (ConversionException) + { + throw new CriticalFileReadException(Resources.HydraRingSettingsDatabaseReader_ValidateSchema_Hydraulic_calculation_settings_database_has_invalid_schema); + } + } + } + return null; + } + + /// + /// Reads the excluded preprocessor locations (those for which no preprocessor calculation is possible) from the database. + /// + /// A of ids for all the excluded locations. + /// Thrown when a column that is being read doesn't + /// contain expected type. + public IEnumerable ReadExcludedPreprocessorLocations() + { + using (IDataReader reader = CreateExcludedPreprocessorLocationsDataReader()) + { + while (MoveNext(reader)) + { + yield return TryReadLocationIdColumn(reader); + } + } + } + + /// /// Tries to read the from the . /// /// The reader to read the column's value from. @@ -294,7 +355,7 @@ }; return CreateDataReader( - designTableSettingsForLocationAndCalculationTypeQuery, + designTablesSettingsForLocationAndCalculationTypeQuery, locationParameter, typeParameter); } @@ -323,7 +384,7 @@ }; return CreateDataReader( - numericSettingsForLocationMechanismAndSubMechanismQuery, + numericsSettingsForLocationMechanismAndSubMechanismQuery, locationParameter, mechanismIdParameter, subMechanismIdParameter); @@ -356,6 +417,25 @@ return CreateDataReader(excludedLocationsQuery); } + private IDataReader CreatePreprocessorSettingsDataReader(long locationId) + { + var locationParameter = new SQLiteParameter + { + DbType = DbType.Int64, + ParameterName = locationIdParameterName, + Value = locationId + }; + + return CreateDataReader( + preprocessorSettingsForLocationQuery, + locationParameter); + } + + private IDataReader CreateExcludedPreprocessorLocationsDataReader() + { + return CreateDataReader(excludedPreprocessorLocationsQuery); + } + private List> GetValidSchema() { using (var validSchemaConnection = new SQLiteConnection("Data Source=:memory:"))