db_demo/
db_demo.rs

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    // Use SQLite for this example as it's self-contained
9    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    // Create a table
16    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    // Insert some data
27    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    // Query data using the new query method
36    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    // Query one
47    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}