test_upsert/
test_upsert.rs

1//! Test UPSERT (ON CONFLICT) feature
2
3use qail_core::parse;
4use qail_core::transpiler::ToSql;
5
6fn main() {
7    println!("=== Testing UPSERT / ON CONFLICT ===\n");
8    
9    // Test 1: DO NOTHING  
10    let query1 = "add contacts fields phone, name values :phone, :name conflict (phone) nothing";
11    println!("Query 1: {}", query1);
12    match parse(query1) {
13        Ok(cmd) => {
14            println!("  On Conflict: {:?}", cmd.on_conflict);
15            println!("  SQL: {}\n", cmd.to_sql());
16        }
17        Err(e) => println!("  Parse error: {:?}\n", e),
18    }
19    
20    // Test 2: DO UPDATE
21    let query2 = "add contacts fields phone, name values :phone, :name conflict (phone) update name = excluded.name";
22    println!("Query 2: {}", query2);
23    match parse(query2) {
24        Ok(cmd) => {
25            println!("  On Conflict: {:?}", cmd.on_conflict);
26            println!("  SQL: {}\n", cmd.to_sql());
27        }
28        Err(e) => println!("  Parse error: {:?}\n", e),
29    }
30    
31    // Test 3: Different column names
32    let query3 = "add users fields email, data values :email, :data conflict (email) update data = :data";
33    println!("Query 3: {}", query3);
34    match parse(query3) {
35        Ok(cmd) => {
36            println!("  On Conflict: {:?}", cmd.on_conflict);
37            println!("  SQL: {}\n", cmd.to_sql());
38        }
39        Err(e) => println!("  Parse error: {:?}\n", e),
40    }
41    
42    // Test 4: Multiple assignments
43    let query4 = "add items fields a, b, c values 1, 2, 3 conflict (a) update b = 10, c = 20";
44    println!("Query 4: {}", query4);
45    match parse(query4) {
46        Ok(cmd) => {
47            println!("  On Conflict: {:?}", cmd.on_conflict);
48            println!("  SQL: {}\n", cmd.to_sql());
49        }
50        Err(e) => println!("  Parse error: {:?}\n", e),
51    }
52}