1use oxidite_db::{DbPool, Database, sqlx::Row};
2use std::error::Error;
3
4#[tokio::main]
5async fn main() -> Result<(), Box<dyn Error>> {
6 println!("🚀 Starting Database Demo");
7
8 let url = "sqlite::memory:?cache=shared";
10 println!("Connecting to {}", url);
11
12 let db = DbPool::connect(url).await?;
13 println!("Connected to {:?}", db.db_type());
14
15 let setup_sql = "
17 CREATE TABLE users (
18 id INTEGER PRIMARY KEY,
19 name TEXT NOT NULL,
20 email TEXT NOT NULL
21 );
22 ";
23 db.execute(setup_sql).await?;
24 println!("Created table 'users'");
25
26 let insert_sql = "INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')";
28 let rows = db.execute(insert_sql).await?;
29 println!("Inserted {} row(s)", rows);
30
31 let insert_sql2 = "INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com')";
32 let rows2 = db.execute(insert_sql2).await?;
33 println!("Inserted {} row(s)", rows2);
34
35 let select_sql = "SELECT * FROM users";
37 let results = db.query(select_sql).await?;
38 println!("Found {} user(s)", results.len());
39
40 for row in results {
41 let name: String = row.try_get("name")?;
42 let email: String = row.try_get("email")?;
43 println!("User: {} ({})", name, email);
44 }
45
46 let one_sql = "SELECT * FROM users WHERE name = 'Alice'";
48 if let Some(row) = db.query_one(one_sql).await? {
49 let name: String = row.try_get("name")?;
50 println!("Found specific user: {}", name);
51 } else {
52 println!("User not found");
53 }
54
55 db.ping().await?;
56 println!("Ping successful");
57
58 Ok(())
59}