public void GetSoilModelNamesUniqueQuery_ReturnsExpectedValues()
        {
            // Call
            string query = SoilDatabaseQueryBuilder.GetSoilModelNamesUniqueQuery();

            // Assert
            const string expectedQuery =
                "SELECT [All].nameCount == [Distinct].nameCount AS AreSegmentsUnique " +
                "FROM (SELECT COUNT(SSM_Name) nameCount FROM StochasticSoilModel) AS [All] " +
                "JOIN (SELECT COUNT(DISTINCT SSM_Name) nameCount FROM StochasticSoilModel) AS [Distinct];";

            Assert.AreEqual(expectedQuery, query);
        }
        public void GetStochasticSoilProfileProbabilitiesDefinedQuery_ReturnsExpectedValues()
        {
            // Call
            string query = SoilDatabaseQueryBuilder.GetStochasticSoilProfileProbabilitiesValidQuery();

            // Assert
            const string expectedQuery =
                "SELECT COUNT(Probability) == 0 AS AllProbabilitiesValid " +
                "FROM StochasticSoilProfile " +
                "WHERE Probability NOT BETWEEN 0 AND 1 OR Probability ISNULL;";

            Assert.AreEqual(expectedQuery, query);
        }
        public void GetStochasticSoilModelOfMechanismCountQuery_ReturnsExpectedValues()
        {
            // Call
            string query = SoilDatabaseQueryBuilder.GetStochasticSoilModelOfMechanismCountQuery();

            // Assert
            const string expectedQuery =
                "SELECT COUNT() AS nrOfRows " +
                "FROM StochasticSoilModel SSM " +
                "INNER JOIN Segment S USING(SSM_ID) " +
                "INNER JOIN Mechanism M USING(ME_ID);";

            Assert.AreEqual(expectedQuery, query);
        }
        public void GetCheckVersionQuery_ReturnsExpectedValues()
        {
            // Call
            string query = SoilDatabaseQueryBuilder.GetCheckVersionQuery();

            // Assert
            const string expectedQuery =
                "SELECT Value " +
                "FROM _MetaData " +
                "WHERE Key = 'VERSION' " +
                "AND Value = @Value;";

            Assert.AreEqual(expectedQuery, query);
        }
        public void GetSegmentPointsQuery_ReturnsExpectedValues()
        {
            // Call
            string query = SoilDatabaseQueryBuilder.GetSegmentPointsQuery();

            // Assert
            const string expectedQuery =
                "SELECT SSM.SSM_ID, SSM.SSM_Name, SP.XWorld, SP.YWorld " +
                "FROM Segment S " +
                "INNER JOIN StochasticSoilModel SSM USING(SSM_ID) " +
                "INNER JOIN SegmentPoints SP USING(SE_ID) " +
                "ORDER BY SSM.SSM_ID;";

            Assert.AreEqual(expectedQuery, query);
        }
        public void GetStochasticSoilModelPerMechanismQuery_ReturnsExpectedValues()
        {
            // Call
            string query = SoilDatabaseQueryBuilder.GetStochasticSoilModelPerMechanismQuery();

            // Assert
            const string expectedQuery =
                "SELECT SSM.SSM_ID, M.ME_ID, M.ME_Name, SSM.SSM_Name, SSP.Probability, SSP.SP1D_ID, SSP.SP2D_ID " +
                "FROM Mechanism M " +
                "INNER JOIN Segment S USING(ME_ID) " +
                "INNER JOIN StochasticSoilModel SSM USING(SSM_ID) " +
                "LEFT JOIN StochasticSoilProfile SSP USING(SSM_ID) " +
                "ORDER BY SSM.SSM_ID;";

            Assert.AreEqual(expectedQuery, query);
        }
        public void GetSoilProfile2DPreconsolidationStressesQuery_ReturnsExpectedValues()
        {
            // Call
            string query = SoilDatabaseQueryBuilder.GetSoilProfile2DPreconsolidationStressesQuery();

            // Assert
            const string expectedQuery =
                "SELECT " +
                "sp2d.SP2D_Name AS ProfileName, " +
                "SP2D_ID AS SoilProfileId, " +
                "ps.X AS PreconsolidationStressXCoordinate, " +
                "ps.Z AS PreconsolidationStressZCoordinate, " +
                "s.ST_Dist_Type AS PreconsolidationStressDistributionType, " +
                "s.ST_Mean AS PreconsolidationStressMean, " +
                "s.ST_Variation AS PreconsolidationStressCoefficientOfVariation, " +
                "s.ST_Shift AS PreconsolidationStressShift " +
                "FROM PreconsolidationStresses AS ps " +
                "JOIN SoilProfile2D AS sp2d USING(SP2D_ID) " +
                "LEFT JOIN Stochast AS s USING(ST_ID) " +
                "ORDER BY SP2D_ID;";

            Assert.AreEqual(expectedQuery, query);
        }
        public void GetSoilProfile2DQuery_ReturnsExpectedValues()
        {
            // Call
            string query = SoilDatabaseQueryBuilder.GetSoilProfile2DQuery();

            // Assert
            const string expectedQuery =
                "SELECT sp2d.SP2D_Name AS ProfileName, " +
                "sl2d.GeometrySurface AS LayerGeometry, " +
                "mpl.X AS IntersectionX, " +
                "MaterialName, " +
                "IsAquifer, " +
                "Color, " +
                "BelowPhreaticLevelDistributionType, " +
                "BelowPhreaticLevelShift, " +
                "BelowPhreaticLevelMean, " +
                "BelowPhreaticLevelDeviation, " +
                "BelowPhreaticLevelCoefficientOfVariation, " +
                "DiameterD70DistributionType, " +
                "DiameterD70Shift, " +
                "DiameterD70Mean, " +
                "DiameterD70CoefficientOfVariation, " +
                "PermeabKxDistributionType, " +
                "PermeabKxShift, " +
                "PermeabKxMean, " +
                "PermeabKxCoefficientOfVariation, " +
                "UsePOP, " +
                "ShearStrengthModel, " +
                "AbovePhreaticLevelDistributionType, " +
                "AbovePhreaticLevelMean, " +
                "AbovePhreaticLevelCoefficientOfVariation, " +
                "AbovePhreaticLevelShift, " +
                "CohesionDistributionType, " +
                "CohesionMean, " +
                "CohesionCoefficientOfVariation, " +
                "CohesionShift, " +
                "FrictionAngleDistributionType, " +
                "FrictionAngleMean, " +
                "FrictionAngleCoefficientOfVariation, " +
                "FrictionAngleShift, " +
                "ShearStrengthRatioDistributionType, " +
                "ShearStrengthRatioMean, " +
                "ShearStrengthRatioCoefficientOfVariation, " +
                "ShearStrengthRatioShift, " +
                "StrengthIncreaseExponentDistributionType, " +
                "StrengthIncreaseExponentMean, " +
                "StrengthIncreaseExponentCoefficientOfVariation, " +
                "StrengthIncreaseExponentShift, " +
                "PopDistributionType, " +
                "PopMean, " +
                "PopCoefficientOfVariation, " +
                "PopShift, " +
                "sp2d.SP2D_ID AS SoilProfileId, " +
                "(" +
                "SELECT " +
                "COUNT(*) " +
                "FROM SoilLayer2D WHERE SoilLayer2D.SP2D_ID = sp2d.SP2D_ID) AS LayerCount " +
                "FROM Mechanism AS m " +
                "JOIN Segment AS segment USING(ME_ID) " +
                "JOIN " +
                "(" +
                "SELECT SSM_ID, SP2D_ID " +
                "FROM StochasticSoilProfile " +
                "GROUP BY SSM_ID, SP2D_ID" +
                ") ssp USING(SSM_ID) " +
                "JOIN SoilProfile2D sp2d USING(SP2D_ID) " +
                "LEFT JOIN SoilLayer2D sl2d USING(SP2D_ID) " +
                "LEFT JOIN MechanismPointLocation mpl USING(ME_ID, SP2D_ID) " +
                "LEFT JOIN " +
                "(" +
                "SELECT " +
                "mat.MA_ID, mat.MA_Name AS MaterialName, " +
                "max(case when pn.PN_Name = 'Color' then pv.PV_Value end) AS Color, " +
                "max(case when pn.PN_Name = 'BelowPhreaticLevelStochast' then s.ST_Dist_Type end) AS BelowPhreaticLevelDistributionType, " +
                "max(case when pn.PN_Name = 'BelowPhreaticLevelStochast' then s.ST_Shift end) AS BelowPhreaticLevelShift, " +
                "max(case when pn.PN_Name = 'BelowPhreaticLevelStochast' then s.ST_Mean end) AS BelowPhreaticLevelMean, " +
                "max(case when pn.PN_Name = 'BelowPhreaticLevelStochast' then s.ST_Deviation end) AS BelowPhreaticLevelDeviation, " +
                "max(case when pn.PN_Name = 'BelowPhreaticLevelStochast' then s.ST_Variation end) AS BelowPhreaticLevelCoefficientOfVariation, " +
                "max(case when pn.PN_Name = 'PermeabKxStochast' then s.ST_Dist_Type end) AS PermeabKxDistributionType, " +
                "max(case when pn.PN_Name = 'PermeabKxStochast' then s.ST_Shift end) AS PermeabKxShift, " +
                "max(case when pn.PN_Name = 'PermeabKxStochast' then s.ST_Mean end) AS PermeabKxMean, " +
                "max(case when pn.PN_Name = 'PermeabKxStochast' then s.ST_Variation end) AS PermeabKxCoefficientOfVariation, " +
                "max(case when pn.PN_Name = 'DiameterD70Stochast' then s.ST_Dist_Type end) AS DiameterD70DistributionType, " +
                "max(case when pn.PN_Name = 'DiameterD70Stochast' then s.ST_Shift end) AS DiameterD70Shift, " +
                "max(case when pn.PN_Name = 'DiameterD70Stochast' then s.ST_Mean end) AS DiameterD70Mean, " +
                "max(case when pn.PN_Name = 'DiameterD70Stochast' then s.ST_Variation end) AS DiameterD70CoefficientOfVariation, " +
                "max(case when pn.PN_Name = 'UsePop' then pv.PV_Value end) AS UsePOP, " +
                "max(case when pn.PN_Name = 'ShearStrengthModel' then pv.PV_Value end) AS ShearStrengthModel, " +
                "max(case when pn.PN_Name = 'AbovePhreaticLevelStochast' then s.ST_Dist_Type end) AS AbovePhreaticLevelDistributionType, " +
                "max(case when pn.PN_Name = 'AbovePhreaticLevelStochast' then s.ST_Shift end) AS AbovePhreaticLevelShift, " +
                "max(case when pn.PN_Name = 'AbovePhreaticLevelStochast' then s.ST_Mean end) AS AbovePhreaticLevelMean, " +
                "max(case when pn.PN_Name = 'AbovePhreaticLevelStochast' then s.ST_Variation end) AS AbovePhreaticLevelCoefficientOfVariation, " +
                "max(case when pn.PN_Name = 'CohesionStochast' then s.ST_Dist_Type end) AS CohesionDistributionType, " +
                "max(case when pn.PN_Name = 'CohesionStochast' then s.ST_Shift end) AS CohesionShift, " +
                "max(case when pn.PN_Name = 'CohesionStochast' then s.ST_Mean end) AS CohesionMean, " +
                "max(case when pn.PN_Name = 'CohesionStochast' then s.ST_Variation end) AS CohesionCoefficientOfVariation, " +
                "max(case when pn.PN_Name = 'FrictionAngleStochast' then s.ST_Dist_Type end) AS FrictionAngleDistributionType, " +
                "max(case when pn.PN_Name = 'FrictionAngleStochast' then s.ST_Shift end) AS FrictionAngleShift, " +
                "max(case when pn.PN_Name = 'FrictionAngleStochast' then s.ST_Mean end) AS FrictionAngleMean, " +
                "max(case when pn.PN_Name = 'FrictionAngleStochast' then s.ST_Variation end) AS FrictionAngleCoefficientOfVariation, " +
                "max(case when pn.PN_Name = 'RatioCuPcStochast' then s.ST_Dist_Type end) AS ShearStrengthRatioDistributionType, " +
                "max(case when pn.PN_Name = 'RatioCuPcStochast' then s.ST_Shift end) AS ShearStrengthRatioShift, " +
                "max(case when pn.PN_Name = 'RatioCuPcStochast' then s.ST_Mean end) AS ShearStrengthRatioMean, " +
                "max(case when pn.PN_Name = 'RatioCuPcStochast' then s.ST_Variation end) AS ShearStrengthRatioCoefficientOfVariation, " +
                "max(case when pn.PN_Name = 'StrengthIncreaseExponentStochast' then s.ST_Dist_Type end) AS StrengthIncreaseExponentDistributionType, " +
                "max(case when pn.PN_Name = 'StrengthIncreaseExponentStochast' then s.ST_Shift end) AS StrengthIncreaseExponentShift, " +
                "max(case when pn.PN_Name = 'StrengthIncreaseExponentStochast' then s.ST_Mean end) AS StrengthIncreaseExponentMean, " +
                "max(case when pn.PN_Name = 'StrengthIncreaseExponentStochast' then s.ST_Variation end) AS StrengthIncreaseExponentCoefficientOfVariation, " +
                "max(case when pn.PN_Name = 'POPStochast' then s.ST_Dist_Type end) AS PopDistributionType, " +
                "max(case when pn.PN_Name = 'POPStochast' then s.ST_Shift end) AS PopShift, " +
                "max(case when pn.PN_Name = 'POPStochast' then s.ST_Mean end) AS PopMean, " +
                "max(case when pn.PN_Name = 'POPStochast' then s.ST_Variation end) AS PopCoefficientOfVariation " +
                "FROM ParameterNames AS pn " +
                "LEFT JOIN ParameterValues AS pv USING(PN_ID) " +
                "LEFT JOIN Stochast AS s USING(PN_ID) " +
                "JOIN Materials AS mat " +
                "WHERE pv.MA_ID = mat.MA_ID OR s.MA_ID = mat.MA_ID " +
                "GROUP BY mat.MA_ID " +
                ") materialProperties USING(MA_ID) " +
                "LEFT JOIN " +
                "(" +
                "SELECT SL2D_ID, PV_Value AS IsAquifer " +
                "FROM ParameterNames " +
                "JOIN LayerParameterValues USING(PN_ID) " +
                "WHERE PN_NAME = 'IsAquifer'" +
                ") USING(SL2D_ID) " +
                "GROUP BY sp2d.SP2D_ID, sl2d.SL2D_ID;";

            Assert.AreEqual(expectedQuery, query);
        }