From 1e57ecc0dcbc64a6829a93dc81cfb6ab6f0ce71b Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 22 Jun 2017 19:51:23 +0000 Subject: [PATCH] msgmap: mid_insert ignores duplicates instead of die-ing This will allow smoother imports as occasional Message-ID duplicates happen and the best we can do is ignore the second one. --- lib/PublicInbox/Msgmap.pm | 6 +++--- t/msgmap.t | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/PublicInbox/Msgmap.pm b/lib/PublicInbox/Msgmap.pm index 3fb3805f..a49b61e8 100644 --- a/lib/PublicInbox/Msgmap.pm +++ b/lib/PublicInbox/Msgmap.pm @@ -82,10 +82,10 @@ sub created_at { sub mid_insert { my ($self, $mid) = @_; my $dbh = $self->{dbh}; - use constant MID_INSERT => 'INSERT INTO msgmap (mid) VALUES (?)'; - my $sth = $self->{mid_insert} ||= $dbh->prepare(MID_INSERT); + my $sql = 'INSERT OR IGNORE INTO msgmap (mid) VALUES (?)'; + my $sth = $self->{mid_insert} ||= $dbh->prepare($sql); $sth->bind_param(1, $mid); - $sth->execute; + return if $sth->execute == 0; $dbh->last_insert_id(undef, undef, 'msgmap', 'num'); } diff --git a/t/msgmap.t b/t/msgmap.t index 5c28e54d..a5232fab 100644 --- a/t/msgmap.t +++ b/t/msgmap.t @@ -27,9 +27,9 @@ foreach my $mid (@mids) { } $@ = undef; -eval { $d->mid_insert('a@b') }; -ok($@, 'error raised when attempting duplicate message ID'); - +my $ret = $d->mid_insert('a@b'); +is($ret, undef, 'duplicate mid_insert in undef result'); +is($d->num_for('a@b'), $mid2num{'a@b'}, 'existing number not clobbered'); foreach my $n (keys %num2mid) { is($d->mid_for($n), $num2mid{$n}, "num:$n maps correctly"); -- 2.44.0