From 5dc524bef7fb0571f0aa39a40d39f712d5813660 Mon Sep 17 00:00:00 2001 From: "Christoph J. Scherr" Date: Mon, 24 Jun 2024 16:22:46 +0200 Subject: [PATCH] wip: sqlite demo --- Cargo.lock | 100 ++++++++++++++++++++++++++++++++ Cargo.toml | 2 + members/sqlite-demo/Cargo.toml | 8 +++ members/sqlite-demo/cats.db | Bin 0 -> 16384 bytes members/sqlite-demo/src/main.rs | 46 +++++++++++++++ 5 files changed, 156 insertions(+) create mode 100644 members/sqlite-demo/Cargo.toml create mode 100644 members/sqlite-demo/cats.db create mode 100644 members/sqlite-demo/src/main.rs diff --git a/Cargo.lock b/Cargo.lock index e9e4ae5..df855cc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,18 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.2" @@ -621,6 +633,18 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + [[package]] name = "fluent" version = "0.16.0" @@ -887,6 +911,18 @@ name = "hashbrown" version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +dependencies = [ + "hashbrown", +] [[package]] name = "headers" @@ -1204,6 +1240,16 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "libsqlite3-sys" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f" +dependencies = [ + "pkg-config", + "vcpkg", +] + [[package]] name = "linked-hash-map" version = "0.5.6" @@ -1563,6 +1609,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + [[package]] name = "plotters" version = "0.3.5" @@ -1755,6 +1807,20 @@ dependencies = [ name = "rs-basic" version = "0.2.1" +[[package]] +name = "rusqlite" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae" +dependencies = [ + "bitflags 2.4.2", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "smallvec", +] + [[package]] name = "rustc-demangle" version = "0.1.23" @@ -2020,6 +2086,14 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "sqlite-demo" +version = "0.1.0" +dependencies = [ + "anyhow", + "rusqlite", +] + [[package]] name = "strsim" version = "0.11.0" @@ -2518,6 +2592,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.4" @@ -2815,3 +2895,23 @@ name = "windows_x86_64_msvc" version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" + +[[package]] +name = "zerocopy" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] diff --git a/Cargo.toml b/Cargo.toml index a43d9e1..50e87cd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,6 +22,7 @@ members = [ "members/rest-queued", "members/fluent-demo", "members/onlytoken", + "members/sqlite-demo", ] default-members = [ ".", @@ -46,6 +47,7 @@ default-members = [ "members/future_stream", "members/rest", "members/rest-queued", + "members/sqlite-demo", ] publish = false diff --git a/members/sqlite-demo/Cargo.toml b/members/sqlite-demo/Cargo.toml new file mode 100644 index 0000000..f56aab7 --- /dev/null +++ b/members/sqlite-demo/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "sqlite-demo" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow.workspace = true +rusqlite = "0.31.0" diff --git a/members/sqlite-demo/cats.db b/members/sqlite-demo/cats.db new file mode 100644 index 0000000000000000000000000000000000000000..9a80e9f2d8f866b6ae8d44d8642746959b1747cc GIT binary patch literal 16384 zcmeI&Jx{_w7zgmXmH?7qHH371*dQ?)!{#I!;=-bmI5wp{Or zZG{~_yf&>bX6{R7omelrK|lZk5P$##AOHafKmY;|fWW^HSe=&+T^RfhG>tWRAbAOHafKmY;|fB*y_ z009U<00I!$1%aB`;`;n=)J=OYKmTXn|MgG*2nav`0uX=z1Rwwb2tWV=5P$##c39vW D3D1iP literal 0 HcmV?d00001 diff --git a/members/sqlite-demo/src/main.rs b/members/sqlite-demo/src/main.rs new file mode 100644 index 0000000..07cbd7c --- /dev/null +++ b/members/sqlite-demo/src/main.rs @@ -0,0 +1,46 @@ +use anyhow::Ok; +/// This demo application uses a sqlite file to store some data. It does *not* use ORM (that would +/// be done with the `diesel` crate.)! +/// +/// A very useful ressource is the +/// [rust-cookbook](https://rust-lang-nursery.github.io/rust-cookbook/database/sqlite.html). +use rusqlite::{Connection, Result}; + +fn setup(conn: &Connection) -> anyhow::Result<()> { + conn.execute( + "create table if not exists cat_colors ( + id integer primary key, + name text not null unique + )", + (), + )?; + conn.execute( + "create table if not exists cats ( + id integer primary key, + name text not null, + color_id integer not null references cat_colors(id) + )", + (), + )?; + + Ok(()) +} + +fn new_color(conn: &Connection, color: &str) -> anyhow::Result<()> { + conn.execute( + "INSERT INTO cat_colors (name) values (?1)", + [color.to_string()], + )?; + + Ok(()) +} + +fn main() -> anyhow::Result<()> { + let conn = Connection::open("cats.db")?; + + setup(&conn)?; + new_color(&conn, "black")?; + new_color(&conn, "red")?; + + Ok(()) +}