flp-gsp 1.1.0

General search parser
Documentation
#![cfg(feature = "mysql")]

use flp_gsp::{Expression, interpreter::mysql::*};

#[test]
fn test_mysql() {
    let s = r#"((((! "age" -) & (! "age" > "18")) & ("sex" ? ["male", "Male"] | "sex" ~ "Female")) & "name" * "J?c*")"#;
    let expression = Expression::try_from_str(s).unwrap();

    let mut renames = MysqlRenames::new();
    renames.insert("name".into(), "t.name".into());
    renames.insert("sex".into(), "gender".into());

    let mut types = MysqlTypes::new();
    types.insert("age".into(), MysqlType::Unsigned(None));
    types.insert("sex".into(), MysqlType::StringLike(None));
    types.insert("name".into(), MysqlType::StringLike(None));

    let interpreted = interpret(&expression, &renames, &types).unwrap();
    let (clause, binds) = interpreted;

    assert_eq!(
        clause,
        "((((NOT age IS NULL) AND (NOT age > ?)) AND (gender IN (?, ?) OR gender LIKE ?)) AND t.name LIKE ?)"
    );
    assert_eq!(
        binds,
        vec![
            MysqlType::Unsigned(Some(18)),
            MysqlType::StringLike(Some("male".into())),
            MysqlType::StringLike(Some("Male".into())),
            MysqlType::StringLike(Some("Female".into())),
            MysqlType::StringLike(Some("J_c%".into()))
        ]
    );
}