summaryrefslogtreecommitdiff
path: root/src/login/repo.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/login/repo.rs')
-rw-r--r--src/login/repo.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/login/repo.rs b/src/login/repo.rs
index 6021f26..c6bc734 100644
--- a/src/login/repo.rs
+++ b/src/login/repo.rs
@@ -89,6 +89,7 @@ impl<'c> Logins<'c> {
Ok(logins)
}
+
pub async fn replay(&mut self, resume_at: ResumePoint) -> Result<Vec<History>, LoadError> {
let logins = sqlx::query!(
r#"
@@ -119,6 +120,38 @@ impl<'c> Logins<'c> {
Ok(logins)
}
+
+ pub async fn recanonicalize(&mut self) -> Result<(), sqlx::Error> {
+ let logins = sqlx::query!(
+ r#"
+ select
+ id as "id: Id",
+ display_name as "display_name: String"
+ from login
+ "#,
+ )
+ .fetch_all(&mut *self.0)
+ .await?;
+
+ for login in logins {
+ let name = Name::from(login.display_name);
+ let canonical_name = name.canonical();
+
+ sqlx::query!(
+ r#"
+ update login
+ set canonical_name = $1
+ where id = $2
+ "#,
+ canonical_name,
+ login.id,
+ )
+ .execute(&mut *self.0)
+ .await?;
+ }
+
+ Ok(())
+ }
}
#[derive(Debug, thiserror::Error)]