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));