Coverage Report

Created: 2026-03-31 07:54

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/duckdb/extension/parquet/reader/expression_column_reader.cpp
Line
Count
Source
1
#include "reader/expression_column_reader.hpp"
2
#include "parquet_reader.hpp"
3
4
namespace duckdb {
5
6
//===--------------------------------------------------------------------===//
7
// Expression Column Reader
8
//===--------------------------------------------------------------------===//
9
ExpressionColumnReader::ExpressionColumnReader(ClientContext &context, unique_ptr<ColumnReader> child_reader_p,
10
                                               unique_ptr<Expression> expr_p, const ParquetColumnSchema &schema_p)
11
0
    : ColumnReader(child_reader_p->Reader(), schema_p), child_reader(std::move(child_reader_p)),
12
0
      expr(std::move(expr_p)), executor(context, expr.get()) {
13
0
  vector<LogicalType> intermediate_types {child_reader->Type()};
14
0
  intermediate_chunk.Initialize(reader.allocator, intermediate_types);
15
0
}
16
17
ExpressionColumnReader::ExpressionColumnReader(ClientContext &context, unique_ptr<ColumnReader> child_reader_p,
18
                                               unique_ptr<Expression> expr_p,
19
                                               unique_ptr<ParquetColumnSchema> owned_schema_p)
20
0
    : ColumnReader(child_reader_p->Reader(), *owned_schema_p), child_reader(std::move(child_reader_p)),
21
0
      expr(std::move(expr_p)), executor(context, expr.get()), owned_schema(std::move(owned_schema_p)) {
22
0
  vector<LogicalType> intermediate_types {child_reader->Type()};
23
0
  intermediate_chunk.Initialize(reader.allocator, intermediate_types);
24
0
}
25
26
void ExpressionColumnReader::InitializeRead(idx_t row_group_idx_p, const vector<ColumnChunk> &columns,
27
0
                                            TProtocol &protocol_p) {
28
0
  child_reader->InitializeRead(row_group_idx_p, columns, protocol_p);
29
0
}
30
31
0
idx_t ExpressionColumnReader::Read(uint64_t num_values, data_ptr_t define_out, data_ptr_t repeat_out, Vector &result) {
32
0
  intermediate_chunk.Reset();
33
0
  auto &intermediate_vector = intermediate_chunk.data[0];
34
35
0
  auto amount = child_reader->Read(num_values, define_out, repeat_out, intermediate_vector);
36
  // Execute the expression
37
0
  intermediate_chunk.SetCardinality(amount);
38
0
  executor.ExecuteExpression(intermediate_chunk, result);
39
0
  return amount;
40
0
}
41
42
0
void ExpressionColumnReader::Skip(idx_t num_values) {
43
0
  child_reader->Skip(num_values);
44
0
}
45
46
0
idx_t ExpressionColumnReader::GroupRowsAvailable() {
47
0
  return child_reader->GroupRowsAvailable();
48
0
}
49
50
} // namespace duckdb