MCPcopy Create free account
hub / github.com/carsonpo/haystackdb / evaluate

Method evaluate

src/structures/filters.rs:117–157  ·  view source on GitHub ↗

Evaluate a Filter and return the resulting Filters object

(filter: &Filter, index: &mut InvertedIndex)

Source from the content-addressed store, hash-verified

115
116 // Evaluate a Filter and return the resulting Filters object
117 pub fn evaluate(filter: &Filter, index: &mut InvertedIndex) -> Filters {
118 match filter {
119 Filter::And(filters) => {
120 let mut result = Filters::new(vec![], vec![]); // Start with an empty set or universal set if applicable
121 for f in filters.iter() {
122 let current = Filters::evaluate(f, index);
123 if result.current_indices.is_empty() && result.current_ids.is_empty() {
124 result = current;
125 } else {
126 result = result.intersection(&current);
127 }
128 }
129 result
130 }
131 Filter::Or(filters) => {
132 let mut result = Filters::new(vec![], vec![]);
133 for f in filters.iter() {
134 let current = Filters::evaluate(f, index);
135 result = result.union(&current);
136 }
137 result
138 }
139 Filter::In(key, values) => {
140 let mut result = Filters::new(vec![], vec![]);
141 for value in values.iter() {
142 let kv_pair = KVPair::new(key.clone(), value.clone()); // Ensure correct KVPair creation
143 let current = Filters::from_index(index, &kv_pair);
144 result = result.union(&current);
145 }
146 result
147 }
148 Filter::Eq(key, value) => {
149 println!(
150 "Evaluating EQ filter for key: {:?}, value: {:?}",
151 key, value
152 ); // Debug output
153 let kv_pair = KVPair::new(key.clone(), value.clone()); // Ensure correct KVPair creation
154 Filters::from_index(index, &kv_pair)
155 }
156 }
157 }
158}

Callers

nothing calls this directly

Calls 3

intersectionMethod · 0.80
unionMethod · 0.80
cloneMethod · 0.80

Tested by

no test coverage detected