MCPcopy Create free account
hub / github.com/comnik/declarative-dataflow / implement

Method implement

src/plan/filter.rs:73–131  ·  view source on GitHub ↗
(
        &self,
        nested: &mut Iterative<'b, S, u64>,
        local_arrangements: &VariableMap<Iterative<'b, S, u64>>,
        context: &mut I,
    )

Source from the content-addressed store, hash-verified

71 }
72
73 fn implement<'b, T, I, S>(
74 &self,
75 nested: &mut Iterative<'b, S, u64>,
76 local_arrangements: &VariableMap<Iterative<'b, S, u64>>,
77 context: &mut I,
78 ) -> (Implemented<'b, S>, ShutdownHandle)
79 where
80 T: Timestamp + Lattice,
81 I: ImplContext<T>,
82 S: Scope<Timestamp = T>,
83 {
84 let (relation, mut shutdown_handle) =
85 self.plan.implement(nested, local_arrangements, context);
86
87 let key_offsets: Vec<usize> = self
88 .variables
89 .iter()
90 .map(|variable| relation.binds(*variable).expect("variable not found"))
91 .collect();
92
93 let binary_predicate = match self.predicate {
94 Predicate::LT => lt,
95 Predicate::LTE => lte,
96 Predicate::GT => gt,
97 Predicate::GTE => gte,
98 Predicate::EQ => eq,
99 Predicate::NEQ => neq,
100 };
101
102 let variables = relation.variables();
103 let projected = {
104 let (projected, shutdown) = relation.projected(nested, context, &variables);
105 shutdown_handle.merge_with(shutdown);
106 projected
107 };
108
109 let filtered = if let Some(constant) = self.constants[0].clone() {
110 CollectionRelation {
111 variables,
112 tuples: projected
113 .filter(move |tuple| binary_predicate(&constant, &tuple[key_offsets[0]])),
114 }
115 } else if let Some(constant) = self.constants[1].clone() {
116 CollectionRelation {
117 variables,
118 tuples: projected
119 .filter(move |tuple| binary_predicate(&tuple[key_offsets[0]], &constant)),
120 }
121 } else {
122 CollectionRelation {
123 variables,
124 tuples: projected.filter(move |tuple| {
125 binary_predicate(&tuple[key_offsets[0]], &tuple[key_offsets[1]])
126 }),
127 }
128 };
129
130 (Implemented::Collection(filtered), shutdown_handle)

Callers

nothing calls this directly

Calls 4

projectedMethod · 0.80
merge_withMethod · 0.80
bindsMethod · 0.45
variablesMethod · 0.45

Tested by

no test coverage detected