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/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/check.rs')
-rw-r--r-- | cli/cache/check.rs | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/cli/cache/check.rs b/cli/cache/check.rs index dc4ae5211..ca4e93853 100644 --- a/cli/cache/check.rs +++ b/cli/cache/check.rs @@ -2,6 +2,7 @@ use super::cache_db::CacheDB; use super::cache_db::CacheDBConfiguration; +use super::cache_db::CacheDBHash; use super::cache_db::CacheFailure; use deno_ast::ModuleSpecifier; use deno_core::error::AnyError; @@ -9,13 +10,13 @@ use deno_runtime::deno_webstorage::rusqlite::params; pub static TYPE_CHECK_CACHE_DB: CacheDBConfiguration = CacheDBConfiguration { table_initializer: concat!( - "CREATE TABLE IF NOT EXISTS checkcache ( - check_hash TEXT PRIMARY KEY - );", - "CREATE TABLE IF NOT EXISTS tsbuildinfo ( - specifier TEXT PRIMARY KEY, - text TEXT NOT NULL - );", + "CREATE TABLE IF NOT EXISTS checkcache (", + "check_hash INT PRIMARY KEY", + ");", + "CREATE TABLE IF NOT EXISTS tsbuildinfo (", + "specifier TEXT PRIMARY KEY,", + "text TEXT NOT NULL", + ");", ), on_version_change: concat!( "DELETE FROM checkcache;", @@ -37,7 +38,7 @@ impl TypeCheckCache { Self(db) } - pub fn has_check_hash(&self, hash: u64) -> bool { + pub fn has_check_hash(&self, hash: CacheDBHash) -> bool { match self.hash_check_hash_result(hash) { Ok(val) => val, Err(err) => { @@ -52,14 +53,17 @@ impl TypeCheckCache { } } - fn hash_check_hash_result(&self, hash: u64) -> Result<bool, AnyError> { + fn hash_check_hash_result( + &self, + hash: CacheDBHash, + ) -> Result<bool, AnyError> { self.0.exists( "SELECT * FROM checkcache WHERE check_hash=?1 LIMIT 1", - params![hash.to_string()], + params![hash], ) } - pub fn add_check_hash(&self, check_hash: u64) { + pub fn add_check_hash(&self, check_hash: CacheDBHash) { if let Err(err) = self.add_check_hash_result(check_hash) { if cfg!(debug_assertions) { panic!("Error saving check hash: {err}"); @@ -69,13 +73,16 @@ impl TypeCheckCache { } } - fn add_check_hash_result(&self, check_hash: u64) -> Result<(), AnyError> { + fn add_check_hash_result( + &self, + check_hash: CacheDBHash, + ) -> Result<(), AnyError> { let sql = " INSERT OR REPLACE INTO checkcache (check_hash) VALUES (?1)"; - self.0.execute(sql, params![&check_hash.to_string(),])?; + self.0.execute(sql, params![check_hash])?; Ok(()) } @@ -123,10 +130,10 @@ mod test { let conn = CacheDB::in_memory(&TYPE_CHECK_CACHE_DB, "1.0.0"); let cache = TypeCheckCache::new(conn); - assert!(!cache.has_check_hash(1)); - cache.add_check_hash(1); - assert!(cache.has_check_hash(1)); - assert!(!cache.has_check_hash(2)); + assert!(!cache.has_check_hash(CacheDBHash::new(1))); + cache.add_check_hash(CacheDBHash::new(1)); + assert!(cache.has_check_hash(CacheDBHash::new(1))); + assert!(!cache.has_check_hash(CacheDBHash::new(2))); let specifier1 = ModuleSpecifier::parse("file:///test.json").unwrap(); assert_eq!(cache.get_tsbuildinfo(&specifier1), None); @@ -137,9 +144,9 @@ mod test { let conn = cache.0.recreate_with_version("2.0.0"); let cache = TypeCheckCache::new(conn); - assert!(!cache.has_check_hash(1)); - cache.add_check_hash(1); - assert!(cache.has_check_hash(1)); + assert!(!cache.has_check_hash(CacheDBHash::new(1))); + cache.add_check_hash(CacheDBHash::new(1)); + assert!(cache.has_check_hash(CacheDBHash::new(1))); assert_eq!(cache.get_tsbuildinfo(&specifier1), None); cache.set_tsbuildinfo(&specifier1, "test"); assert_eq!(cache.get_tsbuildinfo(&specifier1), Some("test".to_string())); @@ -148,13 +155,13 @@ mod test { let conn = cache.0.recreate_with_version("2.0.0"); let cache = TypeCheckCache::new(conn); - assert!(cache.has_check_hash(1)); - assert!(!cache.has_check_hash(2)); + assert!(cache.has_check_hash(CacheDBHash::new(1))); + assert!(!cache.has_check_hash(CacheDBHash::new(2))); assert_eq!(cache.get_tsbuildinfo(&specifier1), Some("test".to_string())); // adding when already exists should not cause issue - cache.add_check_hash(1); - assert!(cache.has_check_hash(1)); + cache.add_check_hash(CacheDBHash::new(1)); + assert!(cache.has_check_hash(CacheDBHash::new(1))); cache.set_tsbuildinfo(&specifier1, "other"); assert_eq!( cache.get_tsbuildinfo(&specifier1), |