use candybase::*;
use std::env;
fn main() -> Result<(), CandyError> {
println!("=== Candy MySQL Demo ===\n");
let args: Vec<String> = env::args().collect();
let conn = if args.len() >= 5 {
candy_connect(&args[1], &args[2], &args[3], &args[4])?
} else if env::var("CANDY_DB_URL").is_ok() {
candy_connect("", "", "", "")? } else {
eprintln!("Usage: mysql_demo <host> <user> <pass> <db>");
eprintln!(" or: CANDY_DB_URL=mysql://user:pass@host/db cargo run --example mysql_demo");
std::process::exit(1);
};
println!("[+] Connected to MySQL");
candy_query(&conn, "DROP TABLE IF EXISTS candy_users")?;
candy_query(
&conn,
"CREATE TABLE candy_users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT
)",
)?;
println!("[+] Table `candy_users` created");
candy_insert(
&conn,
"INSERT INTO candy_users (name, age) VALUES ('Alice', 30)",
)?;
candy_insert(
&conn,
"INSERT INTO candy_users (name, age) VALUES ('Bob', 25)",
)?;
candy_insert(
&conn,
"INSERT INTO candy_users (name, age) VALUES ('Carol', 35)",
)?;
println!("[+] Inserted 3 users");
let res = candy_query(&conn, "SELECT * FROM candy_users")?;
let users = candy_fetch_all(res)?;
println!("\n--- All users ---");
for u in &users {
println!(" id={} name={} age={}", u["id"], u["name"], u["age"]);
}
let res = candy_query(&conn, "SELECT * FROM candy_users WHERE name = 'Bob'")?;
let bob = candy_fetch_one(res)?;
println!("\n--- Fetch one (Bob) ---\n {:?}", bob);
candy_update(&conn, "UPDATE candy_users SET age = 26 WHERE name = 'Bob'")?;
println!("\n[+] Bob's age updated to 26");
candy_delete(&conn, "DELETE FROM candy_users WHERE name = 'Carol'")?;
println!("[+] Carol deleted");
candy_transaction(
&conn,
vec![
"INSERT INTO candy_users (name, age) VALUES ('Dave', 40)",
"UPDATE candy_users SET age = age + 1 WHERE name = 'Alice'",
],
)?;
println!("[+] Transaction committed");
let res = candy_query(&conn, "SELECT * FROM candy_users ORDER BY id")?;
let users = candy_fetch_all(res)?;
println!("\n--- Final state ---");
for u in &users {
println!(" id={} name={} age={}", u["id"], u["name"], u["age"]);
}
candy_close(conn)?;
println!("\n[+] Done!");
Ok(())
}