test_schema_parse/
test_schema_parse.rs1use 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}