diff options
| author | Joris | 2025-02-07 11:12:56 +0100 | 
|---|---|---|
| committer | Joris | 2025-02-07 11:12:56 +0100 | 
| commit | 99f483927b1b8dd96be5846f338d37a37ab667ec (patch) | |
| tree | 22f38fb549b7d7babb7e51c8677fe6a6aaa81638 /src | |
| parent | a217f4c75def40889710cfcf776ff827745fb6ff (diff) | |
Use named_params in querier
Diffstat (limited to 'src')
| -rw-r--r-- | src/db/categories.rs | 4 | ||||
| -rw-r--r-- | src/db/event_colors.rs | 10 | ||||
| -rw-r--r-- | src/db/events.rs | 64 | 
3 files changed, 54 insertions, 24 deletions
| diff --git a/src/db/categories.rs b/src/db/categories.rs index ebefb6d..f81b855 100644 --- a/src/db/categories.rs +++ b/src/db/categories.rs @@ -5,7 +5,8 @@ use uuid::Uuid;  use crate::model::category::Category;  pub fn list(conn: &Connection) -> Result<Vec<Category>> { -    let mut stmt = conn.prepare("SELECT id, name, color FROM categories")?; +    let query = r#"SELECT id, name, color FROM categories"#; +    let mut stmt = conn.prepare(query)?;      let iter = stmt.query_map([], |row| {          Ok(read_category(row.get(0)?, row.get(1)?, row.get(2)?)) @@ -20,6 +21,5 @@ pub fn list(conn: &Connection) -> Result<Vec<Category>> {  fn read_category(id: String, name: String, color: String) -> Result<Category> {      let id = Uuid::parse_str(&id)?; -      Ok(Category { id, name, color })  } diff --git a/src/db/event_colors.rs b/src/db/event_colors.rs index 62b6146..bf7f541 100644 --- a/src/db/event_colors.rs +++ b/src/db/event_colors.rs @@ -3,12 +3,10 @@ use rusqlite::Connection;  pub fn get_default_color(conn: &Connection) -> Result<String> {      let mut stmt = conn.prepare("SELECT * FROM event_colors LIMIT 1")?; +    let mut iter = stmt.query_map([], |row| row.get(0))?; -    let iter = stmt.query_map([], |row| row.get(0))?; - -    let mut res = vec![]; -    for color in iter { -        res.push(color?) +    match iter.next() { +        Some(Ok(color)) => Ok(color), +        _ => Ok("blue".to_string()),      } -    Ok(res.first().unwrap_or(&"blue".to_string()).clone())  } diff --git a/src/db/events.rs b/src/db/events.rs index 1721967..7f09466 100644 --- a/src/db/events.rs +++ b/src/db/events.rs @@ -1,11 +1,16 @@  use anyhow::Result;  use chrono::{NaiveDate, NaiveTime}; -use rusqlite::{params, Connection}; +use rusqlite::{named_params, Connection};  use uuid::Uuid;  use crate::model::event::Event;  pub fn insert(conn: &Connection, event: &Event) -> Result<()> { +    let query = r#" +        INSERT INTO events (id, date, start, end, name, repetition, category, created, updated) +        VALUES (:id, :date, :start, :end, :name, :repetition, :category, datetime(), datetime()) +    "#; +      let repetition = match &event.repetition {          Some(r) => Some(serde_json::to_string(&r)?),          None => None, @@ -14,14 +19,35 @@ pub fn insert(conn: &Connection, event: &Event) -> Result<()> {      let category = event.category.map(|id| id.hyphenated().to_string());      conn.execute( -        "INSERT INTO events (id, date, start, end, name, repetition, category, created, updated) VALUES (?, ?, ?, ?, ?, ?, ?, datetime(), datetime())", -        params![event.id.hyphenated().to_string(), event.date, event.start, event.end, event.name, repetition, category] +        query, +        named_params![ +            ":id": event.id.hyphenated().to_string(), +            ":date": event.date, +            ":start": event.start, +            ":end": event.end, +            ":name": event.name, +            ":repetition": repetition, +            ":category": category +        ],      )?;      Ok(())  }  pub fn update(conn: &Connection, event: &Event) -> Result<()> { +    let query = r#" +        UPDATE events +        SET +            date = :date, +            start = :start, +            end = :end, +            name = :name, +            repetition = :repetition, +            category = :category, +            updated = datetime() +        WHERE id = :id +    "#; +      let repetition = match &event.repetition {          Some(r) => Some(serde_json::to_string(&r)?),          None => None, @@ -30,29 +56,35 @@ pub fn update(conn: &Connection, event: &Event) -> Result<()> {      let category = event.category.map(|id| id.hyphenated().to_string());      conn.execute( -        "UPDATE events SET date = ?, start = ?, end = ?, name = ?, repetition = ?, category = ?, updated = datetime() WHERE id = ?", -        params![event.date, event.start, event.end, event.name, repetition, category, event.id.hyphenated().to_string()] +        query, +        named_params![ +            ":date": event.date, +            ":start": event.start, +            ":end": event.end, +            ":name": event.name, +            ":repetition": repetition, +            ":category": category, +            ":id": event.id.hyphenated().to_string() +        ],      )?;      Ok(())  }  pub fn delete(conn: &Connection, id: &Uuid) -> Result<()> { -    conn.execute( -        "DELETE FROM events WHERE id = ?", -        params![id.hyphenated().to_string()], -    )?; - +    let query = r#"DELETE FROM events WHERE id = :id"#; +    conn.execute(query, named_params![":id": id.hyphenated().to_string()])?;      Ok(())  }  pub fn list_recurring(conn: &Connection) -> Result<Vec<Event>> { -    let mut stmt = conn.prepare( -        " +    let query = r#"          SELECT id, date, start, end, name, repetition, category          FROM events -        WHERE repetition IS NOT NULL", -    )?; +        WHERE repetition IS NOT NULL +    "#; + +    let mut stmt = conn.prepare(query)?;      let iter = stmt.query_map([], |row| {          Ok(read_event( @@ -82,8 +114,8 @@ pub fn list_non_recurring_between(          "          SELECT id, date, start, end, name, category          FROM events -        WHERE  -            repetition IS NULL  +        WHERE +            repetition IS NULL              AND date >= ?              AND date <= ?      ", | 
