use crate::{
SetOp, SourceSpan,
plan::{BindingTableSchema, PlannerError},
};
pub(super) fn assert_arms_column_name_equal(
op: SetOp,
lhs: &BindingTableSchema,
rhs: &BindingTableSchema,
span: SourceSpan,
) -> Result<(), PlannerError> {
for (position, (lhs_col, rhs_col)) in lhs.columns.iter().zip(&rhs.columns).enumerate() {
if lhs_col.name != rhs_col.name {
return Err(PlannerError::SetOpArmsNotCombinable {
op: op_name(op),
position,
lhs: lhs_col.name.clone(),
rhs: rhs_col.name.clone(),
span,
});
}
}
Ok(())
}
const fn op_name(op: SetOp) -> &'static str {
match op {
SetOp::Union | SetOp::UnionAll => "UNION",
SetOp::Intersect | SetOp::IntersectAll => "INTERSECT",
SetOp::Except | SetOp::ExceptAll => "EXCEPT",
SetOp::Otherwise => "OTHERWISE",
}
}