This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git


The following commit(s) were added to refs/heads/main by this push:
     new 2594c7b  add remove method to kv
     new 9ec7454  Merge pull request #375 from atoulme/add_remove_method
2594c7b is described below

commit 2594c7be903534c26979d9abec784f932251f364
Author: Antoine Toulme <anto...@lunar-ocean.com>
AuthorDate: Sun Mar 13 14:34:57 2022 -0700

    add remove method to kv
---
 .../apache/tuweni/kv/EntityManagerKeyValueStore.kt | 12 ++++
 .../apache/tuweni/kv/InfinispanKeyValueStore.kt    |  4 ++
 .../kotlin/org/apache/tuweni/kv/KeyValueStore.kt   |  7 +++
 .../org/apache/tuweni/kv/LevelDBKeyValueStore.kt   |  4 ++
 .../org/apache/tuweni/kv/MapDBKeyValueStore.kt     |  4 ++
 .../org/apache/tuweni/kv/MapKeyValueStore.kt       |  4 ++
 .../org/apache/tuweni/kv/ProxyKeyValueStore.kt     |  4 ++
 .../org/apache/tuweni/kv/RedisKeyValueStore.kt     |  5 ++
 .../org/apache/tuweni/kv/RocksDBKeyValueStore.kt   |  7 +++
 .../org/apache/tuweni/kv/SQLKeyValueStore.kt       |  8 +++
 .../org/apache/tuweni/kv/KeyValueStoreSpec.kt      | 64 ++++++++++++++++++++++
 11 files changed, 123 insertions(+)

diff --git 
a/kv/src/main/kotlin/org/apache/tuweni/kv/EntityManagerKeyValueStore.kt 
b/kv/src/main/kotlin/org/apache/tuweni/kv/EntityManagerKeyValueStore.kt
index c4f86f0..2eb0e9d 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/EntityManagerKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/EntityManagerKeyValueStore.kt
@@ -71,6 +71,18 @@ constructor(
     }
   }
 
