grafbase_sql_ast/ast/function/
coalesce.rs

1use super::Function;
2use crate::ast::{Expression, FunctionType};
3
4#[derive(Debug, Clone, PartialEq)]
5/// Returns the first non-null expression
6pub struct Coalesce<'a> {
7    pub(crate) exprs: Vec<Expression<'a>>,
8}
9
10/// Returns the first non-null argument
11pub fn coalesce<'a, T, V>(exprs: V) -> Function<'a>
12where
13    T: Into<Expression<'a>>,
14    V: Into<Vec<T>>,
15{
16    let fun = Coalesce {
17        exprs: exprs.into().into_iter().map(|e| e.into()).collect(),
18    };
19
20    fun.into()
21}
22
23impl<'a> From<Coalesce<'a>> for Function<'a> {
24    fn from(value: Coalesce<'a>) -> Self {
25        Self {
26            typ_: FunctionType::Coalesce(value),
27            alias: None,
28        }
29    }
30}