use crate::types::SqlPlan;
pub(super) struct VectorJoinTarget {
pub vector_collection: String,
pub array_prefilter: Option<crate::types::ArrayPrefilter>,
}
pub(super) fn extract_vector_join_target(
left: &SqlPlan,
right: &SqlPlan,
) -> Option<VectorJoinTarget> {
match (left, right) {
(SqlPlan::Scan { collection, .. }, SqlPlan::ArraySlice { name, slice, .. }) => {
Some(VectorJoinTarget {
vector_collection: collection.clone(),
array_prefilter: Some(crate::types::ArrayPrefilter {
array_name: name.clone(),
slice: slice.clone(),
}),
})
}
(SqlPlan::ArraySlice { name, slice, .. }, SqlPlan::Scan { collection, .. }) => {
Some(VectorJoinTarget {
vector_collection: collection.clone(),
array_prefilter: Some(crate::types::ArrayPrefilter {
array_name: name.clone(),
slice: slice.clone(),
}),
})
}
_ => None,
}
}