vortex_expr/operator/
mod.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4mod 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
23// Needs a mapping from Root array to encoding -> Operator
24
25impl 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}