vortex_expr/operator/
mod.rs1mod reduce;
5
6pub use reduce::*;
7use vortex_array::pipeline::OperatorRef;
8use vortex_error::VortexResult;
9
10use crate::traversal::{FoldUp, NodeFolder};
11use crate::{ExprRef, RootVTable};
12
13pub struct ExprOperatorConverter {
14 root: OperatorRef,
15}
16
17impl ExprOperatorConverter {
18 pub fn new(root: OperatorRef) -> Self {
19 Self { root }
20 }
21}
22
23impl NodeFolder for ExprOperatorConverter {
26 type NodeTy = ExprRef;
27 type Result = Option<OperatorRef>;
28
29 fn visit_up(
30 &mut self,
31 node: ExprRef,
32 children: Vec<Option<OperatorRef>>,
33 ) -> VortexResult<FoldUp<Option<OperatorRef>>> {
34 let Some(children) = children.into_iter().collect::<Option<Vec<_>>>() else {
35 return Ok(FoldUp::Stop(None));
36 };
37 if node.as_opt::<RootVTable>().is_some() {
38 return Ok(FoldUp::Continue(Some(self.root.clone())));
39 }
40 let Some(operator) = node.operator(children) else {
41 return Ok(FoldUp::Stop(None));
42 };
43 Ok(FoldUp::Continue(Some(operator)))
44 }
45}