/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 |