| 13 | |
| 14 | #[tokio::main] |
| 15 | async fn main() -> Result<(), Box<dyn std::error::Error>> { |
| 16 | let mut args = std::env::args(); |
| 17 | let program = args.next().unwrap_or_else(|| "app".to_string()); |
| 18 | let user = args.next().ok_or_else(|| { |
| 19 | format!("Usage: {program} <USER> <PORT>") |
| 20 | })?; |
| 21 | let port: u16 = args.next().ok_or_else(|| { |
| 22 | format!("Usage: {program} <USER> <PORT>") |
| 23 | })?.parse()?; |
| 24 | let database_url = format!("postgresql://{user}:password@localhost:{port}/postgres"); |
| 25 | let pool = PgPoolOptions::new() |
| 26 | .max_connections(5) |
| 27 | .connect(&database_url) |
| 28 | .await?; |
| 29 | |
| 30 | let exists: bool = sqlx::query_scalar("SELECT EXISTS(SELECT 1 FROM pg_catalog.pg_tables WHERE tablename = $1);") |
| 31 | .bind("test_table") |
| 32 | .fetch_one(&pool) |
| 33 | .await?; |
| 34 | println!("exists={exists}"); |
| 35 | |
| 36 | sqlx::query("DROP TABLE IF EXISTS users, events;") |
| 37 | .execute(&pool) |
| 38 | .await?; |
| 39 | |
| 40 | sqlx::query("CREATE TABLE users (id uuid default gen_random_uuid(), name text, email text);") |
| 41 | .execute(&pool) |
| 42 | .await?; |
| 43 | |
| 44 | sqlx::query("INSERT INTO users (name, email) VALUES ($1, $2)") |
| 45 | .bind("Alice") |
| 46 | .bind("alice@example.com") |
| 47 | .execute(&pool) |
| 48 | .await?; |
| 49 | |
| 50 | let some_uuid: Uuid = sqlx::query_scalar("SELECT id FROM users WHERE email = $1 LIMIT 1") |
| 51 | .bind("alice@example.com") |
| 52 | .fetch_one(&pool) |
| 53 | .await?; |
| 54 | |
| 55 | sqlx::query("UPDATE users SET name = $1 WHERE id = $2") |
| 56 | .bind("Bob") |
| 57 | .bind(some_uuid) |
| 58 | .execute(&pool) |
| 59 | .await?; |
| 60 | |
| 61 | sqlx::query("CREATE TABLE events (id UUID PRIMARY KEY, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), event_date DATE);") |
| 62 | .execute(&pool) |
| 63 | .await?; |
| 64 | |
| 65 | let some_id: Uuid = sqlx::query_scalar("INSERT INTO events (id, event_date) VALUES (gen_random_uuid(), '2026-02-12') RETURNING id;") |
| 66 | .fetch_one(&pool) |
| 67 | .await?; |
| 68 | |
| 69 | let __event = sqlx::query_as::<_, Event>("SELECT * FROM events WHERE id = $1") |
| 70 | .bind(some_id) |
| 71 | .fetch_one(&pool) |
| 72 | .await?; |