akar_processor/processor/
projection_helper.rs1use akar_common::vector::DataChunk;
2use akar_parser::ast::Expression;
3
4pub fn resolve_projection_column_index(expr: &Expression, chunk: &DataChunk) -> Option<usize> {
5 if let Expression::PropertyAccess(obj, prop) = expr {
6 let col_name = if let Expression::Variable(var) = &**obj {
7 format!("{}.{}", var, prop)
8 } else {
9 prop.clone()
10 };
11 if !chunk.field_names.is_empty() {
12 if let Some(idx) = chunk.field_names.iter().position(|n| n == &col_name || n == prop) {
13 return Some(idx);
14 }
15 }
16 if let Expression::Variable(var) = &**obj {
17 if let Ok(idx) = var.parse::<usize>() {
18 return Some(idx);
19 }
20 }
21 return None;
22 }
23 if let Expression::Variable(name) = expr {
24 if let Ok(idx) = name.parse::<usize>() {
25 return Some(idx);
26 }
27 if !chunk.field_names.is_empty() {
28 if let Some(idx) = chunk.field_names.iter().position(|n| n == name) {
29 return Some(idx);
30 }
31 }
32 return None;
33 }
34 None
35}