• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

vortex-data / vortex / 16970635821

14 Aug 2025 04:13PM UTC coverage: 85.882% (-1.8%) from 87.693%
16970635821

Pull #4215

github

web-flow
Merge 5182504a6 into f547cbca5
Pull Request #4215: Ji/vectors

80 of 1729 new or added lines in 38 files covered. (4.63%)

117 existing lines in 25 files now uncovered.

56994 of 66363 relevant lines covered (85.88%)

609331.7 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/vortex-expr/src/operator/reduce.rs
1
use std::sync::Arc;
2

3
use vortex_array::pipeline::operators::Operator;
4
use vortex_error::VortexResult;
5

6
use crate::traversal::{FoldUp, Node, NodeExt, NodeFolder, NodeRewriter, Transformed};
7

NEW
8
pub fn reduce_operator(operator: Arc<dyn Operator>) -> VortexResult<Arc<dyn Operator>> {
×
NEW
9
    let operator = reduce_up(operator.clone())?;
×
NEW
10
    reduce_down(operator)
×
NEW
11
}
×
12

NEW
13
pub fn reduce_up(operator: Arc<dyn Operator>) -> VortexResult<Arc<dyn Operator>> {
×
NEW
14
    let mut folder = UpReducer;
×
NEW
15
    operator.fold(&mut folder).map(|t| t.value())
×
NEW
16
}
×
17

NEW
18
pub fn reduce_down(operator: Arc<dyn Operator>) -> VortexResult<Arc<dyn Operator>> {
×
NEW
19
    let mut rewriter = DownReducer;
×
NEW
20
    operator.rewrite(&mut rewriter).map(|t| t.value)
×
NEW
21
}
×
22

23
struct UpReducer;
24

25
impl NodeFolder for UpReducer {
26
    type NodeTy = Arc<dyn Operator>;
27
    type Result = Arc<dyn Operator>;
28

NEW
29
    fn visit_up(
×
NEW
30
        &mut self,
×
NEW
31
        node: Self::NodeTy,
×
NEW
32
        children: Vec<Self::Result>,
×
NEW
33
    ) -> VortexResult<FoldUp<Self::Result>> {
×
34
        Ok(FoldUp::Continue(
NEW
35
            match node.reduce_children(children.as_slice()) {
×
NEW
36
                None => node.with_children(children),
×
NEW
37
                Some(r) => r,
×
38
            },
39
        ))
NEW
40
    }
×
41
}
42

43
struct DownReducer;
44

45
impl NodeRewriter for DownReducer {
46
    type NodeTy = Arc<dyn Operator>;
47

NEW
48
    fn visit_down(&mut self, node: Self::NodeTy) -> VortexResult<Transformed<Self::NodeTy>> {
×
NEW
49
        if node.children_count() != 1 {
×
NEW
50
            return Ok(Transformed::no(node));
×
NEW
51
        }
×
NEW
52
        match node.children()[0].reduce_parent(node.clone()) {
×
NEW
53
            None => Ok(Transformed::no(node)),
×
NEW
54
            Some(r) => Ok(Transformed::yes(r)),
×
55
        }
NEW
56
    }
×
57
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc