================================================================================ Changed-lines coverage summary ================================================================================ Denominator: lines added/modified by this PR in C/C++ source files that LCOV considers coverable (excludes blank lines, braces, comments, header-only declarations, and error-path noise such as `LOGICAL_ERROR`, `UNREACHABLE()`, `abort()`). Numerator: of those coverable lines, the number actually executed by the test suite during this coverage run. PR changed C/C++ lines covered by tests: 87.85% (441/502) Uncovered changed code (with context): ================================================================================ src/Analyzer/Passes/InverseDictionaryLookupPass.cpp ================================================================================ --- uncovered block 312-312 --- 310 | 311 | if (!isInMemoryLayout(dict_type_name)) >> 312 | return; 313 | 314 | ================================================================================ src/Core/Block.cpp ================================================================================ --- uncovered block 859-861 --- 857 | /// Assume that order is important. If this becomes wrong once, let's simplify it: for example, make 2 sets. 858 | >> 859 | VectorWithMemoryTracking> lcs(lhs.columns() + 1); >> 860 | for (auto & v : lcs) >> 861 | v.resize(rhs.columns() + 1); 862 | 863 | for (size_t i = 1; i <= lhs.columns(); ++i) ================================================================================ src/Core/MySQL/Authentication.cpp ================================================================================ --- uncovered block 193-198 --- 191 | 192 | size_t plaintext_length = 0; >> 193 | if (EVP_PKEY_decrypt(ctx.get(), nullptr, &plaintext_length, ciphertext, ciphertext_len) <= 0) >> 194 | throw Exception(ErrorCodes::OPENSSL_ERROR, "Failed to get decrypted length: {}", getOpenSSLErrors()); 195 | >> 196 | VectorWithMemoryTracking plaintext(plaintext_length); >> 197 | if (EVP_PKEY_decrypt(ctx.get(), plaintext.data(), &plaintext_length, ciphertext, ciphertext_len) <= 0) >> 198 | throw Exception(ErrorCodes::OPENSSL_ERROR, "Failed to decrypt auth data: {}", getOpenSSLErrors()); 199 | 200 | plaintext.resize(plaintext_length); ================================================================================ src/Core/PlainRanges.cpp ================================================================================ --- uncovered block 144-150 --- 142 | { 143 | /// invert a blank ranges >> 144 | if (to_invert_ranges.empty()) >> 145 | return {makeUniverse().ranges}; 146 | >> 147 | VectorWithMemoryTracking reverted_ranges; >> 148 | for (const auto & range : to_invert_ranges) 149 | { >> 150 | if (range.isInfinite()) 151 | /// return a blank ranges 152 | return {{}}; ================================================================================ src/Core/YTsaurus/YTsaurusClient.cpp ================================================================================ --- uncovered block 289-293 --- 287 | } 288 | >> 289 | auto columns_array = schema_json->get("$value").extract(); >> 290 | UnorderedMapWithMemoryTracking yt_columns; 291 | >> 292 | for (const auto& yt_column : *columns_array) { >> 293 | const auto & yt_column_json = yt_column.extract(); 294 | if (!yt_column_json->has("name")) 295 | throw Exception(ErrorCodes::INCORRECT_DATA, "Broken YtSaurus schema json. Missing `name` field."); ================================================================================ src/Databases/DataLake/Common.cpp ================================================================================ --- uncovered block 88-93 --- 86 | { 87 | String inner = name.substr(7, name.size() - 8); >> 88 | auto args = splitTypeArguments(inner); 89 | >> 90 | std::vector field_names; >> 91 | DB::DataTypes field_types; 92 | >> 93 | for (const auto & arg : args) 94 | { 95 | size_t colon = arg.find(':'); ================================================================================ src/Databases/DataLake/DatabaseDataLake.cpp ================================================================================ --- uncovered block 883-895 --- 881 | VectorWithMemoryTracking DatabaseDataLake::getAllTableNames(ContextPtr /*context*/) const 882 | { >> 883 | VectorWithMemoryTracking result; 884 | 885 | /// Do not throw here, because this is called from the typo-hint path 886 | /// (IDatabase::getTable -> TableNameHints -> getAllRegisteredNames) which 887 | /// must not fail even when the catalog is temporarily unreachable. >> 888 | try 889 | { >> 890 | Names tables = getCatalog()->getTables(); >> 891 | result.reserve(tables.size()); >> 892 | for (auto & table : tables) >> 893 | result.push_back(std::move(table)); 894 | } >> 895 | catch (...) 896 | { 897 | tryLogCurrentException(__PRETTY_FUNCTION__); ================================================================================ src/Formats/ProtobufSerializer.cpp ================================================================================ --- uncovered block 2560-2560 --- 2558 | { 2559 | if (!num_columns_) >> 2560 | wrongNumberOfColumns(num_columns_, ">0"); 2561 | 2562 | Columns field_columns; ================================================================================ src/Functions/UserDefined/UserDefinedWebAssembly.cpp ================================================================================ --- uncovered block 832-835 --- 830 | VectorWithMemoryTracking getAllRegisteredNames() const override 831 | { >> 832 | VectorWithMemoryTracking result; >> 833 | result.reserve(settings_def.size()); >> 834 | for (const auto & [name, _] : settings_def) >> 835 | result.push_back(name); 836 | return result; 837 | } ================================================================================ src/Functions/tests/gtest_functions_stress.cpp ================================================================================ --- uncovered block 1767-1770 --- 1765 | /// Execute on each row separately. 1766 | >> 1767 | MutableColumns mutable_valid_args; >> 1768 | MutableColumnPtr mutable_result; >> 1769 | std::optional any_failed_row; >> 1770 | for (size_t row_idx = 0; row_idx < options.rows_per_batch; ++row_idx) 1771 | { 1772 | { ================================================================================ src/Interpreters/DatabaseCatalog.cpp ================================================================================ --- uncovered block 664-668 --- 662 | if (!db) 663 | { >> 664 | DatabaseNameHints hints(*this); >> 665 | auto names = hints.getHints(database_name); >> 666 | if (names.empty()) 667 | { >> 668 | throw Exception(ErrorCodes::UNKNOWN_DATABASE, "Database {} does not exist", backQuoteIfNeed(database_name)); 669 | } 670 | ================================================================================ src/Interpreters/Squashing.cpp ================================================================================ --- uncovered block 314-314 --- 312 | { 313 | if (input_data.empty()) >> 314 | return {}; 315 | 316 | MutableColumns mutable_columns; ================================================================================ src/Parsers/ParserPreparedStatement.h ================================================================================ --- uncovered block 31-31 --- 29 | VectorWithMemoryTracking arguments; 30 | >> 31 | String getID(char) const override { return "Execute"; } 32 | 33 | ASTPtr clone() const override; ================================================================================ src/Server/KeeperNotFoundHandler.h ================================================================================ --- uncovered block 13-13 --- 11 | { 12 | public: >> 13 | explicit KeeperNotFoundHandler(VectorWithMemoryTracking hints_) : hints(std::move(hints_)) {} 14 | void handleRequest(HTTPServerRequest & request, HTTPServerResponse & response, const ProfileEvents::Event & write_event) override; 15 | private: ================================================================================ src/Storages/Hive/StorageHive.cpp ================================================================================ --- uncovered block 634-639 --- 632 | block.getByPosition(i).column->get(0, fields[i]); 633 | >> 634 | if (prune_level >= PruneLevel::Partition) 635 | { >> 636 | Ranges ranges; >> 637 | ranges.reserve(partition_names.size()); >> 638 | for (size_t i = 0; i < partition_names.size(); ++i) >> 639 | ranges.emplace_back(fields[i]); 640 | 641 | ActionsDAGWithInversionPushDown inverted_dag(filter_actions_dag->getOutputs().front(), context_, /* boolean_context */ true); ================================================================================ src/Storages/MergeTree/KeyCondition.cpp ================================================================================ --- uncovered block 4889-4895 --- 4887 | else if (element.function == RPNElement::FUNCTION_NOT) 4888 | { >> 4889 | auto to_invert_ranges = rpn_stack.top(); >> 4890 | rpn_stack.pop(); 4891 | >> 4892 | auto reverted_ranges = PlainRanges::invert(to_invert_ranges.ranges); 4893 | >> 4894 | if (reverted_ranges.size() == 1) >> 4895 | rpn_stack.emplace(std::move(reverted_ranges[0])); 4896 | else 4897 | { ================================================================================ src/Storages/PostgreSQL/MaterializedPostgreSQLConsumer.h ================================================================================ --- uncovered block 39-39 --- 37 | size_t getColumnsNum() const { return table_description.sample_block.columns(); } 38 | >> 39 | const Block & getSampleBlock() const { return table_description.sample_block; } 40 | 41 | using ArrayInfo = UnorderedMapWithMemoryTracking; ================================================================================ src/Storages/YTsaurus/YTsaurusSettings.cpp ================================================================================ --- uncovered block 78-86 --- 76 | YTsaurusSettings settings; 77 | settings.loadFromQuery(storage_def); >> 78 | return settings; 79 | } 80 | 81 | VectorWithMemoryTracking YTsaurusSettings::getAllRegisteredNames() const 82 | { >> 83 | VectorWithMemoryTracking all_settings; >> 84 | for (const auto & setting_field : impl->all()) >> 85 | all_settings.push_back(setting_field.getName()); >> 86 | return all_settings; 87 | } 88 | === Lost Baseline Coverage: 11 lines === ================================================================================ src/BridgeHelper/XDBCBridgeHelper.h ================================================================================ --- lost coverage block 190-190 --- 188 | static String serviceAlias() 189 | { >> 190 | return "clickhouse-jdbc-bridge"; 191 | } 192 | --- lost coverage block 205-205 --- 203 | static bool startBridgeManually() 204 | { >> 205 | return true; 206 | } 207 | }; ================================================================================ src/DataTypes/Serializations/SerializationObjectSharedData.cpp ================================================================================ --- lost coverage block 1409-1409 --- 1407 | { 1408 | /// If we add new serialization version in future and forget to implement something, better to get an exception instead of doing nothing. >> 1409 | throw Exception(ErrorCodes::NOT_IMPLEMENTED, "deserializeBinaryBulkStatePrefix is not implemented for shared data serialization version {}", serialization_version.value); 1410 | } 1411 | } ================================================================================ src/DataTypes/Serializations/SerializationSubObjectSharedData.cpp ================================================================================ --- lost coverage block 205-205 --- 203 | { 204 | /// If we add new serialization version in future and forget to implement something, better to get an exception instead of doing nothing. >> 205 | throw Exception(ErrorCodes::NOT_IMPLEMENTED, "deserializeBinaryBulkStatePrefix is not implemented for shared data serialization version {}", serialization_version.value); 206 | } 207 | ================================================================================ src/Interpreters/Aggregator.cpp ================================================================================ --- lost coverage block 2595-2596 --- 2593 | if (false) {} // NOLINT 2594 | APPLY_FOR_VARIANTS_SINGLE_LEVEL(M) >> 2595 | #undef M >> 2596 | else throw Exception(ErrorCodes::UNKNOWN_AGGREGATED_DATA_VARIANT, "Unknown aggregated data variant."); 2597 | 2598 | if constexpr (return_single_block) --- lost coverage block 3645-3647 --- 3643 | if (false) {} // NOLINT 3644 | APPLY_FOR_VARIANTS_TWO_LEVEL(M) >> 3645 | #undef M 3646 | else >> 3647 | throw Exception(ErrorCodes::UNKNOWN_AGGREGATED_DATA_VARIANT, "Unknown aggregated data variant."); 3648 | } 3649 | } --- lost coverage block 4001-4004 --- 3999 | if (table.getNullKeyData() != nullptr) 4000 | { >> 4001 | for (size_t i = 0; i < params.aggregates_size; ++i) >> 4002 | aggregate_functions[i]->destroy(table.getNullKeyData() + offsets_of_aggregate_states[i]); 4003 | >> 4004 | table.getNullKeyData() = nullptr; 4005 | } 4006 | } WARNING: Failed to get start time for [Print Uncovered Code] - start time and duration won't be set --- Coverage counts --- Lines : baseline 847,627/993,144 -> current 847,656/993,147 (delta +29 / +3) Functions : baseline 930,446/1,005,375 -> current 931,368/1,006,336 (delta +922 / +961) Branches : baseline 270,652/349,068 -> current 270,734/349,070 (delta +82 / +2)