use crate::{
db::query::{
intent::QueryError,
plan::{
FieldSlot,
validate::{ExprPlanError, GroupPlanError, PlanError},
},
},
db::schema::{FieldType, SchemaInfo},
};
use icydb_diagnostic_code::QueryFieldRole;
pub(in crate::db) fn resolve_group_field_slot_with_schema(
schema: &SchemaInfo,
field: &str,
) -> Result<FieldSlot, PlanError> {
FieldSlot::resolve_with_schema(schema, field).ok_or_else(|| {
PlanError::from(GroupPlanError::unknown_group_field(field))
.attach_query_field(QueryFieldRole::GroupBy)
})
}
pub(in crate::db) fn resolve_aggregate_target_field_slot_with_schema(
schema: &SchemaInfo,
field: &str,
) -> Result<FieldSlot, QueryError> {
FieldSlot::resolve_with_schema(schema, field).ok_or_else(|| {
QueryError::from(
PlanError::from(ExprPlanError::unknown_field(field))
.attach_query_field(QueryFieldRole::AggregateTarget),
)
})
}
pub(in crate::db::query::plan::validate) fn resolve_group_aggregate_target_field_type<'a>(
schema: &'a SchemaInfo,
field: &str,
index: usize,
) -> Result<&'a FieldType, GroupPlanError> {
schema
.field(field)
.ok_or_else(|| GroupPlanError::unknown_aggregate_target_field(index, field))
}