// Copyright (C) Stichting Deltares 2017. All rights reserved.
//
// This file is part of Ringtoets.
//
// Ringtoets is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
// All names, logos, and references to "Deltares" are registered trademarks of
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
using System.Collections.ObjectModel;
using Application.Ringtoets.Migration.Core;
using Application.Ringtoets.Storage.TestUtil;
using Core.Common.TestUtil;
using NUnit.Framework;
namespace Application.Ringtoets.Storage.Test.IntegrationTests
{
public class MigrationTo181IntegrationTest
{
private const string newVersion = "18.1";
[Test]
public void Given173Project_WhenUpgradedTo181_ThenProjectAsExpected()
{
// Given
string sourceFilePath = TestHelper.GetTestDataPath(TestDataPath.Application.Ringtoets.Migration.Core,
"FullTestProject173.rtd");
var fromVersionedFile = new RingtoetsVersionedFile(sourceFilePath);
string targetFilePath = TestHelper.GetScratchPadPath(nameof(Given173Project_WhenUpgradedTo181_ThenProjectAsExpected));
string logFilePath = TestHelper.GetScratchPadPath(string.Concat(nameof(Given173Project_WhenUpgradedTo181_ThenProjectAsExpected), ".log"));
var migrator = new RingtoetsSqLiteDatabaseFileMigrator
{
LogPath = logFilePath
};
using (new FileDisposeHelper(logFilePath))
using (new FileDisposeHelper(targetFilePath))
{
// When
migrator.Migrate(fromVersionedFile, newVersion, targetFilePath);
// Then
using (var reader = new MigratedDatabaseReader(targetFilePath))
{
AssertTablesContentMigrated(reader, sourceFilePath);
AssertVersions(reader);
AssertDatabase(reader);
AssertHydraulicBoundaryLocations(reader, sourceFilePath);
AssertPipingSoilLayers(reader);
AssertHydraRingPreprocessor(reader);
AssertStabilityStoneCoverFailureMechanism(reader);
AssertMacroStabilityOutwardsFailureMechanism(reader);
AssertPipingStructureFailureMechanism(reader);
AssertWaveImpactAsphaltCoverFailureMechanism(reader);
}
AssertLogDatabase(logFilePath);
}
}
private static void AssertTablesContentMigrated(MigratedDatabaseReader reader, string sourceFilePath)
{
var tables = new[]
{
"AssessmentSectionEntity",
"BackgroundDataEntity",
"BackgroundDataMetaEntity",
"CalculationGroupEntity",
"ClosingStructureEntity",
"ClosingStructuresCalculationEntity",
"ClosingStructuresFailureMechanismMetaEntity",
"ClosingStructuresOutputEntity",
"ClosingStructuresSectionResultEntity",
"DikeProfileEntity",
"DuneErosionFailureMechanismMetaEntity",
"DuneErosionSectionResultEntity",
"DuneLocationEntity",
"DuneLocationOutputEntity",
"FailureMechanismEntity",
"FailureMechanismSectionEntity",
"FaultTreeIllustrationPointEntity",
"FaultTreeIllustrationPointStochastEntity",
"FaultTreeSubmechanismIllustrationPointEntity",
"ForeshoreProfileEntity",
"GeneralResultFaultTreeIllustrationPointEntity",
"GeneralResultFaultTreeIllustrationPointStochastEntity",
"GeneralResultSubMechanismIllustrationPointEntity",
"GeneralResultSubMechanismIllustrationPointStochastEntity",
"GrassCoverErosionInwardsCalculationEntity",
"GrassCoverErosionInwardsDikeHeightOutputEntity",
"GrassCoverErosionInwardsFailureMechanismMetaEntity",
"GrassCoverErosionInwardsOutputEntity",
"GrassCoverErosionInwardsOvertoppingRateOutputEntity",
"GrassCoverErosionInwardsSectionResultEntity",
"GrassCoverErosionOutwardsFailureMechanismMetaEntity",
"GrassCoverErosionOutwardsHydraulicLocationEntity",
"GrassCoverErosionOutwardsHydraulicLocationOutputEntity",
"GrassCoverErosionOutwardsSectionResultEntity",
"GrassCoverErosionOutwardsWaveConditionsCalculationEntity",
"GrassCoverErosionOutwardsWaveConditionsOutputEntity",
"GrassCoverSlipOffInwardsSectionResultEntity",
"GrassCoverSlipOffOutwardsSectionResultEntity",
"HeightStructureEntity",
"HeightStructuresCalculationEntity",
"HeightStructuresFailureMechanismMetaEntity",
"HeightStructuresOutputEntity",
"HeightStructuresSectionResultEntity",
"HydraRingPreprocessorEntity",
"HydraulicLocationEntity",
"HydraulicLocationOutputEntity",
"IllustrationPointResultEntity",
"MacroStabilityInwardsCalculationEntity",
"MacroStabilityInwardsCalculationOutputEntity",
"MacroStabilityInwardsCharacteristicPointEntity",
"MacroStabilityInwardsFailureMechanismMetaEntity",
"MacroStabilityInwardsPreconsolidationStressEntity",
"MacroStabilityInwardsSectionResultEntity",
"MacroStabilityInwardsSemiProbabilisticOutputEntity",
"MacroStabilityInwardsSoilLayerOneDEntity",
"MacroStabilityInwardsSoilLayerTwoDEntity",
"MacroStabilityInwardsSoilProfileOneDEntity",
"MacroStabilityInwardsSoilProfileTwoDEntity",
"MacroStabilityInwardsSoilProfileTwoDSoilLayerTwoDEntity",
"MacroStabilityInwardsStochasticSoilProfileEntity",
"MacroStabilityOutwardsSectionResultEntity",
"MicrostabilitySectionResultEntity",
"PipingCalculationEntity",
"PipingCalculationOutputEntity",
"PipingCharacteristicPointEntity",
"PipingFailureMechanismMetaEntity",
"PipingSectionResultEntity",
"PipingSemiProbabilisticOutputEntity",
"PipingSoilLayerEntity",
"PipingSoilProfileEntity",
"PipingStochasticSoilProfileEntity",
"PipingStructureSectionResultEntity",
"ProjectEntity",
"StabilityPointStructureEntity",
"StabilityPointStructuresCalculationEntity",
"StabilityPointStructuresFailureMechanismMetaEntity",
"StabilityPointStructuresOutputEntity",
"StabilityPointStructuresSectionResultEntity",
"StabilityStoneCoverSectionResultEntity",
"StabilityStoneCoverWaveConditionsCalculationEntity",
"StabilityStoneCoverWaveConditionsOutputEntity",
"StochastEntity",
"StochasticSoilModelEntity",
"StrengthStabilityLengthwiseConstructionSectionResultEntity",
"SubMechanismIllustrationPointEntity",
"SubMechanismIllustrationPointStochastEntity",
"SurfaceLineEntity",
"TechnicalInnovationSectionResultEntity",
"TopLevelFaultTreeIllustrationPointEntity",
"TopLevelSubMechanismIllustrationPointEntity",
"VersionEntity",
"WaterPressureAsphaltCoverSectionResultEntity",
"WaveImpactAsphaltCoverFailureMechanismMetaEntity",
"WaveImpactAsphaltCoverSectionResultEntity",
"WaveImpactAsphaltCoverWaveConditionsCalculationEntity",
"WaveImpactAsphaltCoverWaveConditionsOutputEntity"
};
foreach (string table in tables)
{
string validateMigratedTable =
$"ATTACH DATABASE \"{sourceFilePath}\" AS SOURCEPROJECT; " +
$"SELECT COUNT() = (SELECT COUNT() FROM [SOURCEPROJECT].{table}) " +
$"FROM {table};" +
"DETACH SOURCEPROJECT;";
reader.AssertReturnedDataIsValid(validateMigratedTable);
}
}
private static void AssertLogDatabase(string logFilePath)
{
using (var reader = new MigrationLogDatabaseReader(logFilePath))
{
ReadOnlyCollection messages = reader.GetMigrationLogMessages();
Assert.AreEqual(10, messages.Count);
var i = 0;
MigrationLogTestHelper.AssertMigrationLogMessageEqual(
new MigrationLogMessage("17.3", newVersion, "Gevolgen van de migratie van versie 17.3 naar versie 18.1:"),
messages[i++]);
MigrationLogTestHelper.AssertMigrationLogMessageEqual(
new MigrationLogMessage("17.3", newVersion, "* Traject: 'PipingSoilLayer'"),
messages[i++]);
MigrationLogTestHelper.AssertMigrationLogMessageEqual(
new MigrationLogMessage("17.3", newVersion, " + Toetsspoor: 'Piping'"),
messages[i++]);
MigrationLogTestHelper.AssertMigrationLogMessageEqual(
new MigrationLogMessage("17.3", newVersion, " - De waarde '-0.125' voor de variatiecoëfficiënt van parameter 'd70' van ondergrondlaag 'DiameterD70Variation' is ongeldig en is veranderd naar NaN."),
messages[i++]);
MigrationLogTestHelper.AssertMigrationLogMessageEqual(
new MigrationLogMessage("17.3", newVersion, " - De waarde '-1.0' voor het gemiddelde van parameter 'Doorlatendheid' van ondergrondlaag 'PermeabilityMean' is ongeldig en is veranderd naar NaN."),
messages[i++]);
MigrationLogTestHelper.AssertMigrationLogMessageEqual(
new MigrationLogMessage("17.3", newVersion, " - De waarde '-1.0e-06' voor het gemiddelde van parameter 'd70' van ondergrondlaag 'DiameterD70Mean' is ongeldig en is veranderd naar NaN."),
messages[i++]);
MigrationLogTestHelper.AssertMigrationLogMessageEqual(
new MigrationLogMessage("17.3", newVersion, " - De waarde '-10.0' voor de standaardafwijking van parameter 'Verzadigd gewicht' van ondergrondlaag 'BelowPhreaticLevelDeviation' is ongeldig en is veranderd naar NaN."),
messages[i++]);
MigrationLogTestHelper.AssertMigrationLogMessageEqual(
new MigrationLogMessage("17.3", newVersion, " - De waarde '-10.0' voor de variatiecoëfficiënt van parameter 'Doorlatendheid' van ondergrondlaag 'PermeabilityVariation' is ongeldig en is veranderd naar NaN."),
messages[i++]);
MigrationLogTestHelper.AssertMigrationLogMessageEqual(
new MigrationLogMessage("17.3", newVersion, " - De waarde '0.0' voor het gemiddelde van parameter 'Verzadigd gewicht' van ondergrondlaag 'BelowPhreaticLevelMean' is ongeldig en is veranderd naar NaN."),
messages[i++]);
MigrationLogTestHelper.AssertMigrationLogMessageEqual(
new MigrationLogMessage("17.3", newVersion, " - De waarde '15.0' voor de verschuiving van parameter 'Verzadigd gewicht' van ondergrondlaag 'BelowPhreaticLevelShift' is ongeldig en is veranderd naar NaN."),
messages[i]);
}
}
private static void AssertVersions(MigratedDatabaseReader reader)
{
const string validateVersion =
"SELECT COUNT() = 1 " +
"FROM [VersionEntity] " +
"WHERE [Version] = \"18.1\";";
reader.AssertReturnedDataIsValid(validateVersion);
}
private static void AssertDatabase(MigratedDatabaseReader reader)
{
const string validateForeignKeys =
"PRAGMA foreign_keys;";
reader.AssertReturnedDataIsValid(validateForeignKeys);
}
private static void AssertHydraRingPreprocessor(MigratedDatabaseReader reader)
{
const string validatePreprocessorSettings =
"SELECT COUNT() = 0 " +
"FROM [HydraRingPreprocessorEntity];";
reader.AssertReturnedDataIsValid(validatePreprocessorSettings);
}
private static void AssertPipingSoilLayers(MigratedDatabaseReader reader)
{
const string validateBelowPhreaticLevel =
"SELECT COUNT() = 0 " +
"FROM PipingSoilLayerEntity " +
"WHERE [BelowPhreaticLevelMean] < [BelowPhreaticLevelShift] " +
"OR [BelowPhreaticLevelMean] <= 0 " +
"OR [BelowPhreaticLevelDeviation] < 0;";
reader.AssertReturnedDataIsValid(validateBelowPhreaticLevel);
const string validateDiameter70 =
"SELECT COUNT() = 0 " +
"FROM PipingSoilLayerEntity " +
"WHERE [DiameterD70Mean] <= 0 " +
"OR [DiameterD70CoefficientOfVariation] < 0;";
reader.AssertReturnedDataIsValid(validateDiameter70);
const string validatePermeability =
"SELECT COUNT() = 0 " +
"FROM PipingSoilLayerEntity " +
"WHERE [PermeabilityMean] <= 0 " +
"OR [PermeabilityCoefficientOfVariation] < 0;";
reader.AssertReturnedDataIsValid(validatePermeability);
}
private static void AssertStabilityStoneCoverFailureMechanism(MigratedDatabaseReader reader)
{
const string validateStabilityStoneCoverFailureMechanism =
"SELECT COUNT() = 0 " +
"FROM [StabilityStoneCoverFailureMechanismMetaEntity] " +
"WHERE [N] IS NOT 4;";
reader.AssertReturnedDataIsValid(validateStabilityStoneCoverFailureMechanism);
}
private static void AssertMacroStabilityOutwardsFailureMechanism(MigratedDatabaseReader reader)
{
const string validateMacroStabilityOutwardsFailureMechanisms =
"SELECT COUNT() = (SELECT COUNT() FROM FailureMechanismEntity WHERE FailureMechanismType = 13) " +
"FROM [MacroStabilityOutwardsFailureMechanismMetaEntity] " +
"WHERE [A] = 0.033 " +
"AND [FailureMechanismEntityId] IN " +
"(SELECT [FailureMechanismEntityId] FROM [FailureMechanismEntity] WHERE [FailureMechanismType] = 13);";
reader.AssertReturnedDataIsValid(validateMacroStabilityOutwardsFailureMechanisms);
}
private static void AssertPipingStructureFailureMechanism(MigratedDatabaseReader reader)
{
const string validatePipingStructureFailureMechanisms =
"SELECT COUNT() = (SELECT COUNT() FROM FailureMechanismEntity WHERE FailureMechanismType = 11) " +
"FROM [PipingStructureFailureMechanismMetaEntity] " +
"WHERE [N] = 1.0 " +
"AND [FailureMechanismEntityId] IN " +
"(SELECT [FailureMechanismEntityId] FROM [FailureMechanismEntity] WHERE [FailureMechanismType] = 11);";
reader.AssertReturnedDataIsValid(validatePipingStructureFailureMechanisms);
}
private static void AssertWaveImpactAsphaltCoverFailureMechanism(MigratedDatabaseReader reader)
{
const string validateWaveImpactAsphaltCoverFailureMechanism =
"SELECT COUNT() = 0 " +
"FROM [WaveImpactAsphaltCoverFailureMechanismMetaEntity] " +
"WHERE [DeltaL] IS NOT 1000;";
reader.AssertReturnedDataIsValid(validateWaveImpactAsphaltCoverFailureMechanism);
}
#region Migrated Hydraulic Boundary Locations
private static void AssertHydraulicBoundaryLocations(MigratedDatabaseReader reader, string sourceFilePath)
{
string validateHydraulicBoundaryLocationEntities =
$"ATTACH DATABASE \"{sourceFilePath}\" AS SOURCEPROJECT; " +
"SELECT COUNT() = (SELECT COUNT() FROM [SOURCEPROJECT].HydraulicLocationEntity) " +
"FROM HydraulicLocationEntity NEW " +
"JOIN [SOURCEPROJECT].HydraulicLocationEntity OLD USING(HydraulicLocationEntityId) " +
"WHERE NEW.AssessmentSectionEntityId = OLD.AssessmentSectionEntityId " +
"AND NEW.LocationId = OLD.LocationId " +
"AND NEW.Name = OLD.Name " +
"AND NEW.LocationX IS OLD.LocationX " +
"AND NEW.LocationY IS OLD.LocationY;" +
"DETACH DATABASE SOURCEPROJECT;";
reader.AssertReturnedDataIsValid(validateHydraulicBoundaryLocationEntities);
string validateNrOfHydraulicBoundaryCalculationEntities =
$"ATTACH DATABASE \"{sourceFilePath}\" AS SOURCEPROJECT; " +
"SELECT COUNT() = (SELECT COUNT() * 8 FROM [SOURCEPROJECT].HydraulicLocationEntity) " +
"FROM HydraulicLocationCalculationEntity; " +
"DETACH DATABASE SOURCEPROJECT;";
reader.AssertReturnedDataIsValid(validateNrOfHydraulicBoundaryCalculationEntities);
string validateNrOfHydraulicBoundaryCalculationOutputEntities =
$"ATTACH DATABASE \"{sourceFilePath}\" AS SOURCEPROJECT; " +
"SELECT " +
"COUNT() = (SELECT COUNT() FROM [SOURCEPROJECT].HydraulicLocationOutputEntity) " +
"FROM HydraulicLocationOutputEntity NEW " +
"JOIN [SOURCEPROJECT].HydraulicLocationOutputEntity OLD ON NEW.HydraulicLocationOutputEntityId = OLD.HydraulicLocationEntityOutputId " +
"WHERE NEW.GeneralResultSubMechanismIllustrationPointEntityId IS OLD.GeneralResultSubMechanismIllustrationPointEntityId " +
"AND NEW.Result IS OLD.Result " +
"AND NEW.TargetProbability IS OLD.TargetProbability " +
"AND NEW.TargetReliability IS OLD.TargetReliability " +
"AND NEW.CalculatedProbability IS OLD.CalculatedProbability " +
"AND NEW.CalculatedReliability IS OLD.CalculatedReliability " +
"AND NEW.CalculationConvergence IS OLD.CalculationConvergence; " +
"DETACH DATABASE SOURCEPROJECT;";
reader.AssertReturnedDataIsValid(validateNrOfHydraulicBoundaryCalculationOutputEntities);
var queryGenerator = new HydraulicLocationValidationQueryGenerator(sourceFilePath);
AssertDesignWaterLevelCalculations(reader, queryGenerator);
AssertWaveHeightCalculations(reader, queryGenerator);
AssertMigratedHydraulicLocationCalculationOutputs(reader, queryGenerator);
}
private static void AssertMigratedHydraulicLocationCalculationOutputs(MigratedDatabaseReader reader,
HydraulicLocationValidationQueryGenerator queryGenerator)
{
const string validateOutputNewCalculations =
"SELECT COUNT() = 0 " +
"FROM HydraulicLocationEntity hl " +
"JOIN HydraulicLocationCalculationEntity calc1 ON calc1.HydraulicLocationCalculationEntityId = hl.HydraulicLocationCalculationEntity1Id " +
"JOIN HydraulicLocationCalculationEntity calc4 ON calc4.HydraulicLocationCalculationEntityId = hl.HydraulicLocationCalculationEntity4Id " +
"JOIN HydraulicLocationCalculationEntity calc5 ON calc5.HydraulicLocationCalculationEntityId = hl.HydraulicLocationCalculationEntity5Id " +
"JOIN HydraulicLocationCalculationEntity calc8 ON calc8.HydraulicLocationCalculationEntityId = hl.HydraulicLocationCalculationEntity8Id " +
"JOIN HydraulicLocationOutputEntity USING(HydraulicLocationCalculationEntityId);";
reader.AssertReturnedDataIsValid(validateOutputNewCalculations);
string validateDesignWaterLevelCalculationsWithSignalingNormOutput =
queryGenerator.GetOutputValidationQuery(HydraulicLocationValidationQueryGenerator.NormativeNormType.SignalingNorm,
HydraulicLocationValidationQueryGenerator.HydraulicLocationOutputType.DesignWaterLevel,
2);
reader.AssertReturnedDataIsValid(validateDesignWaterLevelCalculationsWithSignalingNormOutput);
string validateDesignWaterLevelCalculationsWithLowerLimitNormOutput =
queryGenerator.GetOutputValidationQuery(HydraulicLocationValidationQueryGenerator.NormativeNormType.LowerLimitNorm,
HydraulicLocationValidationQueryGenerator.HydraulicLocationOutputType.DesignWaterLevel,
3);
reader.AssertReturnedDataIsValid(validateDesignWaterLevelCalculationsWithLowerLimitNormOutput);
string validateWaveHeightCalculationsWithSignalingNormOutput =
queryGenerator.GetOutputValidationQuery(HydraulicLocationValidationQueryGenerator.NormativeNormType.SignalingNorm,
HydraulicLocationValidationQueryGenerator.HydraulicLocationOutputType.WaveHeight,
6);
reader.AssertReturnedDataIsValid(validateWaveHeightCalculationsWithSignalingNormOutput);
string validateWaveHeightCalculationsWithLowerLimitNormOutput =
queryGenerator.GetOutputValidationQuery(HydraulicLocationValidationQueryGenerator.NormativeNormType.LowerLimitNorm,
HydraulicLocationValidationQueryGenerator.HydraulicLocationOutputType.WaveHeight,
7);
reader.AssertReturnedDataIsValid(validateWaveHeightCalculationsWithLowerLimitNormOutput);
}
private static void AssertDesignWaterLevelCalculations(MigratedDatabaseReader reader,
HydraulicLocationValidationQueryGenerator queryGenerator)
{
string validateCalculation1Entities =
queryGenerator.GetNewCalculationsValidationQuery(1);
reader.AssertReturnedDataIsValid(validateCalculation1Entities);
string validateDesignWaterLevelCalculationsWithSignalingNorm =
queryGenerator.GetDesignWaterLevelCalculationValidationQuery(
HydraulicLocationValidationQueryGenerator.NormativeNormType.SignalingNorm,
2);
reader.AssertReturnedDataIsValid(validateDesignWaterLevelCalculationsWithSignalingNorm);
string validateDesignWaterLevelCalculationsWithLowerLimitNorm =
queryGenerator.GetDesignWaterLevelCalculationValidationQuery(
HydraulicLocationValidationQueryGenerator.NormativeNormType.LowerLimitNorm,
3);
reader.AssertReturnedDataIsValid(validateDesignWaterLevelCalculationsWithLowerLimitNorm);
string validateCalculation4Entities = queryGenerator.GetNewCalculationsValidationQuery(4);
reader.AssertReturnedDataIsValid(validateCalculation4Entities);
}
private static void AssertWaveHeightCalculations(MigratedDatabaseReader reader,
HydraulicLocationValidationQueryGenerator queryGenerator)
{
string validateCalculation5Entities =
queryGenerator.GetNewCalculationsValidationQuery(5);
reader.AssertReturnedDataIsValid(validateCalculation5Entities);
string validateWaveHeightCalculationsWithSignalingNorm =
queryGenerator.GetWaveHeightCalculationValidationQuery(
HydraulicLocationValidationQueryGenerator.NormativeNormType.SignalingNorm,
6);
reader.AssertReturnedDataIsValid(validateWaveHeightCalculationsWithSignalingNorm);
string validateWaveHeightCalculationsWithLowerLimitNorm =
queryGenerator.GetWaveHeightCalculationValidationQuery(
HydraulicLocationValidationQueryGenerator.NormativeNormType.LowerLimitNorm,
7);
reader.AssertReturnedDataIsValid(validateWaveHeightCalculationsWithLowerLimitNorm);
string validateCalculation8Entities = queryGenerator.GetNewCalculationsValidationQuery(8);
reader.AssertReturnedDataIsValid(validateCalculation8Entities);
}
///
/// Class to generate queries which can be used if the hydraulic boundary locations
/// are correctly migrated.
///
private class HydraulicLocationValidationQueryGenerator
{
private readonly string sourceFilePath;
///
/// Enum to indicate the hydraulic location output types.
///
public enum HydraulicLocationOutputType
{
///
/// Represents an output for a design water level
/// calculation.
///
DesignWaterLevel = 1,
///
/// Represents an output for a wave height calculation.
///
WaveHeight = 2
}
///
/// Enum to indicate the norm which was used.
///
public enum NormativeNormType
{
///
/// Represents the lower limit norm.
///
LowerLimitNorm = 1,
///
/// Represents the signaling norm.
///
SignalingNorm = 2
}
///
/// Creates a new instance of .
///
/// The file path of the database to be verified.
public HydraulicLocationValidationQueryGenerator(string sourceFilePath)
{
this.sourceFilePath = sourceFilePath;
}
///
/// Generates a query to validate the migrated hydraulic boundary location output.
///
/// The on which the output was calculated for.
/// The which the output represents.
/// The calculation on which the outputs should be set.
/// The query to validate the migrated hydraulic boundary location output.
public string GetOutputValidationQuery(NormativeNormType normType,
HydraulicLocationOutputType outputType,
int calculationEntityNumber)
{
return $"ATTACH DATABASE \"{sourceFilePath}\" AS SOURCEPROJECT;" +
"SELECT COUNT() = " +
"( " +
"SELECT COUNT() " +
"FROM [SOURCEPROJECT].HydraulicLocationOutputEntity " +
"JOIN [SOURCEPROJECT].HydraulicLocationEntity USING (HydraulicLocationEntityId) " +
"JOIN [SOURCEPROJECT].AssessmentSectionEntity USING (AssessmentSectionEntityId) " +
$"WHERE NormativeNormType = {(int) normType} AND HydraulicLocationOutputType = {(int) outputType} " +
") " +
"FROM HydraulicLocationEntity NEWHL " +
$"JOIN HydraulicLocationCalculationEntity calc ON calc.HydraulicLocationCalculationEntityId = NEWHL.HydraulicLocationCalculationEntity{calculationEntityNumber}Id " +
"JOIN HydraulicLocationOutputEntity NEW USING(HydraulicLocationCalculationEntityId) " +
"JOIN [SOURCEPROJECT].HydraulicLocationOutputEntity OLD ON NEW.HydraulicLocationOutputEntityId = OLD.HydraulicLocationEntityOutputId " +
"WHERE OLD.HydraulicLocationEntityId = NEWHL.HydraulicLocationEntityId;" +
"DETACH DATABASE SOURCEPROJECT;";
}
///
/// Generates a query to validate the migrated wave height calculations.
///
/// The for which the input was set.
/// The calculation on which the input should be validated.
/// The query to validate the migrated hydraulic boundary location calculation input.
public string GetWaveHeightCalculationValidationQuery(NormativeNormType normType,
int calculationEntityNumber)
{
return $"ATTACH DATABASE \"{sourceFilePath}\" AS SOURCEPROJECT; " +
"SELECT COUNT() = " +
"( " +
"SELECT COUNT() " +
"FROM [SOURCEPROJECT].HydraulicLocationEntity " +
"JOIN [SOURCEPROJECT].AssessmentSectionEntity USING (AssessmentSectionEntityId) " +
$"WHERE NormativeNormType = {(int) normType} " +
") " +
"FROM HydraulicLocationEntity AS NEW " +
"JOIN [SOURCEPROJECT].HydraulicLocationEntity AS OLD ON OLD.HydraulicLocationEntityId = NEW.HydraulicLocationEntityId " +
$"JOIN HydraulicLocationCalculationEntity hlce ON NEW.HydraulicLocationCalculationEntity{calculationEntityNumber}Id = hlce.HydraulicLocationCalculationEntityId " +
"JOIN AssessmentSectionEntity USING (AssessmentSectionEntityId) " +
$"WHERE hlce.ShouldIllustrationPointsBeCalculated = OLD.ShouldWaveHeightIllustrationPointsBeCalculated AND NormativeNormType = {(int) normType};" +
"DETACH DATABASE SOURCEPROJECT;";
}
///
/// Generates a query to validate the migrated design water level calculations.
///
/// The for which the input was set.
/// The calculation on which the input should be validated.
/// The query to validate the migrated hydraulic boundary location calculation input.
public string GetDesignWaterLevelCalculationValidationQuery(NormativeNormType normType,
int calculationEntityNumber)
{
return $"ATTACH DATABASE \"{sourceFilePath}\" AS SOURCEPROJECT; " +
"SELECT COUNT() = " +
"( " +
"SELECT COUNT() " +
"FROM [SOURCEPROJECT].HydraulicLocationEntity " +
"JOIN [SOURCEPROJECT].AssessmentSectionEntity USING (AssessmentSectionEntityId) " +
$"WHERE NormativeNormType = {(int) normType} " +
") " +
"FROM HydraulicLocationEntity AS NEW " +
"JOIN [SOURCEPROJECT].HydraulicLocationEntity AS OLD ON OLD.HydraulicLocationEntityId = NEW.HydraulicLocationEntityId " +
$"JOIN HydraulicLocationCalculationEntity hlce ON NEW.HydraulicLocationCalculationEntity{calculationEntityNumber}Id = hlce.HydraulicLocationCalculationEntityId " +
"JOIN AssessmentSectionEntity USING (AssessmentSectionEntityId) " +
$"WHERE hlce.ShouldIllustrationPointsBeCalculated = OLD.ShouldDesignWaterLevelIllustrationPointsBeCalculated AND NormativeNormType = {(int) normType};" +
"DETACH DATABASE SOURCEPROJECT;";
}
///
/// Generates a query to validate the new hydraulic boundary location calculations that are not based on migrated data.
///
/// The calculation on which the input should be validated.
/// The query to validate the migrated hydraulic boundary location calculation input.
public string GetNewCalculationsValidationQuery(int calculationEntityNumber)
{
return $"ATTACH DATABASE \"{sourceFilePath}\" AS SOURCEPROJECT; " +
"SELECT COUNT() = (SELECT COUNT() FROM [SOURCEPROJECT].HydraulicLocationEntity) " +
"FROM HydraulicLocationEntity AS NEW " +
$"JOIN HydraulicLocationCalculationEntity hlce ON NEW.HydraulicLocationCalculationEntity{calculationEntityNumber}Id = hlce.HydraulicLocationCalculationEntityId " +
"WHERE hlce.ShouldIllustrationPointsBeCalculated = 0;" +
"DETACH DATABASE SOURCEPROJECT;";
}
}
#endregion
}
}