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