Packages

An Elixir DuckDB library

Current section

Files

Jump to
exduckdb c_src duckdb src execution operator projection physical_projection.cpp
Raw

c_src/duckdb/src/execution/operator/projection/physical_projection.cpp

#include "duckdb/execution/operator/projection/physical_projection.hpp"
#include "duckdb/parallel/thread_context.hpp"
#include "duckdb/execution/expression_executor.hpp"
namespace duckdb {
class ProjectionState : public OperatorState {
public:
explicit ProjectionState(const vector<unique_ptr<Expression>> &expressions) : executor(expressions) {
}
ExpressionExecutor executor;
public:
void Finalize(PhysicalOperator *op, ExecutionContext &context) override {
context.thread.profiler.Flush(op, &executor, "projection", 0);
}
};
PhysicalProjection::PhysicalProjection(vector<LogicalType> types, vector<unique_ptr<Expression>> select_list,
idx_t estimated_cardinality)
: PhysicalOperator(PhysicalOperatorType::PROJECTION, move(types), estimated_cardinality),
select_list(move(select_list)) {
}
OperatorResultType PhysicalProjection::Execute(ExecutionContext &context, DataChunk &input, DataChunk &chunk,
OperatorState &state_p) const {
auto &state = (ProjectionState &)state_p;
state.executor.Execute(input, chunk);
return OperatorResultType::NEED_MORE_INPUT;
}
unique_ptr<OperatorState> PhysicalProjection::GetOperatorState(ClientContext &context) const {
return make_unique<ProjectionState>(select_list);
}
string PhysicalProjection::ParamsToString() const {
string extra_info;
for (auto &expr : select_list) {
extra_info += expr->GetName() + "\n";
}
return extra_info;
}
} // namespace duckdb