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 {
35                        print!(" PK");
36                    }
37                    if !col.nullable {
38                        print!(" NOT NULL");
39                    }
40                    if col.is_array {
41                        print!(" ARRAY");
42                    }
43                    if col.is_serial {
44                        print!(" SERIAL");
45                    }
46                    if let Some(ref check) = col.check {
47                        print!(" CHECK({})", check);
48                    }
49                    if let Some(ref refs) = col.references {
50                        print!(" -> {}", refs);
51                    }
52                    if let Some(ref params) = col.type_params {
53                        print!(" ({})", params.join(","));
54                    }
55                    println!();
56                }
57            }
58
59            println!("\nāœ“ JSON export:");
60            match schema.to_json() {
61                Ok(json) => println!("{}", &json[..300.min(json.len())]),
62                Err(e) => println!("JSON error: {}", e),
63            }
64        }
65        Err(e) => {
66            eprintln!("āœ— Parse error: {}", e);
67            std::process::exit(1);
68        }
69    }
70}