diff options
author | Eric Wong <e@80x24.org> | 2021-08-31 11:21:20 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-08-31 11:29:09 +0000 |
commit | 7f8d7e22ca8b6d1a5499f8782f7f05020d7d3b95 (patch) | |
tree | 44c905927cf844ff461b719ec267bfc3744561ac /lib/PublicInbox/LeiMailSync.pm | |
parent | 400378627020546759afc6d308f71d3592451414 (diff) | |
download | public-inbox-7f8d7e22ca8b6d1a5499f8782f7f05020d7d3b95.tar.gz |
We need to account for past canonicalization errors and deal with cases which violate uniqueness constraints in mail_sync.sqlite3
Diffstat (limited to 'lib/PublicInbox/LeiMailSync.pm')
-rw-r--r-- | lib/PublicInbox/LeiMailSync.pm | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/lib/PublicInbox/LeiMailSync.pm b/lib/PublicInbox/LeiMailSync.pm index 56468c78..275e0cc4 100644 --- a/lib/PublicInbox/LeiMailSync.pm +++ b/lib/PublicInbox/LeiMailSync.pm @@ -412,11 +412,24 @@ sub forget_folder { # only used for changing canonicalization errors sub rename_folder { my ($self, $old, $new) = @_; - my $fid = delete($self->{fmap}->{$old}) // + my $ofid = delete($self->{fmap}->{$old}) // fid_for($self, $old) // return; - $self->{dbh}->do(<<EOM, undef, $new, $fid); + eval { + $self->{dbh}->do(<<EOM, undef, $new, $ofid); UPDATE folders SET loc = ? WHERE fid = ? EOM + }; + if ($@ =~ /\bunique\b/i) { + my $nfid = $self->{fmap}->{$new} // fid_for($self, $new); + for my $t (qw(blob2name blob2num)) { + $self->{dbh}->do(<<EOM, undef, $nfid, $ofid); +UPDATE OR REPLACE $t SET fid = ? WHERE fid = ? +EOM + } + $self->{dbh}->do(<<EOM, undef, $ofid); +DELETE FROM folders WHERE fid = ? +EOM + } } sub imap_oidbin ($$$) { |