]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/IMAPTracker.pm
rename {pi_config} fields to {pi_cfg}
[public-inbox.git] / lib / PublicInbox / IMAPTracker.pm
index 102a74ce66b8ec0c1ba52be5200ee37d38dd08de..be9caf7648bf3f59ede7caff161f813ed2372022 100644 (file)
@@ -29,7 +29,12 @@ sub dbh_new ($) {
                sqlite_use_immediate_transaction => 1,
        });
        $dbh->{sqlite_unicode} = 1;
-       $dbh->do('PRAGMA journal_mode = TRUNCATE');
+
+       # TRUNCATE reduces I/O compared to the default (DELETE).
+       # Allow and preserve user-overridden WAL, but don't force it.
+       my $jm = $dbh->selectrow_array('PRAGMA journal_mode');
+       $dbh->do('PRAGMA journal_mode = TRUNCATE') if $jm ne 'wal';
+
        create_tables($dbh);
        $dbh;
 }
@@ -44,13 +49,14 @@ SELECT uid_validity, uid FROM imap_last WHERE url = ?
 }
 
 sub update_last ($$$) {
-       my ($self, $validity, $last) = @_;
+       my ($self, $validity, $last_uid) = @_;
+       return unless defined $last_uid;
        my $sth = $self->{dbh}->prepare_cached(<<'');
 INSERT OR REPLACE INTO imap_last (url, uid_validity, uid)
 VALUES (?, ?, ?)
 
        $self->lock_acquire;
-       my $rv = $sth->execute($self->{url}, $validity, $last);
+       my $rv = $sth->execute($self->{url}, $validity, $last_uid);
        $self->lock_release;
        $rv;
 }