1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use crate::compile::expr::ToSqlExpr;
use crate::dialect::Dialect;
use datafusion_common::DFSchema;
use datafusion_expr::Expr;
use sqlparser::ast::{FunctionArgExpr as SqlFunctionArgExpr, Ident, ObjectName};
use vegafusion_common::error::Result;

pub trait ToSqlFunctionArg {
    fn to_sql_function_arg(
        &self,
        dialect: &Dialect,
        schema: &DFSchema,
    ) -> Result<SqlFunctionArgExpr>;
}

impl ToSqlFunctionArg for Expr {
    fn to_sql_function_arg(
        &self,
        dialect: &Dialect,
        schema: &DFSchema,
    ) -> Result<SqlFunctionArgExpr> {
        Ok(match self {
            Expr::Wildcard { qualifier: None } => SqlFunctionArgExpr::Wildcard,
            Expr::Wildcard {
                qualifier: Some(qualifier),
            } => SqlFunctionArgExpr::QualifiedWildcard(ObjectName(vec![Ident {
                value: qualifier.clone(),
                quote_style: None,
            }])),
            expr => SqlFunctionArgExpr::Expr(expr.to_sql(dialect, schema)?),
        })
    }
}