diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8f1dc8b95..1bef8a500 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,7 +27,7 @@ jobs: - name: Run clang-format style check uses: jidicula/clang-format-action@v4.11.0 with: - clang-format-version: '16' + clang-format-version: '17' check-path: ${{ matrix.path['check'] }} exclude-regex: ${{ matrix.path['exclude'] }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 36319add0..3b78cf11b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,9 +62,9 @@ list(REMOVE_ITEM SRC_SILO_API ${SRC_TEST}) option(BUILD_WITH_CLANG_TIDY "Build process clang-tidy" ON) if (NOT CMAKE_BUILD_TYPE STREQUAL Release AND BUILD_WITH_CLANG_TIDY) - find_program(CLANG_TIDY_EXE NAMES clang-tidy-17) + find_program(CLANG_TIDY_EXE NAMES clang-tidy-18) if (NOT CLANG_TIDY_EXE) - message(STATUS "clang-tidy-17 not found.") + message(SEND_ERROR "clang-tidy not found, aborting. You can run the build with '-D BUILD_WITH_CLANG_TIDY=OFF' to disable clang-tidy.") else () message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}") message(STATUS "run clang tidy with: ${CLANG_TIDY_EXE}") diff --git a/Dockerfile b/Dockerfile index b072bd9c5..425da1dc2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ RUN apk update && apk add --no-cache py3-pip \ boost-build=1.82.0-r0 \ libtbb=2021.9.0-r0 -RUN pip install conan==2.0.14 +RUN pip install conan==2.0.17 WORKDIR /src COPY conanfile.py conanprofile.docker ./ diff --git a/Dockerfile_linter b/Dockerfile_linter index a6c550711..c4c732ad1 100644 --- a/Dockerfile_linter +++ b/Dockerfile_linter @@ -6,15 +6,15 @@ RUN apt update \ && apt install -y \ cmake=3.22.1-1ubuntu1.22.04.1 \ python3-pip=22.0.2+dfsg-1ubuntu0.4 \ - software-properties-common=0.99.22.7 \ + software-properties-common=0.99.22.9 \ wget=1.21.2-2ubuntu1 \ gnupg=2.2.27-3ubuntu2.1 \ lsb-release=11.1.0ubuntu4 \ && wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc \ && add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy main' \ - && apt install -y clang-tidy + && apt install -y clang-tidy-18 -RUN pip install conan==2.0.11 +RUN pip install conan==2.0.17 COPY conanfile.py conanprofile.docker ./ RUN mv conanprofile.docker conanprofile diff --git a/include/silo/database_info.h b/include/silo/database_info.h index 5b794704d..afe7c7bb4 100644 --- a/include/silo/database_info.h +++ b/include/silo/database_info.h @@ -4,6 +4,8 @@ #include #include +#include "fmt/format.h" + #include "silo/common/format_number.h" #include "silo/common/nucleotide_symbols.h" diff --git a/include/silo/preprocessing/partition.h b/include/silo/preprocessing/partition.h index 1c2c80f08..6cf2d4b01 100644 --- a/include/silo/preprocessing/partition.h +++ b/include/silo/preprocessing/partition.h @@ -68,8 +68,6 @@ class Partitions { static Partitions load(std::istream& input_file); [[nodiscard]] const std::vector& getPartitions() const; - - [[nodiscard]] const std::vector& getAllPartitionChunks() const; }; } // namespace silo::preprocessing diff --git a/include/silo/storage/database_partition.h b/include/silo/storage/database_partition.h index 5b75f6da7..f8483916e 100644 --- a/include/silo/storage/database_partition.h +++ b/include/silo/storage/database_partition.h @@ -69,6 +69,12 @@ class DatabasePartition { DatabasePartition() = default; + void validateNucleotideSequences() const; + + void validateAminoAcidSequences() const; + + void validateMetadataColumns() const; + public: storage::ColumnPartitionGroup columns; std::map&> nuc_sequences; diff --git a/include/silo/storage/sequence_store.h b/include/silo/storage/sequence_store.h index 2a22c3992..1192ee28b 100644 --- a/include/silo/storage/sequence_store.h +++ b/include/silo/storage/sequence_store.h @@ -73,7 +73,8 @@ class SequenceStorePartition { void fillNBitmaps(const std::vector& genomes); public: - explicit SequenceStorePartition(const std::vector& reference_genome + explicit SequenceStorePartition( + const std::vector& reference_sequence ); const std::vector& reference_sequence; diff --git a/include/silo/zstdfasta/zstd_compressor.h b/include/silo/zstdfasta/zstd_compressor.h index 5f805c91d..d7d60d74f 100644 --- a/include/silo/zstdfasta/zstd_compressor.h +++ b/include/silo/zstdfasta/zstd_compressor.h @@ -28,8 +28,8 @@ class ZstdCompressor { ZstdCompressor(const ZstdCompressor& other); ZstdCompressor& operator=(const ZstdCompressor& other); - ZstdCompressor(ZstdCompressor&& other); - ZstdCompressor& operator=(ZstdCompressor&& other); + ZstdCompressor(ZstdCompressor&& other) noexcept; + ZstdCompressor& operator=(ZstdCompressor&& other) noexcept; virtual ~ZstdCompressor(); diff --git a/include/silo/zstdfasta/zstd_decompressor.h b/include/silo/zstdfasta/zstd_decompressor.h index ffb1c499b..b22c911c3 100644 --- a/include/silo/zstdfasta/zstd_decompressor.h +++ b/include/silo/zstdfasta/zstd_decompressor.h @@ -12,8 +12,8 @@ class ZstdDecompressor { ZSTD_DCtx* zstd_context; public: - ZstdDecompressor(ZstdDecompressor&& other); - ZstdDecompressor& operator=(ZstdDecompressor&& other); + ZstdDecompressor(ZstdDecompressor&& other) noexcept; + ZstdDecompressor& operator=(ZstdDecompressor&& other) noexcept; ZstdDecompressor(const ZstdDecompressor& other) = delete; ZstdDecompressor& operator=(const ZstdDecompressor& other) = delete; diff --git a/src/silo/common/aa_symbols.cpp b/src/silo/common/aa_symbols.cpp index e70000989..e74e8f495 100644 --- a/src/silo/common/aa_symbols.cpp +++ b/src/silo/common/aa_symbols.cpp @@ -1,7 +1,6 @@ #include "silo/common/aa_symbols.h" #include -#include char silo::AminoAcid::symbolToChar(silo::AminoAcid::Symbol symbol) { switch (symbol) { @@ -118,12 +117,12 @@ std::optional silo::AminoAcid::charToSymbol(char charac } std::optional> silo::AminoAcid::stringToSymbolVector( - const std::string& nucleotides + const std::string& sequence ) { - const size_t size = nucleotides.size(); + const size_t size = sequence.size(); std::vector result(size); for (size_t i = 0; i < size; ++i) { - auto symbol = silo::AminoAcid::charToSymbol(nucleotides[i]); + auto symbol = silo::AminoAcid::charToSymbol(sequence[i]); if (symbol == std::nullopt) { return std::nullopt; } diff --git a/src/silo/common/bidirectional_map.cpp b/src/silo/common/bidirectional_map.cpp index 121dbfd89..1be374a34 100644 --- a/src/silo/common/bidirectional_map.cpp +++ b/src/silo/common/bidirectional_map.cpp @@ -4,7 +4,6 @@ #include #include "silo/common/pango_lineage.h" -#include "silo/common/types.h" namespace silo::common { diff --git a/src/silo/common/data_version.cpp b/src/silo/common/data_version.cpp index a22f87d57..15f58ea9c 100644 --- a/src/silo/common/data_version.cpp +++ b/src/silo/common/data_version.cpp @@ -2,7 +2,6 @@ #include #include -#include #include namespace silo { diff --git a/src/silo/common/format_number.cpp b/src/silo/common/format_number.cpp index 6f46af386..1cb62e78f 100644 --- a/src/silo/common/format_number.cpp +++ b/src/silo/common/format_number.cpp @@ -8,7 +8,9 @@ namespace silo { struct ThousandSeparator : std::numpunct { + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) [[nodiscard]] char_type do_thousands_sep() const override { return '\''; } + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) [[nodiscard]] string_type do_grouping() const override { return "\3"; } }; diff --git a/src/silo/common/input_stream_wrapper.cpp b/src/silo/common/input_stream_wrapper.cpp index 3e0d23886..bbc26a7f3 100644 --- a/src/silo/common/input_stream_wrapper.cpp +++ b/src/silo/common/input_stream_wrapper.cpp @@ -3,12 +3,10 @@ #include #include -#include #include #include #include #include -#include #include "silo/preprocessing/preprocessing_exception.h" diff --git a/src/silo/common/nucleotide_symbols.cpp b/src/silo/common/nucleotide_symbols.cpp index 84a5d9373..6babc19c4 100644 --- a/src/silo/common/nucleotide_symbols.cpp +++ b/src/silo/common/nucleotide_symbols.cpp @@ -1,7 +1,6 @@ #include "silo/common/nucleotide_symbols.h" #include -#include namespace silo { diff --git a/src/silo/common/pango_lineage.cpp b/src/silo/common/pango_lineage.cpp index 70dc70316..423890b58 100644 --- a/src/silo/common/pango_lineage.cpp +++ b/src/silo/common/pango_lineage.cpp @@ -1,7 +1,5 @@ #include "silo/common/pango_lineage.h" -#include - std::size_t std::hash::operator()( const silo::common::UnaliasedPangoLineage& pango_lineage ) const { diff --git a/src/silo/common/pango_lineage.test.cpp b/src/silo/common/pango_lineage.test.cpp index a6385f7f0..01d70ccd7 100644 --- a/src/silo/common/pango_lineage.test.cpp +++ b/src/silo/common/pango_lineage.test.cpp @@ -3,7 +3,7 @@ #include TEST(UnaliasedPangoLineage, isSublineageOf) { - silo::common::UnaliasedPangoLineage const under_test{"A.1.2"}; + const silo::common::UnaliasedPangoLineage under_test{"A.1.2"}; EXPECT_TRUE(under_test.isSublineageOf(silo::common::UnaliasedPangoLineage{"A.1"})); EXPECT_TRUE(under_test.isSublineageOf(silo::common::UnaliasedPangoLineage{"A"})); @@ -18,7 +18,7 @@ TEST(UnaliasedPangoLineage, isSublineageOf) { } TEST(PangoLineage, getParentLineages) { - silo::common::UnaliasedPangoLineage const under_test{"A.1.23.4.513"}; + const silo::common::UnaliasedPangoLineage under_test{"A.1.23.4.513"}; const std::vector expected = { silo::common::UnaliasedPangoLineage{"A"}, diff --git a/src/silo/common/string.cpp b/src/silo/common/string.cpp index 9649a89f0..9b54a467f 100644 --- a/src/silo/common/string.cpp +++ b/src/silo/common/string.cpp @@ -4,7 +4,6 @@ #include #include "silo/common/bidirectional_map.h" -#include "silo/common/types.h" namespace silo::common { diff --git a/src/silo/common/string.test.cpp b/src/silo/common/string.test.cpp index 4c20618d7..483c84a00 100644 --- a/src/silo/common/string.test.cpp +++ b/src/silo/common/string.test.cpp @@ -72,6 +72,7 @@ TEST(String, comparesCorrectlyIfPrefixesMatchUpTo32Positions) { } } +// NOLINTNEXTLINE(readability-function-cognitive-complexity) TEST(String, fastComparesCorrectlyIfPrefixesMatchUpTo32Positions) { BidirectionalMap dict; const std::string value = "1234567890abcdefghijklmnopqrstuv"; diff --git a/src/silo/common/string_utils.cpp b/src/silo/common/string_utils.cpp index e2907db5a..34e01bc83 100644 --- a/src/silo/common/string_utils.cpp +++ b/src/silo/common/string_utils.cpp @@ -1,6 +1,7 @@ -#include "silo/common/string_utils.h" #include +#include "silo/common/string_utils.h" + namespace silo { std::vector splitBy(const std::string& value, const std::string_view delimiter) { diff --git a/src/silo/common/string_utils.test.cpp b/src/silo/common/string_utils.test.cpp index 15cae9362..db68a4657 100644 --- a/src/silo/common/string_utils.test.cpp +++ b/src/silo/common/string_utils.test.cpp @@ -2,72 +2,74 @@ #include -using silo::removeSymbol; using silo::splitBy; +using std::string; +using std::string_view; +using std::vector; TEST(splitBy, correctSplit) { - const std::string input("ABC,DEF,ADS,"); - const std::string delimiter(","); + const string input("ABC,DEF,ADS,"); + const string delimiter(","); const auto result = splitBy(input, delimiter); - EXPECT_EQ(result, std::vector({"ABC", "DEF", "ADS", ""})); + EXPECT_EQ(result, vector({"ABC", "DEF", "ADS", ""})); } TEST(splitBy, correctSplit2) { - const std::string input("ABC"); - const std::string delimiter(","); + const string input("ABC"); + const string delimiter(","); const auto result = splitBy(input, delimiter); - EXPECT_EQ(result, std::vector({"ABC"})); + EXPECT_EQ(result, vector({"ABC"})); } TEST(splitBy, correctSplit3) { - const std::string input("ABC.*"); - const std::string delimiter(".*"); + const string input("ABC.*"); + const string delimiter(".*"); const auto result = splitBy(input, delimiter); - EXPECT_EQ(result, std::vector({"ABC", ""})); + EXPECT_EQ(result, vector({"ABC", ""})); } TEST(splitBy, correctWithEmptyString) { - const std::string input; - const std::string_view delimiter(","); + const string input; + const string_view delimiter(","); const auto result = splitBy(input, delimiter); - EXPECT_EQ(result, std::vector{""}); + EXPECT_EQ(result, vector{""}); } TEST(removeSymbol, removesAllOccurences) { - const std::string input(R"(ABC"DEF"ADS")"); + const string input(R"(ABC"DEF"ADS")"); const auto result = silo::removeSymbol(input, '\"'); - EXPECT_EQ(result, std::string("ABCDEFADS")); + EXPECT_EQ(result, string("ABCDEFADS")); } TEST(removeSymbol, removesAtBeginning) { - const std::string input(R"("ABC)"); + const string input(R"("ABC)"); const auto result = silo::removeSymbol(input, '\"'); - EXPECT_EQ(result, std::string("ABC")); + EXPECT_EQ(result, string("ABC")); } TEST(removeSymbol, removesAtEnd) { - const std::string input(R"(ABC")"); + const string input(R"(ABC")"); const auto result = silo::removeSymbol(input, '\"'); - EXPECT_EQ(result, std::string("ABC")); + EXPECT_EQ(result, string("ABC")); } TEST(removeSymbol, removesAtBeginningAndEnd) { - const std::string input(R"("ABC")"); + const string input(R"("ABC")"); const auto result = silo::removeSymbol(input, '\"'); - EXPECT_EQ(result, std::string("ABC")); + EXPECT_EQ(result, string("ABC")); } TEST(removeSymbol, doesNotRemoveIfNotContained) { - const std::string input("ABCDEFADS"); + const string input("ABCDEFADS"); const auto result = silo::removeSymbol(input, '\"'); - EXPECT_EQ(result, std::string("ABCDEFADS")); + EXPECT_EQ(result, string("ABCDEFADS")); } diff --git a/src/silo/config/config_repository.cpp b/src/silo/config/config_repository.cpp index 6d45f31d2..8695784dd 100644 --- a/src/silo/config/config_repository.cpp +++ b/src/silo/config/config_repository.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include "silo/config/config_exception.h" #include "silo/config/database_config.h" diff --git a/src/silo/config/database_config.cpp b/src/silo/config/database_config.cpp index 0bd4cd8aa..75df24c9c 100644 --- a/src/silo/config/database_config.cpp +++ b/src/silo/config/database_config.cpp @@ -1,8 +1,6 @@ #include "silo/config/database_config.h" -#include #include -#include #include #include @@ -193,11 +191,10 @@ std::string DatabaseSchema::getStrictOrderByClause() const { if (date_to_sort_by.has_value()) { SPDLOG_INFO("preprocessing - produce order by clause with a date to sort by"); return fmt::format("ORDER BY {}, {}", date_to_sort_by.value(), primary_key); - } else { - SPDLOG_INFO("preprocessing - produce order by clause without a date to sort by"); - - return fmt::format("ORDER BY {}", primary_key); } + + SPDLOG_INFO("preprocessing - produce order by clause without a date to sort by"); + return fmt::format("ORDER BY {}", primary_key); } std::optional DatabaseConfig::getMetadata(const std::string& name) const { diff --git a/src/silo/database.cpp b/src/silo/database.cpp index 894b00cab..39c207eb3 100644 --- a/src/silo/database.cpp +++ b/src/silo/database.cpp @@ -81,6 +81,7 @@ std::optional Database::getDefaultSequenceName() const { template <> std::vector Database::getSequenceNames() const { std::vector sequence_names; + sequence_names.reserve(nuc_sequences.size()); for (const auto& [name, _] : nuc_sequences) { sequence_names.emplace_back(name); } @@ -90,6 +91,7 @@ std::vector Database::getSequenceNames() const { template <> std::vector Database::getSequenceNames() const { std::vector sequence_names; + sequence_names.reserve(aa_sequences.size()); for (const auto& [name, _] : aa_sequences) { sequence_names.emplace_back(name); } diff --git a/src/silo/database.test.cpp b/src/silo/database.test.cpp index c0fde89ea..52f1324f7 100644 --- a/src/silo/database.test.cpp +++ b/src/silo/database.test.cpp @@ -1,10 +1,8 @@ #include "silo/database.h" #include -#include #include -#include #include "silo/common/nucleotide_symbols.h" #include "silo/config/config_repository.h" @@ -29,16 +27,6 @@ silo::Database buildTestDatabase() { return preprocessor.preprocess(); } -void testSingleQuery(const silo::Database& database, const std::string& query_name) { - silo::query_engine::QueryEngine query_engine(database); - std::filesystem::path query_directory("endToEndTests/test/queries/"); - std::ifstream query_file(query_directory / query_name); - std::stringstream query_and_result; - query_and_result << query_file.rdbuf(); - nlohmann::json json = nlohmann::json::parse(query_and_result.str()); - query_engine.executeQuery(json.at("query").dump()); -} - TEST(DatabaseTest, shouldBuildDatabaseWithoutErrors) { auto database{buildTestDatabase()}; diff --git a/src/silo/preprocessing/metadata_info.cpp b/src/silo/preprocessing/metadata_info.cpp index 708b7137a..c655b0002 100644 --- a/src/silo/preprocessing/metadata_info.cpp +++ b/src/silo/preprocessing/metadata_info.cpp @@ -1,6 +1,5 @@ #include "silo/preprocessing/metadata_info.h" -#include #include #include #include @@ -49,7 +48,11 @@ std::unordered_map validateFieldsAgainstConfig( std::string metadata_field_string; for (const auto& [field_name, select] : validated_metadata_fields) { - metadata_field_string += "'" + field_name + "' with selection '" + select + "',"; + metadata_field_string += "'"; + metadata_field_string += field_name; + metadata_field_string += "' with selection '"; + metadata_field_string += select; + metadata_field_string += "',"; } SPDLOG_TRACE("Found metadata fields: " + metadata_field_string); return validated_metadata_fields; @@ -59,8 +62,8 @@ void detectInsertionLists( const std::filesystem::path& ndjson_file, std::unordered_map& metadata_fields_to_validate ) { - duckdb::DuckDB db(nullptr); - duckdb::Connection connection(db); + duckdb::DuckDB duck_db(nullptr); + duckdb::Connection connection(duck_db); auto top_level_entries = connection.Query(fmt::format("SELECT * FROM '{}' LIMIT 0", ndjson_file.string())); for (size_t idx = 0; idx < top_level_entries->ColumnCount(); idx++) { @@ -102,8 +105,8 @@ MetadataInfo MetadataInfo::validateFromMetadataFile( const std::filesystem::path& metadata_file, const silo::config::DatabaseConfig& database_config ) { - duckdb::DuckDB db(nullptr); - duckdb::Connection connection(db); + duckdb::DuckDB duck_db(nullptr); + duckdb::Connection connection(duck_db); // Get the column names (headers) of the table auto result = connection.Query(fmt::format("SELECT * FROM '{}' LIMIT 0", metadata_file.string())); @@ -115,15 +118,15 @@ MetadataInfo MetadataInfo::validateFromMetadataFile( const std::unordered_map validated_metadata_fields = validateFieldsAgainstConfig(file_metadata_fields, database_config); - return MetadataInfo(validated_metadata_fields); + return {validated_metadata_fields}; } MetadataInfo MetadataInfo::validateFromNdjsonFile( const std::filesystem::path& ndjson_file, const silo::config::DatabaseConfig& database_config ) { - duckdb::DuckDB db(nullptr); - duckdb::Connection connection(db); + duckdb::DuckDB duck_db(nullptr); + duckdb::Connection connection(duck_db); auto result = connection.Query(fmt::format( "SELECT json_keys(metadata) " @@ -157,11 +160,12 @@ MetadataInfo MetadataInfo::validateFromNdjsonFile( const std::unordered_map validated_metadata_fields = validateFieldsAgainstConfig(metadata_fields_to_validate, database_config); - return MetadataInfo(validated_metadata_fields); + return {validated_metadata_fields}; } std::vector MetadataInfo::getMetadataFields() const { std::vector ret; + ret.reserve(metadata_selects.size()); for (const auto& [field, _] : metadata_selects) { ret.push_back(field); } @@ -170,6 +174,7 @@ std::vector MetadataInfo::getMetadataFields() const { std::vector MetadataInfo::getMetadataSelects() const { std::vector ret; + ret.reserve(metadata_selects.size()); for (const auto& [field, select] : metadata_selects) { ret.push_back(fmt::format("{} as {}", select, field)); } diff --git a/src/silo/preprocessing/metadata_info.test.cpp b/src/silo/preprocessing/metadata_info.test.cpp index 719c810c0..e1e346566 100644 --- a/src/silo/preprocessing/metadata_info.test.cpp +++ b/src/silo/preprocessing/metadata_info.test.cpp @@ -19,7 +19,8 @@ TEST( {"country", silo::config::ValueType::STRING}, }, "gisaid_epi_isl", - }}; + } + }; EXPECT_THROW( silo::preprocessing::MetadataInfo::validateFromMetadataFile( @@ -42,9 +43,10 @@ TEST(MetadataInfo, isValidMedataFileShouldReturnTrueWithValidMetadataFile) { {"country", silo::config::ValueType::STRING}, }, "gisaid_epi_isl", - }}; + } + }; - silo::preprocessing::MetadataInfo fields = + const silo::preprocessing::MetadataInfo fields = silo::preprocessing::MetadataInfo::validateFromMetadataFile( "testBaseData/exampleDataset/small_metadata_set.tsv", valid_config ); @@ -80,9 +82,10 @@ TEST(MetadataInfo, shouldValidateCorrectNdjsonInputFile) { {"country", silo::config::ValueType::STRING}, }, "gisaid_epi_isl", - }}; + } + }; - silo::preprocessing::MetadataInfo fields = + const silo::preprocessing::MetadataInfo fields = silo::preprocessing::MetadataInfo::validateFromNdjsonFile( "testBaseData/exampleDatasetAsNdjson/input_file.ndjson", valid_config ); diff --git a/src/silo/preprocessing/partition.cpp b/src/silo/preprocessing/partition.cpp index 6906f69d8..08c170da6 100644 --- a/src/silo/preprocessing/partition.cpp +++ b/src/silo/preprocessing/partition.cpp @@ -1,26 +1,21 @@ #include "silo/preprocessing/partition.h" -#include #include -#include #include #include -#include -#include #include #include #include #include "silo/common/pango_lineage.h" -#include "silo/config/database_config.h" namespace silo::preprocessing { silo::preprocessing::Partition::Partition(std::vector&& chunks_) : chunks(std::move(chunks_)) { uint32_t running_total = 0; - for (PartitionChunk& chunk : chunks) { + for (const PartitionChunk& chunk : chunks) { running_total += chunk.size; } sequence_count = running_total; @@ -45,10 +40,6 @@ const std::vector& Partitions::getPartitions() const { return partitions; } -const std::vector& Partitions::getAllPartitionChunks() const { - return all_partition_chunks; -} - bool PartitionChunk::operator==(const PartitionChunk& other) const { return partition == other.partition && chunk == other.chunk && size == other.size; } @@ -71,7 +62,8 @@ struct nlohmann::adl_serializer { js_object["partition"].template get(), js_object["chunk"].template get(), js_object["size"].template get(), - js_object["offset"].template get()}; + js_object["offset"].template get() + }; } // NOLINTNEXTLINE(readability-identifier-naming) @@ -91,7 +83,8 @@ struct nlohmann::adl_serializer { // NOLINTNEXTLINE(readability-identifier-naming) static silo::preprocessing::Partition from_json(const nlohmann::json& js_object) { return silo::preprocessing::Partition{ - js_object.template get>()}; + js_object.template get>() + }; } // NOLINTNEXTLINE(readability-identifier-naming) diff --git a/src/silo/preprocessing/preprocessing_config.cpp b/src/silo/preprocessing/preprocessing_config.cpp index d6294c587..2ee6ce927 100644 --- a/src/silo/preprocessing/preprocessing_config.cpp +++ b/src/silo/preprocessing/preprocessing_config.cpp @@ -1,25 +1,10 @@ #include "silo/preprocessing/preprocessing_config.h" #include -#include #include -#include - -#include "silo/preprocessing/partition.h" namespace silo::preprocessing { -std::filesystem::path createOutputPath( - const std::filesystem::path& output_directory, - const std::string& folder -) { - auto return_path = output_directory / folder; - if (!std::filesystem::exists(return_path)) { - std::filesystem::create_directory(return_path); - } - return return_path; -} - PreprocessingConfig::PreprocessingConfig() = default; PreprocessingConfig::PreprocessingConfig( diff --git a/src/silo/preprocessing/preprocessing_config_reader.cpp b/src/silo/preprocessing/preprocessing_config_reader.cpp index 690d23948..c9618bb70 100644 --- a/src/silo/preprocessing/preprocessing_config_reader.cpp +++ b/src/silo/preprocessing/preprocessing_config_reader.cpp @@ -33,7 +33,8 @@ struct convert { extractStringIfPresent(node, "pangoLineageDefinitionFilename"), extractStringIfPresent(node, "referenceGenomeFilename"), extractStringIfPresent(node, "nucleotideSequencePrefix"), - extractStringIfPresent(node, "genePrefix")}; + extractStringIfPresent(node, "genePrefix") + }; return true; } @@ -75,28 +76,33 @@ PreprocessingConfig OptionalPreprocessingConfig::mergeValuesFromOrDefault( IntermediateResultsDirectory{ intermediate_results_directory.value_or(other.intermediate_results_directory.value_or( silo::preprocessing::DEFAULT_INTERMEDIATE_RESULTS_DIRECTORY.directory - ))}, + )) + }, OutputDirectory{output_directory.value_or( other.output_directory.value_or(silo::preprocessing::DEFAULT_OUTPUT_DIRECTORY.directory) )}, PreprocessingDatabaseLocation{ preprocessing_database_location.has_value() ? preprocessing_database_location - : other.preprocessing_database_location}, + : other.preprocessing_database_location + }, NdjsonInputFilename{ - ndjson_input_filename.has_value() ? ndjson_input_filename : other.ndjson_input_filename}, + ndjson_input_filename.has_value() ? ndjson_input_filename : other.ndjson_input_filename + }, MetadataFilename{metadata_file.value_or( other.metadata_file.value_or(silo::preprocessing::DEFAULT_METADATA_FILENAME.filename) )}, PangoLineageDefinitionFilename{ pango_lineage_definition_file.has_value() ? pango_lineage_definition_file - : other.pango_lineage_definition_file}, + : other.pango_lineage_definition_file + }, ReferenceGenomeFilename{reference_genome_file.value_or(other.reference_genome_file.value_or( silo::preprocessing::DEFAULT_REFERENCE_GENOME_FILENAME.filename ))}, NucleotideSequencePrefix{ nucleotide_sequence_prefix.value_or(other.nucleotide_sequence_prefix.value_or( silo::preprocessing::DEFAULT_NUCLEOTIDE_SEQUENCE_PREFIX.prefix - ))}, + )) + }, GenePrefix{gene_prefix.value_or( other.gene_prefix.value_or(silo::preprocessing::DEFAULT_GENE_PREFIX.prefix) )} diff --git a/src/silo/preprocessing/preprocessing_config_reader.test.cpp b/src/silo/preprocessing/preprocessing_config_reader.test.cpp index 3eb813db3..2b109ce2d 100644 --- a/src/silo/preprocessing/preprocessing_config_reader.test.cpp +++ b/src/silo/preprocessing/preprocessing_config_reader.test.cpp @@ -19,7 +19,6 @@ TEST(PreprocessingConfigReader, shouldReadConfigWithCorrectParametersAndDefaults ); const std::string input_directory = "./testBaseData/exampleDataset/"; - const std::string intermediate_directory = "./temp/"; ASSERT_EQ(config.getMetadataInputFilename(), input_directory + "small_metadata_set.tsv"); ASSERT_EQ( config.getPangoLineageDefinitionFilename(), input_directory + "pangolineage_alias.json" diff --git a/src/silo/preprocessing/preprocessing_database.cpp b/src/silo/preprocessing/preprocessing_database.cpp index b4b79fc80..526c95729 100644 --- a/src/silo/preprocessing/preprocessing_database.cpp +++ b/src/silo/preprocessing/preprocessing_database.cpp @@ -15,7 +15,19 @@ #include "silo/storage/reference_genomes.h" #include "silo/zstdfasta/zstd_compressor.h" #include "silo/zstdfasta/zstdfasta_table.h" -#include "silo/zstdfasta/zstdfasta_writer.h" + +using duckdb::BigIntValue; +using duckdb::BinaryExecutor; +using duckdb::Connection; +using duckdb::DataChunk; +using duckdb::ExpressionState; +using duckdb::ListValue; +using duckdb::LogicalType; +using duckdb::MaterializedQueryResult; +using duckdb::string_t; +using duckdb::StringVector; +using duckdb::Value; +using duckdb::Vector; namespace { @@ -45,45 +57,36 @@ class Compressors { } } - static void compressNuc( - duckdb::DataChunk& args, - duckdb::ExpressionState& /*state*/, - duckdb::Vector& result - ) { - duckdb::BinaryExecutor::Execute( + static void compressNuc(DataChunk& args, ExpressionState& /*state*/, Vector& result) { + BinaryExecutor::Execute( args.data[0], args.data[1], result, args.size(), - [&](const duckdb::string_t uncompressed, const duckdb::string_t segment_name) { + [&](const string_t uncompressed, const string_t segment_name) { std::string& buffer = nuc_buffers.at(segment_name.GetString()).local(); - size_t size_or_error_code = + const size_t size_or_error_code = nuc_compressors.at(segment_name.GetString()) .local() .compress( uncompressed.GetData(), uncompressed.GetSize(), buffer.data(), buffer.size() ); - return duckdb::StringVector::AddStringOrBlob( + return StringVector::AddStringOrBlob( result, buffer.data(), static_cast(size_or_error_code) ); } ); }; - static void compressAA( - duckdb::DataChunk& args, - duckdb::ExpressionState& /*state*/, - duckdb::Vector& result - ) { - using namespace duckdb; + static void compressAA(DataChunk& args, ExpressionState& /*state*/, Vector& result) { BinaryExecutor::Execute( args.data[0], args.data[1], result, args.size(), - [&](const duckdb::string_t uncompressed, const duckdb::string_t gene_name) { + [&](const string_t uncompressed, const string_t gene_name) { std::string& buffer = aa_buffers.at(gene_name.GetString()).local(); - size_t size_or_error_code = + const size_t size_or_error_code = aa_compressors.at(gene_name.GetString()) .local() .compress( @@ -120,21 +123,20 @@ PreprocessingDatabase::PreprocessingDatabase(const std::string& backing_file) connection.CreateVectorizedFunction( std::string(COMPRESS_NUC), - {duckdb::LogicalType::VARCHAR, duckdb::LogicalType::VARCHAR}, - duckdb::LogicalType::BLOB, + {LogicalType::VARCHAR, LogicalType::VARCHAR}, + LogicalType::BLOB, Compressors::compressNuc ); connection.CreateVectorizedFunction( std::string(COMPRESS_AA), - {duckdb::LogicalType::VARCHAR, duckdb::LogicalType::VARCHAR}, - duckdb::LogicalType::BLOB, + {LogicalType::VARCHAR, LogicalType::VARCHAR}, + LogicalType::BLOB, Compressors::compressAA ); } -std::unique_ptr PreprocessingDatabase::query(std::string sql_query -) { +std::unique_ptr PreprocessingDatabase::query(std::string sql_query) { SPDLOG_DEBUG("Preprocessing Database - Query:\n{}", sql_query); auto result = connection.Query(sql_query); SPDLOG_DEBUG("Preprocessing Database - Result:\n{}", result->ToString()); @@ -148,7 +150,7 @@ void PreprocessingDatabase::registerSequences(const silo::ReferenceGenomes& refe Compressors::initialize(reference_genomes); } -duckdb::Connection& PreprocessingDatabase::getConnection() { +Connection& PreprocessingDatabase::getConnection() { return connection; } @@ -163,8 +165,8 @@ preprocessing::Partitions PreprocessingDatabase::getPartitionDescriptor() { for (auto it = partition_descriptor_from_sql->begin(); it != partition_descriptor_from_sql->end(); ++it) { - const duckdb::Value db_partition_id = it.current_row.GetValue(0); - const uint32_t partition_id = duckdb::BigIntValue::Get(db_partition_id); + const auto db_partition_id = it.current_row.GetValue(0); + const uint32_t partition_id = BigIntValue::Get(db_partition_id); if (partition_id != check_partition_id_sorted_and_contiguous) { throw PreprocessingException( "The partition IDs produced by the preprocessing are not sorted, not starting from 0 " @@ -173,8 +175,8 @@ preprocessing::Partitions PreprocessingDatabase::getPartitionDescriptor() { } check_partition_id_sorted_and_contiguous++; - const duckdb::Value db_partition_size = it.current_row.GetValue(1); - const int64_t partition_size_bigint = duckdb::BigIntValue::Get(db_partition_size); + const auto db_partition_size = it.current_row.GetValue(1); + const int64_t partition_size_bigint = BigIntValue::Get(db_partition_size); if (partition_size_bigint <= 0) { throw PreprocessingException("Non-positive partition size encountered."); } @@ -186,8 +188,9 @@ preprocessing::Partitions PreprocessingDatabase::getPartitionDescriptor() { const auto partition_size = static_cast(partition_size_bigint); - partitions.emplace_back(std::vector{ - {partition_id, 0, partition_size, 0}}); + partitions.emplace_back( + std::vector{{partition_id, 0, partition_size, 0}} + ); } return preprocessing::Partitions(partitions); @@ -203,18 +206,18 @@ void PreprocessingDatabase::generateNucSequenceTable( } std::vector extractStringListValue( - duckdb::MaterializedQueryResult& result, + MaterializedQueryResult& result, size_t row, size_t column ) { std::vector return_value; - const duckdb::Value tmp_value = result.GetValue(column, row); - std::vector child_values = duckdb::ListValue::GetChildren(tmp_value); + const Value tmp_value = result.GetValue(column, row); + std::vector child_values = ListValue::GetChildren(tmp_value); std::transform( child_values.begin(), child_values.end(), std::back_inserter(return_value), - [](const duckdb::Value& value) { return value.GetValue(); } + [](const Value& value) { return value.GetValue(); } ); return return_value; } diff --git a/src/silo/preprocessing/preprocessor.cpp b/src/silo/preprocessing/preprocessor.cpp index ec49dced9..6f2384aa3 100644 --- a/src/silo/preprocessing/preprocessor.cpp +++ b/src/silo/preprocessing/preprocessor.cpp @@ -22,17 +22,18 @@ namespace silo::preprocessing { Preprocessor::Preprocessor( - const preprocessing::PreprocessingConfig preprocessing_config, - const config::DatabaseConfig database_config + preprocessing::PreprocessingConfig preprocessing_config, + config::DatabaseConfig database_config ) : preprocessing_config(std::move(preprocessing_config)), database_config(std::move(database_config)), - preprocessing_db(preprocessing_config.getPreprocessingDatabaseLocation().value_or(":memory:") + preprocessing_db( + this->preprocessing_config.getPreprocessingDatabaseLocation().value_or(":memory:") ) {} Database Preprocessor::preprocess() { SPDLOG_INFO("preprocessing - reading reference genome"); - ReferenceGenomes reference_genomes = + const auto reference_genomes = ReferenceGenomes::readFromFile(preprocessing_config.getReferenceGenomeFilename()); SPDLOG_INFO("preprocessing - building alias key"); @@ -43,10 +44,9 @@ Database Preprocessor::preprocess() { alias_key = PangoLineageAliasLookup::readFromFile(pango_lineage_definition_filename.value()); } - if (preprocessing_config.getNdjsonInputFilename().has_value()) { - buildTablesFromNdjsonInput( - preprocessing_config.getNdjsonInputFilename().value(), reference_genomes - ); + const auto& ndjson_input_filename = preprocessing_config.getNdjsonInputFilename(); + if (ndjson_input_filename.has_value()) { + buildTablesFromNdjsonInput(ndjson_input_filename.value(), reference_genomes); buildPartitioningTable(); createSequenceViews(reference_genomes); } else { @@ -55,7 +55,7 @@ Database Preprocessor::preprocess() { createPartitionedSequenceTables(reference_genomes); } - preprocessing::Partitions partition_descriptor = preprocessing_db.getPartitionDescriptor(); + const auto partition_descriptor = preprocessing_db.getPartitionDescriptor(); std::string order_by_clause = database_config.schema.getStrictOrderByClause(); SPDLOG_INFO("preprocessing - order by clause is {}", order_by_clause); @@ -107,7 +107,7 @@ void Preprocessor::buildTablesFromNdjsonInput( void Preprocessor::buildMetadataTableFromFile(const std::filesystem::path& metadata_filename) { SPDLOG_DEBUG("preprocessing - classic metadata file pipeline chosen"); - MetadataInfo metadata_info = + const auto metadata_info = MetadataInfo::validateFromMetadataFile(metadata_filename, database_config); (void)preprocessing_db.query(fmt::format( @@ -234,7 +234,8 @@ void Preprocessor::createSequenceViews(const ReferenceGenomes& reference_genomes order_by_select += ", " + database_config.schema.date_to_sort_by.value() + " as " + database_config.schema.date_to_sort_by.value(); } - std::string partition_by_where, partition_by_select; + std::string partition_by_where; + std::string partition_by_select; if (database_config.schema.partition_by.has_value()) { partition_by_select = "partition_key_to_partition.partition_id as partition_id"; partition_by_where = fmt::format( @@ -373,7 +374,7 @@ Database Preprocessor::buildDatabase( const auto& part = partition_descriptor.getPartitions()[partition_id]; for (size_t chunk_index = 0; chunk_index < part.getPartitionChunks().size(); ++chunk_index) { - uint32_t sequences_added = database.partitions[partition_id].columns.fill( + const auto sequences_added = database.partitions[partition_id].columns.fill( preprocessing_db.getConnection(), partition_id, order_by_clause, database_config ); database.partitions[partition_id].sequence_count += sequences_added; diff --git a/src/silo/preprocessing/sequence_info.cpp b/src/silo/preprocessing/sequence_info.cpp index 6c0a10ef9..02431845e 100644 --- a/src/silo/preprocessing/sequence_info.cpp +++ b/src/silo/preprocessing/sequence_info.cpp @@ -19,6 +19,7 @@ SequenceInfo::SequenceInfo(const silo::ReferenceGenomes& reference_genomes) { std::vector SequenceInfo::getSequenceSelects() { std::vector sequence_selects; + sequence_selects.reserve(nuc_sequence_names.size() + aa_sequence_names.size()); for (const std::string& name : nuc_sequence_names) { sequence_selects.emplace_back(fmt::format( "{0}(alignedNucleotideSequences.{1}, " diff --git a/src/silo/query_engine/actions/action.cpp b/src/silo/query_engine/actions/action.cpp index b13b7994b..33abf23f1 100644 --- a/src/silo/query_engine/actions/action.cpp +++ b/src/silo/query_engine/actions/action.cpp @@ -2,11 +2,9 @@ #include #include -#include #include #include #include -#include #include diff --git a/src/silo/query_engine/actions/aggregated.cpp b/src/silo/query_engine/actions/aggregated.cpp index 8a7d0580b..bf3cd1e13 100644 --- a/src/silo/query_engine/actions/aggregated.cpp +++ b/src/silo/query_engine/actions/aggregated.cpp @@ -1,10 +1,6 @@ #include "silo/query_engine/actions/aggregated.h" -#include -#include -#include #include -#include #include #include #include @@ -14,7 +10,6 @@ #include #include #include -#include #include "silo/config/database_config.h" #include "silo/database.h" @@ -24,7 +19,6 @@ #include "silo/query_engine/query_parse_exception.h" #include "silo/query_engine/query_result.h" #include "silo/storage/column_group.h" -#include "silo/storage/database_partition.h" namespace { @@ -65,7 +59,7 @@ QueryResult aggregateWithoutGrouping(const std::vector& bitmap_f uint32_t count = 0; for (const auto& filter : bitmap_filters) { count += filter->cardinality(); - }; + } std::map>> tuple_fields; tuple_fields[COUNT_FIELD] = static_cast(count); return QueryResult{std::vector{{tuple_fields}}}; diff --git a/src/silo/query_engine/actions/details.cpp b/src/silo/query_engine/actions/details.cpp index 9d7b05022..703e9fe06 100644 --- a/src/silo/query_engine/actions/details.cpp +++ b/src/silo/query_engine/actions/details.cpp @@ -1,15 +1,11 @@ #include "silo/query_engine/actions/details.h" #include -#include -#include -#include #include #include #include #include -#include #include "silo/config/database_config.h" #include "silo/database.h" @@ -19,7 +15,6 @@ #include "silo/query_engine/query_parse_exception.h" #include "silo/query_engine/query_result.h" #include "silo/storage/column_group.h" -#include "silo/storage/database_partition.h" namespace { diff --git a/src/silo/query_engine/actions/fasta_aligned.cpp b/src/silo/query_engine/actions/fasta_aligned.cpp index 67aeb4a00..abaae7cb7 100644 --- a/src/silo/query_engine/actions/fasta_aligned.cpp +++ b/src/silo/query_engine/actions/fasta_aligned.cpp @@ -1,20 +1,14 @@ #include "silo/query_engine/actions/fasta_aligned.h" -#include -#include -#include -#include #include #include #include -#include #include #include #include #include #include -#include #include "silo/common/aa_symbols.h" #include "silo/common/nucleotide_symbols.h" @@ -24,8 +18,6 @@ #include "silo/query_engine/operator_result.h" #include "silo/query_engine/query_parse_exception.h" #include "silo/query_engine/query_result.h" -#include "silo/storage/column_group.h" -#include "silo/storage/database_partition.h" #include "silo/storage/sequence_store.h" namespace silo::query_engine::actions { @@ -113,9 +105,7 @@ QueryResult FastaAligned::execute( for (auto& filter : bitmap_filter) { total_count += filter->cardinality(); } - CHECK_SILO_QUERY( - total_count < 10001, "FastaAligned action currently limited to 10000 sequences" - ); + CHECK_SILO_QUERY(total_count < 10001, "FastaAligned action currently limited to 10000 sequences") QueryResult results; for (uint32_t partition_index = 0; partition_index < database.partitions.size(); diff --git a/src/silo/query_engine/actions/insertions.cpp b/src/silo/query_engine/actions/insertions.cpp index 29bb2a5e6..579d2675f 100644 --- a/src/silo/query_engine/actions/insertions.cpp +++ b/src/silo/query_engine/actions/insertions.cpp @@ -1,9 +1,6 @@ #include "silo/query_engine/actions/insertions.h" #include -#include -#include -#include #include #include #include @@ -13,7 +10,6 @@ #include #include -#include #include "silo/common/aa_symbols.h" #include "silo/common/nucleotide_symbols.h" @@ -28,6 +24,8 @@ #include "silo/storage/database_partition.h" using silo::query_engine::OperatorResult; +using silo::storage::ColumnGroup; +using silo::storage::column::insertion::InsertionIndex; namespace silo::query_engine::actions { @@ -45,7 +43,8 @@ void InsertionAggregation::validateOrderByFields(const Database& /*d {std::string{POSITION_FIELD_NAME}, std::string{INSERTION_FIELD_NAME}, std::string{SEQUENCE_FIELD_NAME}, - std::string{COUNT_FIELD_NAME}}}; + std::string{COUNT_FIELD_NAME}} + }; for (const OrderByField& field : order_by_fields) { CHECK_SILO_QUERY( @@ -60,14 +59,45 @@ void InsertionAggregation::validateOrderByFields(const Database& /*d } template -void validateColumnNames( +void validateDatabaseColumnNames( + const ColumnGroup& column_group, + const std::vector& column_names +) { + for (const std::string& column_name : column_names) { + CHECK_SILO_QUERY( + column_group.getInsertionColumns().contains(column_name), + "The database does not contain the " + std::string(SymbolType::SYMBOL_NAME) + " column '" + + column_name + "'" + ) + } +} + +template +void validatePartitionColumnNames( const storage::ColumnPartitionGroup& column_group, const std::vector& column_names ) { - for (std::string column_name : column_names) { + for (const std::string& column_name : column_names) { CHECK_SILO_QUERY( column_group.getInsertionColumns().contains(column_name), - "The column '" + column_name + "' does not exist." + "The database does not contain the " + std::string(SymbolType::SYMBOL_NAME) + " column '" + + column_name + "'" + ) + } +} + +template +void validateSequenceNames( + const Database& database, + const std::vector& sequence_names +) { + std::vector all_sequence_names = database.getSequenceNames(); + for (const std::string& sequence_name : sequence_names) { + CHECK_SILO_QUERY( + std::find(all_sequence_names.begin(), all_sequence_names.end(), sequence_name) != + all_sequence_names.end(), + "The database does not contain the " + std::string(SymbolType::SYMBOL_NAME) + + " sequence '" + sequence_name + "'" ) } } @@ -93,28 +123,14 @@ InsertionAggregation::validateFieldsAndPreFilterBitmaps( const Database& database, std::vector& bitmap_filter ) const { - for (const std::string& column_name : column_names) { - CHECK_SILO_QUERY( - database.columns.getInsertionColumns().contains(column_name), - "The database does not contain the " + std::string(SymbolType::SYMBOL_NAME) + " column '" + - column_name + "'" - ); - } - std::vector all_sequence_names = database.getSequenceNames(); - for (const std::string& sequence_name : sequence_names) { - CHECK_SILO_QUERY( - std::find(all_sequence_names.begin(), all_sequence_names.end(), sequence_name) != - all_sequence_names.end(), - "The database does not contain the " + std::string(SymbolType::SYMBOL_NAME) + - " sequence '" + sequence_name + "'" - ); - } + validateDatabaseColumnNames(database.columns, column_names); + validateSequenceNames(database, sequence_names); std::unordered_map pre_filtered_bitmaps; for (size_t i = 0; i < database.partitions.size(); ++i) { const DatabasePartition& database_partition = database.partitions.at(i); - validateColumnNames(database_partition.columns, column_names); + validatePartitionColumnNames(database_partition.columns, column_names); for (auto& [column_name, insertion_column] : database_partition.columns.getInsertionColumns()) { @@ -199,7 +215,8 @@ void InsertionAggregation::addAggregatedInsertionsToInsertionCounts( {std::string(POSITION_FIELD_NAME), static_cast(position_and_insertion.position)}, {std::string(SEQUENCE_FIELD_NAME), sequence_name}, {std::string(INSERTION_FIELD_NAME), std::string(position_and_insertion.insertion_value)}, - {std::string(COUNT_FIELD_NAME), static_cast(count)}}; + {std::string(COUNT_FIELD_NAME), static_cast(count)} + }; output.push_back({fields}); } } @@ -209,10 +226,7 @@ QueryResult InsertionAggregation::execute( const Database& database, std::vector bitmap_filter ) const { - using storage::column::insertion::InsertionIndex; - - std::unordered_map::PrefilteredBitmaps> - bitmaps_to_evaluate = validateFieldsAndPreFilterBitmaps(database, bitmap_filter); + const auto bitmaps_to_evaluate = validateFieldsAndPreFilterBitmaps(database, bitmap_filter); std::vector insertion_counts; for (const auto& [sequence_name, prefiltered_bitmaps] : bitmaps_to_evaluate) { @@ -275,11 +289,13 @@ void from_json( ); } +// NOLINTNEXTLINE(readability-identifier-naming) template void from_json( const nlohmann::json& json, std::unique_ptr>& action ); +// NOLINTNEXTLINE(readability-identifier-naming) template void from_json( const nlohmann::json& json, std::unique_ptr>& action diff --git a/src/silo/query_engine/actions/mutations.cpp b/src/silo/query_engine/actions/mutations.cpp index 4ad45e9d2..682fc215d 100644 --- a/src/silo/query_engine/actions/mutations.cpp +++ b/src/silo/query_engine/actions/mutations.cpp @@ -1,9 +1,6 @@ #include "silo/query_engine/actions/mutations.h" -#include #include -#include -#include #include #include #include @@ -14,7 +11,6 @@ #include #include #include -#include #include "silo/common/aa_symbols.h" #include "silo/common/nucleotide_symbols.h" @@ -127,7 +123,8 @@ SymbolMap> Mutations::calculateMut template void Mutations::validateOrderByFields(const Database& /*database*/) const { const std::vector result_field_names{ - {MUTATION_FIELD_NAME, PROPORTION_FIELD_NAME, COUNT_FIELD_NAME}}; + {MUTATION_FIELD_NAME, PROPORTION_FIELD_NAME, COUNT_FIELD_NAME} + }; for (const OrderByField& field : order_by_fields) { CHECK_SILO_QUERY( @@ -182,7 +179,8 @@ void Mutations::addMutationsToOutput( std::to_string(pos + 1) + SymbolType::symbolToChar(symbol)}, {SEQUENCE_FIELD_NAME, sequence_name}, {PROPORTION_FIELD_NAME, proportion}, - {COUNT_FIELD_NAME, static_cast(count)}}; + {COUNT_FIELD_NAME, static_cast(count)} + }; output.push_back({fields}); } } @@ -230,8 +228,8 @@ QueryResult Mutations::execute( return {mutation_proportions}; } -// NOLINTNEXTLINE(readability-identifier-naming) template +// NOLINTNEXTLINE(readability-identifier-naming) void from_json(const nlohmann::json& json, std::unique_ptr>& action) { CHECK_SILO_QUERY( !json.contains("sequenceName") || @@ -260,7 +258,7 @@ void from_json(const nlohmann::json& json, std::unique_ptr "1.0]. Only mutations are returned if the proportion of sequences having this mutation, is " "at least minProportion" ) - double min_proportion = json["minProportion"].get(); + const double min_proportion = json["minProportion"].get(); if (min_proportion < 0 || min_proportion > 1) { throw QueryParseException("Invalid proportion: minProportion must be in interval [0.0, 1.0]"); } @@ -270,10 +268,12 @@ void from_json(const nlohmann::json& json, std::unique_ptr template class Mutations; template class Mutations; +// NOLINTNEXTLINE(readability-identifier-naming) template void from_json( const nlohmann::json& json, std::unique_ptr>& action ); +// NOLINTNEXTLINE(readability-identifier-naming) template void from_json( const nlohmann::json& json, std::unique_ptr>& action diff --git a/src/silo/query_engine/actions/tuple.cpp b/src/silo/query_engine/actions/tuple.cpp index 44843109e..1a8a3dc9f 100644 --- a/src/silo/query_engine/actions/tuple.cpp +++ b/src/silo/query_engine/actions/tuple.cpp @@ -1,28 +1,19 @@ #include "silo/query_engine/actions/tuple.h" -#include #include #include #include #include -#include #include #include #include #include "silo/common/date.h" -#include "silo/common/pango_lineage.h" #include "silo/common/string.h" #include "silo/common/types.h" #include "silo/config/database_config.h" #include "silo/query_engine/actions/action.h" -#include "silo/storage/column/date_column.h" #include "silo/storage/column/float_column.h" -#include "silo/storage/column/indexed_string_column.h" -#include "silo/storage/column/insertion_column.h" -#include "silo/storage/column/int_column.h" -#include "silo/storage/column/pango_lineage_column.h" -#include "silo/storage/column/string_column.h" #include "silo/storage/column_group.h" using json_value_type = std::optional>; @@ -330,14 +321,14 @@ Tuple& Tuple::operator=(const Tuple& other) { columns = other.columns; std::memcpy(this->data, other.data, data_size); return *this; -}; +} Tuple& Tuple::operator=(Tuple&& other) noexcept { this->columns = other.columns; this->data_size = other.data_size; std::swap(this->data, other.data); return *this; -}; +} std::map Tuple::getFields() const { std::map fields; diff --git a/src/silo/query_engine/actions/tuple.test.cpp b/src/silo/query_engine/actions/tuple.test.cpp index 531574246..057180d56 100644 --- a/src/silo/query_engine/actions/tuple.test.cpp +++ b/src/silo/query_engine/actions/tuple.test.cpp @@ -5,6 +5,8 @@ #include "silo/config/database_config.h" #include "silo/query_engine/actions/action.h" +// NOLINTBEGIN(bugprone-unchecked-optional-access) + std::pair createSinglePartitionColumns() { std::pair return_value; @@ -176,7 +178,7 @@ TEST(Tuple, getsCreatedAndReturnsItsFieldsSuccessfully2) { TEST(TupleFactory, allocatesOneAllocatesManyEqual) { auto columns = createSinglePartitionColumns(); TupleFactory factory(columns.second, columns.second.metadata); - Tuple under_test1 = factory.allocateOne(0); + const Tuple under_test1 = factory.allocateOne(0); auto under_test_vector = factory.allocateMany(1); ASSERT_EQ(under_test_vector.size(), 1); factory.overwrite(under_test_vector.front(), 0); @@ -186,10 +188,10 @@ TEST(TupleFactory, allocatesOneAllocatesManyEqual) { TEST(Tuple, equalityOperatorEquatesCorrectly) { auto columns = createSinglePartitionColumns(); TupleFactory factory(columns.second, columns.second.metadata); - Tuple under_test0a = factory.allocateOne(0); - Tuple under_test0b = factory.allocateOne(0); - Tuple under_test1 = factory.allocateOne(1); - Tuple under_test2 = factory.allocateOne(2); + const Tuple under_test0a = factory.allocateOne(0); + const Tuple under_test0b = factory.allocateOne(0); + const Tuple under_test1 = factory.allocateOne(1); + const Tuple under_test2 = factory.allocateOne(2); ASSERT_EQ(under_test0a, under_test0b); ASSERT_NE(under_test0a, under_test1); ASSERT_EQ(under_test0a, under_test2); @@ -201,10 +203,10 @@ TEST(Tuple, equalityOperatorEquatesCorrectly) { TEST(Tuple, comparesFieldsCorrectly) { auto columns = createSinglePartitionColumns(); TupleFactory factory(columns.second, columns.second.metadata); - Tuple tuple0a = factory.allocateOne(0); - Tuple tuple0b = factory.allocateOne(0); - Tuple tuple1 = factory.allocateOne(1); - Tuple tuple2 = factory.allocateOne(2); + const Tuple tuple0a = factory.allocateOne(0); + const Tuple tuple0b = factory.allocateOne(0); + const Tuple tuple1 = factory.allocateOne(1); + const Tuple tuple2 = factory.allocateOne(2); std::vector order_by_fields; order_by_fields.push_back({"dummy_indexed_string_column", true}); @@ -230,7 +232,8 @@ TEST(Tuple, comparesFieldsCorrectly) { ASSERT_TRUE(under_test(tuple2, tuple1)); order_by_fields.clear(); - Tuple::Comparator under_test2 = Tuple::getComparator(columns.second.metadata, order_by_fields); + const Tuple::Comparator under_test2 = + Tuple::getComparator(columns.second.metadata, order_by_fields); ASSERT_FALSE(under_test2(tuple0a, tuple0b)); ASSERT_FALSE(under_test2(tuple0b, tuple0a)); @@ -294,3 +297,5 @@ TEST(Tuple, comparesFieldsCorrectly) { ASSERT_TRUE(under_test4(tuple1, tuple2)); ASSERT_FALSE(under_test4(tuple2, tuple1)); } + +// NOLINTEND(bugprone-unchecked-optional-access) diff --git a/src/silo/query_engine/filter_expressions/aa_symbol_equals.cpp b/src/silo/query_engine/filter_expressions/aa_symbol_equals.cpp index d13b34687..eb38d3e42 100644 --- a/src/silo/query_engine/filter_expressions/aa_symbol_equals.cpp +++ b/src/silo/query_engine/filter_expressions/aa_symbol_equals.cpp @@ -1,12 +1,9 @@ #include "silo/query_engine/filter_expressions/aa_symbol_equals.h" -#include #include #include -#include #include -#include #include "silo/common/aa_symbols.h" #include "silo/query_engine/filter_expressions/expression.h" diff --git a/src/silo/query_engine/filter_expressions/and.cpp b/src/silo/query_engine/filter_expressions/and.cpp index 3333074db..56d0b6caf 100644 --- a/src/silo/query_engine/filter_expressions/and.cpp +++ b/src/silo/query_engine/filter_expressions/and.cpp @@ -1,9 +1,7 @@ #include "silo/query_engine/filter_expressions/and.h" #include -#include #include -#include #include #include @@ -128,9 +126,8 @@ std::tuple(database_partition.sequence_count)); return { - std::move(empty), - OperatorVector(), - std::vector>{}}; + std::move(empty), OperatorVector(), std::vector>{} + }; } if (child->type() == operators::INTERSECTION) { auto* intersection_child = dynamic_cast(child.get()); @@ -162,7 +159,8 @@ std::tuple And::compile( diff --git a/src/silo/query_engine/filter_expressions/date_between.cpp b/src/silo/query_engine/filter_expressions/date_between.cpp index 542f30ce1..18b3f4a9e 100644 --- a/src/silo/query_engine/filter_expressions/date_between.cpp +++ b/src/silo/query_engine/filter_expressions/date_between.cpp @@ -1,6 +1,5 @@ #include "silo/query_engine/filter_expressions/date_between.h" -#include #include #include #include @@ -13,7 +12,6 @@ #include "silo/query_engine/operators/selection.h" #include "silo/query_engine/query_parse_exception.h" #include "silo/storage/column/date_column.h" -#include "silo/storage/column_group.h" #include "silo/storage/database_partition.h" namespace silo { diff --git a/src/silo/query_engine/filter_expressions/float_between.cpp b/src/silo/query_engine/filter_expressions/float_between.cpp index e45aa0c73..6fa996a15 100644 --- a/src/silo/query_engine/filter_expressions/float_between.cpp +++ b/src/silo/query_engine/filter_expressions/float_between.cpp @@ -1,7 +1,6 @@ #include "silo/query_engine/filter_expressions/float_between.h" #include -#include #include #include #include @@ -11,8 +10,6 @@ #include "silo/query_engine/filter_expressions/expression.h" #include "silo/query_engine/operators/selection.h" #include "silo/query_engine/query_parse_exception.h" -#include "silo/storage/column/float_column.h" -#include "silo/storage/column_group.h" #include "silo/storage/database_partition.h" namespace silo { diff --git a/src/silo/query_engine/filter_expressions/float_equals.cpp b/src/silo/query_engine/filter_expressions/float_equals.cpp index 7875d7719..fbc9b4c03 100644 --- a/src/silo/query_engine/filter_expressions/float_equals.cpp +++ b/src/silo/query_engine/filter_expressions/float_equals.cpp @@ -1,7 +1,6 @@ #include "silo/query_engine/filter_expressions/float_equals.h" #include -#include #include #include @@ -11,8 +10,6 @@ #include "silo/query_engine/operators/empty.h" #include "silo/query_engine/operators/selection.h" #include "silo/query_engine/query_parse_exception.h" -#include "silo/storage/column/float_column.h" -#include "silo/storage/column_group.h" #include "silo/storage/database_partition.h" namespace silo { diff --git a/src/silo/query_engine/filter_expressions/has_aa_mutation.cpp b/src/silo/query_engine/filter_expressions/has_aa_mutation.cpp index 9472cd1c0..970a15d35 100644 --- a/src/silo/query_engine/filter_expressions/has_aa_mutation.cpp +++ b/src/silo/query_engine/filter_expressions/has_aa_mutation.cpp @@ -1,9 +1,6 @@ #include "silo/query_engine/filter_expressions/has_aa_mutation.h" -#include #include -#include -#include #include #include @@ -17,7 +14,6 @@ #include "silo/query_engine/filter_expressions/or.h" #include "silo/query_engine/operators/operator.h" #include "silo/query_engine/query_parse_exception.h" -#include "silo/storage/sequence_store.h" namespace silo { class DatabasePartition; @@ -50,7 +46,9 @@ std::unique_ptr HasAAMutation::compile( } std::vector symbols(AminoAcid::SYMBOLS.begin(), AminoAcid::SYMBOLS.end()); + // NOLINTNEXTLINE(bugprone-unused-return-value) (void)std::remove(symbols.begin(), symbols.end(), AminoAcid::Symbol::X); + // NOLINTNEXTLINE(bugprone-unused-return-value) (void)std::remove(symbols.begin(), symbols.end(), ref_symbol); std::vector> symbol_filters; std::transform( diff --git a/src/silo/query_engine/filter_expressions/has_mutation.cpp b/src/silo/query_engine/filter_expressions/has_mutation.cpp index 0a589ec7a..9fbf548fd 100644 --- a/src/silo/query_engine/filter_expressions/has_mutation.cpp +++ b/src/silo/query_engine/filter_expressions/has_mutation.cpp @@ -1,7 +1,5 @@ #include "silo/query_engine/filter_expressions/has_mutation.h" -#include -#include #include #include #include @@ -17,7 +15,6 @@ #include "silo/query_engine/filter_expressions/or.h" #include "silo/query_engine/operators/operator.h" #include "silo/query_engine/query_parse_exception.h" -#include "silo/storage/sequence_store.h" namespace silo { class DatabasePartition; @@ -64,6 +61,7 @@ std::unique_ptr HasMutation::compile( Nucleotide::Symbol::G, Nucleotide::Symbol::T, }; + // NOLINTNEXTLINE(bugprone-unused-return-value) (void)std::remove(symbols.begin(), symbols.end(), ref_symbol); std::vector> symbol_filters; std::transform( @@ -79,7 +77,7 @@ std::unique_ptr HasMutation::compile( return Or(std::move(symbol_filters)).compile(database, database_partition, NONE); } -// NOLINTNEXTLINE(readabi) +// NOLINTNEXTLINE(readability-identifier-naming) void from_json(const nlohmann::json& json, std::unique_ptr& filter) { CHECK_SILO_QUERY( json.contains("position"), diff --git a/src/silo/query_engine/filter_expressions/insertion_contains.cpp b/src/silo/query_engine/filter_expressions/insertion_contains.cpp index 0a7203c2e..1dc4108e2 100644 --- a/src/silo/query_engine/filter_expressions/insertion_contains.cpp +++ b/src/silo/query_engine/filter_expressions/insertion_contains.cpp @@ -1,11 +1,8 @@ #include "silo/query_engine/filter_expressions/insertion_contains.h" -#include -#include #include #include #include -#include #include #include @@ -23,8 +20,6 @@ #include "silo/query_engine/operators/union.h" #include "silo/query_engine/query_parse_exception.h" #include "silo/storage/column/insertion_column.h" -#include "silo/storage/column/insertion_index.h" -#include "silo/storage/column_group.h" #include "silo/storage/database_partition.h" namespace silo::query_engine::filter_expressions { @@ -41,17 +36,27 @@ InsertionContains::InsertionContains( position(position), value(std::move(value)) {} +std::string getColumnNamesString( + const std::vector& column_names, + const std::string& symbol_name +) { + if (column_names.empty()) { + return "in all available " + symbol_name + " columns"; + } + if (column_names.size() == 1) { + return "in the " + symbol_name + " column " + column_names.at(0); + } + return "in the " + symbol_name + " columns [" + boost::algorithm::join(column_names, ",") + "]"; +} + template std::string InsertionContains::toString(const silo::Database& /*database*/) const { const std::string symbol_name = std::string(SymbolType::SYMBOL_NAME); const std::string sequence_string = sequence_name ? "The sequence '" + sequence_name.value() + "'" : "The default " + symbol_name + " sequence "; - const std::string columns_string = - column_names.empty() ? "in all available " + symbol_name + " columns" - : column_names.size() == 1 - ? "in the " + symbol_name + " column " + column_names.at(0) - : "in the " + symbol_name + " columns [" + boost::algorithm::join(column_names, ",") + "]"; + + const std::string columns_string = getColumnNamesString(column_names, symbol_name); return sequence_string + columns_string + " has insertion '" + value + "'"; } @@ -84,7 +89,8 @@ std::unique_ptr InsertionContains().has_value(), "The database has no default " + std::string(SymbolType::SYMBOL_NAME_LOWER_CASE) + " sequence name" - ); + ) + // NOLINTNEXTLINE(bugprone-unchecked-optional-access) -- the previous statement checks it validated_sequence_name = *database.getDefaultSequenceName(); } @@ -110,13 +116,13 @@ std::unique_ptr InsertionContains(database_partition.sequence_count); - } else if (column_operators.size() == 1) { + } + if (column_operators.size() == 1) { return std::move(column_operators.at(0)); - } else { - return std::make_unique( - std::move(column_operators), database_partition.sequence_count - ); } + return std::make_unique( + std::move(column_operators), database_partition.sequence_count + ); } namespace { @@ -207,11 +213,13 @@ void from_json(const nlohmann::json& json, std::unique_ptr( const nlohmann::json& json, std::unique_ptr>& filter ); +// NOLINTNEXTLINE(readability-identifier-naming) template void from_json( const nlohmann::json& json, std::unique_ptr>& filter diff --git a/src/silo/query_engine/filter_expressions/int_between.cpp b/src/silo/query_engine/filter_expressions/int_between.cpp index 9dbdf213a..e37a7deae 100644 --- a/src/silo/query_engine/filter_expressions/int_between.cpp +++ b/src/silo/query_engine/filter_expressions/int_between.cpp @@ -1,6 +1,5 @@ #include "silo/query_engine/filter_expressions/int_between.h" -#include #include #include #include @@ -11,8 +10,6 @@ #include "silo/query_engine/filter_expressions/expression.h" #include "silo/query_engine/operators/selection.h" #include "silo/query_engine/query_parse_exception.h" -#include "silo/storage/column/int_column.h" -#include "silo/storage/column_group.h" #include "silo/storage/database_partition.h" namespace silo { diff --git a/src/silo/query_engine/filter_expressions/int_equals.cpp b/src/silo/query_engine/filter_expressions/int_equals.cpp index 696413c88..508d1ce2a 100644 --- a/src/silo/query_engine/filter_expressions/int_equals.cpp +++ b/src/silo/query_engine/filter_expressions/int_equals.cpp @@ -1,6 +1,5 @@ #include "silo/query_engine/filter_expressions/int_equals.h" -#include #include #include @@ -9,8 +8,6 @@ #include "silo/query_engine/operators/empty.h" #include "silo/query_engine/operators/selection.h" #include "silo/query_engine/query_parse_exception.h" -#include "silo/storage/column/int_column.h" -#include "silo/storage/column_group.h" #include "silo/storage/database_partition.h" namespace silo { diff --git a/src/silo/query_engine/filter_expressions/nof.cpp b/src/silo/query_engine/filter_expressions/nof.cpp index 7afc61707..a8ca7f904 100644 --- a/src/silo/query_engine/filter_expressions/nof.cpp +++ b/src/silo/query_engine/filter_expressions/nof.cpp @@ -1,6 +1,5 @@ #include "silo/query_engine/filter_expressions/nof.h" -#include #include #include #include @@ -214,7 +213,8 @@ NOf::mapChildExpressions( int>{ std::move(non_negated_child_operators), std::move(negated_child_operators), - updated_number_of_matchers}; + updated_number_of_matchers + }; } std::unique_ptr NOf::rewriteNonExact( diff --git a/src/silo/query_engine/filter_expressions/nucleotide_symbol_equals.cpp b/src/silo/query_engine/filter_expressions/nucleotide_symbol_equals.cpp index d9cd4798c..58bf26a65 100644 --- a/src/silo/query_engine/filter_expressions/nucleotide_symbol_equals.cpp +++ b/src/silo/query_engine/filter_expressions/nucleotide_symbol_equals.cpp @@ -1,14 +1,10 @@ #include "silo/query_engine/filter_expressions/nucleotide_symbol_equals.h" -#include #include -#include -#include #include #include #include -#include #include "silo/common/nucleotide_symbols.h" #include "silo/config/database_config.h" @@ -21,7 +17,6 @@ #include "silo/query_engine/operators/operator.h" #include "silo/query_engine/query_parse_exception.h" #include "silo/storage/database_partition.h" -#include "silo/storage/sequence_store.h" using silo::Nucleotide; @@ -73,7 +68,7 @@ const std::array, Nucleotide::COUNT> AMBIGUITY_N {Nucleotide::Symbol::V}, {Nucleotide::Symbol::N}, }}; -}; // namespace +} // namespace namespace silo::query_engine::filter_expressions { diff --git a/src/silo/query_engine/filter_expressions/or.cpp b/src/silo/query_engine/filter_expressions/or.cpp index 43be62fdf..5a4493d36 100644 --- a/src/silo/query_engine/filter_expressions/or.cpp +++ b/src/silo/query_engine/filter_expressions/or.cpp @@ -1,7 +1,6 @@ #include "silo/query_engine/filter_expressions/or.h" #include -#include #include #include diff --git a/src/silo/query_engine/filter_expressions/pango_lineage_filter.cpp b/src/silo/query_engine/filter_expressions/pango_lineage_filter.cpp index 24cebc7ee..ae061a37c 100644 --- a/src/silo/query_engine/filter_expressions/pango_lineage_filter.cpp +++ b/src/silo/query_engine/filter_expressions/pango_lineage_filter.cpp @@ -1,8 +1,6 @@ #include "silo/query_engine/filter_expressions/pango_lineage_filter.h" -#include #include -#include #include #include @@ -11,8 +9,6 @@ #include "silo/query_engine/operators/empty.h" #include "silo/query_engine/operators/index_scan.h" #include "silo/query_engine/query_parse_exception.h" -#include "silo/storage/column/pango_lineage_column.h" -#include "silo/storage/column_group.h" #include "silo/storage/database_partition.h" namespace silo::query_engine::operators { diff --git a/src/silo/query_engine/filter_expressions/string_equals.cpp b/src/silo/query_engine/filter_expressions/string_equals.cpp index c9a2f9588..d050daa47 100644 --- a/src/silo/query_engine/filter_expressions/string_equals.cpp +++ b/src/silo/query_engine/filter_expressions/string_equals.cpp @@ -1,11 +1,9 @@ #include "silo/query_engine/filter_expressions/string_equals.h" -#include #include #include #include -#include #include "silo/common/string.h" #include "silo/query_engine/filter_expressions/expression.h" @@ -13,9 +11,6 @@ #include "silo/query_engine/operators/index_scan.h" #include "silo/query_engine/operators/selection.h" #include "silo/query_engine/query_parse_exception.h" -#include "silo/storage/column/indexed_string_column.h" -#include "silo/storage/column/string_column.h" -#include "silo/storage/column_group.h" #include "silo/storage/database_partition.h" namespace silo { diff --git a/src/silo/query_engine/operators/full.cpp b/src/silo/query_engine/operators/full.cpp index 872fff5ee..074e66b8b 100644 --- a/src/silo/query_engine/operators/full.cpp +++ b/src/silo/query_engine/operators/full.cpp @@ -2,8 +2,6 @@ #include -#include - #include "silo/query_engine/operator_result.h" #include "silo/query_engine/operators/empty.h" #include "silo/query_engine/operators/operator.h" diff --git a/src/silo/query_engine/operators/intersection.cpp b/src/silo/query_engine/operators/intersection.cpp index 072ee389e..facee9bdf 100644 --- a/src/silo/query_engine/operators/intersection.cpp +++ b/src/silo/query_engine/operators/intersection.cpp @@ -1,13 +1,10 @@ #include "silo/query_engine/operators/intersection.h" -#include -#include #include #include #include #include -#include #include "silo/query_engine/operator_result.h" #include "silo/query_engine/operators/complement.h" diff --git a/src/silo/query_engine/operators/range_selection.cpp b/src/silo/query_engine/operators/range_selection.cpp index 5d23d9379..0362da5c2 100644 --- a/src/silo/query_engine/operators/range_selection.cpp +++ b/src/silo/query_engine/operators/range_selection.cpp @@ -1,13 +1,10 @@ #include "silo/query_engine/operators/range_selection.h" -#include -#include #include #include #include #include -#include #include "silo/query_engine/operator_result.h" #include "silo/query_engine/operators/operator.h" diff --git a/src/silo/query_engine/operators/selection.cpp b/src/silo/query_engine/operators/selection.cpp index 7bb9c7271..29a7313dc 100644 --- a/src/silo/query_engine/operators/selection.cpp +++ b/src/silo/query_engine/operators/selection.cpp @@ -1,6 +1,5 @@ #include "silo/query_engine/operators/selection.h" -#include #include #include #include diff --git a/src/silo/query_engine/operators/threshold.cpp b/src/silo/query_engine/operators/threshold.cpp index 4f414a5a2..c72b6e6e6 100644 --- a/src/silo/query_engine/operators/threshold.cpp +++ b/src/silo/query_engine/operators/threshold.cpp @@ -1,7 +1,5 @@ #include "silo/query_engine/operators/threshold.h" -#include -#include #include #include #include diff --git a/src/silo/query_engine/operators/union.cpp b/src/silo/query_engine/operators/union.cpp index 7d79eb2ad..c834814bc 100644 --- a/src/silo/query_engine/operators/union.cpp +++ b/src/silo/query_engine/operators/union.cpp @@ -1,8 +1,5 @@ #include "silo/query_engine/operators/union.h" -#include -#include -#include #include #include #include diff --git a/src/silo/query_engine/query_engine.cpp b/src/silo/query_engine/query_engine.cpp index 9e12d8e54..97f90fca0 100644 --- a/src/silo/query_engine/query_engine.cpp +++ b/src/silo/query_engine/query_engine.cpp @@ -1,26 +1,21 @@ #include "silo/query_engine/query_engine.h" -#include -#include #include #include #include #include -#include #include #include #include "silo/common/block_timer.h" #include "silo/common/log.h" #include "silo/database.h" -#include "silo/query_engine/actions/action.h" #include "silo/query_engine/filter_expressions/expression.h" #include "silo/query_engine/operator_result.h" #include "silo/query_engine/operators/operator.h" #include "silo/query_engine/query.h" #include "silo/query_engine/query_result.h" -#include "silo/storage/database_partition.h" #define CHECK_SILO_QUERY(condition, message) \ if (!(condition)) { \ diff --git a/src/silo/storage/column/float_column.cpp b/src/silo/storage/column/float_column.cpp index 8aa7de513..a90b6bb49 100644 --- a/src/silo/storage/column/float_column.cpp +++ b/src/silo/storage/column/float_column.cpp @@ -3,8 +3,6 @@ #include #include -#include - namespace silo::storage::column { FloatColumnPartition::FloatColumnPartition() = default; diff --git a/src/silo/storage/column/indexed_string_column.cpp b/src/silo/storage/column/indexed_string_column.cpp index 54124b753..a7d0d55e5 100644 --- a/src/silo/storage/column/indexed_string_column.cpp +++ b/src/silo/storage/column/indexed_string_column.cpp @@ -3,7 +3,6 @@ #include #include "silo/common/bidirectional_map.h" -#include "silo/common/types.h" namespace silo::storage::column { diff --git a/src/silo/storage/column/indexed_string_column.test.cpp b/src/silo/storage/column/indexed_string_column.test.cpp index f1d1d3958..999f28e18 100644 --- a/src/silo/storage/column/indexed_string_column.test.cpp +++ b/src/silo/storage/column/indexed_string_column.test.cpp @@ -4,6 +4,8 @@ using silo::storage::column::IndexedStringColumnPartition; +// NOLINTBEGIN(bugprone-unchecked-optional-access) + TEST(IndexedStringColumn, shouldReturnTheCorrectFilteredValues) { silo::common::BidirectionalMap lookup; IndexedStringColumnPartition under_test(lookup); @@ -44,3 +46,5 @@ TEST(IndexedStringColumnPartition, insertValuesToPartition) { EXPECT_EQ(under_test.lookupValue(1U), "value 2"); EXPECT_EQ(under_test.lookupValue(2U), "value 3"); } + +// NOLINTEND(bugprone-unchecked-optional-access) diff --git a/src/silo/storage/column/insertion_column.cpp b/src/silo/storage/column/insertion_column.cpp index b26828067..0a0390e84 100644 --- a/src/silo/storage/column/insertion_column.cpp +++ b/src/silo/storage/column/insertion_column.cpp @@ -12,7 +12,6 @@ #include "silo/common/bidirectional_map.h" #include "silo/common/nucleotide_symbols.h" #include "silo/common/string_utils.h" -#include "silo/common/types.h" #include "silo/preprocessing/preprocessing_exception.h" #include "silo/storage/column/insertion_index.h" @@ -69,15 +68,14 @@ InsertionEntry parseInsertion( template InsertionColumnPartition::InsertionColumnPartition( common::BidirectionalMap& lookup, - const std::optional default_sequence_name - + std::optional default_sequence_name ) : lookup(lookup), default_sequence_name(std::move(default_sequence_name)) {} template void InsertionColumnPartition::insert(const std::string& value) { - if (value == "") { + if (value.empty()) { insertNull(); return; } @@ -156,7 +154,7 @@ std::string InsertionColumnPartition::lookupValue(silo::Idx value_id template InsertionColumn::InsertionColumn(std::optional default_sequence_name) - : default_sequence_name(default_sequence_name) { + : default_sequence_name(std::move(default_sequence_name)) { lookup = std::make_unique>(); } diff --git a/src/silo/storage/column/insertion_column.test.cpp b/src/silo/storage/column/insertion_column.test.cpp index 776499a0e..d571f28ba 100644 --- a/src/silo/storage/column/insertion_column.test.cpp +++ b/src/silo/storage/column/insertion_column.test.cpp @@ -6,7 +6,7 @@ using silo::storage::column::InsertionColumnPartition; TEST(InsertionColumn, insertValuesToPartition) { silo::common::BidirectionalMap lookup; - std::optional default_name = "main"; + const std::optional default_name = "main"; InsertionColumnPartition under_test(lookup, default_name); under_test.insert("25701:ACCA"); @@ -30,7 +30,7 @@ TEST(InsertionColumn, insertValuesToPartition) { TEST(InsertionColumn, shouldReturnTheCorrectSearchedValues) { silo::common::BidirectionalMap lookup; - std::optional default_name = "main"; + const std::optional default_name = "main"; InsertionColumnPartition under_test(lookup, default_name); under_test.insert("25701:ACCA"); diff --git a/src/silo/storage/column/insertion_index.cpp b/src/silo/storage/column/insertion_index.cpp index 4112d59cb..37d45f0fc 100644 --- a/src/silo/storage/column/insertion_index.cpp +++ b/src/silo/storage/column/insertion_index.cpp @@ -1,8 +1,6 @@ #include "silo/storage/column/insertion_index.h" -#include #include -#include #include #include #include @@ -49,9 +47,8 @@ std::vector> extractThreeMers( } for (size_t i = 0; (i + 2) < continuous_string.size(); i += 3) { const std::array three_mer{ - continuous_symbols->at(i), - continuous_symbols->at(i + 1), - continuous_symbols->at(i + 2)}; + continuous_symbols->at(i), continuous_symbols->at(i + 1), continuous_symbols->at(i + 2) + }; result.insert(three_mer); } } @@ -173,7 +170,7 @@ void InsertionPosition::buildThreeMerIndex() { for (const Nucleotide::Symbol symbol2 : Nucleotide::SYMBOLS) { for (const Nucleotide::Symbol symbol3 : Nucleotide::SYMBOLS) { if (unique_three_mers[symbol1][symbol2][symbol3]) { - std::array tuple{symbol1, symbol2, symbol3}; + const std::array tuple{symbol1, symbol2, symbol3}; three_mer_index.emplace(tuple, InsertionIds{}) .first->second.push_back(insertion_id); } @@ -214,7 +211,7 @@ void InsertionPosition::buildThreeMerIndex() { for (const AminoAcid::Symbol symbol2 : AminoAcid::SYMBOLS) { for (const AminoAcid::Symbol symbol3 : AminoAcid::SYMBOLS) { if (unique_three_mers[symbol1][symbol2][symbol3]) { - std::array tuple{symbol1, symbol2, symbol3}; + const std::array tuple{symbol1, symbol2, symbol3}; three_mer_index.emplace(tuple, InsertionIds{}) .first->second.push_back(insertion_id); } diff --git a/src/silo/storage/column/int_column.cpp b/src/silo/storage/column/int_column.cpp index edf9de358..72a0f3d59 100644 --- a/src/silo/storage/column/int_column.cpp +++ b/src/silo/storage/column/int_column.cpp @@ -14,7 +14,7 @@ const std::vector& IntColumnPartition::getValues() const { void IntColumnPartition::insert(const std::string& value) { try { - int32_t int_value = value.empty() ? INT32_MIN : std::stoi(value); + const int32_t int_value = value.empty() ? INT32_MIN : std::stoi(value); values.push_back(int_value); } catch (std::logic_error& err) { throw std::runtime_error("Wrong format for Integer: '" + value + "'"); diff --git a/src/silo/storage/column/pango_lineage_column.cpp b/src/silo/storage/column/pango_lineage_column.cpp index 9f5a931df..5226bc1ba 100644 --- a/src/silo/storage/column/pango_lineage_column.cpp +++ b/src/silo/storage/column/pango_lineage_column.cpp @@ -5,7 +5,6 @@ #include "silo/common/bidirectional_map.h" #include "silo/common/pango_lineage.h" -#include "silo/common/types.h" #include "silo/storage/pango_lineage_alias.h" namespace silo::storage::column { @@ -15,7 +14,7 @@ PangoLineageColumnPartition::PangoLineageColumnPartition( common::BidirectionalMap& lookup ) : alias_key(alias_key), - lookup(lookup){}; + lookup(lookup) {} void PangoLineageColumnPartition::insert(const common::RawPangoLineage& value) { const common::UnaliasedPangoLineage resolved_lineage = alias_key.unaliasPangoLineage(value); @@ -72,7 +71,7 @@ const std::vector& PangoLineageColumnPartition::getValues() const { PangoLineageColumn::PangoLineageColumn(silo::PangoLineageAliasLookup alias_key) { lookup = std::make_unique>(); this->alias_key = std::make_unique(std::move(alias_key)); -}; +} PangoLineageColumnPartition& PangoLineageColumn::createPartition() { return partitions.emplace_back(*alias_key, *lookup); diff --git a/src/silo/storage/column/pango_lineage_column.test.cpp b/src/silo/storage/column/pango_lineage_column.test.cpp index be31bfa16..1e6304166 100644 --- a/src/silo/storage/column/pango_lineage_column.test.cpp +++ b/src/silo/storage/column/pango_lineage_column.test.cpp @@ -2,6 +2,8 @@ #include +// NOLINTBEGIN(bugprone-unchecked-optional-access) + TEST(PangoLineageColumn, addingLineageAndThenSublineageFiltersCorrectly) { silo::common::BidirectionalMap lookup; silo::PangoLineageAliasLookup alias_key = silo::PangoLineageAliasLookup::readFromFile( @@ -63,3 +65,5 @@ TEST(PangoLineageColumn, queryParentLineageThatWasNeverInserted) { EXPECT_EQ(under_test.filter({"A.1"}), std::nullopt); EXPECT_EQ(*under_test.filterIncludingSublineages({"A.1"}).value(), roaring::Roaring({0, 1, 3})); } + +// NOLINTEND(bugprone-unchecked-optional-access) diff --git a/src/silo/storage/column/string_column.cpp b/src/silo/storage/column/string_column.cpp index f7ffa9ef3..eff0a36b8 100644 --- a/src/silo/storage/column/string_column.cpp +++ b/src/silo/storage/column/string_column.cpp @@ -34,7 +34,7 @@ std::optional> StringColumnPartition::embedString(const std: StringColumn::StringColumn() { lookup = std::make_unique>(); -}; +} StringColumnPartition& StringColumn::createPartition() { return partitions.emplace_back(*lookup); diff --git a/src/silo/storage/column_group.cpp b/src/silo/storage/column_group.cpp index a2e9844fe..5c0e98f4c 100644 --- a/src/silo/storage/column_group.cpp +++ b/src/silo/storage/column_group.cpp @@ -1,8 +1,6 @@ #include "silo/storage/column_group.h" #include -#include -#include #include #include #include @@ -11,17 +9,9 @@ #include #include "silo/common/date.h" -#include "silo/common/pango_lineage.h" -#include "silo/common/string.h" #include "silo/config/database_config.h" #include "silo/preprocessing/preprocessing_exception.h" -#include "silo/storage/column/date_column.h" -#include "silo/storage/column/float_column.h" -#include "silo/storage/column/indexed_string_column.h" #include "silo/storage/column/insertion_column.h" -#include "silo/storage/column/int_column.h" -#include "silo/storage/column/pango_lineage_column.h" -#include "silo/storage/column/string_column.h" namespace silo { class AminoAcid; @@ -39,6 +29,7 @@ uint32_t ColumnPartitionGroup::fill( uint32_t sequence_count = 0; std::vector column_names; + column_names.reserve(database_config.schema.metadata.size()); for (const auto& item : database_config.schema.metadata) { column_names.push_back(item.name); } @@ -62,7 +53,7 @@ uint32_t ColumnPartitionGroup::fill( size_t column_index = 0; for (const auto& item : database_config.schema.metadata) { const auto column_type = item.getColumnType(); - const duckdb::Value value = it.current_row.GetValue(column_index++); + const auto value = it.current_row.GetValue(column_index++); addValueToColumn(item.name, column_type, value); } if (++sequence_count == UINT32_MAX) { @@ -156,7 +147,7 @@ ColumnPartitionGroup ColumnPartitionGroup::getSubgroup( const std::vector& fields ) const { ColumnPartitionGroup result; - for (auto& field : fields) { + for (const auto& field : fields) { result.metadata.push_back({field.name, field.type}); } diff --git a/src/silo/storage/database_partition.cpp b/src/silo/storage/database_partition.cpp index f251bb2df..19c33e351 100644 --- a/src/silo/storage/database_partition.cpp +++ b/src/silo/storage/database_partition.cpp @@ -3,7 +3,6 @@ #include #include -#include #include #include @@ -30,7 +29,13 @@ DatabasePartition::DatabasePartition(std::vector #include -#include #include #include "silo/common/pango_lineage.h" diff --git a/src/silo/storage/reference_genomes.cpp b/src/silo/storage/reference_genomes.cpp index 8128631b8..16774c36c 100644 --- a/src/silo/storage/reference_genomes.cpp +++ b/src/silo/storage/reference_genomes.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include diff --git a/src/silo/storage/sequence_store.cpp b/src/silo/storage/sequence_store.cpp index 67b71034e..32fa22e42 100644 --- a/src/silo/storage/sequence_store.cpp +++ b/src/silo/storage/sequence_store.cpp @@ -1,6 +1,5 @@ #include "silo/storage/sequence_store.h" -#include #include #include #include diff --git a/src/silo/zstdfasta/zstd_compressor.cpp b/src/silo/zstdfasta/zstd_compressor.cpp index 3360a69e1..31386db41 100644 --- a/src/silo/zstdfasta/zstd_compressor.cpp +++ b/src/silo/zstdfasta/zstd_compressor.cpp @@ -15,13 +15,13 @@ ZstdCompressor::ZstdCompressor(std::string_view dictionary_string) { zstd_context = ZSTD_createCCtx(); } -ZstdCompressor::ZstdCompressor(ZstdCompressor&& other) { +ZstdCompressor::ZstdCompressor(ZstdCompressor&& other) noexcept { this->zstd_context = std::exchange(other.zstd_context, nullptr); this->dictionary = std::exchange(other.dictionary, nullptr); this->size_bound = other.size_bound; } -ZstdCompressor& ZstdCompressor::operator=(ZstdCompressor&& other) { +ZstdCompressor& ZstdCompressor::operator=(ZstdCompressor&& other) noexcept { std::swap(this->zstd_context, other.zstd_context); std::swap(this->dictionary, other.dictionary); std::swap(this->size_bound, other.size_bound); @@ -35,6 +35,10 @@ ZstdCompressor::ZstdCompressor(const ZstdCompressor& other) { } ZstdCompressor& ZstdCompressor::operator=(const ZstdCompressor& other) { + if (this == &other) { + return *this; + } + this->dictionary = other.dictionary; ZSTD_freeCCtx(zstd_context); this->zstd_context = ZSTD_createCCtx(); @@ -52,7 +56,7 @@ size_t ZstdCompressor::compress( char* output_data, size_t output_size ) { - size_t size_or_error_code = ZSTD_compress_usingCDict( + const size_t size_or_error_code = ZSTD_compress_usingCDict( zstd_context, output_data, output_size, input_data, input_size, dictionary->value ); if (ZSTD_isError(size_or_error_code)) { diff --git a/src/silo/zstdfasta/zstd_decompressor.cpp b/src/silo/zstdfasta/zstd_decompressor.cpp index 6f1aeb7db..8afc3f13c 100644 --- a/src/silo/zstdfasta/zstd_decompressor.cpp +++ b/src/silo/zstdfasta/zstd_decompressor.cpp @@ -16,12 +16,12 @@ ZstdDecompressor::ZstdDecompressor(std::string_view dictionary_string) { zstd_context = ZSTD_createDCtx(); } -ZstdDecompressor::ZstdDecompressor(ZstdDecompressor&& other) { +ZstdDecompressor::ZstdDecompressor(ZstdDecompressor&& other) noexcept { this->zstd_context = std::exchange(other.zstd_context, nullptr); this->zstd_dictionary = std::exchange(other.zstd_dictionary, nullptr); } -ZstdDecompressor& ZstdDecompressor::operator=(ZstdDecompressor&& other) { +ZstdDecompressor& ZstdDecompressor::operator=(ZstdDecompressor&& other) noexcept { std::swap(this->zstd_context, other.zstd_context); std::swap(this->zstd_dictionary, other.zstd_dictionary); return *this; diff --git a/src/silo/zstdfasta/zstdfasta_reader.cpp b/src/silo/zstdfasta/zstdfasta_reader.cpp index 220ed536c..12fd7ac81 100644 --- a/src/silo/zstdfasta/zstdfasta_reader.cpp +++ b/src/silo/zstdfasta/zstdfasta_reader.cpp @@ -1,6 +1,5 @@ #include "silo/zstdfasta/zstdfasta_reader.h" -#include #include #include diff --git a/src/silo/zstdfasta/zstdfasta_table_reader.cpp b/src/silo/zstdfasta/zstdfasta_table_reader.cpp index 9638acf89..0e1b81a2c 100644 --- a/src/silo/zstdfasta/zstdfasta_table_reader.cpp +++ b/src/silo/zstdfasta/zstdfasta_table_reader.cpp @@ -1,15 +1,11 @@ #include "silo/zstdfasta/zstdfasta_table_reader.h" -#include -#include #include #include #include #include -#include -#include "silo/common/fasta_format_exception.h" #include "silo/preprocessing/preprocessing_exception.h" #include "silo/zstdfasta/zstd_decompressor.h" diff --git a/src/silo/zstdfasta/zstdfasta_table_reader.test.cpp b/src/silo/zstdfasta/zstdfasta_table_reader.test.cpp index 33940dcd7..c02072143 100644 --- a/src/silo/zstdfasta/zstdfasta_table_reader.test.cpp +++ b/src/silo/zstdfasta/zstdfasta_table_reader.test.cpp @@ -14,7 +14,7 @@ TEST(ZstdFastaTableReader, correctlyReadsZstdFastaTableFromFastaFile) { const std::filesystem::path input_directory{"testBaseData/fastaFiles/"}; const std::string sequence_filename{"test.fasta"}; - std::filesystem::path file_path = input_directory / sequence_filename; + const std::filesystem::path file_path = input_directory / sequence_filename; silo::FastaReader file_reader(file_path); @@ -43,7 +43,7 @@ TEST(ZstdFastaTableReader, correctlyReadsZstdFastaTableFromZstdFastaFile) { const std::filesystem::path input_directory{"testBaseData/fastaFiles/"}; const std::string sequence_filename{"test.zstdfasta"}; - std::filesystem::path file_path = input_directory / sequence_filename; + const std::filesystem::path file_path = input_directory / sequence_filename; silo::ZstdFastaReader file_reader(file_path, "ACGT"); @@ -72,7 +72,7 @@ TEST(ZstdFastaTableReader, correctlySortsZstdFastaTableFromFastaFile) { const std::filesystem::path input_directory{"testBaseData/fastaFiles/"}; const std::string sequence_filename{"test.fasta"}; - std::filesystem::path file_path = input_directory / sequence_filename; + const std::filesystem::path file_path = input_directory / sequence_filename; silo::FastaReader file_reader(file_path); @@ -101,7 +101,7 @@ TEST(ZstdFastaTableReader, correctlySortsZstdFastaTableFromZstdFastaFile) { const std::filesystem::path input_directory{"testBaseData/fastaFiles/"}; const std::string sequence_filename{"test.zstdfasta"}; - std::filesystem::path file_path = input_directory / sequence_filename; + const std::filesystem::path file_path = input_directory / sequence_filename; silo::ZstdFastaReader file_reader(file_path, "ACGT"); diff --git a/src/silo/zstdfasta/zstdfasta_writer.cpp b/src/silo/zstdfasta/zstdfasta_writer.cpp index 353fe1c43..a07a33c8f 100644 --- a/src/silo/zstdfasta/zstdfasta_writer.cpp +++ b/src/silo/zstdfasta/zstdfasta_writer.cpp @@ -1,6 +1,5 @@ #include "silo/zstdfasta/zstdfasta_writer.h" -#include #include #include diff --git a/src/silo/zstdfasta/zstdfasta_writer.test.cpp b/src/silo/zstdfasta/zstdfasta_writer.test.cpp index 5367bf020..72003257b 100644 --- a/src/silo/zstdfasta/zstdfasta_writer.test.cpp +++ b/src/silo/zstdfasta/zstdfasta_writer.test.cpp @@ -16,7 +16,8 @@ TEST(ZstdFastaWriter, writesCorrectFiles) { {"Key2", "ACGTACGTACGTCCGT"}, {"Key3", "ACGTACGTACGTACGT"}, {"Key4", "CAGTTCGTACGTACGT"}, - {"Key5", "ACGTACGTACCTACGC"}}; + {"Key5", "ACGTACGTACCTACGC"} + }; { silo::ZstdFastaWriter under_test(file_path, reference_genome); diff --git a/src/silo_api/api.cpp b/src/silo_api/api.cpp index 530d2f8e9..8fa5d1dd1 100644 --- a/src/silo_api/api.cpp +++ b/src/silo_api/api.cpp @@ -1,6 +1,5 @@ #include #include -#include #include #include #include @@ -13,7 +12,6 @@ #include #include #include -#include #include #include #include @@ -23,10 +21,8 @@ #include "silo/config/config_repository.h" #include "silo/config/database_config.h" -#include "silo/database.h" #include "silo/preprocessing/preprocessing_config.h" #include "silo/preprocessing/preprocessing_config_reader.h" -#include "silo/preprocessing/preprocessing_exception.h" #include "silo/preprocessing/preprocessor.h" #include "silo_api/database_directory_watcher.h" #include "silo_api/database_mutex.h" diff --git a/src/silo_api/database_directory_watcher.cpp b/src/silo_api/database_directory_watcher.cpp index 4b1a8381f..9cc2eb17b 100644 --- a/src/silo_api/database_directory_watcher.cpp +++ b/src/silo_api/database_directory_watcher.cpp @@ -1,9 +1,7 @@ #include "silo_api/database_directory_watcher.h" #include -#include #include -#include #include #include #include @@ -13,7 +11,6 @@ #include "silo/common/data_version.h" #include "silo/database.h" -#include "silo/persistence/exception.h" #include "silo_api/database_mutex.h" silo_api::DatabaseDirectoryWatcher::DatabaseDirectoryWatcher( diff --git a/src/silo_api/error_request_handler.cpp b/src/silo_api/error_request_handler.cpp index fd7a0c865..ea1ec8b74 100644 --- a/src/silo_api/error_request_handler.cpp +++ b/src/silo_api/error_request_handler.cpp @@ -1,7 +1,6 @@ #include "silo_api/error_request_handler.h" #include -#include #include #include @@ -13,7 +12,7 @@ namespace silo_api { ErrorRequestHandler::ErrorRequestHandler(Poco::Net::HTTPRequestHandler* wrapped_handler) - : wrapped_handler(wrapped_handler){}; + : wrapped_handler(wrapped_handler) {} void ErrorRequestHandler::handleRequest( Poco::Net::HTTPServerRequest& request, @@ -35,8 +34,9 @@ void ErrorRequestHandler::handleRequest( response.setStatus(Poco::Net::HTTPResponse::HTTP_INTERNAL_SERVER_ERROR); std::ostream& out_stream = response.send(); - out_stream << nlohmann::json(ErrorResponse{ - "Internal server error", "Caught something: " + std::string(message)}); + out_stream << nlohmann::json( + ErrorResponse{"Internal server error", "Caught something: " + std::string(message)} + ); } } } // namespace silo_api diff --git a/src/silo_api/info_handler.cpp b/src/silo_api/info_handler.cpp index 35a2f2cea..f8b45ab20 100644 --- a/src/silo_api/info_handler.cpp +++ b/src/silo_api/info_handler.cpp @@ -1,20 +1,14 @@ #include "silo_api/info_handler.h" -#include -#include -#include #include #include -#include #include #include #include #include -#include "silo/common/data_version.h" #include "silo/common/nucleotide_symbols.h" -#include "silo/database.h" #include "silo/database_info.h" #include "silo_api/database_mutex.h" @@ -25,7 +19,8 @@ void to_json(nlohmann::json& json, const DatabaseInfo& databaseInfo) { json = nlohmann::json{ {"sequenceCount", databaseInfo.sequence_count}, {"totalSize", databaseInfo.total_size}, - {"nBitmapsSize", databaseInfo.n_bitmaps_size}}; + {"nBitmapsSize", databaseInfo.n_bitmaps_size} + }; } // NOLINTNEXTLINE(readability-identifier-naming) @@ -41,7 +36,8 @@ void to_json(nlohmann::json& json, const BitmapContainerSizeStatistic& statistic statistics.number_of_values_stored_in_bitset_containers}, {"totalBitmapSizeArrayContainers", statistics.total_bitmap_size_array_containers}, {"totalBitmapSizeRunContainers", statistics.total_bitmap_size_run_containers}, - {"totalBitmapSizeBitsetContainers", statistics.total_bitmap_size_bitset_containers}}; + {"totalBitmapSizeBitsetContainers", statistics.total_bitmap_size_bitset_containers} + }; } // NOLINTNEXTLINE(readability-identifier-naming) @@ -61,7 +57,8 @@ void to_json(nlohmann::json& json, const BitmapContainerSize& bitmapContainerSiz {"sizePerGenomeSymbolAndSection", bitmapContainerSize.size_per_genome_symbol_and_section}, {"bitmapContainerSizeStatistic", bitmapContainerSize.bitmap_container_size_statistic}, {"totalBitmapSizeFrozen", bitmapContainerSize.total_bitmap_size_frozen}, - {"totalBitmapSizeComputed", bitmapContainerSize.total_bitmap_size_computed}}; + {"totalBitmapSizeComputed", bitmapContainerSize.total_bitmap_size_computed} + }; } // NOLINTNEXTLINE(readability-identifier-naming) @@ -69,7 +66,8 @@ void to_json(nlohmann::json& json, const DetailedDatabaseInfo& databaseInfo) { json = nlohmann::json{ {"bitmapSizePerSymbol", databaseInfo.sequences.at("main").bitmap_size_per_symbol}, {"bitmapContainerSizePerGenomeSection", - databaseInfo.sequences.at("main").bitmap_container_size_per_genome_section}}; + databaseInfo.sequences.at("main").bitmap_container_size_per_genome_section} + }; } } // namespace silo @@ -100,9 +98,9 @@ void InfoHandler::get( response.set("data-version", fixed_database.database.getDataVersion().toString()); - bool return_detailed_info = request_parameter.find("details") != request_parameter.end() && - request_parameter.at("details") == "true"; - nlohmann::json database_info = + const bool return_detailed_info = request_parameter.find("details") != request_parameter.end() && + request_parameter.at("details") == "true"; + const nlohmann::json database_info = return_detailed_info ? nlohmann::json(database.getDatabase().database.detailedDatabaseInfo()) : nlohmann::json(database.getDatabase().database.getDatabaseInfo()); response.setContentType("application/json"); diff --git a/src/silo_api/logging.cpp b/src/silo_api/logging.cpp index e9cc678c3..821571fe8 100644 --- a/src/silo_api/logging.cpp +++ b/src/silo_api/logging.cpp @@ -1,9 +1,7 @@ #include "silo_api/logging.h" #include -#include #include -#include #include #include diff --git a/src/silo_api/logging_request_handler.cpp b/src/silo_api/logging_request_handler.cpp index 5eb598b7c..5c0168eee 100644 --- a/src/silo_api/logging_request_handler.cpp +++ b/src/silo_api/logging_request_handler.cpp @@ -1,14 +1,11 @@ #include "silo_api/logging_request_handler.h" -#include -#include - #include namespace silo_api { LoggingRequestHandler::LoggingRequestHandler(Poco::Net::HTTPRequestHandler* wrapped_handler) - : wrapped_handler(wrapped_handler){}; + : wrapped_handler(wrapped_handler) {} void LoggingRequestHandler::handleRequest( Poco::Net::HTTPServerRequest& request, diff --git a/src/silo_api/not_found_handler.cpp b/src/silo_api/not_found_handler.cpp index 92f1a9990..980c385a0 100644 --- a/src/silo_api/not_found_handler.cpp +++ b/src/silo_api/not_found_handler.cpp @@ -1,6 +1,5 @@ #include "silo_api/not_found_handler.h" -#include #include #include @@ -18,7 +17,8 @@ void NotFoundHandler::handleRequest( response.setContentType("application/json"); response.setStatus(Poco::Net::HTTPResponse::HTTP_NOT_FOUND); std::ostream& out_stream = response.send(); - out_stream << nlohmann::json(ErrorResponse{ - "Not found", "Resource " + request.getURI() + " does not exist"}); + out_stream << nlohmann::json( + ErrorResponse{"Not found", "Resource " + request.getURI() + " does not exist"} + ); } } // namespace silo_api \ No newline at end of file diff --git a/src/silo_api/query_handler.cpp b/src/silo_api/query_handler.cpp index 45022de40..8e97bb4f9 100644 --- a/src/silo_api/query_handler.cpp +++ b/src/silo_api/query_handler.cpp @@ -1,7 +1,6 @@ #include "silo_api/query_handler.h" #include -#include #include #include @@ -11,8 +10,6 @@ #include #include -#include "silo/common/data_version.h" -#include "silo/database.h" #include "silo/query_engine/query_parse_exception.h" #include "silo_api/database_mutex.h" #include "silo_api/error_request_handler.h" @@ -69,8 +66,9 @@ void QueryHandler::post( } else { response.setStatus(Poco::Net::HTTPResponse::HTTP_INTERNAL_SERVER_ERROR); std::ostream& out_stream = response.send(); - out_stream << nlohmann::json(ErrorResponse{ - "Internal Server Error", "non recoverable error message"}); + out_stream << nlohmann::json( + ErrorResponse{"Internal Server Error", "non recoverable error message"} + ); } } } diff --git a/src/silo_api/request_handler_factory.test.cpp b/src/silo_api/request_handler_factory.test.cpp index 3d7bcd317..002e726a4 100644 --- a/src/silo_api/request_handler_factory.test.cpp +++ b/src/silo_api/request_handler_factory.test.cpp @@ -10,6 +10,8 @@ #include "silo_api/manual_poco_mocks.test.h" #include "silo_api/request_handler_factory.h" +// NOLINTBEGIN(bugprone-unchecked-optional-access) + class MockDatabase : public silo::Database { public: MOCK_METHOD(silo::DatabaseInfo, getDatabaseInfo, (), (const)); @@ -111,7 +113,8 @@ TEST_F(RequestHandlerTestFixture, returnsMethodNotAllowedOnPostInfoRequest) { TEST_F(RequestHandlerTestFixture, handlesPostQueryRequest) { std::map>> fields{ // NOLINTNEXTLINE(readability-magic-numbers) - {"count", 5}}; + {"count", 5} + }; const std::vector tmp{{fields}}; const silo::query_engine::QueryResult query_result{tmp}; EXPECT_CALL(database_mutex.mock_database, executeQuery) @@ -155,3 +158,5 @@ TEST_F(RequestHandlerTestFixture, givenRequestToUnknownUrl_thenReturnsNotFound) R"({"error":"Not found","message":"Resource /doesNotExist does not exist"})" ); } + +// NOLINTEND(bugprone-unchecked-optional-access) diff --git a/src/silo_api/rest_resource.cpp b/src/silo_api/rest_resource.cpp index c99f74383..ddca9cf1c 100644 --- a/src/silo_api/rest_resource.cpp +++ b/src/silo_api/rest_resource.cpp @@ -18,8 +18,8 @@ void methodNotAllowed( response.setContentType("application/json"); response.setStatus(Poco::Net::HTTPResponse::HTTP_METHOD_NOT_ALLOWED); response.send() << nlohmann::json(ErrorResponse{ - "Method not allowed", request.getMethod() + " is not allowed on resource " + request.getURI()} - ); + "Method not allowed", request.getMethod() + " is not allowed on resource " + request.getURI() + }); } void RestResource::handleRequest( @@ -27,10 +27,12 @@ void RestResource::handleRequest( Poco::Net::HTTPServerResponse& response ) { if (request.getMethod() == "GET") { - return get(request, response); + get(request, response); + return; } if (request.getMethod() == "POST") { - return post(request, response); + post(request, response); + return; } methodNotAllowed(request, response); } diff --git a/src/silo_api/runtime_config.cpp b/src/silo_api/runtime_config.cpp index 497352135..6322acf52 100644 --- a/src/silo_api/runtime_config.cpp +++ b/src/silo_api/runtime_config.cpp @@ -14,7 +14,8 @@ struct convert { config = silo_api::RuntimeConfig{ node["dataDirectory"] ? std::optional(node["dataDirectory"].as()) - : std::nullopt}; + : std::nullopt + }; return true; } diff --git a/src/silo_api/variant_json_serializer.test.cpp b/src/silo_api/variant_json_serializer.test.cpp index 1655fab5d..d8bce5ac3 100644 --- a/src/silo_api/variant_json_serializer.test.cpp +++ b/src/silo_api/variant_json_serializer.test.cpp @@ -9,7 +9,7 @@ struct TestStruct { std::string stringField; int64_t intField; }; -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(TestStruct, stringField, intField); +NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(TestStruct, stringField, intField) TEST(VariantJsonSerializer, deserializeStructVariant) { const int some_number = 42;