use crate::types::ArraySlicePlan;
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(ArraySlicePlan { name, slice, .. }),
) => Some(VectorJoinTarget {
vector_collection: collection.clone(),
array_prefilter: Some(crate::types::ArrayPrefilter {
array_name: name.clone(),
slice: slice.clone(),
}),
}),
(
SqlPlan::ArraySlice(ArraySlicePlan { 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,
}
}