use qail_core::ast::{Action, Constraint, Expr, Qail};
use qail_pg::driver::PgDriver;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("๐งช Test 1: Buffer Boundary (1MB)");
println!("{}", "โ".repeat(40));
let mut driver = PgDriver::connect("localhost", 5432, "orion", "postgres").await?;
let size_kb = 1024;
let huge_string: String = (0..size_kb * 1024)
.map(|i| ((i % 26) as u8 + b'a') as char)
.collect();
println!(" Created {} KB of test data", size_kb);
let drop_cmd = Qail {
action: Action::Drop,
table: "big_text".to_string(),
..Default::default()
};
let make_cmd = Qail {
action: Action::Make,
table: "big_text".to_string(),
columns: vec![
Expr::Def {
name: "id".to_string(),
data_type: "serial".to_string(),
constraints: vec![Constraint::PrimaryKey],
},
Expr::Def {
name: "data".to_string(),
data_type: "text".to_string(),
constraints: vec![Constraint::Nullable],
},
],
..Default::default()
};
let _ = driver.execute(&drop_cmd).await;
driver.execute(&make_cmd).await?;
let start = std::time::Instant::now();
println!(" Payload size: {} KB", huge_string.len() / 1024);
println!(" Inserting...");
let insert = Qail::add("big_text")
.columns(["data"])
.values([huge_string]);
driver.execute(&insert).await?;
let elapsed = start.elapsed();
println!(" โ Insert completed in {:?}", elapsed);
let rows = driver
.fetch_all(
&Qail::get("big_text")
.columns(["data"])
.order_desc("id")
.limit(1),
)
.await?;
let stored_len = rows
.first()
.and_then(|r| r.get_string(0))
.map(|s| s.len())
.unwrap_or(0);
println!(" โ Verified in database (len={})", stored_len);
println!();
println!("โ Buffer Boundary Test (1MB) PASSED!");
Ok(())
}