diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2024-10-22 19:08:53 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2024-10-22 19:12:30 -0400 |
| commit | db940bacd096a33a65f29759e70ea1acf6186a67 (patch) | |
| tree | c6901c22a45e36415f63efe988d4d4f2a309df81 /src/channel/repo.rs | |
| parent | 3f9648eed48cd8b6cd35d0ae2ee5bbe25fa735ac (diff) | |
Provide `hi-recanonicalize` to recover from canonicalized-name problems.
Diffstat (limited to 'src/channel/repo.rs')
| -rw-r--r-- | src/channel/repo.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/channel/repo.rs b/src/channel/repo.rs index 4baa95b..e26ac2b 100644 --- a/src/channel/repo.rs +++ b/src/channel/repo.rs @@ -300,6 +300,38 @@ impl<'c> Channels<'c> { Ok(channels) } + + pub async fn recanonicalize(&mut self) -> Result<(), sqlx::Error> { + let channels = sqlx::query!( + r#" + select + id as "id: Id", + display_name as "display_name: String" + from channel_name + "#, + ) + .fetch_all(&mut *self.0) + .await?; + + for channel in channels { + let name = Name::from(channel.display_name); + let canonical_name = name.canonical(); + + sqlx::query!( + r#" + update channel_name + set canonical_name = $1 + where id = $2 + "#, + canonical_name, + channel.id, + ) + .execute(&mut *self.0) + .await?; + } + + Ok(()) + } } #[derive(Debug, thiserror::Error)] |
