Radish alpha
h
rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
Radicle Heartwood Protocol & Stack
Radicle
Git
Adds index on cob cache for issues and patches
Merged did:key:z6MkgFWv...1Lu7 opened 6 months ago

Queries on the cob cache are usually filtering by repo id, which is costly without an index as it involves a full table scan.

2 files changed +10 -4 990e22ac 5741bafa
modified crates/radicle/src/cob/cache.rs
@@ -28,6 +28,7 @@ const DB_WRITE_TIMEOUT: time::Duration = time::Duration::from_secs(6);
const MIGRATIONS: &[Migration] = &[
    Migration::Sql(include_str!("cache/migrations/1.sql")),
    Migration::Native(migrations::_2::run),
+
    Migration::Sql(include_str!("cache/migrations/3.sql")),
];

/// Function signature for native migrations.
@@ -466,10 +467,13 @@ mod tests {
        assert_eq!(db.migrate_to(2, migrate::ignore).unwrap(), 2); // 1 -> 2
        assert_eq!(db.version().unwrap(), 2);

-
        assert_eq!(db.migrate_to(1, migrate::ignore).unwrap(), 2); // No-op.
-
        assert_eq!(db.version().unwrap(), 2);
+
        assert_eq!(db.migrate_to(3, migrate::ignore).unwrap(), 3); // 2 -> 3
+
        assert_eq!(db.version().unwrap(), 3);

-
        assert_eq!(db.migrate_to(99, migrate::ignore).unwrap(), 2); // No-op.
-
        assert_eq!(db.version().unwrap(), 2);
+
        assert_eq!(db.migrate_to(1, migrate::ignore).unwrap(), 3); // No-op.
+
        assert_eq!(db.version().unwrap(), 3);
+

+
        assert_eq!(db.migrate_to(99, migrate::ignore).unwrap(), 3); // No-op.
+
        assert_eq!(db.version().unwrap(), 3);
    }
}
added crates/radicle/src/cob/cache/migrations/3.sql
@@ -0,0 +1,2 @@
+
create index if not exists 'ix_issues_repo_id' on 'issues' (repo, id);
+
create index if not exists 'ix_patches_repo_id' on 'patches' (repo, id);