test_query_parse/
test_query_parse.rs1use qail_core::parser::query_file::QueryFile;
4
5fn main() {
6 let queries_content = r#"
7-- User queries
8query find_user(id: Uuid) -> User:
9 get users where id = :id
10
11query list_users() -> Vec<User>:
12 get users order by created_at desc
13
14query find_by_email(email: String) -> Option<User>:
15 get users where email = :email limit 1
16
17execute create_user(email: String, name: String):
18 add::users : email, name [ :email, :name ]
19
20execute delete_user(id: Uuid):
21 del::users where id = :id
22"#;
23
24 println!("Testing query file parsing...\n");
25
26 match QueryFile::parse(queries_content) {
27 Ok(qf) => {
28 println!("✓ Parsed {} queries\n", qf.queries.len());
29
30 for q in &qf.queries {
31 let kind = if q.is_execute { "execute" } else { "query" };
32 let params: Vec<_> = q.params.iter()
33 .map(|p| format!("{}: {}", p.name, p.typ))
34 .collect();
35
36 let return_type = match &q.return_type {
37 Some(qail_core::parser::query_file::ReturnType::Single(t)) => format!("-> {}", t),
38 Some(qail_core::parser::query_file::ReturnType::Vec(t)) => format!("-> Vec<{}>", t),
39 Some(qail_core::parser::query_file::ReturnType::Option(t)) => format!("-> Option<{}>", t),
40 None => String::new(),
41 };
42
43 println!("{} {}({}) {}", kind, q.name, params.join(", "), return_type);
44 println!(" body: {}", q.body.lines().next().unwrap_or(""));
45 println!();
46 }
47
48 println!("✓ All query parsing tests passed!");
49 }
50 Err(e) => {
51 eprintln!("✗ Parse error: {}", e);
52 std::process::exit(1);
53 }
54 }
55}