uqa_sql/assignment/
vectors.rs1use super::conversion::validate_vector_dimensions;
10use crate::catalog::type_metadata::column_type_name;
11use crate::expr::{value_to_tensor, value_to_vector};
12use crate::{ColumnType, SQLError};
13use uqa_core::Value;
14
15mod budgeted;
16pub use budgeted::index_vectors_for_type_budgeted;
17
18pub fn index_vectors_for_type(value: &Value, ty: &ColumnType) -> Result<Vec<Vec<f32>>, SQLError> {
19 if matches!(value, Value::Null) {
25 return Ok(Vec::new());
26 }
27 match ty {
28 ColumnType::Vector(dim) => {
29 let vector = value_to_vector(value)?;
30 validate_vector_dimensions(*dim, vector.len())?;
31 Ok(vec![vector])
32 }
33 ColumnType::Tensor(dim) => {
34 let tensor = value_to_tensor(value)?;
35 for vector in &tensor {
36 validate_vector_dimensions(*dim, vector.len())?;
37 }
38 Ok(tensor)
39 }
40 _ => Err(SQLError::TypeMismatch(format!(
41 "{} is not vector-indexable",
42 column_type_name(ty)
43 ))),
44 }
45}