use crate::functions::registry::SearchTrigger;
pub(super) fn search_trigger(canonical: &str) -> SearchTrigger {
match canonical {
"st_dwithin" => SearchTrigger::SpatialDWithin,
"st_contains" => SearchTrigger::SpatialContains,
"st_intersects" => SearchTrigger::SpatialIntersects,
"st_within" => SearchTrigger::SpatialWithin,
_ => SearchTrigger::None,
}
}
#[cfg(test)]
mod tests {
use super::*;
use nodedb_query::geo_functions::catalog;
#[test]
fn routed_predicates_are_declared_in_the_catalog() {
for name in ["st_dwithin", "st_contains", "st_intersects", "st_within"] {
assert!(
catalog::lookup(name).is_some(),
"'{name}' is routed to the spatial index but is not in the catalog"
);
assert_ne!(search_trigger(name), SearchTrigger::None);
}
}
#[test]
fn unrouted_functions_evaluate_per_row() {
assert_eq!(search_trigger("st_distance"), SearchTrigger::None);
assert_eq!(search_trigger("st_astext"), SearchTrigger::None);
}
}