Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/Builders/SoilDatabaseQueryBuilder.cs =================================================================== diff -u -r3bf7e84ac84de7dd0be38be7e9f2372878e733f6 -r86e6bb44ba1ccbec534f3fcf379481ea8d45d67f --- Ringtoets/Piping/src/Ringtoets.Piping.IO/Builders/SoilDatabaseQueryBuilder.cs (.../SoilDatabaseQueryBuilder.cs) (revision 3bf7e84ac84de7dd0be38be7e9f2372878e733f6) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/Builders/SoilDatabaseQueryBuilder.cs (.../SoilDatabaseQueryBuilder.cs) (revision 86e6bb44ba1ccbec534f3fcf379481ea8d45d67f) @@ -61,6 +61,29 @@ } /// + /// Returns the query to get the amount of + /// that can be read from the database. + /// + /// The query to get the amount of + /// from the database. + public static string GetStochasticSoilModelOfMechanismCountQuery() + { + return String.Format(@"SELECT COUNT('1') AS {6} " + + "FROM {0} M " + + "INNER JOIN {1} S USING({3}) " + + "INNER JOIN {2} SSM USING({4}) " + + "WHERE M.{5} = @{5};", + MechanismDatabaseColumns.TableName, + SegmentDatabaseColumns.TableName, + StochasticSoilModelDatabaseColumns.TableName, + MechanismDatabaseColumns.MechanismId, + StochasticSoilModelDatabaseColumns.StochasticSoilModelId, + MechanismDatabaseColumns.MechanismName, + StochasticSoilModelDatabaseColumns.Count + ); + } + + /// /// Returns the SQL query to execute to fetch all Stochastic Soil Profiles /// from the DSoil-Model database. /// Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/Properties/Resources.Designer.cs =================================================================== diff -u -rdc338e85283e37af4984f737a9f7ae0d213596be -r86e6bb44ba1ccbec534f3fcf379481ea8d45d67f --- Ringtoets/Piping/src/Ringtoets.Piping.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision dc338e85283e37af4984f737a9f7ae0d213596be) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 86e6bb44ba1ccbec534f3fcf379481ea8d45d67f) @@ -353,15 +353,6 @@ } /// - /// Looks up a localized string similar to . - /// - public static string String1 { - get { - return ResourceManager.GetString("String1", resourceCulture); - } - } - - /// /// Looks up a localized string similar to op regel {0}. /// public static string TextFile_On_LineNumber_0_ { Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/Properties/Resources.resx =================================================================== diff -u -rdc338e85283e37af4984f737a9f7ae0d213596be -r86e6bb44ba1ccbec534f3fcf379481ea8d45d67f --- Ringtoets/Piping/src/Ringtoets.Piping.IO/Properties/Resources.resx (.../Resources.resx) (revision dc338e85283e37af4984f737a9f7ae0d213596be) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/Properties/Resources.resx (.../Resources.resx) (revision 86e6bb44ba1ccbec534f3fcf379481ea8d45d67f) @@ -216,7 +216,4 @@ Het stochastisch ondergrondsprofiel bevat geen geldige waarde. - - - \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/SoilProfile/StochasticSoilModelDatabaseColumns.cs =================================================================== diff -u -r14db78eb3fc065c42f2d92c60d9d6b4b43dc9bd7 -r86e6bb44ba1ccbec534f3fcf379481ea8d45d67f --- Ringtoets/Piping/src/Ringtoets.Piping.IO/SoilProfile/StochasticSoilModelDatabaseColumns.cs (.../StochasticSoilModelDatabaseColumns.cs) (revision 14db78eb3fc065c42f2d92c60d9d6b4b43dc9bd7) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/SoilProfile/StochasticSoilModelDatabaseColumns.cs (.../StochasticSoilModelDatabaseColumns.cs) (revision 86e6bb44ba1ccbec534f3fcf379481ea8d45d67f) @@ -27,6 +27,7 @@ /// internal static class StochasticSoilModelDatabaseColumns { + internal const string Count = "nrOfRows"; internal const string TableName = "StochasticSoilModel"; internal const string StochasticSoilModelId = "SSM_ID"; internal const string StochasticSoilModelName = "SSM_Name"; Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/SoilProfile/StochasticSoilModelReader.cs =================================================================== diff -u -rcdc41931db8cd6fbebe910c08d315d1b7066a6d2 -r86e6bb44ba1ccbec534f3fcf379481ea8d45d67f --- Ringtoets/Piping/src/Ringtoets.Piping.IO/SoilProfile/StochasticSoilModelReader.cs (.../StochasticSoilModelReader.cs) (revision cdc41931db8cd6fbebe910c08d315d1b7066a6d2) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/SoilProfile/StochasticSoilModelReader.cs (.../StochasticSoilModelReader.cs) (revision 86e6bb44ba1ccbec534f3fcf379481ea8d45d67f) @@ -38,7 +38,6 @@ public class StochasticSoilModelReader : SqLiteDatabaseReaderBase { private const string pipingMechanismName = "Piping"; - private SQLiteDataReader dataReader; /// @@ -65,6 +64,11 @@ public bool HasNext { get; private set; } /// + /// Gets the amount of that can be read from the database. + /// + public int PipingStochasticSoilModelCount { get; private set; } + + /// /// Reads the information for the next stochastic soil model from the database and creates a /// instance of the information. /// @@ -96,6 +100,11 @@ base.Dispose(); } + private int ReadStochasticSoilModelCount() + { + return !dataReader.Read() ? 0 : Convert.ToInt32(dataReader[StochasticSoilModelDatabaseColumns.Count]); + } + private StochasticSoilModel ReadPipingStochasticSoilModel() { if (!HasNext) @@ -107,7 +116,7 @@ do { // Read Points - var point2D = ReadSegmentPoint(dataReader); + var point2D = ReadSegmentPoint(); if (point2D != null) { stochasticSoilModelSegment.Geometry.Add(point2D); @@ -139,6 +148,7 @@ private void CreateDataReader() { + string locationCountQuery = SoilDatabaseQueryBuilder.GetStochasticSoilModelOfMechanismCountQuery(); var stochasticSoilModelSegmentsQuery = SoilDatabaseQueryBuilder.GetStochasticSoilModelOfMechanismQuery(); var sqliteParameter = new SQLiteParameter { @@ -148,14 +158,16 @@ }; try { - dataReader = CreateDataReader(stochasticSoilModelSegmentsQuery, sqliteParameter); + dataReader = CreateDataReader(locationCountQuery + stochasticSoilModelSegmentsQuery, sqliteParameter); } catch (SQLiteException exception) { CloseConnection(); var message = new FileReaderErrorMessageBuilder(Path).Build(Resources.StochasticSoilModelDatabaseReader_Failed_to_read_database); throw new CriticalFileReadException(message, exception); } + PipingStochasticSoilModelCount = ReadStochasticSoilModelCount(); + dataReader.NextResult(); } private void VerifyVersion(string databaseFilePath) @@ -182,7 +194,7 @@ return new StochasticSoilModel(stochasticSoilModelId, stochasticSoilModelName, segmentName); } - private static Point2D ReadSegmentPoint(SQLiteDataReader dataReader) + private Point2D ReadSegmentPoint() { double coordinateX = Convert.ToDouble(dataReader[SegmentPointsDatabaseColumns.CoordinateX]); double coordinateY = Convert.ToDouble(dataReader[SegmentPointsDatabaseColumns.CoordinateY]); Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Builders/SoilDatabaseQueryBuilderTest.cs =================================================================== diff -u -r25dd6ff5b74aec73e47df4488c05439a143711e1 -r86e6bb44ba1ccbec534f3fcf379481ea8d45d67f --- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Builders/SoilDatabaseQueryBuilderTest.cs (.../SoilDatabaseQueryBuilderTest.cs) (revision 25dd6ff5b74aec73e47df4488c05439a143711e1) +++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Builders/SoilDatabaseQueryBuilderTest.cs (.../SoilDatabaseQueryBuilderTest.cs) (revision 86e6bb44ba1ccbec534f3fcf379481ea8d45d67f) @@ -61,6 +61,23 @@ } [Test] + public void GetStochasticSoilModelOfMechanismCountQuery_Always_ReturnsExpectedValues() + { + // Setup + const string expectedQuery = "SELECT COUNT('1') AS nrOfRows " + + "FROM Mechanism M " + + "INNER JOIN Segment S USING(ME_ID) " + + "INNER JOIN StochasticSoilModel SSM USING(SSM_ID) " + + "WHERE M.ME_Name = @ME_Name;"; + + // Call + string query = SoilDatabaseQueryBuilder.GetStochasticSoilModelOfMechanismCountQuery(); + + // Assert + Assert.AreEqual(expectedQuery, query); + } + + [Test] public void GetCheckVersionQuery_Always_ReturnsExpectedValues() { // Setup Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/SoilProfile/StochasticSoilModelReaderTest.cs =================================================================== diff -u -rcdc41931db8cd6fbebe910c08d315d1b7066a6d2 -r86e6bb44ba1ccbec534f3fcf379481ea8d45d67f --- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/SoilProfile/StochasticSoilModelReaderTest.cs (.../StochasticSoilModelReaderTest.cs) (revision cdc41931db8cd6fbebe910c08d315d1b7066a6d2) +++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/SoilProfile/StochasticSoilModelReaderTest.cs (.../StochasticSoilModelReaderTest.cs) (revision 86e6bb44ba1ccbec534f3fcf379481ea8d45d67f) @@ -221,14 +221,18 @@ const string expectedSegmentSoilModelName = "36005_Piping"; const long expectedSegmentSoilModelId = 2; const long expectedSegmentSoilModelPoints = 1797; + const int expectedNrOfModels = 3; using (var stochasticSoilModelDatabaseReader = new StochasticSoilModelReader(dbFile)) { + int nrOfModels = stochasticSoilModelDatabaseReader.PipingStochasticSoilModelCount; + // Call StochasticSoilModel stochasticSoilModel = stochasticSoilModelDatabaseReader.ReadStochasticSoilModel(); // Assert Assert.IsNotNull(stochasticSoilModel); + Assert.AreEqual(expectedNrOfModels, nrOfModels); Assert.AreEqual(expectedSegmentName, stochasticSoilModel.SegmentName); Assert.AreEqual(expectedSegmentSoilModelName, stochasticSoilModel.SegmentSoilModelName); Assert.AreEqual(expectedSegmentSoilModelId, stochasticSoilModel.SegmentSoilModelId); @@ -247,14 +251,18 @@ // Setup var dbName = "emptyschema.soil"; string dbFile = Path.Combine(testDataPath, dbName); + const int expectedNrOfModels = 0; using (var stochasticSoilModelDatabaseReader = new StochasticSoilModelReader(dbFile)) { + int nrOfModels = stochasticSoilModelDatabaseReader.PipingStochasticSoilModelCount; + // Call StochasticSoilModel stochasticSoilModel = stochasticSoilModelDatabaseReader.ReadStochasticSoilModel(); // Assert Assert.IsNull(stochasticSoilModel); + Assert.AreEqual(expectedNrOfModels, nrOfModels); Assert.IsFalse(stochasticSoilModelDatabaseReader.HasNext); } Assert.IsTrue(TestHelper.CanOpenFileForWrite(dbFile));