surrealdb_expr/expr/statements/
ifelse.rs1use surrealdb_types::{SqlFormat, ToSql};
2
3use crate::expr::Expr;
4
5#[derive(Clone, Debug, Default, Eq, PartialEq, Hash)]
6pub struct IfelseStatement {
7 pub exprs: Vec<(Expr, Expr)>,
10 pub close: Option<Expr>,
12}
13
14impl IfelseStatement {
15 pub fn read_only(&self) -> bool {
17 self.exprs.iter().all(|x| x.0.read_only() && x.1.read_only())
18 && self.close.as_ref().map(|x| x.read_only()).unwrap_or(true)
19 }
20}
21
22impl ToSql for IfelseStatement {
23 fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
24 let stmt: crate::sql::statements::ifelse::IfelseStatement = self.clone().into();
25 stmt.fmt_sql(f, fmt);
26 }
27}
28
29#[cfg(test)]
30#[allow(clippy::unwrap_used)]
31mod tests {
32 use super::*;
33 use crate::syn;
34
35 #[test]
36 fn format_pretty() {
37 let query = syn::expr("IF 1 { 1 } ELSE IF 2 { 2 }").unwrap();
38 assert_eq!(query.to_sql(), "IF 1 { 1 } ELSE IF 2 { 2 }");
39 assert_eq!(query.to_sql_pretty(), "IF 1 { 1 } ELSE IF 2 { 2 }");
41 }
42}