use super::Dialect;
use super::ToSql;
impl<'a> ToSql<'a> for crate::table_expr::TableExpr<'a> {
#[inline]
fn build<D: Dialect>(self, sql: &mut String, args: &mut Vec<crate::value::Value<'a>>) {
match self {
crate::table_expr::TableExpr::TableRef(val) => val.build::<D>(sql, args),
crate::table_expr::TableExpr::FuncCall(val) => val.build::<D>(sql, args),
crate::table_expr::TableExpr::Join(left, right, cond) => {
join!(D, sql, args, left, "JOIN", right, cond)
}
crate::table_expr::TableExpr::LeftJoin(left, right, cond) => {
join!(D, sql, args, left, "LEFT JOIN", right, cond)
}
crate::table_expr::TableExpr::RightJoin(left, right, cond) => {
join!(D, sql, args, left, "RIGHT JOIN", right, cond)
}
crate::table_expr::TableExpr::FullJoin(left, right, cond) => {
join!(D, sql, args, left, "FULL JOIN", right, cond)
}
crate::table_expr::TableExpr::NaturalJoin(left, right) => {
join!(D, sql, args, left, "NATURAL JOIN", right)
}
crate::table_expr::TableExpr::NaturalLeftJoin(left, right) => {
join!(D, sql, args, left, "NATURAL LEFT JOIN", right)
}
crate::table_expr::TableExpr::NaturalRightJoin(left, right) => {
join!(D, sql, args, left, "NATURAL RIGHT JOIN", right)
}
crate::table_expr::TableExpr::NaturalFullJoin(left, right) => {
join!(D, sql, args, left, "NATURAL FULL JOIN", right)
}
crate::table_expr::TableExpr::CrossJoin(left, right) => {
join!(D, sql, args, left, "CROSS JOIN", right)
}
crate::table_expr::TableExpr::SubQuery(val) => {
sql.push('(');
val.build::<D>(sql, args);
sql.push(')');
}
}
}
}