From 108bc6f0446c351b421ba62367e0f4eaf6c62461 Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Sat, 24 Jan 2026 22:33:30 +0100 Subject: words: delete all relationships on 'rm' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When removing a word, all relationships with other words and tags should also be cleared. Not that it would litter too much the database (considering the DB is relatively small), but it doesn't take too much effort to play nice here. Signed-off-by: Miquel Sabaté Solà --- lib/mihi/src/lib.rs | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/mihi/src/lib.rs b/lib/mihi/src/lib.rs index e26f220..1aabf29 100644 --- a/lib/mihi/src/lib.rs +++ b/lib/mihi/src/lib.rs @@ -1167,15 +1167,43 @@ pub fn update_success(word: &Word, success: isize, steps: isize) -> Result<(), S } } -pub fn delete_word(enunciated: &String) -> Result<(), String> { +/// Delete the given word while also removing any relationship with other words +/// and tags. +pub fn delete_word(word: &Word) -> Result<(), String> { let conn = get_connection()?; + // Remove the word itself. + if let Err(e) = conn.execute( + "DELETE FROM words \ + WHERE id = ?1", + params![word.id], + ) { + return Err(format!("could not remove '{}': {e}", word.enunciated)); + } + + // Remove any relationships that mention this word. + if let Err(e) = conn.execute( + "DELETE FROM word_relations \ + WHERE source_id = ?1 OR destination_id = ?1", + params![word.id], + ) { + return Err(format!( + "could not remove relationships from '{}': {e}", + word.enunciated + )); + } + + // Remove any tag relationships with this now defunct word. match conn.execute( - "DELETE FROM words WHERE enunciated = ?1", - params![enunciated.as_str()], + "DELETE FROM tag_associations \ + WHERE word_id = ?1", + params![word.id], ) { Ok(_) => Ok(()), - Err(e) => Err(format!("could not remove '{enunciated}': {e}")), + Err(e) => Err(format!( + "count not detach words for '{}': {e}", + word.enunciated + )), } } -- cgit v1.2.3