about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2020-12-31 13:51:24 +0000
committerEric Wong <e@80x24.org>2021-01-01 05:00:38 +0000
commita7539312d51443c9a705e64b16ac4fdcd4b17a6e (patch)
tree9cda0673780df69159f8295d68f53c2852ecfc46
parentfa7bab31c9e5ded5c832b42de56f48dbdf9de972 (diff)
downloadpublic-inbox-a7539312d51443c9a705e64b16ac4fdcd4b17a6e.tar.gz
In most cases, we won't need to index by value, so
don't waste cycles or space on it.
-rw-r--r--lib/PublicInbox/SharedKV.pm7
-rw-r--r--t/shared_kv.t1
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/PublicInbox/SharedKV.pm b/lib/PublicInbox/SharedKV.pm
index 52a7424e..983952f5 100644
--- a/lib/PublicInbox/SharedKV.pm
+++ b/lib/PublicInbox/SharedKV.pm
@@ -36,7 +36,6 @@ CREATE TABLE IF NOT EXISTS kv (
         UNIQUE (k)
 )
 
-                $dbh->do('CREATE INDEX IF NOT EXISTS idx_v ON kv (v)');
                 $dbh;
         }
 }
@@ -59,6 +58,12 @@ sub new {
         $self;
 }
 
+sub index_values {
+        my ($self) = @_;
+        my $lock = $self->lock_for_scope;
+        $self->dbh($lock)->do('CREATE INDEX IF NOT EXISTS idx_v ON kv (v)');
+}
+
 sub set_maybe {
         my ($self, $key, $val, $lock) = @_;
         $lock //= $self->lock_for_scope;
diff --git a/t/shared_kv.t b/t/shared_kv.t
index 4b727462..ad901328 100644
--- a/t/shared_kv.t
+++ b/t/shared_kv.t
@@ -26,6 +26,7 @@ is($skv->get($dead), $cafe, 'get after xchg');
 is($skv->xchg($dead, undef), $cafe, 'xchg to undef');
 is($skv->get($dead), undef, 'get after xchg to undef');
 is($skv->get($cafe), $dead, 'get after set_maybe');
+ok($skv->index_values, 'index_values works');
 is($skv->replace_values($dead, $cafe), 1, 'replaced one by value');
 is($skv->get($cafe), $cafe, 'value updated');
 is($skv->replace_values($dead, $cafe), 0, 'replaced none by value');