summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
fa22ddb)
msgmap is not performance-critical enough to justify doing our
own prepared statement caching. Just rely on the functionality
of DBI here so future changes will be easier.
There's also minor style changes to avoid dirtying refcount
cache lines bumping by repeating hash lookups rather than attempting
to store them as locals.
my ($self, $key, $value) = @_;
my $sql = 'SELECT val FROM meta WHERE key = ? LIMIT 1';
my ($self, $key, $value) = @_;
my $sql = 'SELECT val FROM meta WHERE key = ? LIMIT 1';
- my $dbh = $self->{dbh};
- my $prev;
- defined $value or return $dbh->selectrow_array($sql, undef, $key);
-
- $prev = $dbh->selectrow_array($sql, undef, $key);
+ my $prev = $self->{dbh}->selectrow_array($sql, undef, $key);
+ $value // return $prev;
if (defined $prev) {
$sql = 'UPDATE meta SET val = ? WHERE key = ?';
if (defined $prev) {
$sql = 'UPDATE meta SET val = ? WHERE key = ?';
- $dbh->do($sql, undef, $value, $key);
+ $self->{dbh}->do($sql, undef, $value, $key);
} else {
$sql = 'INSERT INTO meta (key,val) VALUES (?,?)';
} else {
$sql = 'INSERT INTO meta (key,val) VALUES (?,?)';
- $dbh->do($sql, undef, $key, $value);
+ $self->{dbh}->do($sql, undef, $key, $value);
sub mid_insert {
my ($self, $mid) = @_;
sub mid_insert {
my ($self, $mid) = @_;
- my $dbh = $self->{dbh};
- my $sth = $dbh->prepare_cached(<<'');
+ my $sth = $self->{dbh}->prepare_cached(<<'');
INSERT INTO msgmap (mid) VALUES (?)
return unless eval { $sth->execute($mid) };
INSERT INTO msgmap (mid) VALUES (?)
return unless eval { $sth->execute($mid) };
- my $num = $dbh->last_insert_id(undef, undef, 'msgmap', 'num');
+ my $num = $self->{dbh}->last_insert_id(undef, undef, 'msgmap', 'num');
$self->num_highwater($num) if defined($num);
$num;
}
sub mid_for {
my ($self, $num) = @_;
$self->num_highwater($num) if defined($num);
$num;
}
sub mid_for {
my ($self, $num) = @_;
- my $dbh = $self->{dbh};
- my $sth = $self->{mid_for} ||=
- $dbh->prepare('SELECT mid FROM msgmap WHERE num = ? LIMIT 1');
- $sth->bind_param(1, $num);
- $sth->execute;
+ my $sth = $self->{dbh}->prepare_cached(<<"", undef, 1);
+SELECT mid FROM msgmap WHERE num = ? LIMIT 1
+
+ $sth->execute($num);
$sth->fetchrow_array;
}
sub num_for {
my ($self, $mid) = @_;
$sth->fetchrow_array;
}
sub num_for {
my ($self, $mid) = @_;
- my $dbh = $self->{dbh};
- my $sth = $self->{num_for} ||=
- $dbh->prepare('SELECT num FROM msgmap WHERE mid = ? LIMIT 1');
- $sth->bind_param(1, $mid);
- $sth->execute;
+ my $sth = $self->{dbh}->prepare_cached(<<"", undef, 1);
+SELECT num FROM msgmap WHERE mid = ? LIMIT 1
+
+ $sth->execute($mid);
sub mid_delete {
my ($self, $mid) = @_;
sub mid_delete {
my ($self, $mid) = @_;
- my $dbh = $self->{dbh};
- my $sth = $dbh->prepare('DELETE FROM msgmap WHERE mid = ?');
- $sth->bind_param(1, $mid);
- $sth->execute;
+ $self->{dbh}->do('DELETE FROM msgmap WHERE mid = ?', undef, $mid);
}
sub num_delete {
my ($self, $num) = @_;
}
sub num_delete {
my ($self, $num) = @_;
- my $dbh = $self->{dbh};
- my $sth = $dbh->prepare('DELETE FROM msgmap WHERE num = ?');
- $sth->bind_param(1, $num);
- $sth->execute;
+ $self->{dbh}->do('DELETE FROM msgmap WHERE num = ?', undef, $num);
sub msg_range {
my ($self, $beg, $end, $cols) = @_;
$cols //= 'num,mid';
sub msg_range {
my ($self, $beg, $end, $cols) = @_;
$cols //= 'num,mid';
- my $dbh = $self->{dbh};
my $attr = { Columns => [] };
my $attr = { Columns => [] };
- my $mids = $dbh->selectall_arrayref(<<"", $attr, $$beg, $end);
+ my $mids = $self->{dbh}->selectall_arrayref(<<"", $attr, $$beg, $end);
SELECT $cols FROM msgmap WHERE num >= ? AND num <= ?
ORDER BY num ASC LIMIT 1000
SELECT $cols FROM msgmap WHERE num >= ? AND num <= ?
ORDER BY num ASC LIMIT 1000
# see scripts/xhdr-num2mid or PublicInbox::Filter::RubyLang for usage
sub mid_set {
my ($self, $num, $mid) = @_;
# see scripts/xhdr-num2mid or PublicInbox::Filter::RubyLang for usage
sub mid_set {
my ($self, $num, $mid) = @_;
- my $sth = $self->{mid_set} ||= do {
- $self->{dbh}->prepare(
- 'INSERT OR IGNORE INTO msgmap (num,mid) VALUES (?,?)');
- };
+ my $sth = $self->{dbh}->prepare_cached(<<"");
+INSERT OR IGNORE INTO msgmap (num,mid) VALUES (?,?)
+
my $result = $sth->execute($num, $mid);
$self->num_highwater($num) if (defined($result) && $result == 1);
$result;
my $result = $sth->execute($num, $mid);
$self->num_highwater($num) if (defined($result) && $result == 1);
$result;