================================================================================ 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: 94.74% (522/551) Uncovered changed code (with context): ================================================================================ src/IO/OffsetMap.cpp ================================================================================ --- uncovered block 26-28 --- 24 | /// anything following it cannot be computed. 25 | if (objects.size() != 1) >> 26 | throw Exception(ErrorCodes::BAD_ARGUMENTS, >> 27 | "OffsetMap: unknown-size object is only supported in single-object pipelines (got {} objects)", >> 28 | objects.size()); 29 | total_size = StoredObject::UnknownSize; 30 | segments.push_back(Segment{ ================================================================================ src/IO/PipelineReadBuffer.cpp ================================================================================ --- uncovered block 63-64 --- 61 | { 62 | if (off < 0) >> 63 | throw Exception(ErrorCodes::ARGUMENT_OUT_OF_BOUND, >> 64 | "PipelineReadBuffer::seek: SEEK_SET with negative offset {}", off); 65 | new_pos = static_cast(off); 66 | } --- uncovered block 71-77 --- 69 | off_t cur = getPosition(); 70 | if (off < 0 && static_cast(-off) > static_cast(cur)) >> 71 | throw Exception(ErrorCodes::ARGUMENT_OUT_OF_BOUND, >> 72 | "PipelineReadBuffer::seek: SEEK_CUR offset {} from position {} would underflow", >> 73 | off, cur); 74 | new_pos = static_cast(cur + off); 75 | } 76 | else >> 77 | throw Exception(ErrorCodes::ARGUMENT_OUT_OF_BOUND, "PipelineReadBuffer::seek: unsupported whence"); 78 | 79 | LOG_DEBUG(log, "seek to {}", new_pos); --- uncovered block 119-119 --- 117 | /// `nullopt`, not a meaningless `~uint64_t::max()` byte count. 118 | if (executor->hasUnknownSize()) >> 119 | return std::nullopt; 120 | return executor->totalSize(); 121 | } --- uncovered block 127-127 --- 125 | /// Unknown-size sources are streamed through `nextImpl`, not seeked: a `true` 126 | /// answer leads formats to `getFileSizeFromReadBuffer`, which throws. >> 127 | return !executor->hasUnknownSize(); 128 | } 129 | --- uncovered block 134-135 --- 132 | /// Surface the object path so format/decompression diagnostics name the 133 | /// failing object instead of this wrapper. >> 134 | String name = executor->getFileName(); >> 135 | return name.empty() ? "PipelineReadBuffer" : name; 136 | } 137 | ================================================================================ src/IO/ReadPipeline.cpp ================================================================================ --- uncovered block 201-204 --- 199 | || !decryption_stages.empty() || async_prefetch) 200 | { >> 201 | LOG_DEBUG(getLogger("ReadPipeline"), >> 202 | "use_reader_executor: falling back to the legacy read path " >> 203 | "(caches/decryption not yet supported by the executor)"); >> 204 | return nullptr; 205 | } 206 | --- uncovered block 241-243 --- 239 | if (!source_reader) 240 | { >> 241 | LOG_DEBUG(getLogger("ReadPipeline"), >> 242 | "use_reader_executor: falling back to the legacy read path (source kind not supported by the executor)"); >> 243 | return nullptr; 244 | } 245 | ================================================================================ src/IO/ReaderExecutor.cpp ================================================================================ --- uncovered block 34-35 --- 32 | if (!object) 33 | { >> 34 | reached_eof = true; >> 35 | return {}; 36 | } 37 | --- uncovered block 50-51 --- 48 | if (want == 0) 49 | { >> 50 | reached_eof = true; >> 51 | return {}; 52 | } 53 | } --- uncovered block 74-75 --- 72 | { 73 | /// A short read at unknown total size is the only EOF signal there. >> 74 | reached_eof = true; >> 75 | return {}; 76 | } 77 | ================================================================================ src/IO/ReaderExecutor.h ================================================================================ --- uncovered block 61-61 --- 59 | /// Front object's `remote_path`, used to name the source in diagnostics; 60 | /// empty when no objects are configured. >> 61 | String getFileName() const { return log_file_path; } 62 | 63 | private: ================================================================================ src/IO/tests/gtest_local_source_reader.cpp ================================================================================ --- uncovered block 52-52 --- 50 | size_t bytes = buf->read(data.data() + total, data.size() - total); 51 | if (bytes == 0) >> 52 | break; 53 | total += bytes; 54 | } --- uncovered block 77-77 --- 75 | size_t bytes = buf->read(data.data() + total, data.size() - total); 76 | if (bytes == 0) >> 77 | break; 78 | total += bytes; 79 | } === Lost Baseline Coverage: 1 lines === ================================================================================ src/Interpreters/Context.cpp ================================================================================ --- lost coverage block 1602-1602 --- 1600 | if (shared->temporary_volume_legacy) 1601 | return shared->temporary_volume_legacy; >> 1602 | return nullptr; 1603 | } 1604 | WARNING: Failed to get start time for [Print Uncovered Code] - start time and duration won't be set --- Coverage counts --- Lines : baseline 786,835/930,609 -> current 787,549/931,312 (delta +714 / +703) Functions : baseline 888,087/961,682 -> current 888,129/961,852 (delta +42 / +170) Branches : baseline 257,866/334,082 -> current 258,233/334,450 (delta +367 / +368)