diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-05-29 14:38:18 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-29 18:38:18 +0000 |
commit | 94f040ac2867706d261e2fe1ec8bc2c4263eb6ab (patch) | |
tree | 5eaed4d41efd8d25da839bc29b8d32554e1a0fca /cli/cache/fast_check.rs | |
parent | fada25b0dd593efee496dabb48ed9cb7a9cb6647 (diff) |
fix: bump cache sqlite dbs to v2 for WAL journal mode change (#24030)
In https://github.com/denoland/deno/pull/23955 we changed the sqlite db
journal mode to WAL. This causes issues when someone is running an old
version of Deno using TRUNCATE and a new version because the two fight
against each other.
Diffstat (limited to 'cli/cache/fast_check.rs')
-rw-r--r-- | cli/cache/fast_check.rs | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/cli/cache/fast_check.rs b/cli/cache/fast_check.rs index f8335d5ea..43be1b718 100644 --- a/cli/cache/fast_check.rs +++ b/cli/cache/fast_check.rs @@ -7,13 +7,16 @@ use deno_runtime::deno_webstorage::rusqlite::params; use super::cache_db::CacheDB; use super::cache_db::CacheDBConfiguration; +use super::cache_db::CacheDBHash; use super::cache_db::CacheFailure; pub static FAST_CHECK_CACHE_DB: CacheDBConfiguration = CacheDBConfiguration { - table_initializer: "CREATE TABLE IF NOT EXISTS fastcheckcache ( - hash TEXT PRIMARY KEY, - data TEXT NOT NULL - );", + table_initializer: concat!( + "CREATE TABLE IF NOT EXISTS fastcheckcache (", + "hash INTEGER PRIMARY KEY,", + "data TEXT NOT NULL", + ");" + ), on_version_change: "DELETE FROM fastcheckcache;", preheat_queries: &[], on_failure: CacheFailure::Blackhole, @@ -81,13 +84,14 @@ impl FastCheckCacheInner { WHERE hash=?1 LIMIT 1"; - let res = self - .conn - // key is a string because SQLite can't handle u64 - .query_row(query, params![key.as_u64().to_string()], |row| { + let res = self.conn.query_row( + query, + params![CacheDBHash::new(key.as_u64())], + |row| { let value: Vec<u8> = row.get(0)?; Ok(bincode::deserialize::<FastCheckCacheItem>(&value)?) - })?; + }, + )?; Ok(res) } @@ -103,7 +107,7 @@ impl FastCheckCacheInner { (?1, ?2)"; self.conn.execute( sql, - params![key.as_u64().to_string(), &bincode::serialize(data)?], + params![CacheDBHash::new(key.as_u64()), &bincode::serialize(data)?], )?; Ok(()) } @@ -114,6 +118,7 @@ mod test { use std::collections::BTreeSet; use deno_ast::ModuleSpecifier; + use deno_graph::FastCheckCache as _; use deno_graph::FastCheckCacheModuleItem; use deno_graph::FastCheckCacheModuleItemDiagnostic; use deno_semver::package::PackageNv; @@ -123,12 +128,14 @@ mod test { #[test] pub fn cache_general_use() { let conn = CacheDB::in_memory(&FAST_CHECK_CACHE_DB, "1.0.0"); - let cache = FastCheckCacheInner::new(conn); + let cache = FastCheckCache::new(conn); let key = FastCheckCacheKey::build( + cache.hash_seed(), &PackageNv::from_str("@scope/a@1.0.0").unwrap(), &Default::default(), ); + let cache = cache.inner; assert!(cache.get(key).unwrap().is_none()); let value = FastCheckCacheItem { dependencies: BTreeSet::from([ |