test_schema_parse/
test_schema_parse.rs

1//! Test native .qail file parsing
2
3use qail_core::parser::schema::Schema;
4
5fn main() {
6    let schema_content = r#"
7-- Test Schema
8table users (
9    id uuid primary_key,
10    email text not null,
11    name varchar(255),
12    tags text[],
13    created_at timestamp
14)
15
16table orders (
17    id serial primary_key,
18    user_id uuid not null references users(id),
19    total decimal(10,2),
20    status text check(status in ('pending', 'completed'))
21)
22"#;
23
24    println!("Testing schema parsing...\n");
25    
26    match Schema::parse(schema_content) {
27        Ok(schema) => {
28            println!("āœ“ Parsed {} tables", schema.tables.len());
29            
30            for table in &schema.tables {
31                println!("\nTable: {}", table.name);
32                for col in &table.columns {
33                    print!("  - {} {}", col.name, col.typ);
34                    if col.primary_key { print!(" PK"); }
35                    if !col.nullable { print!(" NOT NULL"); }
36                    if col.is_array { print!(" ARRAY"); }
37                    if col.is_serial { print!(" SERIAL"); }
38                    if let Some(ref check) = col.check { print!(" CHECK({})", check); }
39                    if let Some(ref refs) = col.references { print!(" -> {}", refs); }
40                    if let Some(ref params) = col.type_params { print!(" ({})", params.join(",")); }
41                    println!();
42                }
43            }
44            
45            println!("\nāœ“ JSON export:");
46            match schema.to_json() {
47                Ok(json) => println!("{}", &json[..300.min(json.len())]),
48                Err(e) => println!("JSON error: {}", e),
49            }
50        }
51        Err(e) => {
52            eprintln!("āœ— Parse error: {}", e);
53            std::process::exit(1);
54        }
55    }
56}