fn call notation

main
Ziyang Hu 2 years ago
parent 1e3af751b7
commit 1cfa704fcc

@ -1,12 +1,6 @@
use crate::data::expr::{Expr, StaticExpr};
use crate::data::expr::{Expr};
use crate::data::expr_parser::ExprParseError;
use crate::data::op::{
partial_eval_and, partial_eval_coalesce, partial_eval_if_expr, partial_eval_or,
partial_eval_switch_expr, row_eval_and, row_eval_coalesce, row_eval_if_expr, row_eval_or,
row_eval_switch_expr, Op, OpAdd, OpAnd, OpCoalesce, OpConcat, OpDiv, OpEq, OpGe, OpGt,
OpIsNull, OpLe, OpLt, OpMerge, OpMinus, OpMod, OpMul, OpNe, OpNot, OpNotNull, OpOr, OpPow,
OpStrCat, OpSub,
};
use crate::data::op::*;
use crate::data::tuple_set::{ColId, TableId, TupleSetIdx};
use crate::data::value::{StaticValue, Value};
use std::borrow::Cow;
@ -162,8 +156,13 @@ impl<'a> Expr<'a> {
}
}
Expr::Apply(op, args) => {
// special cases
if let Some(n) = op.arity() {
if n != args.len() {
return Err(EvalError::ArityMismatch(op.name().to_string(), args.len()));
}
}
match op.name() {
// special cases
n if n == OpAnd.name() => partial_eval_and(ctx, args)?,
n if n == OpOr.name() => partial_eval_or(ctx, args)?,
n if n == OpCoalesce.name() => partial_eval_coalesce(ctx, args)?,

Loading…
Cancel
Save