X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FMsgmap.pm;h=fdc71e46e214db9526406cf6a6cc76a6686667cf;hb=77704e711685d119fde9d1737029e102c76c9a14;hp=3237a5ed6ae0d8caa5a56bd1a17e380efc61a0b8;hpb=017fed7bc4d33ac474a19356994be5bd0bfe68ba;p=public-inbox.git diff --git a/lib/PublicInbox/Msgmap.pm b/lib/PublicInbox/Msgmap.pm index 3237a5ed..fdc71e46 100644 --- a/lib/PublicInbox/Msgmap.pm +++ b/lib/PublicInbox/Msgmap.pm @@ -26,6 +26,9 @@ sub new { sub dbh_new { my ($f, $writable) = @_; + if ($writable && !-f $f) { # SQLite defaults mode to 0644, we want 0666 + open my $fh, '+>>', $f or die "failed to open $f: $!"; + } my $dbh = DBI->connect("dbi:SQLite:dbname=$f",'','', { AutoCommit => 1, RaiseError => 1, @@ -33,7 +36,6 @@ sub dbh_new { ReadOnly => !$writable, sqlite_use_immediate_transaction => 1, }); - $dbh->do('PRAGMA case_sensitive_like = ON'); $dbh; } @@ -78,7 +80,7 @@ sub meta_accessor { $prev = $dbh->selectrow_array($sql, undef, $key); if (defined $prev) { - $sql = 'UPDATE meta SET val = ? WHERE key = ? LIMIT 1'; + $sql = 'UPDATE meta SET val = ? WHERE key = ?'; $dbh->do($sql, undef, $value, $key); } else { $sql = 'INSERT INTO meta (key,val) VALUES (?,?)'; @@ -148,23 +150,6 @@ sub minmax { ($min, $sth->fetchrow_array); } -sub mid_prefixes { - my ($self, $pfx, $limit) = @_; - - die "No prefix given" unless (defined $pfx && $pfx ne ''); - $pfx =~ s/([%_])/\\$1/g; - $pfx .= '%'; - - $limit ||= 100; - $limit += 0; # force to integer - $limit ||= 100; - - $self->{dbh}->selectcol_arrayref('SELECT mid FROM msgmap ' . - 'WHERE mid LIKE ? ESCAPE ? ' . - "ORDER BY num DESC LIMIT $limit", - undef, $pfx, '\\'); -} - sub mid_delete { my ($self, $mid) = @_; my $dbh = $self->{dbh}; @@ -214,7 +199,7 @@ sub msg_range { my $attr = { Columns => [] }; my $mids = $dbh->selectall_arrayref(<<'', $attr, $$beg, $end); SELECT num,mid FROM msgmap WHERE num >= ? AND num <= ? -ORDER BY num ASC +ORDER BY num ASC LIMIT 1000 $$beg = $mids->[-1]->[0] + 1 if @$mids; $mids