Skip to content

Commit dface95

Browse files
committed
return time to live in oracle
Signed-off-by: Otavio Santana <[email protected]>
1 parent 4f9a07b commit dface95

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

jnosql-nosql-oracle/src/main/java/org/eclipse/jnosql/databases/oracle/communication/OracleNoSQLBucketManager.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import jakarta.json.JsonValue;
2121
import jakarta.json.bind.Jsonb;
2222
import oracle.nosql.driver.NoSQLHandle;
23+
import oracle.nosql.driver.TimeToLive;
2324
import oracle.nosql.driver.ops.DeleteRequest;
2425
import oracle.nosql.driver.ops.GetRequest;
2526
import oracle.nosql.driver.ops.GetResult;
@@ -36,6 +37,7 @@
3637
import java.time.Duration;
3738
import java.util.Objects;
3839
import java.util.Optional;
40+
import java.util.concurrent.TimeUnit;
3941
import java.util.stream.StreamSupport;
4042

4143
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -65,18 +67,20 @@ public String name() {
6567
public <K, V> void put(K key, V value) {
6668
Objects.requireNonNull(key, "key is required");
6769
Objects.requireNonNull(value, "value is required");
68-
putImplementation(key, value);
70+
putImplementation(key, value, TimeToLive.DO_NOT_EXPIRE);
6971
}
7072

7173
@Override
7274
public void put(KeyValueEntity keyValueEntity) {
7375
Objects.requireNonNull(keyValueEntity, "keyValueEntity is required");
74-
putImplementation(keyValueEntity.key(), keyValueEntity.value());
76+
putImplementation(keyValueEntity.key(), keyValueEntity.value(), TimeToLive.DO_NOT_EXPIRE);
7577
}
7678

7779
@Override
78-
public void put(KeyValueEntity keyValueEntity, Duration duration) {
79-
throw new UnsupportedOperationException("Oracle NoSQL does not support TTL");
80+
public void put(KeyValueEntity entity, Duration duration) {
81+
Objects.requireNonNull(entity, "keyValueEntity is required");
82+
Objects.requireNonNull(duration, "duration is required");
83+
putImplementation(entity.key(), entity.value(), TimeToLive.ofHours(duration.toHours()));
8084
}
8185

8286
@Override
@@ -86,8 +90,9 @@ public void put(Iterable<KeyValueEntity> iterable) {
8690
}
8791

8892
@Override
89-
public void put(Iterable<KeyValueEntity> iterable, Duration duration) {
90-
throw new UnsupportedOperationException("Oracle NoSQL does not support TTL");
93+
public void put(Iterable<KeyValueEntity> entities, Duration duration) {
94+
Objects.requireNonNull(entities, "entities is required");
95+
entities.forEach(e -> put(e, duration));
9196
}
9297

9398
@Override
@@ -139,12 +144,13 @@ public void close() {
139144
this.serviceHandle.close();
140145
}
141146

142-
private <K, V> void putImplementation(K key, V value) {
147+
private <K, V> void putImplementation(K key, V value, TimeToLive ttl) {
143148
MapValue mapValue = new MapValue().put("id", key.toString());
144149
MapValue contentVal = mapValue.putFromJson("content", jsonB.toJson(value),
145150
OPTIONS);
146151
PutRequest putRequest = new PutRequest()
147152
.setValue(contentVal)
153+
.setTTL(ttl)
148154
.setTableName(name());
149155
serviceHandle.put(putRequest);
150156
}

jnosql-nosql-oracle/src/test/java/org/eclipse/jnosql/databases/oracle/communication/OracleNoSQLBucketManagerTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.time.Duration;
2929
import java.util.List;
3030
import java.util.Optional;
31+
import java.util.concurrent.TimeUnit;
3132
import java.util.stream.Collectors;
3233
import java.util.stream.StreamSupport;
3334

@@ -77,10 +78,8 @@ public void shouldPutKeyValue() {
7778
}
7879

7980
@Test
80-
public void shouldReturnUnsupported() {
81-
Assertions.assertThrows(UnsupportedOperationException.class, () -> keyValueEntityManager.put(entityOtavio, Duration.ofSeconds(1L)));
82-
83-
Assertions.assertThrows(UnsupportedOperationException.class, () -> keyValueEntityManager.put(List.of(entityOtavio), Duration.ofSeconds(1L)));
81+
public void shouldPutTimeToLive() throws InterruptedException {
82+
keyValueEntityManager.put(entityOtavio, Duration.ofSeconds(1L));
8483
}
8584

8685

0 commit comments

Comments
 (0)