mz_expr/scalar/reduce/
unary.rs1use mz_repr::{ReprColumnType, RowArena};
13
14use crate::MirScalarExpr;
15use crate::scalar::func::{self, UnaryFunc, VariadicFunc};
16
17pub(super) fn reduce_call_unary(
18 e: &mut MirScalarExpr,
19 column_types: &[ReprColumnType],
20 temp_storage: &RowArena,
21) {
22 let MirScalarExpr::CallUnary { func, expr } = e else {
23 unreachable!()
24 };
25
26 if expr.is_literal() && *func != UnaryFunc::Panic(func::Panic) {
27 *e = MirScalarExpr::literal(e.eval(&[], temp_storage), e.typ(column_types).scalar_type);
28 return;
29 }
30
31 if let UnaryFunc::RecordGet(func::RecordGet(i)) = *func {
33 if let MirScalarExpr::CallVariadic {
34 func: VariadicFunc::RecordCreate(..),
35 exprs,
36 } = &mut **expr
37 {
38 *e = exprs.swap_remove(i);
39 }
40 }
41}