arel 0.0.0

simulate rails arel
Documentation
use serde_json::{Value as Json, json};
use crate::nodes::{ SqlLiteral, And, select_statement::{SelectStatement, SelectCore} };
use std::default::Default;

#[derive(Debug, Clone)]
pub struct SelectManager {
    pub ast: SelectStatement,
}

impl Default for SelectManager {
    fn default() -> Self {
        Self {
            ast: SelectStatement::default(),
        }
    }
}

impl SelectManager {
    fn get_ctx_mut(&mut self) -> &mut SelectCore {
        self.ast.cores.last_mut().unwrap()
    }
    fn get_ctx(&self) -> &SelectCore {
        self.ast.cores.last().unwrap()
    }
    pub fn r#where(&mut self, condition: Json) -> &mut Self {
        self.get_ctx_mut().r#where(condition);
        self
    }
    pub fn get_where_sql(&self) -> Option<SqlLiteral> {
        let ctx = self.get_ctx();
        if self.get_ctx().r#wheres.len() == 0 {
            None
        } else {
            Some(SqlLiteral::new(&format!("WHERE {}", And::new(&ctx.r#wheres).to_sql())))
        }
    }
}