+  override suspend fun remove(key: K) {
+    val em = entityManagerProvider()
+    em.transaction.begin()
+    try {
+      val entity = em.find(entityClass, key)
+      return em.remove(entity)
+    } finally {
+      em.transaction.commit()
+      em.close()
+    }
+  }
+
   /**
    * Convenience method to put a record directly
    * @param value the value to store
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/InfinispanKeyValueStore.kt 
b/kv/src/main/kotlin/org/apache/tuweni/kv/InfinispanKeyValueStore.kt
index 33da1c9..968fe7a 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/InfinispanKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/InfinispanKeyValueStore.kt
@@ -53,6 +53,10 @@ class InfinispanKeyValueStore<K, V> constructor(
     cache.putAsync(key, value).await()
   }
 
+  override suspend fun remove(key: K) {
+    cache.removeAsync(key).await()
+  }
+
   override suspend fun keys(): Iterable<K> = cache.keys
 
   override suspend fun clear() {
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/KeyValueStore.kt 
b/kv/src/main/kotlin/org/apache/tuweni/kv/KeyValueStore.kt
index ff2fff9..20613ca 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/KeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/KeyValueStore.kt
@@ -70,6 +70,13 @@ interface KeyValueStore<K, V> : Closeable, CoroutineScope {
   suspend fun put(key: K, value: V)
 
   /**
+   * Removes data from the store.
+   *
+   * @param key The key to associate with the data, for use when retrieving.
+   */
+  suspend fun remove(key: K)
+
+  /**
    * Puts data into the store.
    *
    * Note: if the storage implementation already contains content for the 
given key, it does not need to replace the
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/LevelDBKeyValueStore.kt 
b/kv/src/main/kotlin/org/apache/tuweni/kv/LevelDBKeyValueStore.kt
index 90a498b..d01212e 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/LevelDBKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/LevelDBKeyValueStore.kt
@@ -159,6 +159,10 @@ constructor(
     }
   }
 
+  override suspend fun remove(key: K) {
+    db.delete(keySerializer(key).toArrayUnsafe())
+  }
+
   override suspend fun put(key: K, value: V) = db.put(
     keySerializer(key).toArrayUnsafe(),
     valueSerializer(value).toArrayUnsafe()
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/MapDBKeyValueStore.kt 
b/kv/src/main/kotlin/org/apache/tuweni/kv/MapDBKeyValueStore.kt
index d142114..668f170 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/MapDBKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/MapDBKeyValueStore.kt
@@ -125,6 +125,10 @@ constructor(
     }
   }
 
+  override suspend fun remove(key: K) {
+    storageData.remove(keySerializer(key))
+  }
+
   override suspend fun put(key: K, value: V) {
     storageData[keySerializer(key)] = valueSerializer(value)
     db.commit()
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/MapKeyValueStore.kt 
b/kv/src/main/kotlin/org/apache/tuweni/kv/MapKeyValueStore.kt
index 4429f38..6134c74 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/MapKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/MapKeyValueStore.kt
@@ -62,6 +62,10 @@ constructor(
     map[key] = value
   }
 
+  override suspend fun remove(key: K) {
+    map.remove(key)
+  }
+
   override suspend fun keys(): Iterable<K> = map.keys
 
   override suspend fun clear() {
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/ProxyKeyValueStore.kt 
b/kv/src/main/kotlin/org/apache/tuweni/kv/ProxyKeyValueStore.kt
index f043db9..ede7abb 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/ProxyKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/ProxyKeyValueStore.kt
@@ -74,6 +74,10 @@ class ProxyKeyValueStore<K, V, E, R>(
     }
   }
 
+  override suspend fun remove(key: K) {
+    store.remove(proxyKey(key))
+  }
+
   override suspend fun put(key: K, value: V) = store.put(proxyKey(key), 
proxyValue(key, value))
 
   override suspend fun keys(): Iterable<K> = store.keys().map(unproxyKey)
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt 
b/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt
index 36703bd..7207e1f 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt
@@ -239,6 +239,11 @@ class RedisKeyValueStore<K, V>(
     future.await()
   }
 
+  override suspend fun remove(key: K) {
+    val future: CompletionStage<Long> = asyncCommands.del(keySerializer(key))
+    future.await()
+  }
+
   override suspend fun keys(): Iterable<K> = 
asyncCommands.keys(Bytes.EMPTY).await().map(keyDeserializer)
 
   override suspend fun clear() {
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/RocksDBKeyValueStore.kt 
b/kv/src/main/kotlin/org/apache/tuweni/kv/RocksDBKeyValueStore.kt
index 19e3f67..6e01d1e 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/RocksDBKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/RocksDBKeyValueStore.kt
@@ -138,6 +138,13 @@ constructor(
     }
   }
 
+  override suspend fun remove(key: K) {
+    if (closed.get()) {
+      throw IllegalStateException("Closed DB")
+    }
+    db.delete(keySerializer(key).toArrayUnsafe())
+  }
+
   override suspend fun put(key: K, value: V) {
     if (closed.get()) {
       throw IllegalStateException("Closed DB")
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/SQLKeyValueStore.kt 
b/kv/src/main/kotlin/org/apache/tuweni/kv/SQLKeyValueStore.kt
index 3dd9954..aa4d8af 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/SQLKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/SQLKeyValueStore.kt
@@ -154,6 +154,14 @@ constructor(
     }
   }
 
+  override suspend fun remove(key: K) {
+    connectionPool.asyncConnection.await().use {
+      val stmt = it.prepareStatement("DELETE FROM $tableName WHERE $keyColumn 
= ?")
+      stmt.setBytes(1, keySerializer(key).toArrayUnsafe())
+      stmt.execute()
+    }
+  }
+
   override suspend fun put(key: K, value: V) {
     connectionPool.asyncConnection.await().use {
       val stmt = it.prepareStatement("INSERT INTO $tableName($keyColumn, 
$valueColumn) VALUES(?,?)")
diff --git a/kv/src/test/kotlin/org/apache/tuweni/kv/KeyValueStoreSpec.kt 
b/kv/src/test/kotlin/org/apache/tuweni/kv/KeyValueStoreSpec.kt
index e587fe5..0c9aacf 100644
--- a/kv/src/test/kotlin/org/apache/tuweni/kv/KeyValueStoreSpec.kt
+++ b/kv/src/test/kotlin/org/apache/tuweni/kv/KeyValueStoreSpec.kt
@@ -65,6 +65,14 @@ object KeyValueStoreSpec : Spek({
       }
     }
 
+    it("should allow to remove values") {
+      runBlocking {
+        kv.put(foobar, foo)
+        kv.remove(foobar)
+        kv.get(foobar).should.equal(null)
+      }
+    }
+
     it("should allow to see if a key is present") {
       runBlocking {
         kv.put(foobar, foo)
@@ -112,6 +120,14 @@ object InfinispanKeyValueStoreSpec : Spek({
       }
     }
 
+    it("should allow to remove values") {
+      runBlocking {
+        kv.put(foobar, foo)
+        kv.remove(foobar)
+        kv.get(foobar).should.equal(null)
+      }
+    }
+
     it("should allow to retrieve values") {
       runBlocking {
         kv.put(foobar, foo)
@@ -172,6 +188,14 @@ object MapDBKeyValueStoreSpec : Spek({
       }
     }
 
+    it("should allow to remove values") {
+      runBlocking {
+        kv.put(foobar, foo)
+        kv.remove(foobar)
+        kv.get(foobar).should.equal(null)
+      }
+    }
+
     it("should allow to see if a key is present") {
       runBlocking {
         kv.put(foobar, foo)
@@ -253,6 +277,14 @@ object LevelDBKeyValueStoreSpec : Spek({
       }
     }
 
+    it("should allow to remove values") {
+      runBlocking {
+        kv.put(foobar, foo)
+        kv.remove(foobar)
+        kv.get(foobar).should.equal(null)
+      }
+    }
+
     it("should allow to see if a key is present") {
       runBlocking {
         kv.put(foobar, foo)
@@ -327,6 +359,14 @@ object RocksDBKeyValueStoreSpec : Spek({
       }
     }
 
+    it("should allow to remove values") {
+      runBlocking {
+        kv.put(foobar, foo)
+        kv.remove(foobar)
+        kv.get(foobar).should.equal(null)
+      }
+    }
+
     it("should allow to see if a key is present") {
       runBlocking {
         kv.put(foobar, foo)
@@ -420,6 +460,14 @@ object SQLKeyValueStoreSpec : Spek({
       }
     }
 
+    it("should allow to remove values") {
+      runBlocking {
+        kv.put(foobar, foo)
+        kv.remove(foobar)
+        kv.get(foobar).should.equal(null)
+      }
+    }
+
     it("should allow to see if a key is present") {
       runBlocking {
         kv.put(foobar, foo)
@@ -504,6 +552,14 @@ object EntityManagerKeyValueStoreSpec : Spek({
       }
     }
 
+    it("should allow to remove values") {
+      runBlocking {
+        kv.put("foobar", Store("foo", "bar"))
+        kv.remove("foobar")
+        kv.get("foobar").should.equal(null)
+      }
+    }
+
     it("should allow to see if a key is present") {
       runBlocking {
         kv.put("foo", Store("foo", "bar"))
@@ -576,6 +632,14 @@ object ProxyKeyValueStoreSpec : Spek({
       }
     }
 
+    it("should allow to remove values") {
+      runBlocking {
+        proxy.put(foo, bar)
+        proxy.remove(foo)
+        proxy.get(foo).should.equal(null)
+      }
+    }
+
     it("should allow to see if a key is present") {
       runBlocking {
         proxy.put(foo, bar)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@tuweni.apache.org
For additional commands, e-mail: commits-h...@tuweni.apache.org

Reply via email to