1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use crate::physical_plan::executors::evaluate_physical_expressions;
use crate::physical_plan::state::ExecutionState;
use crate::prelude::*;
use polars_core::prelude::*;
pub struct ProjectionExec {
input: Box<dyn Executor>,
expr: Vec<Arc<dyn PhysicalExpr>>,
}
impl ProjectionExec {
pub(crate) fn new(input: Box<dyn Executor>, expr: Vec<Arc<dyn PhysicalExpr>>) -> Self {
Self { input, expr }
}
}
impl Executor for ProjectionExec {
fn execute(&mut self, state: &ExecutionState) -> Result<DataFrame> {
let df = self.input.execute(state)?;
let df = evaluate_physical_expressions(&df, &self.expr, state);
state.clear_expr_cache();
df
}
}