From 440201e153e5d7438b75ed5704dc643ae8334d71 Mon Sep 17 00:00:00 2001 From: Johannes Heuel Date: Fri, 9 Aug 2024 11:18:38 +0200 Subject: [PATCH] fix warning while persisting tracks --- src/commands/play.rs | 9 +++++---- src/db/track.rs | 46 +++++++++++++++----------------------------- 2 files changed, 21 insertions(+), 34 deletions(-) diff --git a/src/commands/play.rs b/src/commands/play.rs index ce2f513..5622072 100644 --- a/src/commands/play.rs +++ b/src/commands/play.rs @@ -103,14 +103,14 @@ async fn persistence( db::track::insert_guild(&state.pool, db::track::Guild::new(guild_id.to_string())) .await - .expect("failed to insert guild: {e}"); + .context("failed to insert guild")?; db::track::insert_user( &state.pool, db::track::User::new(user_id.to_string(), author_name, author_global_name), ) .await - .expect("failed to insert user: {e}"); + .context("failed to insert user")?; let track_id = db::track::insert_track( &state.pool, @@ -123,13 +123,14 @@ async fn persistence( ), ) .await - .context("failed to insert track: {e}")?; + .context("failed to insert track")?; + db::track::insert_query( &state.pool, db::track::Query::new(user_id.to_string(), guild_id.to_string(), track_id), ) .await - .context("failed to insert track: {e}")?; + .context("failed to insert query")?; Ok(()) } diff --git a/src/db/track.rs b/src/db/track.rs index c2e6e56..18a889b 100644 --- a/src/db/track.rs +++ b/src/db/track.rs @@ -38,40 +38,26 @@ pub(crate) async fn insert_track( ) -> Result { let query = r#" INSERT INTO tracks (url, title, channel, duration, thumbnail, updated) - VALUES ($1, $2, $3, $4, $5, $6) + VALUES (?, ?, ?, ?, ?, ?) ON CONFLICT (url) DO UPDATE SET - title = excluded.title, - channel = excluded.channel, - duration = excluded.duration, - thumbnail = excluded.thumbnail, - updated = excluded.updated + title = EXCLUDED.title, + channel = EXCLUDED.channel, + duration = EXCLUDED.duration, + thumbnail = EXCLUDED.thumbnail, + updated = EXCLUDED.updated + RETURNING id "#; - let res = sqlx::query(query) + let id = sqlx::query_scalar(query) .bind(&track.url) .bind(track.title) .bind(track.channel) .bind(track.duration) .bind(track.thumbnail) .bind(track.updated) - .execute(pool) - .await?; - - let id = res.last_insert_rowid(); - - // the track id is 0 if we only updated a row - if id == 0 { - let track: Track = sqlx::query_as( - r#" - SELECT id FROM tracks - WHERE url = $1 - "#, - ) - .bind(track.url) .fetch_one(pool) .await?; - return Ok(track.id); - } + Ok(id) } @@ -97,11 +83,11 @@ impl User { pub(crate) async fn insert_user(pool: &sqlx::SqlitePool, user: User) -> Result<(), sqlx::Error> { let query = r#" INSERT INTO users (id, name, global_name, updated) - VALUES ($1, $2, $3, $4) + VALUES (?, ?, ?, ?) ON CONFLICT (id) DO UPDATE SET - name = excluded.name, - global_name = excluded.global_name, - updated = excluded.updated + name = EXCLUDED.name, + global_name = EXCLUDED.global_name, + updated = EXCLUDED.updated "#; sqlx::query(query) .bind(user.id) @@ -138,7 +124,7 @@ impl Query { pub(crate) async fn insert_query(pool: &sqlx::SqlitePool, q: Query) -> Result { let query = r#" INSERT INTO queries (user_id, guild_id, track_id, updated) - VALUES ($1, $2, $3, $4) + VALUES (?, ?, ?, ?) "#; let res = sqlx::query(query) .bind(q.user_id) @@ -168,9 +154,9 @@ impl Guild { pub(crate) async fn insert_guild(pool: &sqlx::SqlitePool, guild: Guild) -> Result<(), sqlx::Error> { let query = r#" INSERT INTO guilds (id, updated) - VALUES ($1, $2) + VALUES (?, ?) ON CONFLICT (id) DO UPDATE SET - updated = excluded.updated + updated = EXCLUDED.updated "#; sqlx::query(query) .bind(guild.id)