Skip to content

Commit 3bc52b3

Browse files
committed
add remove method in DataStorage
1 parent 267f3a5 commit 3bc52b3

File tree

4 files changed

+74
-8
lines changed

4 files changed

+74
-8
lines changed

spigot/storage-simple/src/main/java/me/hsgamer/topper/spigot/storage/simple/supplier/ConfigStorageSupplier.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import me.hsgamer.topper.storage.simple.supplier.DataStorageSupplier;
88

99
import java.io.File;
10+
import java.util.Collection;
1011
import java.util.HashMap;
1112
import java.util.Map;
1213
import java.util.Optional;
@@ -74,6 +75,18 @@ public CompletableFuture<Optional<V>> load(K key, boolean urgent) {
7475
);
7576
}
7677

78+
@Override
79+
public CompletableFuture<Void> remove(Collection<K> keys, boolean urgent) {
80+
return CompletableFuture.supplyAsync(
81+
() -> {
82+
keys.forEach(key -> config.remove(converter.toRawKey(key)));
83+
config.save();
84+
return null;
85+
},
86+
urgent ? Runnable::run : mainThreadExecutor
87+
);
88+
}
89+
7790
@Override
7891
public void onRegister() {
7992
config.setup();

storage/core/src/main/java/me/hsgamer/topper/storage/core/DataStorage.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package me.hsgamer.topper.storage.core;
22

3+
import java.util.Collection;
34
import java.util.Map;
45
import java.util.Optional;
56
import java.util.concurrent.CompletableFuture;
@@ -11,6 +12,8 @@ public interface DataStorage<K, V> {
1112

1213
CompletableFuture<Optional<V>> load(K key, boolean urgent);
1314

15+
CompletableFuture<Void> remove(Collection<K> keys, boolean urgent);
16+
1417
default void onRegister() {
1518
// EMPTY
1619
}

storage/simple/src/main/java/me/hsgamer/topper/storage/simple/supplier/FlatStorageSupplier.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,7 @@
1111
import java.io.FileInputStream;
1212
import java.io.FileOutputStream;
1313
import java.io.IOException;
14-
import java.util.HashMap;
15-
import java.util.Map;
16-
import java.util.Optional;
17-
import java.util.Properties;
14+
import java.util.*;
1815
import java.util.concurrent.CompletableFuture;
1916
import java.util.function.Supplier;
2017

@@ -95,6 +92,20 @@ public CompletableFuture<Optional<V>> load(K key, boolean urgent) {
9592
}
9693
}
9794

95+
@Override
96+
public CompletableFuture<Void> remove(Collection<K> keys, boolean urgent) {
97+
Runnable runnable = () -> {
98+
keys.forEach(key -> properties.remove(converter.toRawKey(key)));
99+
saveRunnable.run();
100+
};
101+
if (urgent) {
102+
runnable.run();
103+
return CompletableFuture.completedFuture(null);
104+
} else {
105+
return CompletableFuture.runAsync(runnable);
106+
}
107+
}
108+
98109
@Override
99110
public void onRegister() {
100111
loadRunnable.run();

storage/simple/src/main/java/me/hsgamer/topper/storage/simple/supplier/SqlStorageSupplier.java

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,7 @@
1212

1313
import java.sql.Connection;
1414
import java.sql.SQLException;
15-
import java.util.AbstractMap;
16-
import java.util.Collections;
17-
import java.util.Map;
18-
import java.util.Optional;
15+
import java.util.*;
1916
import java.util.concurrent.CompletableFuture;
2017
import java.util.function.Supplier;
2118
import java.util.stream.Collectors;
@@ -135,6 +132,48 @@ public CompletableFuture<Optional<V>> load(K key, boolean urgent) {
135132
}
136133
}
137134

135+
@Override
136+
public CompletableFuture<Void> remove(Collection<K> keys, boolean urgent) {
137+
Runnable runnable = () -> {
138+
Connection connection = null;
139+
try {
140+
connection = getConnection();
141+
String[] keyColumns = converter.getKeyColumns();
142+
143+
StringBuilder statement = new StringBuilder("DELETE FROM `")
144+
.append(name)
145+
.append("` WHERE ");
146+
for (int i = 0; i < keyColumns.length; i++) {
147+
statement.append("`")
148+
.append(keyColumns[i])
149+
.append("` = ?");
150+
if (i != keyColumns.length - 1) {
151+
statement.append(" AND ");
152+
}
153+
}
154+
155+
BatchBuilder batchBuilder = BatchBuilder.create(connection, statement.toString());
156+
keys.forEach(key -> {
157+
Object[] keyValues = converter.toKeyQueryValues(key);
158+
batchBuilder.addValues(keyValues);
159+
});
160+
batchBuilder.execute();
161+
} catch (SQLException e) {
162+
logger.log(LogLevel.ERROR, "Failed to remove top holder", e);
163+
} finally {
164+
if (connection != null) {
165+
flushConnection(connection);
166+
}
167+
}
168+
};
169+
if (urgent) {
170+
return CompletableFuture.runAsync(runnable);
171+
} else {
172+
runnable.run();
173+
return CompletableFuture.completedFuture(null);
174+
}
175+
}
176+
138177
@Override
139178
public void onRegister() {
140179
Connection connection = null;

0 commit comments

Comments
 (0)