test_case_when/
test_case_when.rs

1//! Test CASE WHEN expression support
2
3use qail_core::parse;
4use qail_core::transpiler::ToSql;
5
6fn main() {
7    println!("=== Testing CASE WHEN Expressions ===\n");
8    
9    // Test 1: Simple CASE WHEN
10    let query1 = "get users fields case when status = 'active' then 1 else 0 end as is_active";
11    println!("Query 1: {}", query1);
12    match parse(query1) {
13        Ok(cmd) => println!("  SQL: {}\n", cmd.to_sql()),
14        Err(e) => println!("  Parse error: {:?}\n", e),
15    }
16    
17    // Test 2: Multiple WHEN clauses
18    let query2 = "get orders fields case when total > 1000 then 'large' when total > 100 then 'medium' else 'small' end as size";
19    println!("Query 2: {}", query2);
20    match parse(query2) {
21        Ok(cmd) => println!("  SQL: {}\n", cmd.to_sql()),
22        Err(e) => println!("  Parse error: {:?}\n", e),
23    }
24    
25    // Test 3: CASE WHEN in UPDATE
26    let query3 = "set products values price = case when stock > 0 then price else 0 end where id = :id";
27    println!("Query 3: {}", query3);
28    match parse(query3) {
29        Ok(cmd) => println!("  SQL: {}\n", cmd.to_sql()),
30        Err(e) => println!("  Parse error: {:?}\n", e),
31    }
32    
33    // Test 4: CASE with named params
34    let query4 = "get users fields case when role = :role then 1 else 0 end as matched";
35    println!("Query 4: {}", query4);
36    match parse(query4) {
37        Ok(cmd) => println!("  SQL: {}\n", cmd.to_sql()),
38        Err(e) => println!("  Parse error: {:?}\n", e),
39    }
40    
41    // Test 5: IS NULL in WHERE (should work)
42    let query5 = "get users where name is null";
43    println!("Query 5 (WHERE IS NULL): {}", query5);
44    match parse(query5) {
45        Ok(cmd) => println!("  SQL: {}\n", cmd.to_sql()),
46        Err(e) => println!("  Parse error: {:?}\n", e),
47    }
48    
49    // Test 6: IS NULL in CASE (simpler)
50    let query6 = "get users fields case when name is null then email else name end";
51    println!("Query 6 (CASE IS NULL): {}", query6);
52    match parse(query6) {
53        Ok(cmd) => println!("  SQL: {}\n", cmd.to_sql()),
54        Err(e) => println!("  Parse error: {:?}\n", e),
55    }
56}