Browse Source

Update to anansi 0.13.3 (#7971)

* Update to anansi 0.13.3

* Fix cache test for anansi

---------

Co-authored-by: sarutora <example.com>
saru-tora 2 years ago
parent
commit
28f5528f5d

+ 8 - 3
frameworks/Rust/anansi/Cargo.toml

@@ -12,9 +12,14 @@ edition = "2021"
 raw = []
 raw = []
 
 
 [dependencies]
 [dependencies]
-anansi = { git = "https://github.com/saru-tora/anansi", rev = "94cae98", features = ["postgres", "minimal", "redis"] }
+anansi = { git = "https://github.com/saru-tora/anansi", rev = "18fc179", features = ["postgres", "minimal", "redis"] }
 async-trait = "0.1.57"
 async-trait = "0.1.57"
 rand = "0.8.4"
 rand = "0.8.4"
-serde = { version = "1.0", features = ["derive"] }
-serde_json = "1.0"
+serde = "1"
+serde_json = "1"
 tokio-postgres = "0.7.7"
 tokio-postgres = "0.7.7"
+
+[profile.release]
+lto = true
+opt-level = 3
+codegen-units = 1

+ 1 - 0
frameworks/Rust/anansi/benchmark_config.json

@@ -31,6 +31,7 @@
         "fortune_url": "/fortunes",
         "fortune_url": "/fortunes",
         "query_url": "/queries?q=",
         "query_url": "/queries?q=",
         "update_url": "/updates?q=",
         "update_url": "/updates?q=",
+        "cached_query_url": "/cached-queries?q=",
         "port": 8080,
         "port": 8080,
         "approach": "Realistic",
         "approach": "Realistic",
         "classification": "Fullstack",
         "classification": "Fullstack",

+ 0 - 1
frameworks/Rust/anansi/src/hello/mod.rs

@@ -1,5 +1,4 @@
 pub mod urls;
 pub mod urls;
-#[cfg(not(feature = "raw"))]
 pub mod records;
 pub mod records;
 pub mod migrations;
 pub mod migrations;
 
 

+ 1 - 0
frameworks/Rust/anansi/src/hello/records.rs

@@ -30,6 +30,7 @@ pub struct Fortune {
     pub message: Text,
     pub message: Text,
 }
 }
 
 
