diff --git a/__database/diesel/.env b/__database/diesel/.env new file mode 100644 index 0000000..932c7d6 --- /dev/null +++ b/__database/diesel/.env @@ -0,0 +1,2 @@ +DATABASE_URL=file:test.db + diff --git a/__database/diesel/Cargo.lock b/__database/diesel/Cargo.lock new file mode 100644 index 0000000..805deb6 --- /dev/null +++ b/__database/diesel/Cargo.lock @@ -0,0 +1,100 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "byteorder" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" + +[[package]] +name = "diesel" +version = "0.1.0" +dependencies = [ + "diesel 1.4.5", + "dotenv", +] + +[[package]] +name = "diesel" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2de9deab977a153492a1468d1b1c0662c1cf39e5ea87d0c060ecd59ef18d8c" +dependencies = [ + "byteorder", + "diesel_derives", + "libsqlite3-sys", +] + +[[package]] +name = "diesel_derives" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" + +[[package]] +name = "libsqlite3-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e704a02bcaecd4a08b93a23f6be59d0bd79cd161e0963e9499165a0a35df7bd" +dependencies = [ + "pkg-config", + "vcpkg", +] + +[[package]] +name = "pkg-config" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" + +[[package]] +name = "proc-macro2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "syn" +version = "1.0.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "unicode-xid" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" + +[[package]] +name = "vcpkg" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb" diff --git a/__database/diesel/Cargo.toml b/__database/diesel/Cargo.toml new file mode 100644 index 0000000..420acd2 --- /dev/null +++ b/__database/diesel/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "diesel" +version = "0.1.0" +authors = ["Hatter Jiang "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +diesel = { version = "1.4.5", features = ["sqlite"] } +dotenv = "0.15.0" + diff --git a/__database/diesel/README.md b/__database/diesel/README.md new file mode 100644 index 0000000..d1c5846 --- /dev/null +++ b/__database/diesel/README.md @@ -0,0 +1,10 @@ +!!NOT WORKS... + +cargo install diesel_cli --no-default-features --features sqlite + + +diesel setup --database-url=file:test.db + +diesel migration generate create_posts + +diesel migration run --database-url=file:test.db diff --git a/__database/diesel/diesel.toml b/__database/diesel/diesel.toml new file mode 100644 index 0000000..92267c8 --- /dev/null +++ b/__database/diesel/diesel.toml @@ -0,0 +1,5 @@ +# For documentation on how to configure this file, +# see diesel.rs/guides/configuring-diesel-cli + +[print_schema] +file = "src/schema.rs" diff --git a/__database/diesel/migrations/.gitkeep b/__database/diesel/migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/__database/diesel/migrations/2021-02-12-145106_create_posts/down.sql b/__database/diesel/migrations/2021-02-12-145106_create_posts/down.sql new file mode 100644 index 0000000..fbf0d67 --- /dev/null +++ b/__database/diesel/migrations/2021-02-12-145106_create_posts/down.sql @@ -0,0 +1,4 @@ +-- This file should undo anything in `up.sql` +DROP TABLE posts + + diff --git a/__database/diesel/migrations/2021-02-12-145106_create_posts/up.sql b/__database/diesel/migrations/2021-02-12-145106_create_posts/up.sql new file mode 100644 index 0000000..c554515 --- /dev/null +++ b/__database/diesel/migrations/2021-02-12-145106_create_posts/up.sql @@ -0,0 +1,8 @@ +-- Your SQL goes here +CREATE TABLE posts ( + id INTEGER PRIMARY KEY, + title VARCHAR NOT NULL, + body TEXT NOT NULL, + published BOOLEAN NOT NULL DEFAULT 'f' +) + diff --git a/__database/diesel/src/main.rs b/__database/diesel/src/main.rs new file mode 100644 index 0000000..9d0e90e --- /dev/null +++ b/__database/diesel/src/main.rs @@ -0,0 +1,37 @@ +#[macro_use] +extern crate diesel; + +pub mod schema; +pub mod models; + +use diesel::prelude::*; +use diesel::sqlite::SqliteConnection; +use dotenv::dotenv; +use std::env; +use crate::models::Post; + +fn main() { + use crate::schema::posts::dsl::*; + + let connection = establish_connection(); + let results = posts.filter(published.eq(true)) + .limit(5) + .load::(&connection) + .expect("Error loading posts"); + + println!("Displaying {} posts", results.len()); + for post in results { + println!("{}", post.title); + println!("----------\n"); + println!("{}", post.body); + } +} + +pub fn establish_connection() -> SqliteConnection { + dotenv().ok(); + + let database_url = env::var("DATABASE_URL") + .expect("DATABASE_URL must be set"); + SqliteConnection::establish(&database_url) + .expect(&format!("Error connecting to {}", database_url)) +} \ No newline at end of file diff --git a/__database/diesel/src/models.rs b/__database/diesel/src/models.rs new file mode 100644 index 0000000..9bee09a --- /dev/null +++ b/__database/diesel/src/models.rs @@ -0,0 +1,7 @@ +#[derive(Queryable)] +pub struct Post { + pub id: i32, + pub title: String, + pub body: String, + pub published: bool, +} \ No newline at end of file diff --git a/__database/diesel/src/schema.rs b/__database/diesel/src/schema.rs new file mode 100644 index 0000000..a9c6c8b --- /dev/null +++ b/__database/diesel/src/schema.rs @@ -0,0 +1,8 @@ +table! { + posts (id) { + id -> Nullable, + title -> Text, + body -> Text, + published -> Bool, + } +} diff --git a/__database/diesel/test.db b/__database/diesel/test.db new file mode 100644 index 0000000..09f547c Binary files /dev/null and b/__database/diesel/test.db differ