use sqlez_macros::sql; use crate::{define_connection, query}; define_connection!(pub static ref KEY_VALUE_STORE: KeyValueStore<()> = &[sql!( CREATE TABLE IF NOT EXISTS kv_store( key TEXT PRIMARY KEY, value TEXT NOT NULL ) STRICT; )]; ); impl KeyValueStore { query! { pub fn read_kvp(key: &str) -> Result> { SELECT value FROM kv_store WHERE key = (?) } } query! { pub async fn write_kvp(key: String, value: String) -> Result<()> { INSERT OR REPLACE INTO kv_store(key, value) VALUES ((?), (?)) } } query! { pub async fn delete_kvp(key: String) -> Result<()> { DELETE FROM kv_store WHERE key = (?) } } } #[cfg(test)] mod tests { use crate::kvp::KeyValueStore; #[gpui::test] async fn test_kvp() { let db = KeyValueStore(crate::open_test_db("test_kvp").await); assert_eq!(db.read_kvp("key-1").unwrap(), None); db.write_kvp("key-1".to_string(), "one".to_string()) .await .unwrap(); assert_eq!(db.read_kvp("key-1").unwrap(), Some("one".to_string())); db.write_kvp("key-1".to_string(), "one-2".to_string()) .await .unwrap(); assert_eq!(db.read_kvp("key-1").unwrap(), Some("one-2".to_string())); db.write_kvp("key-2".to_string(), "two".to_string()) .await .unwrap(); assert_eq!(db.read_kvp("key-2").unwrap(), Some("two".to_string())); db.delete_kvp("key-1".to_string()).await.unwrap(); assert_eq!(db.read_kvp("key-1").unwrap(), None); } }