Evaluate a Filter and return the resulting Filters object
(filter: &Filter, index: &mut InvertedIndex)
| 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(¤t); |
| 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(¤t); |
| 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(¤t); |
| 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 | } |
nothing calls this directly
no test coverage detected