taitan-orm-parser 0.1.12

Next Generation ORM based on sqlx
Documentation
use taitan_orm_parser::{Atomic, AtomicStream, Number, Variable, VariableChain, Placeholder, RawPlaceholder};

use taitan_orm_parser::template::{CompareOp, GenericExpr, MaybeValue, LogicOp, GenericAtomicStream, GenericAtomic, MySqlAtomic};
use crate::setups::logger::setup_logger;

#[test]
fn test_syntax_parser() {
    setup_logger();
    let template = "a>=b";
    let atomics = GenericAtomicStream::parse::<MySqlAtomic>(template).unwrap();
    let (_,expr1) = GenericExpr::parse(atomics.atomics).unwrap();
    let expected = GenericExpr::CompareExpr {
        left: Box::new(GenericExpr::Atomic(GenericAtomic::Maybe(MaybeValue::VariableChain(VariableChain::new(vec![Variable::Simple("a".to_string())]))))),
        op: CompareOp::GreaterThanOrEqual,
        right: Box::new(GenericExpr::Atomic(GenericAtomic::Maybe(MaybeValue::VariableChain(VariableChain::new(vec![Variable::Simple("b".to_string())])))))
    };
    assert_eq!(expected, expr1);

    let expr2 = GenericExpr::parse_str::<MySqlAtomic>("c=d").unwrap();
    let expr3 = GenericExpr::parse_str::<MySqlAtomic>("e!=null").unwrap();
    let expr4 = GenericExpr::parse_str::<MySqlAtomic>("f<>6").unwrap();
    let expr5 = GenericExpr::parse_str::<MySqlAtomic>("test>?").unwrap();


    let template = "a>=b and c=d or e!=null and f<>6 or test>?";
    let expr = GenericExpr::parse_str::<MySqlAtomic>(template).unwrap();
    let expected = GenericExpr::LogicExpr {
        left: Box::new(GenericExpr::LogicExpr {
            left: Box::new(GenericExpr::LogicExpr {
                left: Box::new(expr1),
                op: LogicOp::And,
                right: Box::new(expr2),
            }),
            op: LogicOp::Or,
            right: Box::new(GenericExpr::LogicExpr {
                left: Box::new(expr3),
                op: LogicOp::And,
                right: Box::new(expr4),
            }),
        }),
        op: LogicOp::Or,
        right: Box::new(expr5),
    };

    assert_eq!(expr, expected);
}