1use sqlez_macros::sql;
2
3use crate::{define_connection, query};
4
5define_connection!(pub static ref KEY_VALUE_STORE: KeyValueStore<()> =
6 &[sql!(
7 CREATE TABLE IF NOT EXISTS kv_store(
8 key TEXT PRIMARY KEY,
9 value TEXT NOT NULL
10 ) STRICT;
11 )];
12);
13
14impl KeyValueStore {
15 query! {
16 pub fn read_kvp(key: &str) -> Result<Option<String>> {
17 SELECT value FROM kv_store WHERE key = (?)
18 }
19 }
20
21 query! {
22 pub async fn write_kvp(key: String, value: String) -> Result<()> {
23 INSERT OR REPLACE INTO kv_store(key, value) VALUES ((?), (?))
24 }
25 }
26
27 query! {
28 pub async fn delete_kvp(key: String) -> Result<()> {
29 DELETE FROM kv_store WHERE key = (?)
30 }
31 }
32}
33
34// #[cfg(test)]
35// mod tests {
36// use crate::kvp::KeyValueStore;
37
38// #[gpui::test]
39// async fn test_kvp() {
40// let db = KeyValueStore(crate::open_test_db("test_kvp").await);
41
42// assert_eq!(db.read_kvp("key-1").unwrap(), None);
43
44// db.write_kvp("key-1".to_string(), "one".to_string())
45// .await
46// .unwrap();
47// assert_eq!(db.read_kvp("key-1").unwrap(), Some("one".to_string()));
48
49// db.write_kvp("key-1".to_string(), "one-2".to_string())
50// .await
51// .unwrap();
52// assert_eq!(db.read_kvp("key-1").unwrap(), Some("one-2".to_string()));
53
54// db.write_kvp("key-2".to_string(), "two".to_string())
55// .await
56// .unwrap();
57// assert_eq!(db.read_kvp("key-2").unwrap(), Some("two".to_string()));
58
59// db.delete_kvp("key-1".to_string()).await.unwrap();
60// assert_eq!(db.read_kvp("key-1").unwrap(), None);
61// }
62// }