+#[cfg(not(feature = "raw"))]
 impl Fortune {
 impl Fortune {
     pub fn additional() -> Self {
     pub fn additional() -> Self {
         Self {id: Int::new(0), message: Text::from("Additional fortune added at request time.".to_string())}
         Self {id: Int::new(0), message: Text::from("Additional fortune added at request time.".to_string())}

+ 36 - 36
frameworks/Rust/anansi/src/hello/world/raw.rs

@@ -1,7 +1,7 @@
 use crate::prelude::*;
 use crate::prelude::*;
 use serde::Serialize;
 use serde::Serialize;
-use anansi::check;
-use anansi::db::postgres::{PgDbRow, PgQuery};
+use anansi::{check, prep};
+use anansi::db::postgres::PgDbRow;
 use super::util::get_query;
 use super::util::get_query;
 use std::borrow::Cow;
 use std::borrow::Cow;
 use anansi::db::DbRow;
 use anansi::db::DbRow;
@@ -9,30 +9,25 @@ use rand::Rng;
 use std::fmt::Write;
 use std::fmt::Write;
 use tokio_postgres::types::ToSql;
 use tokio_postgres::types::ToSql;
 
 
-thread_local!(static UPDATES: Vec<Cow<'static, str>> = {
-    let mut updates = vec![Cow::from("")];
-    for num in 1..=500u16 {
-        let mut pl = 1;
-        let mut q = "UPDATE world SET randomnumber = CASE id ".to_string();
-        for _ in 1..=num {
-            let _ = write!(q, "WHEN ${} THEN ${} ", pl, pl + 1);
-            pl += 2;
-        }
-
-        q.push_str("ELSE randomnumber END WHERE id IN (");
-
-        for _ in 1..=num {
-            let _ = write!(q, "${},", pl);
-            pl += 1;
-        }
+fn update_statement(num: u16) -> String {
+    let mut pl = 1;
+    let mut q = "UPDATE world SET randomnumber = CASE id ".to_string();
+    for _ in 1..=num {
+        let _ = write!(q, "WHEN ${} THEN ${} ", pl, pl + 1);
+        pl += 2;
+    }
 
 
-        q.pop();
-        q.push(')');
+    q.push_str("ELSE randomnumber END WHERE id IN (");
 
 
-        updates.push(Cow::from(q));
+    for _ in 1..=num {
+        let _ = write!(q, "${},", pl);
+        pl += 1;
     }
     }
-    updates
-});
+
+    q.pop();
+    q.push(')');
+    q
+}
 
 
 fn random_num() -> i32 {
 fn random_num() -> i32 {
     rand::thread_rng().gen_range(1..=10_000)
     rand::thread_rng().gen_range(1..=10_000)
@@ -56,9 +51,7 @@ fn base<R: Request>(_req: &mut R) -> Result<Response> {}
 #[viewer]
 #[viewer]
 impl<R: Request> WorldView<R> {
 impl<R: Request> WorldView<R> {
     async fn get_world(req: &R) -> Result<PgDbRow> {
     async fn get_world(req: &R) -> Result<PgDbRow> {
-        PgQuery::new("SELECT * FROM world WHERE id = $1", &[&random_num()])
-            .fetch_one(req)
-            .await
+        prep!(req, "world", "SELECT * FROM world WHERE id = $1", &[&random_num()], fetch_one)
     }
     }
     async fn get_worlds(req: &R) -> Result<Vec<World>> {
     async fn get_worlds(req: &R) -> Result<Vec<World>> {
         let q = get_query(req.params());
         let q = get_query(req.params());
@@ -90,9 +83,7 @@ impl<R: Request> WorldView<R> {
     #[view(Site::is_visitor)]
     #[view(Site::is_visitor)]
     pub async fn raw_fortunes(req: &mut R) -> Result<Response> {
     pub async fn raw_fortunes(req: &mut R) -> Result<Response> {
         let title = "Fortunes";
         let title = "Fortunes";
-        let rows = PgQuery::new("SELECT * FROM fortune", &[])
-            .fetch_all(req)
-            .await?;
+        let rows = prep!(req, "fortune", "SELECT * FROM fortune", &[], fetch_all)?;
         let mut fortunes = vec![Fortune {
         let mut fortunes = vec![Fortune {
             id: 0,
             id: 0,
             message: Cow::Borrowed("Additional fortune added at request time.")
             message: Cow::Borrowed("Additional fortune added at request time.")
@@ -109,10 +100,6 @@ impl<R: Request> WorldView<R> {
     pub async fn updates(req: &mut R) -> Result<Response> {
     pub async fn updates(req: &mut R) -> Result<Response> {
         let q = get_query(req.params()) as usize;
         let q = get_query(req.params()) as usize;
         let mut worlds = Vec::with_capacity(q);
         let mut worlds = Vec::with_capacity(q);
-        let mut update = Cow::from("");
-        UPDATES.with(|u| {
-            update = u[q].clone();
-        });
         let mut params: Vec<&(dyn ToSql + Sync)> = Vec::with_capacity(q * 3);
         let mut params: Vec<&(dyn ToSql + Sync)> = Vec::with_capacity(q * 3);
         for _ in 0..q {
         for _ in 0..q {
             let row = Self::get_world(req).await?;
             let row = Self::get_world(req).await?;
@@ -129,9 +116,22 @@ impl<R: Request> WorldView<R> {
         for world in &worlds {
         for world in &worlds {
             params.push(&world.id);
             params.push(&world.id);
         }
         }
-        PgQuery::new(&update, params.as_slice())
-            .execute(req)
-            .await?;
+        prep!(req, format!("update{}", q), update_statement(q as u16), params.as_slice(), execute)?;
         Response::json(&worlds)
         Response::json(&worlds)
     }
     }
+    #[check(Site::is_visitor)]
+    pub async fn cached_queries(req: &mut R) -> Result<Response> {
+        let q = get_query(req.params());
+        let mut ids = vec![];
+        for _ in 0..q {
+            ids.push(random_num().to_string());
+        }
+        let mut worlds = vec!['[' as u8];
+        for mut world in req.cache().get_many(ids).await? {
+            worlds.append(&mut world);
+        }
+        worlds.pop();
+        worlds.push(']' as u8);
+        Response::json_bytes(worlds)
+    }
 }
 }

+ 0 - 4
frameworks/Rust/anansi/src/main.rs

@@ -11,10 +11,6 @@ apps! {
 
 
 app_statics! {}
 app_statics! {}
 
 
-#[cfg(feature = "raw")]
-min_main!();
-
-#[cfg(not(feature = "raw"))]
 min_main!(server, {
 min_main!(server, {
     {
     {
         use anansi::cache::prelude::*;
         use anansi::cache::prelude::*;

+ 1 - 0
frameworks/Rust/anansi/src/urls.rs

@@ -22,4 +22,5 @@ routes! {
     path!("/queries", WorldView::queries),
     path!("/queries", WorldView::queries),
     path!("/fortunes", WorldView::raw_fortunes),
     path!("/fortunes", WorldView::raw_fortunes),
     path!("/updates", WorldView::updates),
     path!("/updates", WorldView::updates),
+    path!("/cached-queries", WorldView::cached_queries),
 }
 }