GCC Code Coverage Report


Directory: libimgdoc2/
File: libimgdoc2/src/db/database_discovery.h
Date: 2025-02-03 12:41:04
Exec Total Coverage
Lines: 4 4 100.0%
Functions: 2 2 100.0%
Branches: 1 2 50.0%

Line Branch Exec Source
1 // SPDX-FileCopyrightText: 2023 Carl Zeiss Microscopy GmbH
2 //
3 // SPDX-License-Identifier: MIT
4
5 #pragma once
6
7 #include <vector>
8 #include <utility>
9 #include <string>
10 #include <memory>
11 #include "IDbConnection.h"
12 #include "database_configuration.h"
13
14 /// This class is used for discovering a database and its configuration. It is checked whether
15 /// the database is a valid "imgdoc2" database and if so, the configuration is determined.
16 class DbDiscovery
17 {
18 private:
19 std::shared_ptr<IDbConnection> db_connection_;
20
21 std::shared_ptr<DatabaseConfigurationCommon> configuration_;
22 private:
23 struct GeneralDataDiscoveryResult
24 {
25 std::string tilesdatatable_name;
26 std::string tileinfotable_name;
27 std::string blobtable_name;
28 std::string spatial_index_table_name;
29 std::string metadatatable_name;
30
31 imgdoc2::DocumentType document_type { imgdoc2::DocumentType::kInvalid };
32 std::vector<imgdoc2::Dimension> dimensions;
33 std::vector<imgdoc2::Dimension> indexed_dimensions;
34 };
35
36 public:
37 DbDiscovery() = delete;
38
39 /// Constructor.
40 ///
41 /// \param dbConnection The database connection.
42 16 explicit DbDiscovery(std::shared_ptr<IDbConnection> dbConnection) :
43 16 db_connection_(std::move(dbConnection))
44 16 {}
45
46 /// Executes the discovery operation. It is checked whether the database is a valid "imgdoc2" database and if so,
47 /// its type and configuration is determined. In case of an error, an exception is thrown.
48 void DoDiscovery();
49
50 /// Gets the document type.
51 ///
52 /// \returns The document type.
53 [[nodiscard]] imgdoc2::DocumentType GetDocumentType() const;
54
55 /// Gets database configuration, i.e. the least common denominator, the base type from which all
56 /// configuration have to derive from.
57 /// \returns The base database configuration if available; otherwise, null.
58 [[nodiscard]] std::shared_ptr<DatabaseConfigurationCommon> GetDatabaseConfigurationCommon() const;
59
60 /// Gets database configuration object for an image-2D document. If the document is not an image-2D document,
61 /// an internal_error_exception is thrown.
62 /// \returns The database configuration object for an image-2D document.
63 [[nodiscard]] std::shared_ptr<DatabaseConfiguration2D> GetDatabaseConfiguration2DOrThrow() const;
64
65 /// Gets database configuration object for an image-3D document. If the document is not an image-3D document,
66 /// an internal_error_exception is thrown.
67 /// \returns The database configuration object for an image-3D document.
68 [[nodiscard]] std::shared_ptr<DatabaseConfiguration3D> GetDatabaseConfiguration3DOrThrow() const;
69
70 /// Gets database configuration object for an image-2D document. If the document is not an image-2D document,
71 /// null is returned.
72 /// \returns The database configuration object for an image-2D document if available; otherwise, null.
73 [[nodiscard]] std::shared_ptr<DatabaseConfiguration2D> GetDatabaseConfiguration2DOrNull() const;
74
75 /// Gets database configuration object for an image-3D document. If the document is not an image-3D document,
76 /// null is returned.
77 /// \returns The database configuration object for an image-3D document if available; otherwise, null.
78 [[nodiscard]] std::shared_ptr<DatabaseConfiguration3D> GetDatabaseConfiguration3DOrNull() const;
79 private:
80 GeneralDataDiscoveryResult DiscoverGeneralTable();
81
82 /// This method tries to populate the 'general_table_discovery_result' with additional information and validates
83 /// that information. On input, it is expecting only the table-names to contain information, those names
84 /// are then here validated and the remaining fields are populated.
85 /// In case of an (unrecoverable) error, this method will throw an exception.
86 /// \param [in,out] general_table_discovery_result On input, it is expected that the table-names are filled, on exit the other fields are populated and validated.
87 void Check_Tables_And_Determine_Dimensions(GeneralDataDiscoveryResult& general_table_discovery_result);
88
89 void FillInformationForConfiguration2D(const GeneralDataDiscoveryResult& general_data_discovery_result, DatabaseConfiguration2D& configuration_2d);
90 void FillInformationForConfiguration3D(const GeneralDataDiscoveryResult& general_data_discovery_result, DatabaseConfiguration3D& configuration_3d);
91
92 struct ExpectedColumnsInfo
93 {
94
1/2
✓ Branch 1 taken 324 times.
✗ Branch 2 not taken.
972 explicit ExpectedColumnsInfo(const char* sz) : column_name(sz) {}
95 std::string column_name;
96 };
97 };
98